From 2ab8df7f77d345f4e196486d62bdf79cd88bfb29 Mon Sep 17 00:00:00 2001 From: Sosokker Date: Wed, 14 May 2025 16:14:35 +0700 Subject: [PATCH] initial commit --- .gitignore | 310 + MBZUAI-Blue.eps | 8374 +++++ assets/api-doc.png | Bin 0 -> 78398 bytes assets/gant.png | Bin 0 -> 233123 bytes assets/logging.png | Bin 0 -> 255328 bytes assets/pipeline.png | Bin 0 -> 96216 bytes assets/vertex/model-versioning.png | Bin 0 -> 72355 bytes bibliography/keylatex.bib | 101 + contents/main_content.tex | 128 + document.pdf | Bin 0 -> 390222 bytes document.tex | 50 + node_modules/.bin/prettier | 16 + node_modules/.bin/prettier.cmd | 17 + node_modules/.bin/prettier.ps1 | 28 + node_modules/.package-lock.json | 525 + node_modules/@types/unist/LICENSE | 21 + node_modules/@types/unist/README.md | 122 + node_modules/@types/unist/index.d.ts | 103 + node_modules/@types/unist/package.json | 55 + .../unified-latex-builder/README.md | 178 + .../unified-latex-builder/index.cjs | 142 + .../unified-latex-builder/index.cjs.map | 1 + .../unified-latex-builder/index.d.ts | 80 + .../unified-latex-builder/index.js | 142 + .../unified-latex-builder/index.js.map | 1 + .../unified-latex-builder/package.json | 51 + .../unified-latex-ctan/README.md | 46 + .../unified-latex-ctan/enumerate-DSh8p1uS.cjs | 68 + .../enumerate-DSh8p1uS.cjs.map | 1 + .../unified-latex-ctan/enumerate-wQeKG6-C.js | 69 + .../enumerate-wQeKG6-C.js.map | 1 + .../unified-latex-ctan/index-BuqJUpao.cjs | 21 + .../unified-latex-ctan/index-BuqJUpao.cjs.map | 1 + .../unified-latex-ctan/index-NHd3tQDq.js | 22 + .../unified-latex-ctan/index-NHd3tQDq.js.map | 1 + .../unified-latex-ctan/index.cjs | 71 + .../unified-latex-ctan/index.cjs.map | 1 + .../unified-latex-ctan/index.d.ts | 73 + .../unified-latex-ctan/index.js | 71 + .../unified-latex-ctan/index.js.map | 1 + .../unified-latex-ctan/package.json | 65 + .../package/amsart/index.cjs | 32 + .../package/amsart/index.cjs.map | 1 + .../package/amsart/index.d.ts | 2 + .../package/amsart/index.js | 32 + .../package/amsart/index.js.map | 1 + .../package/amsart/provides.d.ts | 4 + .../package/beamer/index.cjs | 204 + .../package/beamer/index.cjs.map | 1 + .../package/beamer/index.d.ts | 2 + .../package/beamer/index.js | 204 + .../package/beamer/index.js.map | 1 + .../package/beamer/provides.d.ts | 4 + .../package/cleveref/index.cjs | 30 + .../package/cleveref/index.cjs.map | 1 + .../package/cleveref/index.d.ts | 2 + .../package/cleveref/index.js | 30 + .../package/cleveref/index.js.map | 1 + .../package/cleveref/provides.d.ts | 4 + .../unified-latex-ctan/package/exam/index.cjs | 6 + .../package/exam/index.cjs.map | 1 + .../package/exam/index.d.ts | 2 + .../unified-latex-ctan/package/exam/index.js | 6 + .../package/exam/index.js.map | 1 + .../package/exam/provides.d.ts | 4 + .../package/geometry/index.cjs | 12 + .../package/geometry/index.cjs.map | 1 + .../package/geometry/index.d.ts | 2 + .../package/geometry/index.js | 12 + .../package/geometry/index.js.map | 1 + .../package/geometry/provides.d.ts | 4 + .../package/hyperref/index.cjs | 32 + .../package/hyperref/index.cjs.map | 1 + .../package/hyperref/index.d.ts | 2 + .../package/hyperref/index.js | 32 + .../package/hyperref/index.js.map | 1 + .../package/hyperref/provides.d.ts | 4 + .../package/latex2e/index.cjs | 6 + .../package/latex2e/index.cjs.map | 1 + .../package/latex2e/index.d.ts | 2 + .../package/latex2e/index.js | 6 + .../package/latex2e/index.js.map | 1 + .../package/latex2e/provides.d.ts | 4 + .../package/listings/index.cjs | 6 + .../package/listings/index.cjs.map | 1 + .../package/listings/index.d.ts | 2 + .../package/listings/index.js | 6 + .../package/listings/index.js.map | 1 + .../listings/libs/argument-parser.d.ts | 8 + .../package/listings/provides.d.ts | 4 + .../package/makeidx/index.cjs | 13 + .../package/makeidx/index.cjs.map | 1 + .../package/makeidx/index.d.ts | 2 + .../package/makeidx/index.js | 13 + .../package/makeidx/index.js.map | 1 + .../package/makeidx/provides.d.ts | 4 + .../package/mathtools/index.cjs | 217 + .../package/mathtools/index.cjs.map | 1 + .../package/mathtools/index.d.ts | 2 + .../package/mathtools/index.js | 217 + .../package/mathtools/index.js.map | 1 + .../package/mathtools/provides.d.ts | 4 + .../package/minted/index.cjs | 6 + .../package/minted/index.cjs.map | 1 + .../package/minted/index.d.ts | 2 + .../package/minted/index.js | 6 + .../package/minted/index.js.map | 1 + .../package/minted/libs/argument-parser.d.ts | 8 + .../package/minted/provides.d.ts | 4 + .../package/multicol/index.cjs | 16 + .../package/multicol/index.cjs.map | 1 + .../package/multicol/index.d.ts | 2 + .../package/multicol/index.js | 16 + .../package/multicol/index.js.map | 1 + .../package/multicol/provides.d.ts | 4 + .../package/nicematrix/index.cjs | 73 + .../package/nicematrix/index.cjs.map | 1 + .../package/nicematrix/index.d.ts | 2 + .../package/nicematrix/index.js | 73 + .../package/nicematrix/index.js.map | 1 + .../package/nicematrix/provides.d.ts | 4 + .../package/systeme/index.cjs | 331 + .../package/systeme/index.cjs.map | 1 + .../package/systeme/index.d.ts | 6 + .../package/systeme/index.js | 331 + .../package/systeme/index.js.map | 1 + .../package/systeme/libs/parser.d.ts | 15 + .../package/systeme/libs/print-raw.d.ts | 6 + .../package/systeme/libs/systeme.d.ts | 29 + .../package/systeme/libs/types.d.ts | 33 + .../package/systeme/provides.d.ts | 4 + .../package/tabularx/index.cjs | 93 + .../package/tabularx/index.cjs.map | 1 + .../package/tabularx/index.d.ts | 5 + .../package/tabularx/index.js | 93 + .../package/tabularx/index.js.map | 1 + .../package/tabularx/libs/parser.d.ts | 8 + .../package/tabularx/libs/print-raw.d.ts | 6 + .../package/tabularx/libs/types.d.ts | 40 + .../package/tabularx/provides.d.ts | 4 + .../unified-latex-ctan/package/tikz/index.cjs | 104 + .../package/tikz/index.cjs.map | 1 + .../package/tikz/index.d.ts | 5 + .../unified-latex-ctan/package/tikz/index.js | 104 + .../package/tikz/index.js.map | 1 + .../package/tikz/libs/parser.d.ts | 13 + .../package/tikz/libs/print-raw.d.ts | 6 + .../libs/tikz-command-argument-parser.d.ts | 10 + .../package/tikz/libs/types.d.ts | 63 + .../package/tikz/provides.d.ts | 8 + .../package/xcolor/index.cjs | 92 + .../package/xcolor/index.cjs.map | 1 + .../package/xcolor/index.d.ts | 9 + .../package/xcolor/index.js | 93 + .../package/xcolor/index.js.map | 1 + .../xcolor/libs/color-to-textcolor-macro.d.ts | 6 + .../package/xcolor/libs/parser.d.ts | 10 + .../xcolor/libs/predefined-colors.d.ts | 544 + .../package/xcolor/libs/print-raw.d.ts | 6 + .../package/xcolor/libs/types.d.ts | 66 + .../xcolor/libs/xcolor-macro-to-hex.d.ts | 12 + .../package/xcolor/libs/xcolor.d.ts | 28 + .../package/xcolor/provides.d.ts | 4 + .../package/xparse/index.cjs | 61 + .../package/xparse/index.cjs.map | 1 + .../package/xparse/index.d.ts | 2 + .../package/xparse/index.js | 61 + .../package/xparse/index.js.map | 1 + .../package/xparse/provides.d.ts | 4 + .../unified-latex-ctan/parser-9Q3EtimU.cjs | 503 + .../parser-9Q3EtimU.cjs.map | 1 + .../unified-latex-ctan/parser-BBXMi7mQ.js | 504 + .../unified-latex-ctan/parser-BBXMi7mQ.js.map | 1 + .../unified-latex-ctan/provides-B-HiB8uu.js | 67 + .../provides-B-HiB8uu.js.map | 1 + .../unified-latex-ctan/provides-BUHzyq9A.js | 346 + .../provides-BUHzyq9A.js.map | 1 + .../unified-latex-ctan/provides-Bdw2Aj_V.cjs | 56 + .../provides-Bdw2Aj_V.cjs.map | 1 + .../unified-latex-ctan/provides-BjJALsf_.cjs | 50 + .../provides-BjJALsf_.cjs.map | 1 + .../unified-latex-ctan/provides-Ch0mvkO_.js | 51 + .../provides-Ch0mvkO_.js.map | 1 + .../unified-latex-ctan/provides-CwtnTL9q.cjs | 26 + .../provides-CwtnTL9q.cjs.map | 1 + .../unified-latex-ctan/provides-DdQzqlsT.cjs | 345 + .../provides-DdQzqlsT.cjs.map | 1 + .../unified-latex-ctan/provides-gOjhEUvC.cjs | 66 + .../provides-gOjhEUvC.cjs.map | 1 + .../unified-latex-ctan/provides-sdqk_ZBm.js | 57 + .../provides-sdqk_ZBm.js.map | 1 + .../unified-latex-ctan/provides-yGf6-zdY.js | 27 + .../provides-yGf6-zdY.js.map | 1 + .../unified-latex-ctan/utils/enumerate.d.ts | 13 + .../unified-latex-ctan/xcolor-BEfsW_1K.cjs | 850 + .../xcolor-BEfsW_1K.cjs.map | 1 + .../unified-latex-ctan/xcolor-CIejE3rZ.js | 851 + .../unified-latex-ctan/xcolor-CIejE3rZ.js.map | 1 + .../unified-latex-prettier/README.md | 24 + .../unified-latex-prettier/index.cjs | 26424 ++++++++++++++++ .../unified-latex-prettier/index.cjs.map | 7 + .../unified-latex-prettier/index.d.ts | 14 + .../unified-latex-prettier/index.d.ts.map | 1 + .../unified-latex-prettier/index.js | 2377 ++ .../unified-latex-prettier/index.js.map | 7 + .../libs/prettier-plugin-latex.d.ts | 5 + .../libs/prettier-plugin-latex.d.ts.map | 1 + .../libs/printer/argument.d.ts | 4 + .../libs/printer/argument.d.ts.map | 1 + .../libs/printer/comment.d.ts | 4 + .../libs/printer/comment.d.ts.map | 1 + .../libs/printer/common.d.ts | 62 + .../libs/printer/common.d.ts.map | 1 + .../libs/printer/environment.d.ts | 20 + .../libs/printer/environment.d.ts.map | 1 + .../libs/printer/index.d.ts | 3 + .../libs/printer/index.d.ts.map | 1 + .../libs/printer/macro.d.ts | 4 + .../libs/printer/macro.d.ts.map | 1 + .../libs/printer/math.d.ts | 5 + .../libs/printer/math.d.ts.map | 1 + .../libs/printer/prettier-types.d.ts | 12 + .../libs/printer/prettier-types.d.ts.map | 1 + .../libs/printer/print-argument-pgfkeys.d.ts | 13 + .../printer/print-argument-pgfkeys.d.ts.map | 1 + .../libs/printer/printer.d.ts | 7 + .../libs/printer/printer.d.ts.map | 1 + .../libs/printer/root.d.ts | 12 + .../libs/printer/root.d.ts.map | 1 + .../libs/printer/tikz.d.ts | 4 + .../libs/printer/tikz.d.ts.map | 1 + .../libs/reference-map.d.ts | 37 + .../libs/reference-map.d.ts.map | 1 + .../unified-latex-prettier/libs/zip.d.ts | 2 + .../unified-latex-prettier/libs/zip.d.ts.map | 1 + .../unified-latex-prettier/package.json | 61 + .../unified-latex-types/README.md | 238 + .../unified-latex-types/index.cjs | 4 + .../unified-latex-types/index.cjs.map | 1 + .../unified-latex-types/index.d.ts | 16 + .../unified-latex-types/index.js | 5 + .../unified-latex-types/index.js.map | 1 + .../unified-latex-types/libs/ast-types.d.ts | 88 + .../unified-latex-types/libs/info-specs.d.ts | 160 + .../unified-latex-types/libs/type-guard.d.ts | 7 + .../unified-latex-types/package.json | 48 + .../unified-latex-util-align/README.md | 79 + .../unified-latex-util-align/index.cjs | 27 + .../unified-latex-util-align/index.cjs.map | 1 + .../unified-latex-util-align/index.d.ts | 44 + .../unified-latex-util-align/index.js | 27 + .../unified-latex-util-align/index.js.map | 1 + .../unified-latex-util-align/package.json | 53 + .../unified-latex-util-argspec/README.md | 59 + .../unified-latex-util-argspec/index.cjs | 90 + .../unified-latex-util-argspec/index.cjs.map | 1 + .../unified-latex-util-argspec/index.d.ts | 96 + .../unified-latex-util-argspec/index.js | 90 + .../unified-latex-util-argspec/index.js.map | 1 + .../unified-latex-util-argspec/package.json | 51 + .../unified-latex-util-arguments/README.md | 116 + .../unified-latex-util-arguments/index.cjs | 405 + .../index.cjs.map | 1 + .../unified-latex-util-arguments/index.d.ts | 72 + .../unified-latex-util-arguments/index.js | 405 + .../unified-latex-util-arguments/index.js.map | 1 + .../unified-latex-util-arguments/package.json | 58 + .../unified-latex-util-catcode/README.md | 162 + .../unified-latex-util-catcode/index.cjs | 295 + .../unified-latex-util-catcode/index.cjs.map | 1 + .../unified-latex-util-catcode/index.d.ts | 60 + .../unified-latex-util-catcode/index.js | 295 + .../unified-latex-util-catcode/index.js.map | 1 + .../unified-latex-util-catcode/package.json | 53 + .../unified-latex-util-comments/README.md | 49 + .../unified-latex-util-comments/index.cjs | 17 + .../unified-latex-util-comments/index.cjs.map | 1 + .../unified-latex-util-comments/index.d.ts | 19 + .../unified-latex-util-comments/index.js | 17 + .../unified-latex-util-comments/index.js.map | 1 + .../unified-latex-util-comments/package.json | 53 + .../unified-latex-util-environments/README.md | 91 + .../unified-latex-util-environments/index.cjs | 67 + .../index.cjs.map | 1 + .../index.d.ts | 31 + .../unified-latex-util-environments/index.js | 67 + .../index.js.map | 1 + .../package.json | 57 + .../unified-latex-util-match/README.md | 28 + .../unified-latex-util-match/index.cjs | 169 + .../unified-latex-util-match/index.cjs.map | 1 + .../unified-latex-util-match/index.d.ts | 70 + .../unified-latex-util-match/index.js | 169 + .../unified-latex-util-match/index.js.map | 1 + .../unified-latex-util-match/package.json | 52 + .../unified-latex-util-parse/README.md | 317 + .../unified-latex-util-parse/index.cjs | 1389 + .../unified-latex-util-parse/index.cjs.map | 1 + .../unified-latex-util-parse/index.d.ts | 148 + .../unified-latex-util-parse/index.js | 246 + .../unified-latex-util-parse/index.js.map | 1 + .../unified-latex-util-parse/package.json | 61 + .../unified-latex-util-pegjs/README.md | 60 + .../unified-latex-util-pegjs/index.cjs | 16700 ++++++++++ .../unified-latex-util-pegjs/index.cjs.map | 1 + .../unified-latex-util-pegjs/index.d.ts | 47 + .../unified-latex-util-pegjs/index.js | 16700 ++++++++++ .../unified-latex-util-pegjs/index.js.map | 1 + .../unified-latex-util-pegjs/package.json | 52 + .../unified-latex-util-pgfkeys/README.md | 88 + .../unified-latex-util-pgfkeys/index.cjs | 58 + .../unified-latex-util-pgfkeys/index.cjs.map | 1 + .../unified-latex-util-pgfkeys/index.d.ts | 39 + .../unified-latex-util-pgfkeys/index.js | 58 + .../unified-latex-util-pgfkeys/index.js.map | 1 + .../unified-latex-util-pgfkeys/package.json | 54 + .../unified-latex-util-print-raw/README.md | 48 + .../unified-latex-util-print-raw/index.cjs | 91 + .../index.cjs.map | 1 + .../unified-latex-util-print-raw/index.d.ts | 23 + .../unified-latex-util-print-raw/index.js | 91 + .../unified-latex-util-print-raw/index.js.map | 1 + .../unified-latex-util-print-raw/package.json | 51 + .../unified-latex-util-render-info/README.md | 63 + .../unified-latex-util-render-info/index.cjs | 19 + .../index.cjs.map | 1 + .../unified-latex-util-render-info/index.d.ts | 18 + .../unified-latex-util-render-info/index.js | 19 + .../index.js.map | 1 + .../package.json | 52 + .../unified-latex-util-replace/README.md | 278 + .../unified-latex-util-replace/index.cjs | 390 + .../unified-latex-util-replace/index.cjs.map | 1 + .../unified-latex-util-replace/index.d.ts | 79 + .../unified-latex-util-replace/index.js | 390 + .../unified-latex-util-replace/index.js.map | 1 + .../unified-latex-util-replace/package.json | 56 + .../unified-latex-util-scan/README.md | 67 + .../unified-latex-util-scan/index.cjs | 123 + .../unified-latex-util-scan/index.cjs.map | 1 + .../unified-latex-util-scan/index.d.ts | 46 + .../unified-latex-util-scan/index.js | 124 + .../unified-latex-util-scan/index.js.map | 1 + .../unified-latex-util-scan/package.json | 54 + .../unified-latex-util-split/README.md | 106 + .../unified-latex-util-split/index.cjs | 77 + .../unified-latex-util-split/index.cjs.map | 1 + .../unified-latex-util-split/index.d.ts | 42 + .../unified-latex-util-split/index.js | 77 + .../unified-latex-util-split/index.js.map | 1 + .../unified-latex-util-split/package.json | 52 + .../unified-latex-util-trim/README.md | 126 + .../unified-latex-util-trim/index.cjs | 130 + .../unified-latex-util-trim/index.cjs.map | 1 + .../unified-latex-util-trim/index.d.ts | 53 + .../unified-latex-util-trim/index.js | 130 + .../unified-latex-util-trim/index.js.map | 1 + .../unified-latex-util-trim/package.json | 54 + .../unified-latex-util-visit/README.md | 122 + .../unified-latex-util-visit/index.cjs | 168 + .../unified-latex-util-visit/index.cjs.map | 1 + .../unified-latex-util-visit/index.d.ts | 125 + .../unified-latex-util-visit/index.js | 168 + .../unified-latex-util-visit/index.js.map | 1 + .../unified-latex-util-visit/package.json | 52 + node_modules/bail/index.d.ts | 10 + node_modules/bail/index.js | 12 + node_modules/bail/license | 22 + node_modules/bail/package.json | 73 + node_modules/bail/readme.md | 147 + node_modules/color-convert/CHANGELOG.md | 54 + node_modules/color-convert/LICENSE | 21 + node_modules/color-convert/README.md | 68 + node_modules/color-convert/conversions.js | 839 + node_modules/color-convert/index.js | 81 + node_modules/color-convert/package.json | 48 + node_modules/color-convert/route.js | 97 + node_modules/color-name/LICENSE | 8 + node_modules/color-name/README.md | 11 + node_modules/color-name/index.js | 152 + node_modules/color-name/package.json | 28 + node_modules/color-string/LICENSE | 21 + node_modules/color-string/README.md | 62 + node_modules/color-string/index.js | 242 + node_modules/color-string/package.json | 39 + node_modules/color/LICENSE | 21 + node_modules/color/README.md | 123 + node_modules/color/index.js | 496 + node_modules/color/package.json | 47 + node_modules/extend/.editorconfig | 20 + node_modules/extend/.eslintrc | 17 + node_modules/extend/.jscs.json | 175 + node_modules/extend/.travis.yml | 230 + node_modules/extend/CHANGELOG.md | 83 + node_modules/extend/LICENSE | 23 + node_modules/extend/README.md | 81 + node_modules/extend/component.json | 32 + node_modules/extend/index.js | 117 + node_modules/extend/package.json | 42 + node_modules/is-arrayish/LICENSE | 21 + node_modules/is-arrayish/README.md | 16 + node_modules/is-arrayish/index.js | 9 + node_modules/is-arrayish/package.json | 45 + node_modules/is-buffer/LICENSE | 21 + node_modules/is-buffer/README.md | 54 + node_modules/is-buffer/index.d.ts | 2 + node_modules/is-buffer/index.js | 11 + node_modules/is-buffer/package.json | 65 + node_modules/is-plain-obj/index.d.ts | 35 + node_modules/is-plain-obj/index.js | 8 + node_modules/is-plain-obj/license | 9 + node_modules/is-plain-obj/package.json | 41 + node_modules/is-plain-obj/readme.md | 58 + node_modules/prettier-plugin-latex/LICENSE | 21 + node_modules/prettier-plugin-latex/README.md | 126 + .../dist/prettier-plugin-latex-9db821d0.mjs | 24909 +++++++++++++++ .../dist/prettier-plugin-latex-f9d12326.js | 24908 +++++++++++++++ .../prettier-plugin-latex-f9d12326.js.map | 1 + .../dist/prettier-plugin-latex.d.ts | 11 + .../dist/prettier-plugin-latex.js | 9 + .../dist/prettier-plugin-latex.js.map | 1 + .../dist/prettier-plugin-latex.mjs | 9 + .../dist/standalone.d.ts | 12 + .../prettier-plugin-latex/dist/standalone.js | 2459 ++ .../dist/standalone.js.map | 1 + .../prettier-plugin-latex/dist/standalone.mjs | 2459 ++ .../prettier-plugin-latex/package.json | 64 + node_modules/prettier/LICENSE | 7 + node_modules/prettier/README.md | 108 + node_modules/prettier/THIRD-PARTY-NOTICES.md | 4416 +++ node_modules/prettier/bin/prettier.cjs | 68 + node_modules/prettier/doc.d.ts | 254 + node_modules/prettier/doc.js | 1261 + node_modules/prettier/doc.mjs | 1233 + node_modules/prettier/index.cjs | 682 + node_modules/prettier/index.d.ts | 956 + node_modules/prettier/index.mjs | 22242 +++++++++++++ node_modules/prettier/internal/cli.mjs | 4873 +++ node_modules/prettier/package.json | 200 + node_modules/prettier/plugins/acorn.d.ts | 6 + node_modules/prettier/plugins/acorn.js | 15 + node_modules/prettier/plugins/acorn.mjs | 15 + node_modules/prettier/plugins/angular.d.ts | 8 + node_modules/prettier/plugins/angular.js | 2 + node_modules/prettier/plugins/angular.mjs | 2 + node_modules/prettier/plugins/babel.d.ts | 18 + node_modules/prettier/plugins/babel.js | 15 + node_modules/prettier/plugins/babel.mjs | 15 + node_modules/prettier/plugins/estree.d.ts | 1 + node_modules/prettier/plugins/estree.js | 36 + node_modules/prettier/plugins/estree.mjs | 36 + node_modules/prettier/plugins/flow.d.ts | 5 + node_modules/prettier/plugins/flow.js | 19 + node_modules/prettier/plugins/flow.mjs | 19 + node_modules/prettier/plugins/glimmer.d.ts | 5 + node_modules/prettier/plugins/glimmer.js | 30 + node_modules/prettier/plugins/glimmer.mjs | 30 + node_modules/prettier/plugins/graphql.d.ts | 5 + node_modules/prettier/plugins/graphql.js | 29 + node_modules/prettier/plugins/graphql.mjs | 29 + node_modules/prettier/plugins/html.d.ts | 8 + node_modules/prettier/plugins/html.js | 22 + node_modules/prettier/plugins/html.mjs | 22 + node_modules/prettier/plugins/markdown.d.ts | 7 + node_modules/prettier/plugins/markdown.js | 63 + node_modules/prettier/plugins/markdown.mjs | 63 + node_modules/prettier/plugins/meriyah.d.ts | 5 + node_modules/prettier/plugins/meriyah.js | 4 + node_modules/prettier/plugins/meriyah.mjs | 4 + node_modules/prettier/plugins/postcss.d.ts | 7 + node_modules/prettier/plugins/postcss.js | 54 + node_modules/prettier/plugins/postcss.mjs | 54 + node_modules/prettier/plugins/typescript.d.ts | 5 + node_modules/prettier/plugins/typescript.js | 20 + node_modules/prettier/plugins/typescript.mjs | 20 + node_modules/prettier/plugins/yaml.d.ts | 5 + node_modules/prettier/plugins/yaml.js | 161 + node_modules/prettier/plugins/yaml.mjs | 161 + node_modules/prettier/standalone.d.ts | 33 + node_modules/prettier/standalone.js | 39 + node_modules/prettier/standalone.mjs | 39 + node_modules/simple-swizzle/LICENSE | 21 + node_modules/simple-swizzle/README.md | 39 + node_modules/simple-swizzle/index.js | 29 + node_modules/simple-swizzle/package.json | 36 + node_modules/trie-prefix-tree/README.md | 173 + node_modules/trie-prefix-tree/dist/append.js | 33 + .../trie-prefix-tree/dist/checkPrefix.js | 28 + node_modules/trie-prefix-tree/dist/config.js | 11 + node_modules/trie-prefix-tree/dist/create.js | 30 + node_modules/trie-prefix-tree/dist/index.js | 256 + .../trie-prefix-tree/dist/permutations.js | 59 + .../trie-prefix-tree/dist/recursePrefix.js | 53 + .../dist/recurseRandomWord.js | 24 + node_modules/trie-prefix-tree/dist/utils.js | 22 + node_modules/trie-prefix-tree/package.json | 74 + node_modules/trough/index.d.ts | 7 + node_modules/trough/index.d.ts.map | 1 + node_modules/trough/index.js | 9 + node_modules/trough/lib/index.d.ts | 105 + node_modules/trough/lib/index.d.ts.map | 1 + node_modules/trough/lib/index.js | 206 + node_modules/trough/license | 21 + node_modules/trough/package.json | 77 + node_modules/trough/readme.md | 494 + node_modules/unified/index.d.ts | 863 + node_modules/unified/index.js | 1 + node_modules/unified/lib/index.d.ts | 19 + node_modules/unified/lib/index.js | 599 + node_modules/unified/license | 21 + node_modules/unified/package.json | 107 + node_modules/unified/readme.md | 1450 + .../unist-util-stringify-position/index.d.ts | 1 + .../unist-util-stringify-position/index.js | 1 + .../lib/index.d.ts | 61 + .../lib/index.js | 84 + .../unist-util-stringify-position/license | 22 + .../package.json | 80 + .../unist-util-stringify-position/readme.md | 203 + node_modules/vfile-message/index.d.ts | 1 + node_modules/vfile-message/index.js | 1 + node_modules/vfile-message/lib/index.d.ts | 125 + node_modules/vfile-message/lib/index.js | 225 + node_modules/vfile-message/license | 22 + node_modules/vfile-message/package.json | 78 + node_modules/vfile-message/readme.md | 244 + node_modules/vfile/index.d.ts | 64 + node_modules/vfile/index.js | 1 + node_modules/vfile/lib/index.d.ts | 355 + node_modules/vfile/lib/index.js | 520 + node_modules/vfile/lib/minpath.browser.d.ts | 46 + node_modules/vfile/lib/minpath.browser.js | 422 + node_modules/vfile/lib/minpath.d.ts | 1 + node_modules/vfile/lib/minpath.js | 1 + node_modules/vfile/lib/minproc.browser.d.ts | 5 + node_modules/vfile/lib/minproc.browser.js | 8 + node_modules/vfile/lib/minproc.d.ts | 1 + node_modules/vfile/lib/minproc.js | 1 + node_modules/vfile/lib/minurl.browser.d.ts | 9 + node_modules/vfile/lib/minurl.browser.js | 78 + node_modules/vfile/lib/minurl.d.ts | 2 + node_modules/vfile/lib/minurl.js | 2 + node_modules/vfile/lib/minurl.shared.d.ts | 42 + node_modules/vfile/lib/minurl.shared.js | 37 + node_modules/vfile/license | 21 + node_modules/vfile/package.json | 111 + node_modules/vfile/readme.md | 786 + package-lock.json | 531 + package.json | 6 + private/approvalpage.tex | 34 + private/frontpage.tex | 70 + private/list-of-symbols.tex | 25 + private/thesis-margins-and-spaces.tex | 42 + private/toc-lot-lof.tex | 26 + thesis-preamble.tex | 63 + 555 files changed, 197024 insertions(+) create mode 100644 .gitignore create mode 100644 MBZUAI-Blue.eps create mode 100644 assets/api-doc.png create mode 100644 assets/gant.png create mode 100644 assets/logging.png create mode 100644 assets/pipeline.png create mode 100644 assets/vertex/model-versioning.png create mode 100644 bibliography/keylatex.bib create mode 100644 contents/main_content.tex create mode 100644 document.pdf create mode 100644 document.tex create mode 100644 node_modules/.bin/prettier create mode 100644 node_modules/.bin/prettier.cmd create mode 100644 node_modules/.bin/prettier.ps1 create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@types/unist/LICENSE create mode 100644 node_modules/@types/unist/README.md create mode 100644 node_modules/@types/unist/index.d.ts create mode 100644 node_modules/@types/unist/package.json create mode 100644 node_modules/@unified-latex/unified-latex-builder/README.md create mode 100644 node_modules/@unified-latex/unified-latex-builder/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-builder/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-builder/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-builder/index.js create mode 100644 node_modules/@unified-latex/unified-latex-builder/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-builder/package.json create mode 100644 node_modules/@unified-latex/unified-latex-ctan/README.md create mode 100644 node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package.json create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/amsart/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/beamer/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/cleveref/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/exam/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/exam/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/geometry/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/hyperref/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/latex2e/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/listings/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/listings/libs/argument-parser.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/listings/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/makeidx/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/mathtools/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/minted/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/minted/libs/argument-parser.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/minted/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/multicol/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/parser.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/print-raw.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/systeme.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/types.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/systeme/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/parser.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/print-raw.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/types.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tabularx/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/parser.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/print-raw.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/tikz-command-argument-parser.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/types.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/tikz/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/color-to-textcolor-macro.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/parser.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/predefined-colors.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/print-raw.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/types.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor-macro-to-hex.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xcolor/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/package/xparse/provides.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/utils/enumerate.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs create mode 100644 node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js create mode 100644 node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/README.md create mode 100644 node_modules/@unified-latex/unified-latex-prettier/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-prettier/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/index.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/index.js create mode 100644 node_modules/@unified-latex/unified-latex-prettier/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts.map create mode 100644 node_modules/@unified-latex/unified-latex-prettier/package.json create mode 100644 node_modules/@unified-latex/unified-latex-types/README.md create mode 100644 node_modules/@unified-latex/unified-latex-types/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-types/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-types/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-types/index.js create mode 100644 node_modules/@unified-latex/unified-latex-types/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-types/libs/ast-types.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-types/libs/info-specs.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-types/libs/type-guard.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-types/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-align/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-align/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-align/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-align/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-align/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-align/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-align/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-argspec/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-argspec/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-argspec/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-argspec/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-argspec/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-argspec/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-argspec/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-arguments/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-arguments/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-arguments/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-arguments/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-arguments/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-arguments/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-arguments/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-catcode/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-catcode/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-catcode/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-catcode/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-catcode/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-catcode/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-catcode/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-comments/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-comments/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-comments/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-comments/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-comments/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-comments/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-comments/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-environments/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-environments/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-environments/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-environments/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-environments/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-environments/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-environments/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-match/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-match/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-match/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-match/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-match/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-match/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-match/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-parse/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-parse/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-parse/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-parse/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-parse/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-parse/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-parse/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-pegjs/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-pegjs/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-pegjs/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-pegjs/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-pegjs/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-pgfkeys/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-pgfkeys/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-pgfkeys/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-print-raw/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-print-raw/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-print-raw/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-print-raw/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-print-raw/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-render-info/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-render-info/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-render-info/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-render-info/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-render-info/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-render-info/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-render-info/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-replace/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-replace/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-replace/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-replace/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-replace/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-replace/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-replace/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-scan/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-scan/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-scan/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-scan/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-scan/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-scan/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-scan/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-split/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-split/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-split/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-split/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-split/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-split/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-split/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-trim/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-trim/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-trim/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-trim/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-trim/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-trim/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-trim/package.json create mode 100644 node_modules/@unified-latex/unified-latex-util-visit/README.md create mode 100644 node_modules/@unified-latex/unified-latex-util-visit/index.cjs create mode 100644 node_modules/@unified-latex/unified-latex-util-visit/index.cjs.map create mode 100644 node_modules/@unified-latex/unified-latex-util-visit/index.d.ts create mode 100644 node_modules/@unified-latex/unified-latex-util-visit/index.js create mode 100644 node_modules/@unified-latex/unified-latex-util-visit/index.js.map create mode 100644 node_modules/@unified-latex/unified-latex-util-visit/package.json create mode 100644 node_modules/bail/index.d.ts create mode 100644 node_modules/bail/index.js create mode 100644 node_modules/bail/license create mode 100644 node_modules/bail/package.json create mode 100644 node_modules/bail/readme.md create mode 100644 node_modules/color-convert/CHANGELOG.md create mode 100644 node_modules/color-convert/LICENSE create mode 100644 node_modules/color-convert/README.md create mode 100644 node_modules/color-convert/conversions.js create mode 100644 node_modules/color-convert/index.js create mode 100644 node_modules/color-convert/package.json create mode 100644 node_modules/color-convert/route.js create mode 100644 node_modules/color-name/LICENSE create mode 100644 node_modules/color-name/README.md create mode 100644 node_modules/color-name/index.js create mode 100644 node_modules/color-name/package.json create mode 100644 node_modules/color-string/LICENSE create mode 100644 node_modules/color-string/README.md create mode 100644 node_modules/color-string/index.js create mode 100644 node_modules/color-string/package.json create mode 100644 node_modules/color/LICENSE create mode 100644 node_modules/color/README.md create mode 100644 node_modules/color/index.js create mode 100644 node_modules/color/package.json create mode 100644 node_modules/extend/.editorconfig create mode 100644 node_modules/extend/.eslintrc create mode 100644 node_modules/extend/.jscs.json create mode 100644 node_modules/extend/.travis.yml create mode 100644 node_modules/extend/CHANGELOG.md create mode 100644 node_modules/extend/LICENSE create mode 100644 node_modules/extend/README.md create mode 100644 node_modules/extend/component.json create mode 100644 node_modules/extend/index.js create mode 100644 node_modules/extend/package.json create mode 100644 node_modules/is-arrayish/LICENSE create mode 100644 node_modules/is-arrayish/README.md create mode 100644 node_modules/is-arrayish/index.js create mode 100644 node_modules/is-arrayish/package.json create mode 100644 node_modules/is-buffer/LICENSE create mode 100644 node_modules/is-buffer/README.md create mode 100644 node_modules/is-buffer/index.d.ts create mode 100644 node_modules/is-buffer/index.js create mode 100644 node_modules/is-buffer/package.json create mode 100644 node_modules/is-plain-obj/index.d.ts create mode 100644 node_modules/is-plain-obj/index.js create mode 100644 node_modules/is-plain-obj/license create mode 100644 node_modules/is-plain-obj/package.json create mode 100644 node_modules/is-plain-obj/readme.md create mode 100644 node_modules/prettier-plugin-latex/LICENSE create mode 100644 node_modules/prettier-plugin-latex/README.md create mode 100644 node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-9db821d0.mjs create mode 100644 node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js create mode 100644 node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js.map create mode 100644 node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.d.ts create mode 100644 node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js create mode 100644 node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js.map create mode 100644 node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.mjs create mode 100644 node_modules/prettier-plugin-latex/dist/standalone.d.ts create mode 100644 node_modules/prettier-plugin-latex/dist/standalone.js create mode 100644 node_modules/prettier-plugin-latex/dist/standalone.js.map create mode 100644 node_modules/prettier-plugin-latex/dist/standalone.mjs create mode 100644 node_modules/prettier-plugin-latex/package.json create mode 100644 node_modules/prettier/LICENSE create mode 100644 node_modules/prettier/README.md create mode 100644 node_modules/prettier/THIRD-PARTY-NOTICES.md create mode 100644 node_modules/prettier/bin/prettier.cjs create mode 100644 node_modules/prettier/doc.d.ts create mode 100644 node_modules/prettier/doc.js create mode 100644 node_modules/prettier/doc.mjs create mode 100644 node_modules/prettier/index.cjs create mode 100644 node_modules/prettier/index.d.ts create mode 100644 node_modules/prettier/index.mjs create mode 100644 node_modules/prettier/internal/cli.mjs create mode 100644 node_modules/prettier/package.json create mode 100644 node_modules/prettier/plugins/acorn.d.ts create mode 100644 node_modules/prettier/plugins/acorn.js create mode 100644 node_modules/prettier/plugins/acorn.mjs create mode 100644 node_modules/prettier/plugins/angular.d.ts create mode 100644 node_modules/prettier/plugins/angular.js create mode 100644 node_modules/prettier/plugins/angular.mjs create mode 100644 node_modules/prettier/plugins/babel.d.ts create mode 100644 node_modules/prettier/plugins/babel.js create mode 100644 node_modules/prettier/plugins/babel.mjs create mode 100644 node_modules/prettier/plugins/estree.d.ts create mode 100644 node_modules/prettier/plugins/estree.js create mode 100644 node_modules/prettier/plugins/estree.mjs create mode 100644 node_modules/prettier/plugins/flow.d.ts create mode 100644 node_modules/prettier/plugins/flow.js create mode 100644 node_modules/prettier/plugins/flow.mjs create mode 100644 node_modules/prettier/plugins/glimmer.d.ts create mode 100644 node_modules/prettier/plugins/glimmer.js create mode 100644 node_modules/prettier/plugins/glimmer.mjs create mode 100644 node_modules/prettier/plugins/graphql.d.ts create mode 100644 node_modules/prettier/plugins/graphql.js create mode 100644 node_modules/prettier/plugins/graphql.mjs create mode 100644 node_modules/prettier/plugins/html.d.ts create mode 100644 node_modules/prettier/plugins/html.js create mode 100644 node_modules/prettier/plugins/html.mjs create mode 100644 node_modules/prettier/plugins/markdown.d.ts create mode 100644 node_modules/prettier/plugins/markdown.js create mode 100644 node_modules/prettier/plugins/markdown.mjs create mode 100644 node_modules/prettier/plugins/meriyah.d.ts create mode 100644 node_modules/prettier/plugins/meriyah.js create mode 100644 node_modules/prettier/plugins/meriyah.mjs create mode 100644 node_modules/prettier/plugins/postcss.d.ts create mode 100644 node_modules/prettier/plugins/postcss.js create mode 100644 node_modules/prettier/plugins/postcss.mjs create mode 100644 node_modules/prettier/plugins/typescript.d.ts create mode 100644 node_modules/prettier/plugins/typescript.js create mode 100644 node_modules/prettier/plugins/typescript.mjs create mode 100644 node_modules/prettier/plugins/yaml.d.ts create mode 100644 node_modules/prettier/plugins/yaml.js create mode 100644 node_modules/prettier/plugins/yaml.mjs create mode 100644 node_modules/prettier/standalone.d.ts create mode 100644 node_modules/prettier/standalone.js create mode 100644 node_modules/prettier/standalone.mjs create mode 100644 node_modules/simple-swizzle/LICENSE create mode 100644 node_modules/simple-swizzle/README.md create mode 100644 node_modules/simple-swizzle/index.js create mode 100644 node_modules/simple-swizzle/package.json create mode 100644 node_modules/trie-prefix-tree/README.md create mode 100644 node_modules/trie-prefix-tree/dist/append.js create mode 100644 node_modules/trie-prefix-tree/dist/checkPrefix.js create mode 100644 node_modules/trie-prefix-tree/dist/config.js create mode 100644 node_modules/trie-prefix-tree/dist/create.js create mode 100644 node_modules/trie-prefix-tree/dist/index.js create mode 100644 node_modules/trie-prefix-tree/dist/permutations.js create mode 100644 node_modules/trie-prefix-tree/dist/recursePrefix.js create mode 100644 node_modules/trie-prefix-tree/dist/recurseRandomWord.js create mode 100644 node_modules/trie-prefix-tree/dist/utils.js create mode 100644 node_modules/trie-prefix-tree/package.json create mode 100644 node_modules/trough/index.d.ts create mode 100644 node_modules/trough/index.d.ts.map create mode 100644 node_modules/trough/index.js create mode 100644 node_modules/trough/lib/index.d.ts create mode 100644 node_modules/trough/lib/index.d.ts.map create mode 100644 node_modules/trough/lib/index.js create mode 100644 node_modules/trough/license create mode 100644 node_modules/trough/package.json create mode 100644 node_modules/trough/readme.md create mode 100644 node_modules/unified/index.d.ts create mode 100644 node_modules/unified/index.js create mode 100644 node_modules/unified/lib/index.d.ts create mode 100644 node_modules/unified/lib/index.js create mode 100644 node_modules/unified/license create mode 100644 node_modules/unified/package.json create mode 100644 node_modules/unified/readme.md create mode 100644 node_modules/unist-util-stringify-position/index.d.ts create mode 100644 node_modules/unist-util-stringify-position/index.js create mode 100644 node_modules/unist-util-stringify-position/lib/index.d.ts create mode 100644 node_modules/unist-util-stringify-position/lib/index.js create mode 100644 node_modules/unist-util-stringify-position/license create mode 100644 node_modules/unist-util-stringify-position/package.json create mode 100644 node_modules/unist-util-stringify-position/readme.md create mode 100644 node_modules/vfile-message/index.d.ts create mode 100644 node_modules/vfile-message/index.js create mode 100644 node_modules/vfile-message/lib/index.d.ts create mode 100644 node_modules/vfile-message/lib/index.js create mode 100644 node_modules/vfile-message/license create mode 100644 node_modules/vfile-message/package.json create mode 100644 node_modules/vfile-message/readme.md create mode 100644 node_modules/vfile/index.d.ts create mode 100644 node_modules/vfile/index.js create mode 100644 node_modules/vfile/lib/index.d.ts create mode 100644 node_modules/vfile/lib/index.js create mode 100644 node_modules/vfile/lib/minpath.browser.d.ts create mode 100644 node_modules/vfile/lib/minpath.browser.js create mode 100644 node_modules/vfile/lib/minpath.d.ts create mode 100644 node_modules/vfile/lib/minpath.js create mode 100644 node_modules/vfile/lib/minproc.browser.d.ts create mode 100644 node_modules/vfile/lib/minproc.browser.js create mode 100644 node_modules/vfile/lib/minproc.d.ts create mode 100644 node_modules/vfile/lib/minproc.js create mode 100644 node_modules/vfile/lib/minurl.browser.d.ts create mode 100644 node_modules/vfile/lib/minurl.browser.js create mode 100644 node_modules/vfile/lib/minurl.d.ts create mode 100644 node_modules/vfile/lib/minurl.js create mode 100644 node_modules/vfile/lib/minurl.shared.d.ts create mode 100644 node_modules/vfile/lib/minurl.shared.js create mode 100644 node_modules/vfile/license create mode 100644 node_modules/vfile/package.json create mode 100644 node_modules/vfile/readme.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 private/approvalpage.tex create mode 100644 private/frontpage.tex create mode 100644 private/list-of-symbols.tex create mode 100644 private/thesis-margins-and-spaces.tex create mode 100644 private/toc-lot-lof.tex create mode 100644 thesis-preamble.tex diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..236ed7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,310 @@ +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bbl-SAVE-ERROR +*.bcf +*.bcf-SAVE-ERROR +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync +*.rubbercache +rubber.cache + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs +*.lzo +*.lzs +*.slg +*.slo +*.sls + +# uncomment this for glossaries-extra (will ignore makeindex's style files!) +# *.ist + +# gnuplot +*.gnuplot +*.table + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.glog +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hypdoc +*.hd + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files +# *.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# newpax +*.newpax + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# svg +svg-inkscape/ + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# titletoc +*.ptc + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices and outlines +*.xyc +*.xyd + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# gummi +.*.swp + +# KBibTeX +*~[0-9]* + +# TeXnicCenter +*.tps + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +# Makeindex log files +*.lpz + +# xwatermark package +*.xwm + +# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib +# option is specified. Footnotes are the stored in a file with suffix Notes.bib. +# Uncomment the next line to have this generated file ignored. +#*Notes.bib + +.node_modules/* \ No newline at end of file diff --git a/MBZUAI-Blue.eps b/MBZUAI-Blue.eps new file mode 100644 index 0000000..b707221 --- /dev/null +++ b/MBZUAI-Blue.eps @@ -0,0 +1,8374 @@ +%!PS-Adobe-3.1 EPSF-3.0 +%ADO_DSC_Encoding: Windows Roman +%%Title: MBZUAI -Brand Mark_Techno Blue -RGB.pdf +%%Creator: Adobe Acrobat 24.5.0 +%%For: Chithra.Chakra +%%CreationDate: 2/20/2025, 12:23:18 PM +%%BoundingBox: 0 0 152 133 +%%HiResBoundingBox: 0 0 151.6990 132.9020 +%%CropBox: 0 0 151.6990 132.9020 +%%LanguageLevel: 2 +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentNeededFeatures: (atend) +%%DocumentSuppliedFeatures: (atend) +%%DocumentData: Clean7Bit +%%Pages: (atend) +%%DocumentProcessColors: Cyan Magenta +%%DocumentCustomColors: (atend) +%%EndComments +%%BeginDefaults +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults +%%BeginProlog +%%BeginResource: procset Adobe_AGM_Utils 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{currentpacking true setpacking}if +userdict/Adobe_AGM_Utils 75 dict dup begin put +/bdf +{bind def}bind def +/nd{null def}bdf +/xdf +{exch def}bdf +/ldf +{load def}bdf +/ddf +{put}bdf +/xddf +{3 -1 roll put}bdf +/xpt +{exch put}bdf +/ndf +{ + exch dup where{ + pop pop pop + }{ + xdf + }ifelse +}def +/cdndf +{ + exch dup currentdict exch known{ + pop pop + }{ + exch def + }ifelse +}def +/gx +{get exec}bdf +/ps_level + /languagelevel where{ + pop systemdict/languagelevel gx + }{ + 1 + }ifelse +def +/level2 + ps_level 2 ge +def +/level3 + ps_level 3 ge +def +/ps_version + {version cvr}stopped{-1}if +def +/set_gvm +{currentglobal exch setglobal}bdf +/reset_gvm +{setglobal}bdf +/makereadonlyarray +{ + /packedarray where{pop packedarray + }{ + array astore readonly}ifelse +}bdf +/map_reserved_ink_name +{ + dup type/stringtype eq{ + dup/Red eq{ + pop(_Red_) + }{ + dup/Green eq{ + pop(_Green_) + }{ + dup/Blue eq{ + pop(_Blue_) + }{ + dup()cvn eq{ + pop(Process) + }if + }ifelse + }ifelse + }ifelse + }if +}bdf +/AGMUTIL_GSTATE 22 dict def +/get_gstate +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_clr_spc currentcolorspace def + /AGMUTIL_GSTATE_clr_indx 0 def + /AGMUTIL_GSTATE_clr_comps 12 array def + mark currentcolor counttomark + {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop + /AGMUTIL_GSTATE_fnt rootfont def + /AGMUTIL_GSTATE_lw currentlinewidth def + /AGMUTIL_GSTATE_lc currentlinecap def + /AGMUTIL_GSTATE_lj currentlinejoin def + /AGMUTIL_GSTATE_ml currentmiterlimit def + currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf + /AGMUTIL_GSTATE_sa currentstrokeadjust def + /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def + /AGMUTIL_GSTATE_op currentoverprint def + /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def + /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def + currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf + cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf + /AGMUTIL_GSTATE_ht currenthalftone def + /AGMUTIL_GSTATE_flt currentflat def + end +}def +/set_gstate +{ + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_clr_spc setcolorspace + AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get + /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor + AGMUTIL_GSTATE_fnt setfont + AGMUTIL_GSTATE_lw setlinewidth + AGMUTIL_GSTATE_lc setlinecap + AGMUTIL_GSTATE_lj setlinejoin + AGMUTIL_GSTATE_ml setmiterlimit + AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash + AGMUTIL_GSTATE_sa setstrokeadjust + AGMUTIL_GSTATE_clr_rnd setcolorrendering + AGMUTIL_GSTATE_op setoverprint + AGMUTIL_GSTATE_bg cvx setblackgeneration + AGMUTIL_GSTATE_ucr cvx setundercolorremoval + AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx + AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer + AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or + { + currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne + { + mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark + }if + }{ + AGMUTIL_GSTATE_ht sethalftone + }ifelse + AGMUTIL_GSTATE_flt setflat + end +}def +/get_gstate_and_matrix +{ + AGMUTIL_GSTATE begin + /AGMUTIL_GSTATE_ctm matrix currentmatrix def + end + get_gstate +}def +/set_gstate_and_matrix +{ + set_gstate + AGMUTIL_GSTATE begin + AGMUTIL_GSTATE_ctm setmatrix + end +}def +/AGMUTIL_str256 256 string def +/AGMUTIL_src256 256 string def +/AGMUTIL_dst64 64 string def +/AGMUTIL_srcLen nd +/AGMUTIL_ndx nd +/AGMUTIL_cpd nd +/capture_cpd{ + //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf +}def +/thold_halftone +{ + level3 + {sethalftone currenthalftone} + { + dup/HalftoneType get 3 eq + { + sethalftone currenthalftone + }{ + begin + Width Height mul{ + Thresholds read{pop}if + }repeat + end + currenthalftone + }ifelse + }ifelse +}def +/rdcmntline +{ + currentfile AGMUTIL_str256 readline pop + (%)anchorsearch{pop}if +}bdf +/filter_cmyk +{ + dup type/filetype ne{ + exch()/SubFileDecode filter + }{ + exch pop + } + ifelse + [ + exch + { + AGMUTIL_src256 readstring pop + dup length/AGMUTIL_srcLen exch def + /AGMUTIL_ndx 0 def + AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{ + 1 index exch get + AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put + /AGMUTIL_ndx AGMUTIL_ndx 1 add def + }for + pop + AGMUTIL_dst64 0 AGMUTIL_ndx getinterval + } + bind + /exec cvx + ]cvx +}bdf +/filter_indexed_devn +{ + cvi Names length mul names_index add Lookup exch get +}bdf +/filter_devn +{ + 4 dict begin + /srcStr xdf + /dstStr xdf + dup type/filetype ne{ + 0()/SubFileDecode filter + }if + [ + exch + [ + /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx + currentdict/srcStr get/readstring cvx/pop cvx + /dup cvx/length cvx 0/gt cvx[ + Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx + names_index Names length currentdict/srcStr get length 1 sub{ + 1/index cvx/exch cvx/get cvx + currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx + Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx + }for + currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx + ]cvx/if cvx + /end cvx + ]cvx + bind + /exec cvx + ]cvx + end +}bdf +/AGMUTIL_imagefile nd +/read_image_file +{ + AGMUTIL_imagefile 0 setfileposition + 10 dict begin + /imageDict xdf + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + /imbufIdx 0 def + /origDataSource imageDict/DataSource get def + /origMultipleDataSources imageDict/MultipleDataSources get def + /origDecode imageDict/Decode get def + /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def + imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse + { + /imbufCnt imageDict/DataSource get length def + /imbufs imbufCnt array def + 0 1 imbufCnt 1 sub{ + /imbufIdx xdf + imbufs imbufIdx imbufLen string put + imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put + }for + DeviceN_PS2{ + imageDict begin + /DataSource[DataSource/devn_sep_datasource cvx]cvx def + /MultipleDataSources false def + /Decode[0 1]def + end + }if + }{ + /imbuf imbufLen string def + Indexed_DeviceN level3 not and DeviceN_NoneName or{ + /srcDataStrs[imageDict begin + currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse + { + Width Decode length 2 div mul cvi string + }repeat + end]def + imageDict begin + /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def + /Decode[0 1]def + end + }{ + imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put + imageDict/Decode[0 1]put + }ifelse + }ifelse + imageDict exch + load exec + imageDict/DataSource origDataSource put + imageDict/MultipleDataSources origMultipleDataSources put + imageDict/Decode origDecode put + end +}bdf +/write_image_file +{ + begin + {(AGMUTIL_imagefile)(w+)file}stopped{ + false + }{ + Adobe_AGM_Utils/AGMUTIL_imagefile xddf + 2 dict begin + /imbufLen Width BitsPerComponent mul 7 add 8 idiv def + MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{ + /imbuf imbufLen string def + }if + 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{ + pop + MultipleDataSources{ + 0 1 DataSource length 1 sub{ + DataSource type dup + /arraytype eq{ + pop DataSource exch gx + }{ + /filetype eq{ + DataSource exch get imbuf readstring pop + }{ + DataSource exch get + }ifelse + }ifelse + AGMUTIL_imagefile exch writestring + }for + }{ + DataSource type dup + /arraytype eq{ + pop DataSource exec + }{ + /filetype eq{ + DataSource imbuf readstring pop + }{ + DataSource + }ifelse + }ifelse + AGMUTIL_imagefile exch writestring + }ifelse + }for + end + true + }ifelse + end +}bdf +/close_image_file +{ + AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile +}def +statusdict/product known userdict/AGMP_current_show known not and{ + /pstr statusdict/product get def + pstr(HP LaserJet 2200)eq + pstr(HP LaserJet 4000 Series)eq or + pstr(HP LaserJet 4050 Series )eq or + pstr(HP LaserJet 8000 Series)eq or + pstr(HP LaserJet 8100 Series)eq or + pstr(HP LaserJet 8150 Series)eq or + pstr(HP LaserJet 5000 Series)eq or + pstr(HP LaserJet 5100 Series)eq or + pstr(HP Color LaserJet 4500)eq or + pstr(HP Color LaserJet 4600)eq or + pstr(HP LaserJet 5Si)eq or + pstr(HP LaserJet 1200 Series)eq or + pstr(HP LaserJet 1300 Series)eq or + pstr(HP LaserJet 4100 Series)eq or + { + userdict/AGMP_current_show/show load put + userdict/show{ + currentcolorspace 0 get + /Pattern eq + {false charpath f} + {AGMP_current_show}ifelse + }put + }if + currentdict/pstr undef +}if +/consumeimagedata +{ + begin + AGMIMG_init_common + currentdict/MultipleDataSources known not + {/MultipleDataSources false def}if + MultipleDataSources + { + DataSource 0 get type + dup/filetype eq + { + 1 dict begin + /flushbuffer Width cvi string def + 1 1 Height cvi + { + pop + 0 1 DataSource length 1 sub + { + DataSource exch get + flushbuffer readstring pop pop + }for + }for + end + }if + dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and + { + Width Height mul cvi + { + 0 1 DataSource length 1 sub + {dup DataSource exch gx length exch 0 ne{pop}if}for + dup 0 eq + {pop exit}if + sub dup 0 le + {exit}if + }loop + pop + }if + } + { + /DataSource load type + dup/filetype eq + { + 1 dict begin + /flushbuffer Width Decode length 2 idiv mul cvi string def + 1 1 Height{pop DataSource flushbuffer readstring pop pop}for + end + }if + dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and + { + Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul + { + DataSource length dup 0 eq + {pop exit}if + sub dup 0 le + {exit}if + }loop + pop + }if + }ifelse + end +}bdf +/addprocs +{ + 2{/exec load}repeat + 3 1 roll + [5 1 roll]bind cvx +}def +/modify_halftone_xfer +{ + currenthalftone dup length dict copy begin + currentdict 2 index known{ + 1 index load dup length dict copy begin + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs/TransferFunction xdf + currentdict end def + currentdict end sethalftone + }{ + currentdict/TransferFunction known{ + /TransferFunction load + }{ + currenttransfer + }ifelse + addprocs/TransferFunction xdf + currentdict end sethalftone + pop + }ifelse +}def +/clonearray +{ + dup xcheck exch + dup length array exch + Adobe_AGM_Core/AGMCORE_tmp -1 ddf + { + Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf + dup type/dicttype eq + { + Adobe_AGM_Core/AGMCORE_tmp get + exch + clonedict + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + }if + dup type/arraytype eq + { + Adobe_AGM_Core/AGMCORE_tmp get exch + clonearray + Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf + }if + exch dup + Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put + }forall + exch{cvx}if +}bdf +/clonedict +{ + dup length dict + begin + { + dup type/dicttype eq + {clonedict}if + dup type/arraytype eq + {clonearray}if + def + }forall + currentdict + end +}bdf +/DeviceN_PS2 +{ + /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and +}bdf +/Indexed_DeviceN +{ + /indexed_colorspace_dict AGMCORE_gget dup null ne{ + dup/CSDBase known{ + /CSDBase get/CSD get_res/Names known + }{ + pop false + }ifelse + }{ + pop false + }ifelse +}bdf +/DeviceN_NoneName +{ + /Names where{ + pop + false Names + { + (None)eq or + }forall + }{ + false + }ifelse +}bdf +/DeviceN_PS2_inRip_seps +{ + /AGMCORE_in_rip_sep where + { + pop dup type dup/arraytype eq exch/packedarraytype eq or + { + dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and + { + /currentcolorspace exch AGMCORE_gput + false + }{ + true + }ifelse + }{ + true + }ifelse + }{ + true + }ifelse +}bdf +/base_colorspace_type +{ + dup type/arraytype eq{0 get}if +}bdf +/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse +{ + /pdfmark_5{cleartomark}bind def +}{ + /pdfmark_5{pdfmark}bind def +}ifelse +/ReadBypdfmark_5 +{ + currentfile exch 0 exch/SubFileDecode filter + /currentdistillerparams where + {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse + {flushfile cleartomark} + {/PUT pdfmark}ifelse +}bdf +/ReadBypdfmark_5_string +{ + 2 dict begin + /makerString exch def string/tmpString exch def + { + currentfile tmpString readline not{pop exit}if + makerString anchorsearch + { + pop pop cleartomark exit + }{ + 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5 + }ifelse + }loop + end +}bdf +/xpdfm +{ + { + dup 0 get/Label eq + { + aload length[exch 1 add 1 roll/PAGELABEL + }{ + aload pop + [{ThisPage}<<5 -2 roll>>/PUT + }ifelse + pdfmark_5 + }forall +}bdf +/lmt{ + dup 2 index le{exch}if pop dup 2 index ge{exch}if pop +}bdf +/int{ + dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop +}bdf +/ds{ + Adobe_AGM_Utils begin +}bdf +/dt{ + currentdict Adobe_AGM_Utils eq{ + end + }if +}bdf +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_AGM_Core 2.0 0 +%%Version: 2.0 0 +%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Core 209 dict dup begin put +/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def +/AGMCORE_str256 256 string def +/AGMCORE_save nd +/AGMCORE_graphicsave nd +/AGMCORE_c 0 def +/AGMCORE_m 0 def +/AGMCORE_y 0 def +/AGMCORE_k 0 def +/AGMCORE_cmykbuf 4 array def +/AGMCORE_screen[currentscreen]cvx def +/AGMCORE_tmp 0 def +/AGMCORE_&setgray nd +/AGMCORE_&setcolor nd +/AGMCORE_&setcolorspace nd +/AGMCORE_&setcmykcolor nd +/AGMCORE_cyan_plate nd +/AGMCORE_magenta_plate nd +/AGMCORE_yellow_plate nd +/AGMCORE_black_plate nd +/AGMCORE_plate_ndx nd +/AGMCORE_get_ink_data nd +/AGMCORE_is_cmyk_sep nd +/AGMCORE_host_sep nd +/AGMCORE_avoid_L2_sep_space nd +/AGMCORE_distilling nd +/AGMCORE_composite_job nd +/AGMCORE_producing_seps nd +/AGMCORE_ps_level -1 def +/AGMCORE_ps_version -1 def +/AGMCORE_environ_ok nd +/AGMCORE_CSD_cache 0 dict def +/AGMCORE_currentoverprint false def +/AGMCORE_deltaX nd +/AGMCORE_deltaY nd +/AGMCORE_name nd +/AGMCORE_sep_special nd +/AGMCORE_err_strings 4 dict def +/AGMCORE_cur_err nd +/AGMCORE_current_spot_alias false def +/AGMCORE_inverting false def +/AGMCORE_feature_dictCount nd +/AGMCORE_feature_opCount nd +/AGMCORE_feature_ctm nd +/AGMCORE_ConvertToProcess false def +/AGMCORE_Default_CTM matrix def +/AGMCORE_Default_PageSize nd +/AGMCORE_Default_flatness nd +/AGMCORE_currentbg nd +/AGMCORE_currentucr nd +/AGMCORE_pattern_paint_type 0 def +/knockout_unitsq nd +currentglobal true setglobal +[/CSA/Gradient/Procedure] +{ + /Generic/Category findresource dup length dict copy/Category defineresource pop +}forall +setglobal +/AGMCORE_key_known +{ + where{ + /Adobe_AGM_Core_Id known + }{ + false + }ifelse +}ndf +/flushinput +{ + save + 2 dict begin + /CompareBuffer 3 -1 roll def + /readbuffer 256 string def + mark + { + currentfile readbuffer{readline}stopped + {cleartomark mark} + { + not + {pop exit} + if + CompareBuffer eq + {exit} + if + }ifelse + }loop + cleartomark + end + restore +}bdf +/getspotfunction +{ + AGMCORE_screen exch pop exch pop + dup type/dicttype eq{ + dup/HalftoneType get 1 eq{ + /SpotFunction get + }{ + dup/HalftoneType get 2 eq{ + /GraySpotFunction get + }{ + pop + { + abs exch abs 2 copy add 1 gt{ + 1 sub dup mul exch 1 sub dup mul add 1 sub + }{ + dup mul exch dup mul add 1 exch sub + }ifelse + }bind + }ifelse + }ifelse + }if +}def +/np +{newpath}bdf +/clp_npth +{clip np}def +/eoclp_npth +{eoclip np}def +/npth_clp +{np clip}def +/graphic_setup +{ + /AGMCORE_graphicsave save store + concat + 0 setgray + 0 setlinecap + 0 setlinejoin + 1 setlinewidth + []0 setdash + 10 setmiterlimit + np + false setoverprint + false setstrokeadjust + //Adobe_AGM_Core/spot_alias gx + /Adobe_AGM_Image where{ + pop + Adobe_AGM_Image/spot_alias 2 copy known{ + gx + }{ + pop pop + }ifelse + }if + /sep_colorspace_dict null AGMCORE_gput + 100 dict begin + /dictstackcount countdictstack def + /showpage{}def + mark +}def +/graphic_cleanup +{ + cleartomark + dictstackcount 1 countdictstack 1 sub{end}for + end + AGMCORE_graphicsave restore +}def +/compose_error_msg +{ + grestoreall initgraphics + /Helvetica findfont 10 scalefont setfont + /AGMCORE_deltaY 100 def + /AGMCORE_deltaX 310 def + clippath pathbbox np pop pop 36 add exch 36 add exch moveto + 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto + 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath + 0 AGMCORE_&setgray + gsave 1 AGMCORE_&setgray fill grestore + 1 setlinewidth gsave stroke grestore + currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto + /AGMCORE_deltaY 12 def + /AGMCORE_tmp 0 def + AGMCORE_err_strings exch get + { + dup 32 eq + { + pop + AGMCORE_str256 0 AGMCORE_tmp getinterval + stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt + { + currentpoint AGMCORE_deltaY sub exch pop + clippath pathbbox pop pop pop 44 add exch moveto + }if + AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show + 0 1 AGMCORE_str256 length 1 sub + { + AGMCORE_str256 exch 0 put + }for + /AGMCORE_tmp 0 def + }{ + AGMCORE_str256 exch AGMCORE_tmp xpt + /AGMCORE_tmp AGMCORE_tmp 1 add def + }ifelse + }forall +}bdf +/AGMCORE_CMYKDeviceNColorspaces[ + [/Separation/None/DeviceCMYK{0 0 0}] + [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind] + [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind] + [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind] + [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind] + [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind] + [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind] + [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind] + [/Separation(Cyan)/DeviceCMYK{0 0 0}] + [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind] + [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind] + [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind] + [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}] + [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind] + [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}] + [/DeviceCMYK] +]def +/ds{ + Adobe_AGM_Core begin + /currentdistillerparams where + { + pop currentdistillerparams/CoreDistVersion get 5000 lt + {<>setdistillerparams}if + }if + /AGMCORE_ps_version xdf + /AGMCORE_ps_level xdf + errordict/AGM_handleerror known not{ + errordict/AGM_handleerror errordict/handleerror get put + errordict/handleerror{ + Adobe_AGM_Core begin + $error/newerror get AGMCORE_cur_err null ne and{ + $error/newerror false put + AGMCORE_cur_err compose_error_msg + }if + $error/newerror true put + end + errordict/AGM_handleerror get exec + }bind put + }if + /AGMCORE_environ_ok + ps_level AGMCORE_ps_level ge + ps_version AGMCORE_ps_version ge and + AGMCORE_ps_level -1 eq or + def + AGMCORE_environ_ok not + {/AGMCORE_cur_err/AGMCORE_bad_environ def}if + /AGMCORE_&setgray systemdict/setgray get def + level2{ + /AGMCORE_&setcolor systemdict/setcolor get def + /AGMCORE_&setcolorspace systemdict/setcolorspace get def + }if + /AGMCORE_currentbg currentblackgeneration def + /AGMCORE_currentucr currentundercolorremoval def + /AGMCORE_Default_flatness currentflat def + /AGMCORE_distilling + /product where{ + pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and + }{ + false + }ifelse + def + /AGMCORE_GSTATE AGMCORE_key_known not{ + /AGMCORE_GSTATE 21 dict def + /AGMCORE_tmpmatrix matrix def + /AGMCORE_gstack 64 array def + /AGMCORE_gstackptr 0 def + /AGMCORE_gstacksaveptr 0 def + /AGMCORE_gstackframekeys 14 def + /AGMCORE_&gsave/gsave ldf + /AGMCORE_&grestore/grestore ldf + /AGMCORE_&grestoreall/grestoreall ldf + /AGMCORE_&save/save ldf + /AGMCORE_&setoverprint/setoverprint ldf + /AGMCORE_gdictcopy{ + begin + {def}forall + end + }def + /AGMCORE_gput{ + AGMCORE_gstack AGMCORE_gstackptr get + 3 1 roll + put + }def + /AGMCORE_gget{ + AGMCORE_gstack AGMCORE_gstackptr get + exch + get + }def + /gsave{ + AGMCORE_&gsave + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 64 ge{limitcheck}if + /AGMCORE_gstackptr exch store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /grestore{ + AGMCORE_&grestore + AGMCORE_gstackptr 1 sub + dup AGMCORE_gstacksaveptr lt{1 add}if + dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known + {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse + /AGMCORE_gstackptr exch store + }def + /grestoreall{ + AGMCORE_&grestoreall + /AGMCORE_gstackptr AGMCORE_gstacksaveptr store + }def + /save{ + AGMCORE_&save + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gstackptr 1 add + dup 64 ge{limitcheck}if + /AGMCORE_gstackptr exch store + /AGMCORE_gstacksaveptr AGMCORE_gstackptr store + AGMCORE_gstack AGMCORE_gstackptr get + AGMCORE_gdictcopy + }def + /setoverprint{ + dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint + }def + 0 1 AGMCORE_gstack length 1 sub{ + AGMCORE_gstack exch AGMCORE_gstackframekeys dict put + }for + }if + level3/AGMCORE_&sysshfill AGMCORE_key_known not and + { + /AGMCORE_&sysshfill systemdict/shfill get def + /AGMCORE_&sysmakepattern systemdict/makepattern get def + /AGMCORE_&usrmakepattern/makepattern load def + }if + /currentcmykcolor[0 0 0 0]AGMCORE_gput + /currentstrokeadjust false AGMCORE_gput + /currentcolorspace[/DeviceGray]AGMCORE_gput + /sep_tint 0 AGMCORE_gput + /devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput + /sep_colorspace_dict null AGMCORE_gput + /devicen_colorspace_dict null AGMCORE_gput + /indexed_colorspace_dict null AGMCORE_gput + /currentcolor_intent()AGMCORE_gput + /customcolor_tint 1 AGMCORE_gput + /absolute_colorimetric_crd null AGMCORE_gput + /relative_colorimetric_crd null AGMCORE_gput + /saturation_crd null AGMCORE_gput + /perceptual_crd null AGMCORE_gput + currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf + cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf + << + /MaxPatternItem currentsystemparams/MaxPatternCache get + >> + setuserparams + end +}def +/ps +{ + /setcmykcolor where{ + pop + Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put + }if + Adobe_AGM_Core begin + /setcmykcolor + { + 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput + 1 sub 4 1 roll + 3{ + 3 index add neg dup 0 lt{ + pop 0 + }if + 3 1 roll + }repeat + setrgbcolor pop + }ndf + /currentcmykcolor + { + /currentcmykcolor AGMCORE_gget aload pop + }ndf + /setoverprint + {pop}ndf + /currentoverprint + {false}ndf + /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def + /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def + /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def + /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def + /AGMCORE_plate_ndx + AGMCORE_cyan_plate{ + 0 + }{ + AGMCORE_magenta_plate{ + 1 + }{ + AGMCORE_yellow_plate{ + 2 + }{ + AGMCORE_black_plate{ + 3 + }{ + 4 + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_have_reported_unsupported_color_space false def + /AGMCORE_report_unsupported_color_space + { + AGMCORE_have_reported_unsupported_color_space false eq + { + (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)== + Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf + }if + }def + /AGMCORE_composite_job + AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def + /AGMCORE_in_rip_sep + /AGMCORE_in_rip_sep where{ + pop AGMCORE_in_rip_sep + }{ + AGMCORE_distilling + { + false + }{ + userdict/Adobe_AGM_OnHost_Seps known{ + false + }{ + level2{ + currentpagedevice/Separations 2 copy known{ + get + }{ + pop pop false + }ifelse + }{ + false + }ifelse + }ifelse + }ifelse + }ifelse + def + /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def + /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def + /AGM_preserve_spots + /AGM_preserve_spots where{ + pop AGM_preserve_spots + }{ + AGMCORE_distilling AGMCORE_producing_seps or + }ifelse + def + /AGM_is_distiller_preserving_spotimages + { + currentdistillerparams/PreserveOverprintSettings known + { + currentdistillerparams/PreserveOverprintSettings get + { + currentdistillerparams/ColorConversionStrategy known + { + currentdistillerparams/ColorConversionStrategy get + /sRGB ne + }{ + true + }ifelse + }{ + false + }ifelse + }{ + false + }ifelse + }def + /convert_spot_to_process where{pop}{ + /convert_spot_to_process + { + //Adobe_AGM_Core begin + dup map_alias{ + /Name get exch pop + }if + dup dup(None)eq exch(All)eq or + { + pop false + }{ + AGMCORE_host_sep + { + gsave + 1 0 0 0 setcmykcolor currentgray 1 exch sub + 0 1 0 0 setcmykcolor currentgray 1 exch sub + 0 0 1 0 setcmykcolor currentgray 1 exch sub + 0 0 0 1 setcmykcolor currentgray 1 exch sub + add add add 0 eq + { + pop false + }{ + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + }ifelse + grestore + }{ + AGMCORE_distilling + { + pop AGM_is_distiller_preserving_spotimages not + }{ + //Adobe_AGM_Core/AGMCORE_name xddf + false + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq + AGMUTIL_cpd/OverrideSeparations known and + { + AGMUTIL_cpd/OverrideSeparations get + { + /HqnSpots/ProcSet resourcestatus + { + pop pop pop true + }if + }if + }if + { + AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not + }{ + gsave + [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace + false + AGMUTIL_cpd/SeparationColorNames 2 copy known + { + get + {AGMCORE_name eq or}forall + not + }{ + pop pop pop true + }ifelse + grestore + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + }ifelse + /convert_to_process where{pop}{ + /convert_to_process + { + dup length 0 eq + { + pop false + }{ + AGMCORE_host_sep + { + dup true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process and}ifelse + } + forall + { + true exch + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + (Black)eq or and + }forall + not + }{pop false}ifelse + }{ + false exch + { + /PhotoshopDuotoneList where{pop false}{true}ifelse + { + dup(Cyan)eq exch + dup(Magenta)eq 3 -1 roll or exch + dup(Yellow)eq 3 -1 roll or exch + dup(Black)eq 3 -1 roll or + {pop} + {convert_spot_to_process or}ifelse + } + { + convert_spot_to_process or + } + ifelse + } + forall + }ifelse + }ifelse + }def + }ifelse + /AGMCORE_avoid_L2_sep_space + version cvr 2012 lt + level2 and + AGMCORE_producing_seps not and + def + /AGMCORE_is_cmyk_sep + AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or + def + /AGM_avoid_0_cmyk where{ + pop AGM_avoid_0_cmyk + }{ + AGM_preserve_spots + userdict/Adobe_AGM_OnHost_Seps known + userdict/Adobe_AGM_InRip_Seps known or + not and + }ifelse + { + /setcmykcolor[ + { + 4 copy add add add 0 eq currentoverprint and{ + pop 0.0005 + }if + }/exec cvx + /AGMCORE_&setcmykcolor load dup type/operatortype ne{ + /exec cvx + }if + ]cvx def + }if + /AGMCORE_IsSeparationAProcessColor + { + dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or + }def + AGMCORE_host_sep{ + /setcolortransfer + { + AGMCORE_cyan_plate{ + pop pop pop + }{ + AGMCORE_magenta_plate{ + 4 3 roll pop pop pop + }{ + AGMCORE_yellow_plate{ + 4 2 roll pop pop pop + }{ + 4 1 roll pop pop pop + }ifelse + }ifelse + }ifelse + settransfer + } + def + /AGMCORE_get_ink_data + AGMCORE_cyan_plate{ + {pop pop pop} + }{ + AGMCORE_magenta_plate{ + {4 3 roll pop pop pop} + }{ + AGMCORE_yellow_plate{ + {4 2 roll pop pop pop} + }{ + {4 1 roll pop pop pop} + }ifelse + }ifelse + }ifelse + def + /AGMCORE_RemoveProcessColorNames + { + 1 dict begin + /filtername + { + dup/Cyan eq 1 index(Cyan)eq or + {pop(_cyan_)}if + dup/Magenta eq 1 index(Magenta)eq or + {pop(_magenta_)}if + dup/Yellow eq 1 index(Yellow)eq or + {pop(_yellow_)}if + dup/Black eq 1 index(Black)eq or + {pop(_black_)}if + }def + dup type/arraytype eq + {[exch{filtername}forall]} + {filtername}ifelse + end + }def + level3{ + /AGMCORE_IsCurrentColor + { + dup AGMCORE_IsSeparationAProcessColor + { + AGMCORE_plate_ndx 0 eq + {dup(Cyan)eq exch/Cyan eq or}if + AGMCORE_plate_ndx 1 eq + {dup(Magenta)eq exch/Magenta eq or}if + AGMCORE_plate_ndx 2 eq + {dup(Yellow)eq exch/Yellow eq or}if + AGMCORE_plate_ndx 3 eq + {dup(Black)eq exch/Black eq or}if + AGMCORE_plate_ndx 4 eq + {pop false}if + }{ + gsave + false setoverprint + current_spot_alias false set_spot_alias + 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor + set_spot_alias + currentgray 1 ne + grestore + }ifelse + }def + /AGMCORE_filter_functiondatasource + { + 5 dict begin + /data_in xdf + data_in type/stringtype eq + { + /ncomp xdf + /comp xdf + /string_out data_in length ncomp idiv string def + 0 ncomp data_in length 1 sub + { + string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put + }for + string_out + }{ + string/string_in xdf + /string_out 1 string def + /component xdf + [ + data_in string_in/readstring cvx + [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx + [/pop cvx()]cvx/ifelse cvx + ]cvx/ReusableStreamDecode filter + }ifelse + end + }def + /AGMCORE_separateShadingFunction + { + 2 dict begin + /paint? xdf + /channel xdf + dup type/dicttype eq + { + begin + FunctionType 0 eq + { + /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def + currentdict/Decode known + {/Decode Decode channel 2 mul 2 getinterval def}if + paint? not + {/Decode[1 1]def}if + }if + FunctionType 2 eq + { + paint? + { + /C0[C0 channel get 1 exch sub]def + /C1[C1 channel get 1 exch sub]def + }{ + /C0[1]def + /C1[1]def + }ifelse + }if + FunctionType 3 eq + { + /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def + }if + currentdict/Range known + {/Range[0 1]def}if + currentdict + end}{ + channel get 0 paint? AGMCORE_separateShadingFunction + }ifelse + end + }def + /AGMCORE_separateShading + { + 3 -1 roll begin + currentdict/Function known + { + currentdict/Background known + {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if + Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf + /ColorSpace[/DeviceGray]def + }{ + ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }{ + ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put + }ifelse + ColorSpace 0 get/Separation eq + { + { + [1/exch cvx/sub cvx]cvx + }{ + [/pop cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll put + pop + }{ + { + [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx + }{ + pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx + }ifelse + ColorSpace 3 3 -1 roll bind put + }ifelse + ColorSpace 2/DeviceGray put + }ifelse + end + }def + /AGMCORE_separateShadingDict + { + dup/ColorSpace get + dup type/arraytype ne + {[exch]}if + dup 0 get/DeviceCMYK eq + { + exch begin + currentdict + AGMCORE_cyan_plate + {0 true}if + AGMCORE_magenta_plate + {1 true}if + AGMCORE_yellow_plate + {2 true}if + AGMCORE_black_plate + {3 true}if + AGMCORE_plate_ndx 4 eq + {0 false}if + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + currentdict + end exch + }if + dup 0 get/Separation eq + { + exch begin + ColorSpace 1 get dup/None ne exch/All ne and + { + ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /Separation + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + }if + }ifelse + }{ + currentdict ColorSpace 1 get AGMCORE_IsCurrentColor + 0 exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + }if + currentdict + end exch + }if + dup 0 get/DeviceN eq + { + exch begin + ColorSpace 1 get convert_to_process + { + ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq + { + /ColorSpace + [ + /DeviceN + ColorSpace 1 get + /DeviceGray + [ + ColorSpace 3 get/exec cvx + 4 AGMCORE_plate_ndx sub -1/roll cvx + 4 1/roll cvx + 3[/pop cvx]cvx/repeat cvx + 1/exch cvx/sub cvx + ]cvx + ]def + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + currentdict 0 false AGMCORE_separateShading + /ColorSpace[/DeviceGray]def + }if + }ifelse + }{ + currentdict + false -1 ColorSpace 1 get + { + AGMCORE_IsCurrentColor + { + 1 add + exch pop true exch exit + }if + 1 add + }forall + exch + dup not currentoverprint and + {/AGMCORE_ignoreshade true def}if + AGMCORE_separateShading + }ifelse + currentdict + end exch + }if + dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not + { + exch begin + ColorSpace dup type/arraytype eq + {0 get}if + /DeviceGray ne + { + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate not + { + ColorSpace 0 get/CIEBasedA eq + { + /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def + }if + ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or + { + /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def + }if + ColorSpace 0 get/CIEBasedDEFG eq + { + /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def + }if + currentdict 0 false AGMCORE_separateShading + }if + }if + currentdict + end exch + }if + pop + dup/AGMCORE_ignoreshade known + { + begin + /ColorSpace[/Separation(None)/DeviceGray{}]def + currentdict end + }if + }def + /shfill + { + AGMCORE_separateShadingDict + dup/AGMCORE_ignoreshade known + {pop} + {AGMCORE_&sysshfill}ifelse + }def + /makepattern + { + exch + dup/PatternType get 2 eq + { + clonedict + begin + /Shading Shading AGMCORE_separateShadingDict def + Shading/AGMCORE_ignoreshade known + currentdict end exch + {pop<>}if + exch AGMCORE_&sysmakepattern + }{ + exch AGMCORE_&usrmakepattern + }ifelse + }def + }if + }if + AGMCORE_in_rip_sep{ + /setcustomcolor + { + exch aload pop + dup 7 1 roll inRip_spot_has_ink not { + 4{4 index mul 4 1 roll} + repeat + /DeviceCMYK setcolorspace + 6 -2 roll pop pop + }{ + //Adobe_AGM_Core begin + /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf + end + [/Separation 4 -1 roll/DeviceCMYK + {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul} + ] + setcolorspace + }ifelse + setcolor + }ndf + /setseparationgray + { + [/Separation(All)/DeviceGray{}]setcolorspace_opt + 1 exch sub setcolor + }ndf + }{ + /setseparationgray + { + AGMCORE_&setgray + }ndf + }ifelse + /findcmykcustomcolor + { + 5 makereadonlyarray + }ndf + /setcustomcolor + { + exch aload pop pop + 4{4 index mul 4 1 roll}repeat + setcmykcolor pop + }ndf + /has_color + /colorimage where{ + AGMCORE_producing_seps{ + pop true + }{ + systemdict eq + }ifelse + }{ + false + }ifelse + def + /map_index + { + 1 index mul exch getinterval{255 div}forall + }bdf + /map_indexed_devn + { + Lookup Names length 3 -1 roll cvi map_index + }bdf + /n_color_components + { + base_colorspace_type + dup/DeviceGray eq{ + pop 1 + }{ + /DeviceCMYK eq{ + 4 + }{ + 3 + }ifelse + }ifelse + }bdf + level2{ + /mo/moveto ldf + /li/lineto ldf + /cv/curveto ldf + /knockout_unitsq + { + 1 setgray + 0 0 1 1 rectfill + }def + level2/setcolorspace AGMCORE_key_known not and{ + /AGMCORE_&&&setcolorspace/setcolorspace ldf + /AGMCORE_ReplaceMappedColor + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + /AGMCORE_SpotAliasAry2 where{ + begin + dup 0 get dup/Separation eq + { + pop + dup length array copy + dup dup 1 get + current_spot_alias + { + dup map_alias + { + false set_spot_alias + dup 1 exch setsepcolorspace + true set_spot_alias + begin + /sep_colorspace_dict currentdict AGMCORE_gput + pop pop pop + [ + /Separation Name + CSA map_csa + MappedCSA + /sep_colorspace_proc load + ] + dup Name + end + }if + }if + map_reserved_ink_name 1 xpt + }{ + /DeviceN eq + { + dup length array copy + dup dup 1 get[ + exch{ + current_spot_alias{ + dup map_alias{ + /Name get exch pop + }if + }if + map_reserved_ink_name + }forall + ]1 xpt + }if + }ifelse + end + }if + }if + }def + /setcolorspace + { + dup type dup/arraytype eq exch/packedarraytype eq or + { + dup 0 get/Indexed eq + { + AGMCORE_distilling + { + /PhotoshopDuotoneList where + { + pop false + }{ + true + }ifelse + }{ + true + }ifelse + { + aload pop 3 -1 roll + AGMCORE_ReplaceMappedColor + 3 1 roll 4 array astore + }if + }{ + AGMCORE_ReplaceMappedColor + }ifelse + }if + DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if + }def + }if + }{ + /adj + { + currentstrokeadjust{ + transform + 0.25 sub round 0.25 add exch + 0.25 sub round 0.25 add exch + itransform + }if + }def + /mo{ + adj moveto + }def + /li{ + adj lineto + }def + /cv{ + 6 2 roll adj + 6 2 roll adj + 6 2 roll adj curveto + }def + /knockout_unitsq + { + 1 setgray + 8 8 1[8 0 0 8 0 0]{}image + }def + /currentstrokeadjust{ + /currentstrokeadjust AGMCORE_gget + }def + /setstrokeadjust{ + /currentstrokeadjust exch AGMCORE_gput + }def + /setcolorspace + { + /currentcolorspace exch AGMCORE_gput + }def + /currentcolorspace + { + /currentcolorspace AGMCORE_gget + }def + /setcolor_devicecolor + { + base_colorspace_type + dup/DeviceGray eq{ + pop setgray + }{ + /DeviceCMYK eq{ + setcmykcolor + }{ + setrgbcolor + }ifelse + }ifelse + }def + /setcolor + { + currentcolorspace 0 get + dup/DeviceGray ne{ + dup/DeviceCMYK ne{ + dup/DeviceRGB ne{ + dup/Separation eq{ + pop + currentcolorspace 3 gx + currentcolorspace 2 get + }{ + dup/Indexed eq{ + pop + currentcolorspace 3 get dup type/stringtype eq{ + currentcolorspace 1 get n_color_components + 3 -1 roll map_index + }{ + exec + }ifelse + currentcolorspace 1 get + }{ + /AGMCORE_cur_err/AGMCORE_invalid_color_space def + AGMCORE_invalid_color_space + }ifelse + }ifelse + }if + }if + }if + setcolor_devicecolor + }def + }ifelse + /sop/setoverprint ldf + /lw/setlinewidth ldf + /lc/setlinecap ldf + /lj/setlinejoin ldf + /ml/setmiterlimit ldf + /dsh/setdash ldf + /sadj/setstrokeadjust ldf + /gry/setgray ldf + /rgb/setrgbcolor ldf + /cmyk[ + /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx + /setcmykcolor load dup type/operatortype ne{/exec cvx}if + ]cvx bdf + level3 AGMCORE_host_sep not and{ + /nzopmsc{ + 6 dict begin + /kk exch def + /yy exch def + /mm exch def + /cc exch def + /sum 0 def + cc 0 ne{/sum sum 2#1000 or def cc}if + mm 0 ne{/sum sum 2#0100 or def mm}if + yy 0 ne{/sum sum 2#0010 or def yy}if + kk 0 ne{/sum sum 2#0001 or def kk}if + AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace + sum 0 eq{0}if + end + setcolor + }bdf + }{ + /nzopmsc/cmyk ldf + }ifelse + /sep/setsepcolor ldf + /devn/setdevicencolor ldf + /idx/setindexedcolor ldf + /colr/setcolor ldf + /csacrd/set_csa_crd ldf + /sepcs/setsepcolorspace ldf + /devncs/setdevicencolorspace ldf + /idxcs/setindexedcolorspace ldf + /cp/closepath ldf + /clp/clp_npth ldf + /eclp/eoclp_npth ldf + /f/fill ldf + /ef/eofill ldf + /@/stroke ldf + /nclp/npth_clp ldf + /gset/graphic_setup ldf + /gcln/graphic_cleanup ldf + /ct/concat ldf + /cf/currentfile ldf + /fl/filter ldf + /rs/readstring ldf + /AGMCORE_def_ht currenthalftone def + /clonedict Adobe_AGM_Utils begin/clonedict load end def + /clonearray Adobe_AGM_Utils begin/clonearray load end def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall + /getrampcolor + { + /indx exch def + 0 1 NumComp 1 sub + { + dup + Samples exch get + dup type/stringtype eq{indx get}if + exch + Scaling exch get aload pop + 3 1 roll + mul add + }for + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /sssetbackground{ + aload pop + ColorSpaceFamily/Separation eq + {sep} + { + ColorSpaceFamily/DeviceN eq + {devn}{setcolor}ifelse + }ifelse + }bdf + /RadialShade + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /r2 xdf + /c2y xdf + /c2x xdf + /r1 xdf + /c1y xdf + /c1x xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + c1x c2x eq + { + c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope c2y c1y sub c2x c1x sub div def + /theta slope 1 atan def + c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if + c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if + }ifelse + gsave + clippath + c1x c1y translate + theta rotate + -90 rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax xdf + /xMax xdf + /yMin xdf + /xMin xdf + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + /max{2 copy gt{pop}{exch pop}ifelse}bdf + /min{2 copy lt{pop}{exch pop}ifelse}bdf + rampdict begin + 40 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + c1x c1y translate + theta rotate + -90 rotate + /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def + /c1y 0 def + /c1x 0 def + /c2x 0 def + ext0 + { + 0 getrampcolor + c2y r2 add r1 sub 0.0001 lt + { + c1x c1y r1 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2y r1 add r2 le + { + c1x c1y r1 0 360 arc + fill + } + { + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r1 neg def + /p1y c1y def + /p2x r1 def + /p2y c1y def + p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y p1x SS1 div neg def + /SS2 90 theta sub dup sin exch cos div def + /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y p2x SS2 div neg def + r1 r2 gt + { + /L1maxX p1x yMin p1y sub SS1 div add def + /L2maxX p2x yMin p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + c1x c2x sub dup mul + c1y c2y sub dup mul + add 0.5 exp + 0 dtransform + dup mul exch dup mul add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + /hires xdf + hires mul + /numpix xdf + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + /xInc c2x c1x sub numsteps div def + /yInc c2y c1y sub numsteps div def + /rInc r2 r1 sub numsteps div def + /cx c1x def + /cy c1y def + /radius r1 def + np + xInc 0 eq yInc 0 eq rInc 0 eq and and + { + 0 getrampcolor + cx cy radius 0 360 arc + stroke + NumSamples 1 sub getrampcolor + cx cy radius 72 hires div add 0 360 arc + 0 setlinewidth + stroke + }{ + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + cx cy radius 0 360 arc + /cx cx xInc add def + /cy cy yInc add def + /radius radius rInc add def + cx cy radius 360 0 arcn + eofill + rampIndxInc add + }repeat + pop + }ifelse + ext1 + { + c2y r2 add r1 lt + { + c2x c2y r2 0 360 arc + fill + }{ + c2y r1 add r2 sub 0.0001 le + { + c2x c2y r2 360 0 arcn + pathbbox + /aymax exch def + /axmax exch def + /aymin exch def + /axmin exch def + /bxMin xMin axmin min def + /byMin yMin aymin min def + /bxMax xMax axmax max def + /byMax yMax aymax max def + bxMin byMin moveto + bxMax byMin lineto + bxMax byMax lineto + bxMin byMax lineto + bxMin byMin lineto + eofill + }{ + c2x c2y r2 0 360 arc fill + r1 r2 eq + { + /p1x r2 neg def + /p1y c2y def + /p2x r2 def + /p2y c2y def + p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto + fill + }{ + /AA r2 r1 sub c2y div def + AA -1 eq + {/theta 89.99 def} + {/theta AA 1 AA dup mul sub sqrt div 1 atan def} + ifelse + /SS1 90 theta add dup sin exch cos div def + /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def + /p1y c2y p1x SS1 div sub def + /SS2 90 theta sub dup sin exch cos div def + /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def + /p2y c2y p2x SS2 div sub def + r1 r2 lt + { + /L1maxX p1x yMax p1y sub SS1 div add def + /L2maxX p2x yMax p2y sub SS2 div add def + }{ + /L1maxX 0 def + /L2maxX 0 def + }ifelse + p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto + L1maxX L1maxX p1x sub SS1 mul p1y add lineto + fill + }ifelse + }ifelse + }ifelse + }if + grestore + grestore + end + end + end + }ifelse + }bdf + /GenStrips + { + 40 dict begin + /ColorSpaceFamily xdf + /background xdf + /ext1 xdf + /ext0 xdf + /BBox xdf + /y2 xdf + /x2 xdf + /y1 xdf + /x1 xdf + /rampdict xdf + /setinkoverprint where{pop/setinkoverprint{pop}def}if + gsave + BBox length 0 gt + { + np + BBox 0 get BBox 1 get moveto + BBox 2 get BBox 0 get sub 0 rlineto + 0 BBox 3 get BBox 1 get sub rlineto + BBox 2 get BBox 0 get sub neg 0 rlineto + closepath + clip + np + }if + x1 x2 eq + { + y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse + }{ + /slope y2 y1 sub x2 x1 sub div def + /theta slope 1 atan def + x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if + x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if + } + ifelse + gsave + clippath + x1 y1 translate + theta rotate + {pathbbox}stopped + {0 0 0 0}if + /yMax exch def + /xMax exch def + /yMin exch def + /xMin exch def + grestore + xMax xMin eq yMax yMin eq or + { + grestore + end + }{ + rampdict begin + 20 dict begin + background length 0 gt{background sssetbackground gsave clippath fill grestore}if + gsave + x1 y1 translate + theta rotate + /xStart 0 def + /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def + /ySpan yMax yMin sub def + /numsteps NumSamples def + /rampIndxInc 1 def + /subsampling false def + xStart 0 transform + xEnd 0 transform + 3 -1 roll + sub dup mul + 3 1 roll + sub dup mul + add 0.5 exp 72 div + 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt + 1 index 1 index lt{exch}if pop + mul + /numpix xdf + numpix 0 ne + { + NumSamples numpix div 0.5 gt + { + /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def + /rampIndxInc NumSamples 1 sub numsteps div def + /subsampling true def + }if + }if + ext0 + { + 0 getrampcolor + xMin xStart lt + { + xMin yMin xMin neg ySpan rectfill + }if + }if + /xInc xEnd xStart sub numsteps div def + /x xStart def + 0 + numsteps + { + dup + subsampling{round cvi}if + getrampcolor + x yMin xInc ySpan rectfill + /x x xInc add def + rampIndxInc add + }repeat + pop + ext1{ + xMax xEnd gt + { + xEnd yMin xMax xEnd sub ySpan rectfill + }if + }if + grestore + grestore + end + end + end + }ifelse + }bdf +}def +/pt +{ + end +}def +/dt{ +}def +/pgsv{ + //Adobe_AGM_Core/AGMCORE_save save put +}def +/pgrs{ + //Adobe_AGM_Core/AGMCORE_save get restore +}def +systemdict/findcolorrendering known{ + /findcolorrendering systemdict/findcolorrendering get def +}if +systemdict/setcolorrendering known{ + /setcolorrendering systemdict/setcolorrendering get def +}if +/test_cmyk_color_plate +{ + gsave + setcmykcolor currentgray 1 ne + grestore +}def +/inRip_spot_has_ink +{ + dup//Adobe_AGM_Core/AGMCORE_name xddf + convert_spot_to_process not +}def +/map255_to_range +{ + 1 index sub + 3 -1 roll 255 div mul add +}def +/set_csa_crd +{ + /sep_colorspace_dict null AGMCORE_gput + begin + CSA get_csa_by_name setcolorspace_opt + set_crd + end +} +def +/map_csa +{ + currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse + {pop}{get_csa_by_name/MappedCSA xdf}ifelse +}def +/setsepcolor +{ + /sep_colorspace_dict AGMCORE_gget begin + dup/sep_tint exch AGMCORE_gput + TintProc + end +}def +/setdevicencolor +{ + /devicen_colorspace_dict AGMCORE_gget begin + Names length copy + Names length 1 sub -1 0 + { + /devicen_tints AGMCORE_gget 3 1 roll xpt + }for + TintProc + end +}def +/sep_colorspace_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + currentdict/Components known{ + Components aload pop + TintMethod/Lab eq{ + 2{AGMCORE_tmp mul NComponents 1 roll}repeat + LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll + }{ + TintMethod/Subtractive eq{ + NComponents{ + AGMCORE_tmp mul NComponents 1 roll + }repeat + }{ + NComponents{ + 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll + }repeat + }ifelse + }ifelse + }{ + ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get + aload pop + }ifelse + end +}def +/sep_colorspace_gray_proc +{ + /AGMCORE_tmp exch store + /sep_colorspace_dict AGMCORE_gget begin + GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get + end +}def +/sep_proc_name +{ + dup 0 get + dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{ + pop[/DeviceGray] + /sep_colorspace_gray_proc + }{ + /sep_colorspace_proc + }ifelse +}def +/setsepcolorspace +{ + current_spot_alias{ + dup begin + Name map_alias{ + exch pop + }if + end + }if + dup/sep_colorspace_dict exch AGMCORE_gput + begin + CSA map_csa + /AGMCORE_sep_special Name dup()eq exch(All)eq or store + AGMCORE_avoid_L2_sep_space{ + [/Indexed MappedCSA sep_proc_name 255 exch + {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx + ]setcolorspace_opt + /TintProc{ + 255 mul round cvi setcolor + }bdf + }{ + MappedCSA 0 get/DeviceCMYK eq + currentdict/Components known and + AGMCORE_sep_special not and{ + /TintProc[ + Components aload pop Name findcmykcustomcolor + /exch cvx/setcustomcolor cvx + ]cvx bdf + }{ + AGMCORE_host_sep Name(All)eq and{ + /TintProc{ + 1 exch sub setseparationgray + }bdf + }{ + AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and + AGMCORE_host_sep or + Name()eq and{ + /TintProc[ + MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{ + cvx/setcmykcolor cvx + }{ + cvx/setgray cvx + }ifelse + ]cvx bdf + }{ + AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{ + /TintProc[ + /dup cvx + MappedCSA sep_proc_name cvx exch + 0 get/DeviceGray eq{ + 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx + }if + /Name cvx/findcmykcustomcolor cvx/exch cvx + AGMCORE_host_sep{ + AGMCORE_is_cmyk_sep + /Name cvx + /AGMCORE_IsSeparationAProcessColor load/exec cvx + /not cvx/and cvx + }{ + Name inRip_spot_has_ink not + }ifelse + [ + /pop cvx 1 + ]cvx/if cvx + /setcustomcolor cvx + ]cvx bdf + }{ + /TintProc{setcolor}bdf + [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt + }ifelse + }ifelse + }ifelse + }ifelse + }ifelse + set_crd + setsepcolor + end +}def +/additive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 + 0 1 numarrays 1 sub + { + 1 exch add/index cvx + c1/get cvx/mul cvx + }for + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/subtractive_blend +{ + 3 dict begin + /numarrays xdf + /numcolors xdf + 0 1 numcolors 1 sub + { + /c1 xdf + 1 1 + 0 1 numarrays 1 sub + { + 1 3 3 -1 roll add/index cvx + c1/get cvx/sub cvx/mul cvx + }for + /sub cvx + numarrays 1 add 1/roll cvx + }for + numarrays[/pop cvx]cvx/repeat cvx + end +}def +/exec_tint_transform +{ + /TintProc[ + /TintTransform cvx/setcolor cvx + ]cvx bdf + MappedCSA setcolorspace_opt +}bdf +/devn_makecustomcolor +{ + 2 dict begin + /names_index xdf + /Names xdf + 1 1 1 1 Names names_index get findcmykcustomcolor + /devicen_tints AGMCORE_gget names_index get setcustomcolor + Names length{pop}repeat + end +}bdf +/setdevicencolorspace +{ + dup/AliasedColorants known{false}{true}ifelse + current_spot_alias and{ + 7 dict begin + /names_index 0 def + dup/names_len exch/Names get length def + /new_names names_len array def + /new_LookupTables names_len array def + /alias_cnt 0 def + dup/Names get + { + dup map_alias{ + exch pop + dup/ColorLookup known{ + dup begin + new_LookupTables names_index ColorLookup put + end + }{ + dup/Components known{ + dup begin + new_LookupTables names_index Components put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + new_names names_index 3 -1 roll/Name get put + /alias_cnt alias_cnt 1 add def + }{ + /name xdf + new_names names_index name put + dup/LookupTables known{ + dup begin + new_LookupTables names_index LookupTables names_index get put + end + }{ + dup begin + new_LookupTables names_index[null null null null]put + end + }ifelse + }ifelse + /names_index names_index 1 add def + }forall + alias_cnt 0 gt{ + /AliasedColorants true def + /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def + 0 1 names_len 1 sub{ + /names_index xdf + new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{ + /AliasedColorants false def + exit + }{ + new_LookupTables names_index get 0 get null eq{ + dup/Names get names_index get/name xdf + name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq + or or or not{ + /AliasedColorants false def + exit + }if + }if + }ifelse + }for + lut_entry_len 1 eq{ + /AliasedColorants false def + }if + AliasedColorants{ + dup begin + /Names new_names def + /LookupTables new_LookupTables def + /AliasedColorants true def + /NComponents lut_entry_len def + /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def + /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def + currentdict/TTTablesIdx known not{ + /TTTablesIdx -1 def + }if + end + }if + }if + end + }if + dup/devicen_colorspace_dict exch AGMCORE_gput + begin + currentdict/AliasedColorants known{ + AliasedColorants + }{ + false + }ifelse + dup not{ + CSA map_csa + }if + /TintTransform load type/nulltype eq or{ + /TintTransform[ + 0 1 Names length 1 sub + { + /TTTablesIdx TTTablesIdx 1 add def + dup LookupTables exch get dup 0 get null eq + { + 1 index + Names exch get + dup(Cyan)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0 0 0 + } + { + dup(Magenta)eq + { + pop exch + LookupTables length exch sub + /index cvx + 0/exch cvx 0 0 + }{ + (Yellow)eq + { + exch + LookupTables length exch sub + /index cvx + 0 0 3 -1/roll cvx 0 + }{ + exch + LookupTables length exch sub + /index cvx + 0 0 0 4 -1/roll cvx + }ifelse + }ifelse + }ifelse + 5 -1/roll cvx/astore cvx + }{ + dup length 1 sub + LookupTables length 4 -1 roll sub 1 add + /index cvx/mul cvx/round cvx/cvi cvx/get cvx + }ifelse + Names length TTTablesIdx add 1 add 1/roll cvx + }for + Names length[/pop cvx]cvx/repeat cvx + NComponents Names length + TintMethod/Subtractive eq + { + subtractive_blend + }{ + additive_blend + }ifelse + ]cvx bdf + }if + AGMCORE_host_sep{ + Names convert_to_process{ + exec_tint_transform + } + { + currentdict/AliasedColorants known{ + AliasedColorants not + }{ + false + }ifelse + 5 dict begin + /AvoidAliasedColorants xdf + /painted? false def + /names_index 0 def + /names_len Names length def + AvoidAliasedColorants{ + /currentspotalias current_spot_alias def + false set_spot_alias + }if + Names{ + AGMCORE_is_cmyk_sep{ + dup(Cyan)eq AGMCORE_cyan_plate and exch + dup(Magenta)eq AGMCORE_magenta_plate and exch + dup(Yellow)eq AGMCORE_yellow_plate and exch + (Black)eq AGMCORE_black_plate and or or or{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + }if + painted?{exit}if + }{ + 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + Names names_index/devn_makecustomcolor cvx + ]cvx ddf + /painted? true def + exit + }if + }ifelse + /names_index names_index 1 add def + }forall + AvoidAliasedColorants{ + currentspotalias set_spot_alias + }if + painted?{ + /devicen_colorspace_dict AGMCORE_gget/names_index names_index put + }{ + /devicen_colorspace_dict AGMCORE_gget/TintProc[ + names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx + 0 0 0 0/setcmykcolor cvx + ]cvx ddf + }ifelse + end + }ifelse + } + { + AGMCORE_in_rip_sep{ + Names convert_to_process not + }{ + level3 + }ifelse + { + [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt + /TintProc level3 not AGMCORE_in_rip_sep and{ + [ + Names/length cvx[/pop cvx]cvx/repeat cvx + ]cvx bdf + }{ + {setcolor}bdf + }ifelse + }{ + exec_tint_transform + }ifelse + }ifelse + set_crd + /AliasedColorants false def + end +}def +/setindexedcolorspace +{ + dup/indexed_colorspace_dict exch AGMCORE_gput + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + currentdict devncs + }{ + 1 currentdict sepcs + }ifelse + AGMCORE_host_sep{ + 4 dict begin + /compCnt/Names where{pop Names length}{1}ifelse def + /NewLookup HiVal 1 add string def + 0 1 HiVal{ + /tableIndex xdf + Lookup dup type/stringtype eq{ + compCnt tableIndex map_index + }{ + exec + }ifelse + /Names where{ + pop setdevicencolor + }{ + setsepcolor + }ifelse + currentgray + tableIndex exch + 255 mul cvi + NewLookup 3 1 roll put + }for + [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt + end + }{ + level3 + { + currentdict/Names known{ + [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt + }{ + [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt + }ifelse + }{ + [/Indexed MappedCSA HiVal + [ + currentdict/Names known{ + Lookup dup type/stringtype eq + {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx} + {/exec cvx}ifelse + /TintTransform load/exec cvx + }{ + Lookup dup type/stringtype eq + {/exch cvx/get cvx 255/div cvx} + {/exec cvx}ifelse + CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx + }ifelse + ]cvx + ]setcolorspace_opt + }ifelse + }ifelse + end + set_crd + } + { + CSA map_csa + AGMCORE_host_sep level2 not and{ + 0 0 0 0 setcmykcolor + }{ + [/Indexed MappedCSA + level2 not has_color not and{ + dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{ + pop[/DeviceGray] + }if + HiVal GrayLookup + }{ + HiVal + currentdict/RangeArray known{ + { + /indexed_colorspace_dict AGMCORE_gget begin + Lookup exch + dup HiVal gt{ + pop HiVal + }if + NComponents mul NComponents getinterval{}forall + NComponents 1 sub -1 0{ + RangeArray exch 2 mul 2 getinterval aload pop map255_to_range + NComponents 1 roll + }for + end + }bind + }{ + Lookup + }ifelse + }ifelse + ]setcolorspace_opt + set_crd + }ifelse + }ifelse + end +}def +/setindexedcolor +{ + AGMCORE_host_sep{ + /indexed_colorspace_dict AGMCORE_gget + begin + currentdict/CSDBase known{ + CSDBase/CSD get_res begin + currentdict/Names known{ + map_indexed_devn + devn + } + { + Lookup 1 3 -1 roll map_index + sep + }ifelse + end + }{ + Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll + map_index + MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse + }ifelse + end + }{ + level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{ + /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin + map_indexed_devn + devn + end + } + { + setcolor + }ifelse + }ifelse +}def +/ignoreimagedata +{ + currentoverprint not{ + gsave + dup clonedict begin + 1 setgray + /Decode[0 1]def + /DataSourcedef + /MultipleDataSources false def + /BitsPerComponent 8 def + currentdict end + systemdict/image gx + grestore + }if + consumeimagedata +}def +/add_res +{ + dup/CSD eq{ + pop + //Adobe_AGM_Core begin + /AGMCORE_CSD_cache load 3 1 roll put + end + }{ + defineresource pop + }ifelse +}def +/del_res +{ + { + aload pop exch + dup/CSD eq{ + pop + {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall + }{ + exch + {1 index undefineresource}forall + pop + }ifelse + }forall +}def +/get_res +{ + dup/CSD eq{ + pop + dup type dup/nametype eq exch/stringtype eq or{ + AGMCORE_CSD_cache exch get + }if + }{ + findresource + }ifelse +}def +/get_csa_by_name +{ + dup type dup/nametype eq exch/stringtype eq or{ + /CSA get_res + }if +}def +/paintproc_buf_init +{ + /count get 0 0 put +}def +/paintproc_buf_next +{ + dup/count get dup 0 get + dup 3 1 roll + 1 add 0 xpt + get +}def +/cachepaintproc_compress +{ + 5 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + /string_size 16000 def + /readbuffer string_size string def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + /LZWFilter + { + exch + dup length 0 eq{ + pop + }{ + ppdict dup length 1 sub 3 -1 roll put + }ifelse + {string_size}{0}ifelse string + }/LZWEncode filter def + { + ReadFilter readbuffer readstring + exch LZWFilter exch writestring + not{exit}if + }loop + LZWFilter closefile + ppdict + end +}def +/cachepaintproc +{ + 2 dict begin + currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def + /ppdict 20 dict def + currentglobal true setglobal + ppdict 1 array dup 0 1 put/count xpt + setglobal + { + ReadFilter 16000 string readstring exch + ppdict dup length 1 sub 3 -1 roll put + not{exit}if + }loop + ppdict dup dup length 1 sub()put + end +}def +/make_pattern +{ + exch clonedict exch + dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform + exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub + exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub + matrix translate exch matrix concatmatrix + 1 index begin + BBox 0 get XStep div cvi XStep mul/xshift exch neg def + BBox 1 get YStep div cvi YStep mul/yshift exch neg def + BBox 0 get xshift add + BBox 1 get yshift add + BBox 2 get xshift add + BBox 3 get yshift add + 4 array astore + /BBox exch def + [xshift yshift/translate load null/exec load]dup + 3/PaintProc load put cvx/PaintProc exch def + end + gsave 0 setgray + makepattern + grestore +}def +/set_pattern +{ + dup/PatternType get 1 eq{ + dup/PaintType get 1 eq{ + currentoverprint sop[/DeviceGray]setcolorspace 0 setgray + }if + }if + setpattern +}def +/setcolorspace_opt +{ + dup currentcolorspace eq{pop}{setcolorspace}ifelse +}def +/updatecolorrendering +{ + currentcolorrendering/RenderingIntent known{ + currentcolorrendering/RenderingIntent get + } + { + Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd AGMCORE_gget dup null eq + } + { + Intent/Saturation eq + { + /saturation_crd AGMCORE_gget dup null eq + } + { + /perceptual_crd AGMCORE_gget dup null eq + }ifelse + }ifelse + }ifelse + { + pop null + } + { + /RenderingIntent known{null}{Intent}ifelse + }ifelse + }ifelse + Intent ne{ + Intent/ColorRendering{findresource}stopped + { + pop pop systemdict/findcolorrendering known + { + Intent findcolorrendering + { + /ColorRendering findresource true exch + } + { + /ColorRendering findresource + product(Xerox Phaser 5400)ne + exch + }ifelse + dup Intent/AbsoluteColorimetric eq + { + /absolute_colorimetric_crd exch AGMCORE_gput + } + { + Intent/RelativeColorimetric eq + { + /relative_colorimetric_crd exch AGMCORE_gput + } + { + Intent/Saturation eq + { + /saturation_crd exch AGMCORE_gput + } + { + Intent/Perceptual eq + { + /perceptual_crd exch AGMCORE_gput + } + { + pop + }ifelse + }ifelse + }ifelse + }ifelse + 1 index{exch}{pop}ifelse + } + {false}ifelse + } + {true}ifelse + { + dup begin + currentdict/TransformPQR known{ + currentdict/TransformPQR get aload pop + 3{{}eq 3 1 roll}repeat or or + } + {true}ifelse + currentdict/MatrixPQR known{ + currentdict/MatrixPQR get aload pop + 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll + 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq + and and and and and and and and + } + {true}ifelse + end + or + { + clonedict begin + /TransformPQR[ + {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div + 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind + {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div + 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind + {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div + 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind + ]def + /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def + /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def + currentdict end + }if + setcolorrendering_opt + }if + }if +}def +/set_crd +{ + AGMCORE_host_sep not level2 and{ + currentdict/ColorRendering known{ + ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if + }{ + currentdict/Intent known{ + updatecolorrendering + }if + }ifelse + currentcolorspace dup type/arraytype eq + {0 get}if + /DeviceRGB eq + { + currentdict/UCR known + {/UCR}{/AGMCORE_currentucr}ifelse + load setundercolorremoval + currentdict/BG known + {/BG}{/AGMCORE_currentbg}ifelse + load setblackgeneration + }if + }if +}def +/set_ucrbg +{ + dup null eq {pop /AGMCORE_currentbg load}{/Procedure get_res}ifelse + dup currentblackgeneration eq {pop}{setblackgeneration}ifelse + dup null eq {pop /AGMCORE_currentucr load}{/Procedure get_res}ifelse + dup currentundercolorremoval eq {pop}{setundercolorremoval}ifelse +}def +/setcolorrendering_opt +{ + dup currentcolorrendering eq{ + pop + }{ + product(HP Color LaserJet 2605)anchorsearch{ + pop pop pop + }{ + pop + clonedict + begin + /Intent Intent def + currentdict + end + setcolorrendering + }ifelse + }ifelse +}def +/cpaint_gcomp +{ + convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not + { + (%end_cpaint_gcomp)flushinput + }if +}def +/cpaint_gsep +{ + //Adobe_AGM_Core/AGMCORE_ConvertToProcess get + { + (%end_cpaint_gsep)flushinput + }if +}def +/cpaint_gend +{np}def +/T1_path +{ + currentfile token pop currentfile token pop mo + { + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 exch rlineto + currentfile token pop dup type/stringtype eq + {pop exit}if + 0 rlineto + }loop +}def +/T1_gsave + level3 + {/clipsave} + {/gsave}ifelse + load def +/T1_grestore + level3 + {/cliprestore} + {/grestore}ifelse + load def +/set_spot_alias_ary +{ + dup inherit_aliases + //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf +}def +/set_spot_normalization_ary +{ + dup inherit_aliases + dup length + /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if + array + //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf + /AGMCORE_SpotAliasAry where{ + pop + AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval + AGMCORE_SpotAliasAry length + }{0}ifelse + AGMCORE_SpotAliasAry2 3 1 roll exch putinterval + true set_spot_alias +}def +/inherit_aliases +{ + {dup/Name get map_alias{/CSD put}{pop}ifelse}forall +}def +/set_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias 3 -1 roll put + }{ + pop + }ifelse +}def +/current_spot_alias +{ + /AGMCORE_SpotAliasAry2 where{ + /AGMCORE_current_spot_alias get + }{ + false + }ifelse +}def +/map_alias +{ + /AGMCORE_SpotAliasAry2 where{ + begin + /AGMCORE_name xdf + false + AGMCORE_SpotAliasAry2{ + dup/Name get AGMCORE_name eq{ + /CSD get/CSD get_res + exch pop true + exit + }{ + pop + }ifelse + }forall + end + }{ + pop false + }ifelse +}bdf +/spot_alias +{ + true set_spot_alias + /AGMCORE_&setcustomcolor AGMCORE_key_known not{ + //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put + }if + /customcolor_tint 1 AGMCORE_gput + //Adobe_AGM_Core begin + /setcustomcolor + { + //Adobe_AGM_Core begin + dup/customcolor_tint exch AGMCORE_gput + 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not + current_spot_alias and{1 index 4 get map_alias}{false}ifelse + { + false set_spot_alias + /sep_colorspace_dict AGMCORE_gget null ne + {/sep_colorspace_dict AGMCORE_gget/ForeignContent known not}{false}ifelse + 3 1 roll 2 index{ + exch pop/sep_tint AGMCORE_gget exch + }if + mark 3 1 roll + setsepcolorspace + counttomark 0 ne{ + setsepcolor + }if + pop + not{/sep_tint 1.0 AGMCORE_gput/sep_colorspace_dict AGMCORE_gget/ForeignContent true put}if + pop + true set_spot_alias + }{ + AGMCORE_&setcustomcolor + }ifelse + end + }bdf + end +}def +/begin_feature +{ + Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put + count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put + {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if +}def +/end_feature +{ + 2 dict begin + /spd/setpagedevice load def + /setpagedevice{get_gstate spd set_gstate}def + stopped{$error/newerror false put}if + end + count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse + countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse + {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if +}def +/set_negative +{ + //Adobe_AGM_Core begin + /AGMCORE_inverting exch def + level2{ + currentpagedevice/NegativePrint known AGMCORE_distilling not and{ + currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{ + true begin_feature true{ + <>setpagedevice + }end_feature + }if + /AGMCORE_inverting false def + }if + }if + AGMCORE_inverting{ + [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer + AGMCORE_distilling{ + erasepage + }{ + gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse + /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore + }ifelse + }if + end +}def +/lw_save_restore_override{ + /md where{ + pop + md begin + initializepage + /initializepage{}def + /pmSVsetup{}def + /endp{}def + /pse{}def + /psb{}def + /orig_showpage where + {pop} + {/orig_showpage/showpage load def} + ifelse + /showpage{orig_showpage gR}def + end + }if +}def +/pscript_showpage_override{ + /NTPSOct95 where + { + begin + showpage + save + /showpage/restore load def + /restore{exch pop}def + end + }if +}def +/driver_media_override +{ + /md where{ + pop + md/initializepage known{ + md/initializepage{}put + }if + md/rC known{ + md/rC{4{pop}repeat}put + }if + }if + /mysetup where{ + /mysetup[1 0 0 1 0 0]put + }if + Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put + level2 + {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if +}def +/capture_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put + }if + }if +}def +/restore_mysetup +{ + /Pscript_Win_Data where{ + pop + Pscript_Win_Data/mysetup known{ + Adobe_AGM_Core/save_mysetup known{ + Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put + Adobe_AGM_Core/save_mysetup undef + }if + }if + }if +}def +/driver_check_media_override +{ + /PrepsDict where + {pop} + { + Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne + Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq + { + Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and + Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and + }if + { + Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix + }if + }ifelse +}def +AGMCORE_err_strings begin + /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def + /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def + /AGMCORE_invalid_color_space(This job contains an invalid color space. )def +end +/set_def_ht +{AGMCORE_def_ht sethalftone}def +/set_def_flat +{AGMCORE_Default_flatness setflat}def +end +systemdict/setpacking known +{setpacking}if +%%EndResource +%%BeginResource: procset Adobe_CoolType_Core 2.31 0 +%%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. +%%Version: 2.31 0 +10 dict begin +/Adobe_CoolType_Passthru currentdict def +/Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def +Adobe_CoolType_Core_Defined + {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} +if +userdict/Adobe_CoolType_Core 70 dict dup begin put +/Adobe_CoolType_Version 2.31 def +/Level2? + systemdict/languagelevel known dup + {pop systemdict/languagelevel get 2 ge} + if def +Level2? not + { + /currentglobal false def + /setglobal/pop load def + /gcheck{pop false}bind def + /currentpacking false def + /setpacking/pop load def + /SharedFontDirectory 0 dict def + } +if +currentpacking +true setpacking +currentglobal false setglobal +userdict/Adobe_CoolType_Data 2 copy known not + {2 copy 10 dict put} +if +get + begin + /@opStackCountByLevel 32 dict def + /@opStackLevel 0 def + /@dictStackCountByLevel 32 dict def + /@dictStackLevel 0 def + end +setglobal +currentglobal true setglobal +userdict/Adobe_CoolType_GVMFonts known not + {userdict/Adobe_CoolType_GVMFonts 10 dict put} +if +setglobal +currentglobal false setglobal +userdict/Adobe_CoolType_LVMFonts known not + {userdict/Adobe_CoolType_LVMFonts 10 dict put} +if +setglobal +/ct_VMDictPut + { + dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse + 3 1 roll put + }bind def +/ct_VMDictUndef + { + dup Adobe_CoolType_GVMFonts exch known + {Adobe_CoolType_GVMFonts exch undef} + { + dup Adobe_CoolType_LVMFonts exch known + {Adobe_CoolType_LVMFonts exch undef} + {pop} + ifelse + }ifelse + }bind def +/ct_str1 1 string def +/ct_xshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + _ct_x _ct_y moveto + 0 + rmoveto + } + ifelse + /_ct_i _ct_i 1 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/ct_yshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + _ct_x _ct_y moveto + 0 exch + rmoveto + } + ifelse + /_ct_i _ct_i 1 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/ct_xyshow +{ + /_ct_na exch def + /_ct_i 0 def + currentpoint + /_ct_y exch def + /_ct_x exch def + { + pop pop + ct_str1 exch 0 exch put + ct_str1 show + {_ct_na _ct_i get}stopped + {pop pop} + { + {_ct_na _ct_i 1 add get}stopped + {pop pop pop} + { + _ct_x _ct_y moveto + rmoveto + } + ifelse + } + ifelse + /_ct_i _ct_i 2 add def + currentpoint + /_ct_y exch def + /_ct_x exch def + } + exch + @cshow +}bind def +/xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def +/ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def +/xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def +currentglobal true setglobal +/ct_T3Defs +{ +/BuildChar +{ + 1 index/Encoding get exch get + 1 index/BuildGlyph get exec +}bind def +/BuildGlyph +{ + exch begin + GlyphProcs exch get exec + end +}bind def +}bind def +setglobal +/@_SaveStackLevels + { + Adobe_CoolType_Data + begin + /@vmState currentglobal def false setglobal + @opStackCountByLevel + @opStackLevel + 2 copy known not + { + 2 copy + 3 dict dup/args + 7 index + 5 add array put + put get + } + { + get dup/args get dup length 3 index lt + { + dup length 5 add array exch + 1 index exch 0 exch putinterval + 1 index exch/args exch put + } + {pop} + ifelse + } + ifelse + begin + count 1 sub + 1 index lt + {pop count} + if + dup/argCount exch def + dup 0 gt + { + args exch 0 exch getinterval + astore pop + } + {pop} + ifelse + count + /restCount exch def + end + /@opStackLevel @opStackLevel 1 add def + countdictstack 1 sub + @dictStackCountByLevel exch @dictStackLevel exch put + /@dictStackLevel @dictStackLevel 1 add def + @vmState setglobal + end + }bind def +/@_RestoreStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + @opStackCountByLevel @opStackLevel get + begin + count restCount sub dup 0 gt + {{pop}repeat} + {pop} + ifelse + args 0 argCount getinterval{}forall + end + /@dictStackLevel @dictStackLevel 1 sub def + @dictStackCountByLevel @dictStackLevel get + end + countdictstack exch sub dup 0 gt + {{end}repeat} + {pop} + ifelse + }bind def +/@_PopStackLevels + { + Adobe_CoolType_Data + begin + /@opStackLevel @opStackLevel 1 sub def + /@dictStackLevel @dictStackLevel 1 sub def + end + }bind def +/@Raise + { + exch cvx exch errordict exch get exec + stop + }bind def +/@ReRaise + { + cvx $error/errorname get errordict exch get exec + stop + }bind def +/@Stopped + { + 0 @#Stopped + }bind def +/@#Stopped + { + @_SaveStackLevels + stopped + {@_RestoreStackLevels true} + {@_PopStackLevels false} + ifelse + }bind def +/@Arg + { + Adobe_CoolType_Data + begin + @opStackCountByLevel @opStackLevel 1 sub get + begin + args exch + argCount 1 sub exch sub get + end + end + }bind def +currentglobal true setglobal +/CTHasResourceForAllBug + Level2? + { + 1 dict dup + /@shouldNotDisappearDictValue true def + Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put + begin + count @_SaveStackLevels + {(*){pop stop}128 string/Category resourceforall} + stopped pop + @_RestoreStackLevels + currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll + { + /@shouldNotDisappearDictValue known + { + { + end + currentdict 1 index eq + {pop exit} + if + } + loop + } + if + } + { + pop + end + } + ifelse + } + {false} + ifelse + def +true setglobal +/CTHasResourceStatusBug + Level2? + { + mark + {/steveamerige/Category resourcestatus} + stopped + {cleartomark true} + {cleartomark currentglobal not} + ifelse + } + {false} + ifelse + def +setglobal +/CTResourceStatus + { + mark 3 1 roll + /Category findresource + begin + ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec + {cleartomark false} + {{3 2 roll pop true}{cleartomark false}ifelse} + ifelse + end + }bind def +/CTWorkAroundBugs + { + Level2? + { + /cid_PreLoad/ProcSet resourcestatus + { + pop pop + currentglobal + mark + { + (*) + { + dup/CMap CTHasResourceStatusBug + {CTResourceStatus} + {resourcestatus} + ifelse + { + pop dup 0 eq exch 1 eq or + { + dup/CMap findresource gcheck setglobal + /CMap undefineresource + } + { + pop CTHasResourceForAllBug + {exit} + {stop} + ifelse + } + ifelse + } + {pop} + ifelse + } + 128 string/CMap resourceforall + } + stopped + {cleartomark} + stopped pop + setglobal + } + if + } + if + }bind def +/ds + { + Adobe_CoolType_Core + begin + CTWorkAroundBugs + /mo/moveto load def + /nf/newencodedfont load def + /msf{makefont setfont}bind def + /uf{dup undefinefont ct_VMDictUndef}bind def + /ur/undefineresource load def + /chp/charpath load def + /awsh/awidthshow load def + /wsh/widthshow load def + /ash/ashow load def + /@xshow/xshow load def + /@yshow/yshow load def + /@xyshow/xyshow load def + /@cshow/cshow load def + /sh/show load def + /rp/repeat load def + /.n/.notdef def + end + currentglobal false setglobal + userdict/Adobe_CoolType_Data 2 copy known not + {2 copy 10 dict put} + if + get + begin + /AddWidths? false def + /CC 0 def + /charcode 2 string def + /@opStackCountByLevel 32 dict def + /@opStackLevel 0 def + /@dictStackCountByLevel 32 dict def + /@dictStackLevel 0 def + /InVMFontsByCMap 10 dict def + /InVMDeepCopiedFonts 10 dict def + end + setglobal + }bind def +/dt + { + currentdict Adobe_CoolType_Core eq + {end} + if + }bind def +/ps + { + Adobe_CoolType_Core begin + Adobe_CoolType_GVMFonts begin + Adobe_CoolType_LVMFonts begin + SharedFontDirectory begin + }bind def +/pt + { + end + end + end + end + }bind def +/unload + { + systemdict/languagelevel known + { + systemdict/languagelevel get 2 ge + { + userdict/Adobe_CoolType_Core 2 copy known + {undef} + {pop pop} + ifelse + } + if + } + if + }bind def +/ndf + { + 1 index where + {pop pop pop} + {dup xcheck{bind}if def} + ifelse + }def +/findfont systemdict + begin + userdict + begin + /globaldict where{/globaldict get begin}if + dup where pop exch get + /globaldict where{pop end}if + end + end +Adobe_CoolType_Core_Defined + {/systemfindfont exch def} + { + /findfont 1 index def + /systemfindfont exch def + } +ifelse +/undefinefont + {pop}ndf +/copyfont + { + currentglobal 3 1 roll + 1 index gcheck setglobal + dup null eq{0}{dup length}ifelse + 2 index length add 1 add dict + begin + exch + { + 1 index/FID eq + {pop pop} + {def} + ifelse + } + forall + dup null eq + {pop} + {{def}forall} + ifelse + currentdict + end + exch setglobal + }bind def +/copyarray + { + currentglobal exch + dup gcheck setglobal + dup length array copy + exch setglobal + }bind def +/newencodedfont + { + currentglobal + { + SharedFontDirectory 3 index known + {SharedFontDirectory 3 index get/FontReferenced known} + {false} + ifelse + } + { + FontDirectory 3 index known + {FontDirectory 3 index get/FontReferenced known} + { + SharedFontDirectory 3 index known + {SharedFontDirectory 3 index get/FontReferenced known} + {false} + ifelse + } + ifelse + } + ifelse + dup + { + 3 index findfont/FontReferenced get + 2 index dup type/nametype eq + {findfont} + if ne + {pop false} + if + } + if + dup + { + 1 index dup type/nametype eq + {findfont} + if + dup/CharStrings known + { + /CharStrings get length + 4 index findfont/CharStrings get length + ne + { + pop false + } + if + } + {pop} + ifelse + } + if + { + pop + 1 index findfont + /Encoding get exch + 0 1 255 + {2 copy get 3 index 3 1 roll put} + for + pop pop pop + } + { + currentglobal + 4 1 roll + dup type/nametype eq + {findfont} + if + dup gcheck setglobal + dup dup maxlength 2 add dict + begin + exch + { + 1 index/FID ne + 2 index/Encoding ne and + {def} + {pop pop} + ifelse + } + forall + /FontReferenced exch def + /Encoding exch dup length array copy def + /FontName 1 index dup type/stringtype eq{cvn}if def dup + currentdict + end + definefont ct_VMDictPut + setglobal + } + ifelse + }bind def +/SetSubstituteStrategy + { + $SubstituteFont + begin + dup type/dicttype ne + {0 dict} + if + currentdict/$Strategies known + { + exch $Strategies exch + 2 copy known + { + get + 2 copy maxlength exch maxlength add dict + begin + {def}forall + {def}forall + currentdict + dup/$Init known + {dup/$Init get exec} + if + end + /$Strategy exch def + } + {pop pop pop} + ifelse + } + {pop pop} + ifelse + end + }bind def +/scff + { + $SubstituteFont + begin + dup type/stringtype eq + {dup length exch} + {null} + ifelse + /$sname exch def + /$slen exch def + /$inVMIndex + $sname null eq + { + 1 index $str cvs + dup length $slen sub $slen getinterval cvn + } + {$sname} + ifelse def + end + {findfont} + @Stopped + { + dup length 8 add string exch + 1 index 0(BadFont:)putinterval + 1 index exch 8 exch dup length string cvs putinterval cvn + {findfont} + @Stopped + {pop/Courier findfont} + if + } + if + $SubstituteFont + begin + /$sname null def + /$slen 0 def + /$inVMIndex null def + end + }bind def +/isWidthsOnlyFont + { + dup/WidthsOnly known + {pop pop true} + { + dup/FDepVector known + {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} + { + dup/FDArray known + {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} + {pop} + ifelse + } + ifelse + } + ifelse + }bind def +/ct_StyleDicts 4 dict dup begin + /Adobe-Japan1 4 dict dup begin + Level2? + { + /Serif + /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiMin-W3} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiMin-W3/CIDFont resourcestatus + {pop pop/HeiseiMin-W3} + {/Ryumin-Light} + ifelse + } + {/Ryumin-Light} + ifelse + } + ifelse + def + /SansSerif + /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiKakuGo-W5} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiKakuGo-W5/CIDFont resourcestatus + {pop pop/HeiseiKakuGo-W5} + {/GothicBBB-Medium} + ifelse + } + {/GothicBBB-Medium} + ifelse + } + ifelse + def + /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus + {pop pop/HeiseiMaruGo-W4} + { + /CIDFont/Category resourcestatus + { + pop pop + /HeiseiMaruGo-W4/CIDFont resourcestatus + {pop pop/HeiseiMaruGo-W4} + { + /Jun101-Light-RKSJ-H/Font resourcestatus + {pop pop/Jun101-Light} + {SansSerif} + ifelse + } + ifelse + } + { + /Jun101-Light-RKSJ-H/Font resourcestatus + {pop pop/Jun101-Light} + {SansSerif} + ifelse + } + ifelse + } + ifelse + /RoundSansSerif exch def + /Default Serif def + } + { + /Serif/Ryumin-Light def + /SansSerif/GothicBBB-Medium def + { + (fonts/Jun101-Light-83pv-RKSJ-H)status + }stopped + {pop}{ + {pop pop pop pop/Jun101-Light} + {SansSerif} + ifelse + /RoundSansSerif exch def + }ifelse + /Default Serif def + } + ifelse + end + def + /Adobe-Korea1 4 dict dup begin + /Serif/HYSMyeongJo-Medium def + /SansSerif/HYGoThic-Medium def + /RoundSansSerif SansSerif def + /Default Serif def + end + def + /Adobe-GB1 4 dict dup begin + /Serif/STSong-Light def + /SansSerif/STHeiti-Regular def + /RoundSansSerif SansSerif def + /Default Serif def + end + def + /Adobe-CNS1 4 dict dup begin + /Serif/MKai-Medium def + /SansSerif/MHei-Medium def + /RoundSansSerif SansSerif def + /Default Serif def + end + def +end +def +Level2?{currentglobal true setglobal}if +/ct_BoldRomanWidthProc + { + stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth + 0 0 + }bind def +/ct_Type0WidthProc + { + dup stringwidth 0 0 moveto + 2 index true charpath pathbbox + 0 -1 + 7 index 2 div .88 + setcachedevice2 + pop + 0 0 + }bind def +/ct_Type0WMode1WidthProc + { + dup stringwidth + pop 2 div neg -0.88 + 2 copy + moveto + 0 -1 + 5 -1 roll true charpath pathbbox + setcachedevice + }bind def +/cHexEncoding +[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 +/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 +/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 +/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B +/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E +/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 +/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 +/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 +/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA +/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD +/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 +/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 +/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 +/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def +/ct_BoldBaseFont + 11 dict begin + /FontType 3 def + /FontMatrix[1 0 0 1 0 0]def + /FontBBox[0 0 1 1]def + /Encoding cHexEncoding def + /_setwidthProc/ct_BoldRomanWidthProc load def + /_bcstr1 1 string def + /BuildChar + { + exch begin + _basefont setfont + _bcstr1 dup 0 4 -1 roll put + dup + _setwidthProc + 3 copy + moveto + show + _basefonto setfont + moveto + show + end + }bind def + currentdict + end +def +systemdict/composefont known +{ +/ct_DefineIdentity-H +{ + /Identity-H/CMap resourcestatus + { + pop pop + } + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CIDSystemInfo 3 dict dup begin + /Registry(Adobe)def + /Ordering(Identity)def + /Supplement 0 def + end def + /CMapName/Identity-H def + /CMapVersion 1.000 def + /CMapType 1 def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse +} +def +/ct_BoldBaseCIDFont + 11 dict begin + /CIDFontType 1 def + /CIDFontName/ct_BoldBaseCIDFont def + /FontMatrix[1 0 0 1 0 0]def + /FontBBox[0 0 1 1]def + /_setwidthProc/ct_Type0WidthProc load def + /_bcstr2 2 string def + /BuildGlyph + { + exch begin + _basefont setfont + _bcstr2 1 2 index 256 mod put + _bcstr2 0 3 -1 roll 256 idiv put + _bcstr2 dup _setwidthProc + 3 copy + moveto + show + _basefonto setfont + moveto + show + end + }bind def + currentdict + end +def +}if +Level2?{setglobal}if +/ct_CopyFont{ + { + 1 index/FID ne 2 index/UniqueID ne and + {def}{pop pop}ifelse + }forall +}bind def +/ct_Type0CopyFont +{ + exch + dup length dict + begin + ct_CopyFont + [ + exch + FDepVector + { + dup/FontType get 0 eq + { + 1 index ct_Type0CopyFont + /_ctType0 exch definefont + } + { + /_ctBaseFont exch + 2 index exec + } + ifelse + exch + } + forall + pop + ] + /FDepVector exch def + currentdict + end +}bind def +/ct_MakeBoldFont +{ + dup/ct_SyntheticBold known + { + dup length 3 add dict begin + ct_CopyFont + /ct_StrokeWidth .03 0 FontMatrix idtransform pop def + /ct_SyntheticBold true def + currentdict + end + definefont + } + { + dup dup length 3 add dict + begin + ct_CopyFont + /PaintType 2 def + /StrokeWidth .03 0 FontMatrix idtransform pop def + /dummybold currentdict + end + definefont + dup/FontType get dup 9 ge exch 11 le and + { + ct_BoldBaseCIDFont + dup length 3 add dict copy begin + dup/CIDSystemInfo get/CIDSystemInfo exch def + ct_DefineIdentity-H + /_Type0Identity/Identity-H 3 -1 roll[exch]composefont + /_basefont exch def + /_Type0Identity/Identity-H 3 -1 roll[exch]composefont + /_basefonto exch def + currentdict + end + /CIDFont defineresource + } + { + ct_BoldBaseFont + dup length 3 add dict copy begin + /_basefont exch def + /_basefonto exch def + currentdict + end + definefont + } + ifelse + } + ifelse +}bind def +/ct_MakeBold{ + 1 index + 1 index + findfont + currentglobal 5 1 roll + dup gcheck setglobal + dup + /FontType get 0 eq + { + dup/WMode known{dup/WMode get 1 eq}{false}ifelse + version length 4 ge + and + {version 0 4 getinterval cvi 2015 ge} + {true} + ifelse + {/ct_Type0WidthProc} + {/ct_Type0WMode1WidthProc} + ifelse + ct_BoldBaseFont/_setwidthProc 3 -1 roll load put + {ct_MakeBoldFont}ct_Type0CopyFont definefont + } + { + dup/_fauxfont known not 1 index/SubstMaster known not and + { + ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put + ct_MakeBoldFont + } + { + 2 index 2 index eq + {exch pop } + { + dup length dict begin + ct_CopyFont + currentdict + end + definefont + } + ifelse + } + ifelse + } + ifelse + pop pop pop + setglobal +}bind def +/?str1 256 string def +/?set + { + $SubstituteFont + begin + /$substituteFound false def + /$fontname 1 index def + /$doSmartSub false def + end + dup + findfont + $SubstituteFont + begin + $substituteFound + {false} + { + dup/FontName known + { + dup/FontName get $fontname eq + 1 index/DistillerFauxFont known not and + /currentdistillerparams where + {pop false 2 index isWidthsOnlyFont not and} + if + } + {false} + ifelse + } + ifelse + exch pop + /$doSmartSub true def + end + { + 5 1 roll pop pop pop pop + findfont + } + { + 1 index + findfont + dup/FontType get 3 eq + { + 6 1 roll pop pop pop pop pop false + } + {pop true} + ifelse + { + $SubstituteFont + begin + pop pop + /$styleArray 1 index def + /$regOrdering 2 index def + pop pop + 0 1 $styleArray length 1 sub + { + $styleArray exch get + ct_StyleDicts $regOrdering + 2 copy known + { + get + exch 2 copy known not + {pop/Default} + if + get + dup type/nametype eq + { + ?str1 cvs length dup 1 add exch + ?str1 exch(-)putinterval + exch dup length exch ?str1 exch 3 index exch putinterval + add ?str1 exch 0 exch getinterval cvn + } + { + pop pop/Unknown + } + ifelse + } + { + pop pop pop pop/Unknown + } + ifelse + } + for + end + findfont + }if + } + ifelse + currentglobal false setglobal 3 1 roll + null copyfont definefont pop + setglobal + }bind def +setpacking +userdict/$SubstituteFont 25 dict put +1 dict + begin + /SubstituteFont + dup $error exch 2 copy known + {get} + {pop pop{pop/Courier}bind} + ifelse def + /currentdistillerparams where dup + { + pop pop + currentdistillerparams/CannotEmbedFontPolicy 2 copy known + {get/Error eq} + {pop pop false} + ifelse + } + if not + { + countdictstack array dictstack 0 get + begin + userdict + begin + $SubstituteFont + begin + /$str 128 string def + /$fontpat 128 string def + /$slen 0 def + /$sname null def + /$match false def + /$fontname null def + /$substituteFound false def + /$inVMIndex null def + /$doSmartSub true def + /$depth 0 def + /$fontname null def + /$italicangle 26.5 def + /$dstack null def + /$Strategies 10 dict dup + begin + /$Type3Underprint + { + currentglobal exch false setglobal + 11 dict + begin + /UseFont exch + $WMode 0 ne + { + dup length dict copy + dup/WMode $WMode put + /UseFont exch definefont + } + if def + /FontName $fontname dup type/stringtype eq{cvn}if def + /FontType 3 def + /FontMatrix[.001 0 0 .001 0 0]def + /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def + /FontBBox[0 0 0 0]def + /CCInfo 7 dict dup + begin + /cc null def + /x 0 def + /y 0 def + end def + /BuildChar + { + exch + begin + CCInfo + begin + 1 string dup 0 3 index put exch pop + /cc exch def + UseFont 1000 scalefont setfont + cc stringwidth/y exch def/x exch def + x y setcharwidth + $SubstituteFont/$Strategy get/$Underprint get exec + 0 0 moveto cc show + x y moveto + end + end + }bind def + currentdict + end + exch setglobal + }bind def + /$GetaTint + 2 dict dup + begin + /$BuildFont + { + dup/WMode known + {dup/WMode get} + {0} + ifelse + /$WMode exch def + $fontname exch + dup/FontName known + { + dup/FontName get + dup type/stringtype eq{cvn}if + } + {/unnamedfont} + ifelse + exch + Adobe_CoolType_Data/InVMDeepCopiedFonts get + 1 index/FontName get known + { + pop + Adobe_CoolType_Data/InVMDeepCopiedFonts get + 1 index get + null copyfont + } + {$deepcopyfont} + ifelse + exch 1 index exch/FontBasedOn exch put + dup/FontName $fontname dup type/stringtype eq{cvn}if put + definefont + Adobe_CoolType_Data/InVMDeepCopiedFonts get + begin + dup/FontBasedOn get 1 index def + end + }bind def + /$Underprint + { + gsave + x abs y abs gt + {/y 1000 def} + {/x -1000 def 500 120 translate} + ifelse + Level2? + { + [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] + setcolorspace + } + {0 setgray} + ifelse + 10 setlinewidth + x .8 mul + [7 3] + { + y mul 8 div 120 sub x 10 div exch moveto + 0 y 4 div neg rlineto + dup 0 rlineto + 0 y 4 div rlineto + closepath + gsave + Level2? + {.2 setcolor} + {.8 setgray} + ifelse + fill grestore + stroke + } + forall + pop + grestore + }bind def + end def + /$Oblique + 1 dict dup + begin + /$BuildFont + { + currentglobal exch dup gcheck setglobal + null copyfont + begin + /FontBasedOn + currentdict/FontName known + { + FontName + dup type/stringtype eq{cvn}if + } + {/unnamedfont} + ifelse + def + /FontName $fontname dup type/stringtype eq{cvn}if def + /currentdistillerparams where + {pop} + { + /FontInfo currentdict/FontInfo known + {FontInfo null copyfont} + {2 dict} + ifelse + dup + begin + /ItalicAngle $italicangle def + /FontMatrix FontMatrix + [1 0 ItalicAngle dup sin exch cos div 1 0 0] + matrix concatmatrix readonly + end + 4 2 roll def + def + } + ifelse + FontName currentdict + end + definefont + exch setglobal + }bind def + end def + /$None + 1 dict dup + begin + /$BuildFont{}bind def + end def + end def + /$Oblique SetSubstituteStrategy + /$findfontByEnum + { + dup type/stringtype eq{cvn}if + dup/$fontname exch def + $sname null eq + {$str cvs dup length $slen sub $slen getinterval} + {pop $sname} + ifelse + $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval + /$match false def + $SubstituteFont/$dstack countdictstack array dictstack put + mark + { + $fontpat 0 $slen 7 add getinterval + {/$match exch def exit} + $str filenameforall + } + stopped + { + cleardictstack + currentdict + true + $SubstituteFont/$dstack get + { + exch + { + 1 index eq + {pop false} + {true} + ifelse + } + {begin false} + ifelse + } + forall + pop + } + if + cleartomark + /$slen 0 def + $match false ne + {$match(fonts/)anchorsearch pop pop cvn} + {/Courier} + ifelse + }bind def + /$ROS 1 dict dup + begin + /Adobe 4 dict dup + begin + /Japan1 [/Ryumin-Light/HeiseiMin-W3 + /GothicBBB-Medium/HeiseiKakuGo-W5 + /HeiseiMaruGo-W4/Jun101-Light]def + /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def + /GB1 [/STSong-Light/STHeiti-Regular]def + /CNS1 [/MKai-Medium/MHei-Medium]def + end def + end def + /$cmapname null def + /$deepcopyfont + { + dup/FontType get 0 eq + { + 1 dict dup/FontName/copied put copyfont + begin + /FDepVector FDepVector copyarray + 0 1 2 index length 1 sub + { + 2 copy get $deepcopyfont + dup/FontName/copied put + /copied exch definefont + 3 copy put pop pop + } + for + def + currentdict + end + } + {$Strategies/$Type3Underprint get exec} + ifelse + }bind def + /$buildfontname + { + dup/CIDFont findresource/CIDSystemInfo get + begin + Registry length Ordering length Supplement 8 string cvs + 3 copy length 2 add add add string + dup 5 1 roll dup 0 Registry putinterval + dup 4 index(-)putinterval + dup 4 index 1 add Ordering putinterval + 4 2 roll add 1 add 2 copy(-)putinterval + end + 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch + anchorsearch + {pop pop 3 2 roll putinterval cvn/$cmapname exch def} + {pop pop pop pop pop} + ifelse + length + $str 1 index(-)putinterval 1 add + $str 1 index $cmapname $fontpat cvs putinterval + $cmapname length add + $str exch 0 exch getinterval cvn + }bind def + /$findfontByROS + { + /$fontname exch def + $ROS Registry 2 copy known + { + get Ordering 2 copy known + {get} + {pop pop[]} + ifelse + } + {pop pop[]} + ifelse + false exch + { + dup/CIDFont resourcestatus + { + pop pop + save + 1 index/CIDFont findresource + dup/WidthsOnly known + {dup/WidthsOnly get} + {false} + ifelse + exch pop + exch restore + {pop} + {exch pop true exit} + ifelse + } + {pop} + ifelse + } + forall + {$str cvs $buildfontname} + { + false(*) + { + save exch + dup/CIDFont findresource + dup/WidthsOnly known + {dup/WidthsOnly get not} + {true} + ifelse + exch/CIDSystemInfo get + dup/Registry get Registry eq + exch/Ordering get Ordering eq and and + {exch restore exch pop true exit} + {pop restore} + ifelse + } + $str/CIDFont resourceforall + {$buildfontname} + {$fontname $findfontByEnum} + ifelse + } + ifelse + }bind def + end + end + currentdict/$error known currentdict/languagelevel known and dup + {pop $error/SubstituteFont known} + if + dup + {$error} + {Adobe_CoolType_Core} + ifelse + begin + { + /SubstituteFont + /CMap/Category resourcestatus + { + pop pop + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + { + $sname null eq + {dup $str cvs dup length $slen sub $slen getinterval cvn} + {$sname} + ifelse + Adobe_CoolType_Data/InVMFontsByCMap get + 1 index 2 copy known + { + get + false exch + { + pop + currentglobal + { + GlobalFontDirectory 1 index known + {exch pop true exit} + {pop} + ifelse + } + { + FontDirectory 1 index known + {exch pop true exit} + { + GlobalFontDirectory 1 index known + {exch pop true exit} + {pop} + ifelse + } + ifelse + } + ifelse + } + forall + } + {pop pop false} + ifelse + { + exch pop exch pop + } + { + dup/CMap resourcestatus + { + pop pop + dup/$cmapname exch def + /CMap findresource/CIDSystemInfo get{def}forall + $findfontByROS + } + { + 128 string cvs + dup(-)search + { + 3 1 roll search + { + 3 1 roll pop + {dup cvi} + stopped + {pop pop pop pop pop $findfontByEnum} + { + 4 2 roll pop pop + exch length + exch + 2 index length + 2 index + sub + exch 1 sub -1 0 + { + $str cvs dup length + 4 index + 0 + 4 index + 4 3 roll add + getinterval + exch 1 index exch 3 index exch + putinterval + dup/CMap resourcestatus + { + pop pop + 4 1 roll pop pop pop + dup/$cmapname exch def + /CMap findresource/CIDSystemInfo get{def}forall + $findfontByROS + true exit + } + {pop} + ifelse + } + for + dup type/booleantype eq + {pop} + {pop pop pop $findfontByEnum} + ifelse + } + ifelse + } + {pop pop pop $findfontByEnum} + ifelse + } + {pop pop $findfontByEnum} + ifelse + } + ifelse + } + ifelse + } + {//SubstituteFont exec} + ifelse + /$slen 0 def + end + } + } + { + { + $SubstituteFont + begin + /$substituteFound true def + dup length $slen gt + $sname null ne or + $slen 0 gt and + {$findfontByEnum} + {//SubstituteFont exec} + ifelse + end + } + } + ifelse + bind readonly def + Adobe_CoolType_Core/scfindfont/systemfindfont load put + } + { + /scfindfont + { + $SubstituteFont + begin + dup systemfindfont + dup/FontName known + {dup/FontName get dup 3 index ne} + {/noname true} + ifelse + dup + { + /$origfontnamefound 2 index def + /$origfontname 4 index def/$substituteFound true def + } + if + exch pop + { + $slen 0 gt + $sname null ne + 3 index length $slen gt or and + { + pop dup $findfontByEnum findfont + dup maxlength 1 add dict + begin + {1 index/FID eq{pop pop}{def}ifelse} + forall + currentdict + end + definefont + dup/FontName known{dup/FontName get}{null}ifelse + $origfontnamefound ne + { + $origfontname $str cvs print + ( substitution revised, using )print + dup/FontName known + {dup/FontName get}{(unspecified font)} + ifelse + $str cvs print(.\n)print + } + if + } + {exch pop} + ifelse + } + {exch pop} + ifelse + end + }bind def + } + ifelse + end + end + Adobe_CoolType_Core_Defined not + { + Adobe_CoolType_Core/findfont + { + $SubstituteFont + begin + $depth 0 eq + { + /$fontname 1 index dup type/stringtype ne{$str cvs}if def + /$substituteFound false def + } + if + /$depth $depth 1 add def + end + scfindfont + $SubstituteFont + begin + /$depth $depth 1 sub def + $substituteFound $depth 0 eq and + { + $inVMIndex null ne + {dup $inVMIndex $AddInVMFont} + if + $doSmartSub + { + currentdict/$Strategy known + {$Strategy/$BuildFont get exec} + if + } + if + } + if + end + }bind put + } + if + } + if + end +/$AddInVMFont + { + exch/FontName 2 copy known + { + get + 1 dict dup begin exch 1 index gcheck def end exch + Adobe_CoolType_Data/InVMFontsByCMap get exch + $DictAdd + } + {pop pop pop} + ifelse + }bind def +/$DictAdd + { + 2 copy known not + {2 copy 4 index length dict put} + if + Level2? not + { + 2 copy get dup maxlength exch length 4 index length add lt + 2 copy get dup length 4 index length add exch maxlength 1 index lt + { + 2 mul dict + begin + 2 copy get{forall}def + 2 copy currentdict put + end + } + {pop} + ifelse + } + if + get + begin + {def} + forall + end + }bind def +end +end +%%EndResource +currentglobal true setglobal +%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 +%%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. +%%Version: 1.23 0 +systemdict/languagelevel known dup + {currentglobal false setglobal} + {false} +ifelse +exch +userdict/Adobe_CoolType_Utility 2 copy known + {2 copy get dup maxlength 27 add dict copy} + {27 dict} +ifelse put +Adobe_CoolType_Utility + begin + /@eexecStartData + def + /@recognizeCIDFont null def + /ct_Level2? exch def + /ct_Clone? 1183615869 internaldict dup + /CCRun known not + exch/eCCRun known not + ct_Level2? and or def +ct_Level2? + {globaldict begin currentglobal true setglobal} +if + /ct_AddStdCIDMap + ct_Level2? + {{ + mark + Adobe_CoolType_Utility/@recognizeCIDFont currentdict put + { + ((Hex)57 StartData + 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 + 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 + d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 + cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec + } + stopped + { + cleartomark + Adobe_CoolType_Utility/@recognizeCIDFont get + countdictstack dup array dictstack + exch 1 sub -1 0 + { + 2 copy get 3 index eq + {1 index length exch sub 1 sub{end}repeat exit} + {pop} + ifelse + } + for + pop pop + Adobe_CoolType_Utility/@eexecStartData get eexec + } + {cleartomark} + ifelse + }} + {{ + Adobe_CoolType_Utility/@eexecStartData get eexec + }} + ifelse bind def +userdict/cid_extensions known +dup{cid_extensions/cid_UpdateDB known and}if + { + cid_extensions + begin + /cid_GetCIDSystemInfo + { + 1 index type/stringtype eq + {exch cvn exch} + if + cid_extensions + begin + dup load 2 index known + { + 2 copy + cid_GetStatusInfo + dup null ne + { + 1 index load + 3 index get + dup null eq + {pop pop cid_UpdateDB} + { + exch + 1 index/Created get eq + {exch pop exch pop} + {pop cid_UpdateDB} + ifelse + } + ifelse + } + {pop cid_UpdateDB} + ifelse + } + {cid_UpdateDB} + ifelse + end + }bind def + end + } +if +ct_Level2? + {end setglobal} +if + /ct_UseNativeCapability? systemdict/composefont known def + /ct_MakeOCF 35 dict def + /ct_Vars 25 dict def + /ct_GlyphDirProcs 6 dict def + /ct_BuildCharDict 15 dict dup + begin + /charcode 2 string def + /dst_string 1500 string def + /nullstring()def + /usewidths? true def + end def + ct_Level2?{setglobal}{pop}ifelse + ct_GlyphDirProcs + begin + /GetGlyphDirectory + { + systemdict/languagelevel known + {pop/CIDFont findresource/GlyphDirectory get} + { + 1 index/CIDFont findresource/GlyphDirectory + get dup type/dicttype eq + { + dup dup maxlength exch length sub 2 index lt + { + dup length 2 index add dict copy 2 index + /CIDFont findresource/GlyphDirectory 2 index put + } + if + } + if + exch pop exch pop + } + ifelse + + + }def + /+ + { + systemdict/languagelevel known + { + currentglobal false setglobal + 3 dict begin + /vm exch def + } + {1 dict begin} + ifelse + /$ exch def + systemdict/languagelevel known + { + vm setglobal + /gvm currentglobal def + $ gcheck setglobal + } + if + ?{$ begin}if + }def + /?{$ type/dicttype eq}def + /|{ + userdict/Adobe_CoolType_Data known + { + Adobe_CoolType_Data/AddWidths? known + { + currentdict Adobe_CoolType_Data + begin + begin + AddWidths? + { + Adobe_CoolType_Data/CC 3 index put + ?{def}{$ 3 1 roll put}ifelse + CC charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore + currentfont/Widths get exch CC exch put + } + {?{def}{$ 3 1 roll put}ifelse} + ifelse + end + end + } + {?{def}{$ 3 1 roll put}ifelse} ifelse + } + {?{def}{$ 3 1 roll put}ifelse} + ifelse + }def + /! + { + ?{end}if + systemdict/languagelevel known + {gvm setglobal} + if + end + }def + /:{string currentfile exch readstring pop}executeonly def + end + ct_MakeOCF + begin + /ct_cHexEncoding + [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 + /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 + /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 + /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B + /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E + /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 + /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 + /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 + /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA + /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD + /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 + /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 + /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 + /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def + /ct_CID_STR_SIZE 8000 def + /ct_mkocfStr100 100 string def + /ct_defaultFontMtx[.001 0 0 .001 0 0]def + /ct_1000Mtx[1000 0 0 1000 0 0]def + /ct_raise{exch cvx exch errordict exch get exec stop}bind def + /ct_reraise + {cvx $error/errorname get(Error: )print dup( )cvs print + errordict exch get exec stop + }bind def + /ct_cvnsi + { + 1 index add 1 sub 1 exch 0 4 1 roll + { + 2 index exch get + exch 8 bitshift + add + } + for + exch pop + }bind def + /ct_GetInterval + { + Adobe_CoolType_Utility/ct_BuildCharDict get + begin + /dst_index 0 def + dup dst_string length gt + {dup string/dst_string exch def} + if + 1 index ct_CID_STR_SIZE idiv + /arrayIndex exch def + 2 index arrayIndex get + 2 index + arrayIndex ct_CID_STR_SIZE mul + sub + { + dup 3 index add 2 index length le + { + 2 index getinterval + dst_string dst_index 2 index putinterval + length dst_index add/dst_index exch def + exit + } + { + 1 index length 1 index sub + dup 4 1 roll + getinterval + dst_string dst_index 2 index putinterval + pop dup dst_index add/dst_index exch def + sub + /arrayIndex arrayIndex 1 add def + 2 index dup length arrayIndex gt + {arrayIndex get} + { + pop + exit + } + ifelse + 0 + } + ifelse + } + loop + pop pop pop + dst_string 0 dst_index getinterval + end + }bind def + ct_Level2? + { + /ct_resourcestatus + currentglobal mark true setglobal + {/unknowninstancename/Category resourcestatus} + stopped + {cleartomark setglobal true} + {cleartomark currentglobal not exch setglobal} + ifelse + { + { + mark 3 1 roll/Category findresource + begin + ct_Vars/vm currentglobal put + ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec + {cleartomark false} + {{3 2 roll pop true}{cleartomark false}ifelse} + ifelse + ct_Vars/vm get setglobal + end + } + } + {{resourcestatus}} + ifelse bind def + /CIDFont/Category ct_resourcestatus + {pop pop} + { + currentglobal true setglobal + /Generic/Category findresource + dup length dict copy + dup/InstanceType/dicttype put + /CIDFont exch/Category defineresource pop + setglobal + } + ifelse + ct_UseNativeCapability? + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CIDSystemInfo 3 dict dup begin + /Registry(Adobe)def + /Ordering(Identity)def + /Supplement 0 def + end def + /CMapName/Identity-H def + /CMapVersion 1.000 def + /CMapType 1 def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + if + } + { + /ct_Category 2 dict begin + /CIDFont 10 dict def + /ProcSet 2 dict def + currentdict + end + def + /defineresource + { + ct_Category 1 index 2 copy known + { + get + dup dup maxlength exch length eq + { + dup length 10 add dict copy + ct_Category 2 index 2 index put + } + if + 3 index 3 index put + pop exch pop + } + {pop pop/defineresource/undefined ct_raise} + ifelse + }bind def + /findresource + { + ct_Category 1 index 2 copy known + { + get + 2 index 2 copy known + {get 3 1 roll pop pop} + {pop pop/findresource/undefinedresource ct_raise} + ifelse + } + {pop pop/findresource/undefined ct_raise} + ifelse + }bind def + /resourcestatus + { + ct_Category 1 index 2 copy known + { + get + 2 index known + exch pop exch pop + { + 0 -1 true + } + { + false + } + ifelse + } + {pop pop/findresource/undefined ct_raise} + ifelse + }bind def + /ct_resourcestatus/resourcestatus load def + } + ifelse + /ct_CIDInit 2 dict + begin + /ct_cidfont_stream_init + { + { + dup(Binary)eq + { + pop + null + currentfile + ct_Level2? + { + {cid_BYTE_COUNT()/SubFileDecode filter} + stopped + {pop pop pop} + if + } + if + /readstring load + exit + } + if + dup(Hex)eq + { + pop + currentfile + ct_Level2? + { + {null exch/ASCIIHexDecode filter/readstring} + stopped + {pop exch pop(>)exch/readhexstring} + if + } + {(>)exch/readhexstring} + ifelse + load + exit + } + if + /StartData/typecheck ct_raise + } + loop + cid_BYTE_COUNT ct_CID_STR_SIZE le + { + 2 copy cid_BYTE_COUNT string exch exec + pop + 1 array dup + 3 -1 roll + 0 exch put + } + { + cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi + dup array exch 2 sub 0 exch 1 exch + { + 2 copy + 5 index + ct_CID_STR_SIZE + string + 6 index exec + pop + put + pop + } + for + 2 index + cid_BYTE_COUNT ct_CID_STR_SIZE mod string + 3 index exec + pop + 1 index exch + 1 index length 1 sub + exch put + } + ifelse + cid_CIDFONT exch/GlyphData exch put + 2 index null eq + { + pop pop pop + } + { + pop/readstring load + 1 string exch + { + 3 copy exec + pop + dup length 0 eq + { + pop pop pop pop pop + true exit + } + if + 4 index + eq + { + pop pop pop pop + false exit + } + if + } + loop + pop + } + ifelse + }bind def + /StartData + { + mark + { + currentdict + dup/FDArray get 0 get/FontMatrix get + 0 get 0.001 eq + { + dup/CDevProc known not + { + /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known + {get} + { + pop pop + {pop pop pop pop pop 0 -1000 7 index 2 div 880} + } + ifelse + def + } + if + } + { + /CDevProc + { + pop pop pop pop pop + 0 + 1 cid_temp/cid_CIDFONT get + /FDArray get 0 get + /FontMatrix get 0 get div + 7 index 2 div + 1 index 0.88 mul + }def + } + ifelse + /cid_temp 15 dict def + cid_temp + begin + /cid_CIDFONT exch def + 3 copy pop + dup/cid_BYTE_COUNT exch def 0 gt + { + ct_cidfont_stream_init + FDArray + { + /Private get + dup/SubrMapOffset known + { + begin + /Subrs SubrCount array def + Subrs + SubrMapOffset + SubrCount + SDBytes + ct_Level2? + { + currentdict dup/SubrMapOffset undef + dup/SubrCount undef + /SDBytes undef + } + if + end + /cid_SD_BYTES exch def + /cid_SUBR_COUNT exch def + /cid_SUBR_MAP_OFFSET exch def + /cid_SUBRS exch def + cid_SUBR_COUNT 0 gt + { + GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + 0 1 cid_SUBR_COUNT 1 sub + { + exch 1 index + 1 add + cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add + GlyphData exch cid_SD_BYTES ct_GetInterval + 0 cid_SD_BYTES ct_cvnsi + cid_SUBRS 4 2 roll + GlyphData exch + 4 index + 1 index + sub + ct_GetInterval + dup length string copy put + } + for + pop + } + if + } + {pop} + ifelse + } + forall + } + if + cleartomark pop pop + end + CIDFontName currentdict/CIDFont defineresource pop + end end + } + stopped + {cleartomark/StartData ct_reraise} + if + }bind def + currentdict + end def + /ct_saveCIDInit + { + /CIDInit/ProcSet ct_resourcestatus + {true} + {/CIDInitC/ProcSet ct_resourcestatus} + ifelse + { + pop pop + /CIDInit/ProcSet findresource + ct_UseNativeCapability? + {pop null} + {/CIDInit ct_CIDInit/ProcSet defineresource pop} + ifelse + } + {/CIDInit ct_CIDInit/ProcSet defineresource pop null} + ifelse + ct_Vars exch/ct_oldCIDInit exch put + }bind def + /ct_restoreCIDInit + { + ct_Vars/ct_oldCIDInit get dup null ne + {/CIDInit exch/ProcSet defineresource pop} + {pop} + ifelse + }bind def + /ct_BuildCharSetUp + { + 1 index + begin + CIDFont + begin + Adobe_CoolType_Utility/ct_BuildCharDict get + begin + /ct_dfCharCode exch def + /ct_dfDict exch def + CIDFirstByte ct_dfCharCode add + dup CIDCount ge + {pop 0} + if + /cid exch def + { + GlyphDirectory cid 2 copy known + {get} + {pop pop nullstring} + ifelse + dup length FDBytes sub 0 gt + { + dup + FDBytes 0 ne + {0 FDBytes ct_cvnsi} + {pop 0} + ifelse + /fdIndex exch def + dup length FDBytes sub FDBytes exch getinterval + /charstring exch def + exit + } + { + pop + cid 0 eq + {/charstring nullstring def exit} + if + /cid 0 def + } + ifelse + } + loop + }def + /ct_SetCacheDevice + { + 0 0 moveto + dup stringwidth + 3 -1 roll + true charpath + pathbbox + 0 -1000 + 7 index 2 div 880 + setcachedevice2 + 0 0 moveto + }def + /ct_CloneSetCacheProc + { + 1 eq + { + stringwidth + pop -2 div -880 + 0 -1000 setcharwidth + moveto + } + { + usewidths? + { + currentfont/Widths get cid + 2 copy known + {get exch pop aload pop} + {pop pop stringwidth} + ifelse + } + {stringwidth} + ifelse + setcharwidth + 0 0 moveto + } + ifelse + }def + /ct_Type3ShowCharString + { + ct_FDDict fdIndex 2 copy known + {get} + { + currentglobal 3 1 roll + 1 index gcheck setglobal + ct_Type1FontTemplate dup maxlength dict copy + begin + FDArray fdIndex get + dup/FontMatrix 2 copy known + {get} + {pop pop ct_defaultFontMtx} + ifelse + /FontMatrix exch dup length array copy def + /Private get + /Private exch def + /Widths rootfont/Widths get def + /CharStrings 1 dict dup/.notdef + dup length string copy put def + currentdict + end + /ct_Type1Font exch definefont + dup 5 1 roll put + setglobal + } + ifelse + dup/CharStrings get 1 index/Encoding get + ct_dfCharCode get charstring put + rootfont/WMode 2 copy known + {get} + {pop pop 0} + ifelse + exch + 1000 scalefont setfont + ct_str1 0 ct_dfCharCode put + ct_str1 exch ct_dfSetCacheProc + ct_SyntheticBold + { + currentpoint + ct_str1 show + newpath + moveto + ct_str1 true charpath + ct_StrokeWidth setlinewidth + stroke + } + {ct_str1 show} + ifelse + }def + /ct_Type4ShowCharString + { + ct_dfDict ct_dfCharCode charstring + FDArray fdIndex get + dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not + {ct_1000Mtx matrix concatmatrix concat} + {pop} + ifelse + /Private get + Adobe_CoolType_Utility/ct_Level2? get not + { + ct_dfDict/Private + 3 -1 roll + {put} + 1183615869 internaldict/superexec get exec + } + if + 1183615869 internaldict + Adobe_CoolType_Utility/ct_Level2? get + {1 index} + {3 index/Private get mark 6 1 roll} + ifelse + dup/RunInt known + {/RunInt get} + {pop/CCRun} + ifelse + get exec + Adobe_CoolType_Utility/ct_Level2? get not + {cleartomark} + if + }bind def + /ct_BuildCharIncremental + { + { + Adobe_CoolType_Utility/ct_MakeOCF get begin + ct_BuildCharSetUp + ct_ShowCharString + } + stopped + {stop} + if + end + end + end + end + }bind def + /BaseFontNameStr(BF00)def + /ct_Type1FontTemplate 14 dict + begin + /FontType 1 def + /FontMatrix [0.001 0 0 0.001 0 0]def + /FontBBox [-250 -250 1250 1250]def + /Encoding ct_cHexEncoding def + /PaintType 0 def + currentdict + end def + /BaseFontTemplate 11 dict + begin + /FontMatrix [0.001 0 0 0.001 0 0]def + /FontBBox [-250 -250 1250 1250]def + /Encoding ct_cHexEncoding def + /BuildChar/ct_BuildCharIncremental load def + ct_Clone? + { + /FontType 3 def + /ct_ShowCharString/ct_Type3ShowCharString load def + /ct_dfSetCacheProc/ct_CloneSetCacheProc load def + /ct_SyntheticBold false def + /ct_StrokeWidth 1 def + } + { + /FontType 4 def + /Private 1 dict dup/lenIV 4 put def + /CharStrings 1 dict dup/.notdefput def + /PaintType 0 def + /ct_ShowCharString/ct_Type4ShowCharString load def + } + ifelse + /ct_str1 1 string def + currentdict + end def + /BaseFontDictSize BaseFontTemplate length 5 add def + /ct_matrixeq + { + true 0 1 5 + { + dup 4 index exch get exch 3 index exch get eq and + dup not + {exit} + if + } + for + exch pop exch pop + }bind def + /ct_makeocf + { + 15 dict + begin + exch/WMode exch def + exch/FontName exch def + /FontType 0 def + /FMapType 2 def + dup/FontMatrix known + {dup/FontMatrix get/FontMatrix exch def} + {/FontMatrix matrix def} + ifelse + /bfCount 1 index/CIDCount get 256 idiv 1 add + dup 256 gt{pop 256}if def + /Encoding + 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for + bfCount 1 255{2 copy bfCount put pop}for + def + /FDepVector bfCount dup 256 lt{1 add}if array def + BaseFontTemplate BaseFontDictSize dict copy + begin + /CIDFont exch def + CIDFont/FontBBox known + {CIDFont/FontBBox get/FontBBox exch def} + if + CIDFont/CDevProc known + {CIDFont/CDevProc get/CDevProc exch def} + if + currentdict + end + BaseFontNameStr 3(0)putinterval + 0 1 bfCount dup 256 eq{1 sub}if + { + FDepVector exch + 2 index BaseFontDictSize dict copy + begin + dup/CIDFirstByte exch 256 mul def + FontType 3 eq + {/ct_FDDict 2 dict def} + if + currentdict + end + 1 index 16 + BaseFontNameStr 2 2 getinterval cvrs pop + BaseFontNameStr exch definefont + put + } + for + ct_Clone? + {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} + if + FontName + currentdict + end + definefont + ct_Clone? + { + gsave + dup 1000 scalefont setfont + ct_BuildCharDict + begin + /usewidths? false def + currentfont/Widths get + begin + exch/CIDFont get/GlyphDirectory get + { + pop + dup charcode exch 1 index 0 2 index 256 idiv put + 1 index exch 1 exch 256 mod put + stringwidth 2 array astore def + } + forall + end + /usewidths? true def + end + grestore + } + {exch pop} + ifelse + }bind def + currentglobal true setglobal + /ct_ComposeFont + { + ct_UseNativeCapability? + { + 2 index/CMap ct_resourcestatus + {pop pop exch pop} + { + /CIDInit/ProcSet findresource + begin + 12 dict + begin + begincmap + /CMapName 3 index def + /CMapVersion 1.000 def + /CMapType 1 def + exch/WMode exch def + /CIDSystemInfo 3 dict dup + begin + /Registry(Adobe)def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-)search + { + pop pop + (-)search + { + dup length string copy + exch pop exch pop + } + {pop(Identity)} + ifelse + } + {pop (Identity)} + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse + composefont + } + { + 3 2 roll pop + 0 get/CIDFont findresource + ct_makeocf + } + ifelse + }bind def + setglobal + /ct_MakeIdentity + { + ct_UseNativeCapability? + { + 1 index/CMap ct_resourcestatus + {pop pop} + { + /CIDInit/ProcSet findresource begin + 12 dict begin + begincmap + /CMapName 2 index def + /CMapVersion 1.000 def + /CMapType 1 def + /CIDSystemInfo 3 dict dup + begin + /Registry(Adobe)def + /Ordering + CMapName ct_mkocfStr100 cvs + (Adobe-)search + { + pop pop + (-)search + {dup length string copy exch pop exch pop} + {pop(Identity)} + ifelse + } + {pop(Identity)} + ifelse + def + /Supplement 0 def + end def + 1 begincodespacerange + <0000> + endcodespacerange + 1 begincidrange + <0000>0 + endcidrange + endcmap + CMapName currentdict/CMap defineresource pop + end + end + } + ifelse + composefont + } + { + exch pop + 0 get/CIDFont findresource + ct_makeocf + } + ifelse + }bind def + currentdict readonly pop + end + end +%%EndResource +setglobal +%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 +%%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. +%%Version: 1.0 0 +userdict/ct_T42Dict 15 dict put +ct_T42Dict begin +/Is2015? +{ + version + cvi + 2015 + ge +}bind def +/AllocGlyphStorage +{ + Is2015? + { + pop + } + { + {string}forall + }ifelse +}bind def +/Type42DictBegin +{ +25 dict begin + /FontName exch def + /CharStrings 256 dict +begin + /.notdef 0 def + currentdict +end def + /Encoding exch def + /PaintType 0 def + /FontType 42 def + /FontMatrix[1 0 0 1 0 0]def + 4 array astore cvx/FontBBox exch def + /sfnts +}bind def +/Type42DictEnd +{ + currentdict dup/FontName get exch definefont end +ct_T42Dict exch +dup/FontName get exch put +}bind def +/RD{string currentfile exch readstring pop}executeonly def +/PrepFor2015 +{ +Is2015? +{ + /GlyphDirectory + 16 + dict def + sfnts 0 get + dup + 2 index + (glyx) + putinterval + 2 index + (locx) + putinterval + pop + pop +} +{ + pop + pop +}ifelse +}bind def +/AddT42Char +{ +Is2015? +{ + /GlyphDirectory get + begin + def + end + pop + pop +} +{ + /sfnts get + 4 index + get + 3 index + 2 index + putinterval + pop + pop + pop + pop +}ifelse +}bind def +/T0AddT42Mtx2 +{ +/CIDFont findresource/Metrics2 get begin def end +}bind def +end +%%EndResource +currentglobal true setglobal +%%BeginFile: MMFauxFont.prc +%%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. +%%All Rights Reserved. +userdict /ct_EuroDict 10 dict put +ct_EuroDict begin +/ct_CopyFont +{ + { 1 index /FID ne {def} {pop pop} ifelse} forall +} def +/ct_GetGlyphOutline +{ + gsave + initmatrix newpath + exch findfont dup + length 1 add dict + begin + ct_CopyFont + /Encoding Encoding dup length array copy + dup + 4 -1 roll + 0 exch put + def + currentdict + end + /ct_EuroFont exch definefont + 1000 scalefont setfont + 0 0 moveto + [ + <00> stringwidth + <00> false charpath + pathbbox + [ + {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall + grestore + counttomark 8 add +} +def +/ct_MakeGlyphProc +{ + ] cvx + /ct_PSBuildGlyph cvx + ] cvx +} def +/ct_PSBuildGlyph +{ + gsave + 8 -1 roll pop + 7 1 roll + 6 -2 roll ct_FontMatrix transform 6 2 roll + 4 -2 roll ct_FontMatrix transform 4 2 roll + ct_FontMatrix transform + currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse + dup 9 1 roll + { + currentdict /StrokeWidth 2 copy known + { + get 2 div + 0 ct_FontMatrix dtransform pop + 5 1 roll + 4 -1 roll 4 index sub + 4 1 roll + 3 -1 roll 4 index sub + 3 1 roll + exch 4 index add exch + 4 index add + 5 -1 roll pop + } + { + pop pop + } + ifelse + } + if + setcachedevice + ct_FontMatrix concat + ct_PSPathOps begin + exec + end + { + currentdict /StrokeWidth 2 copy known + { get } + { pop pop 0 } + ifelse + setlinewidth stroke + } + { + fill + } + ifelse + grestore +} def +/ct_PSPathOps 4 dict dup begin + /m {moveto} def + /l {lineto} def + /c {curveto} def + /cp {closepath} def +end +def +/ct_matrix1000 [1000 0 0 1000 0 0] def +/ct_AddGlyphProc +{ + 2 index findfont dup length 4 add dict + begin + ct_CopyFont + /CharStrings CharStrings dup length 1 add dict copy + begin + 3 1 roll def + currentdict + end + def + /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def + /ct_PSBuildGlyph /ct_PSBuildGlyph load def + /ct_PSPathOps /ct_PSPathOps load def + currentdict + end + definefont pop +} +def +systemdict /languagelevel known +{ + /ct_AddGlyphToPrinterFont { + 2 copy + ct_GetGlyphOutline 3 add -1 roll restore + ct_MakeGlyphProc + ct_AddGlyphProc + } def +} +{ + /ct_AddGlyphToPrinterFont { + pop pop restore + Adobe_CTFauxDict /$$$FONTNAME get + /Euro + Adobe_CTFauxDict /$$$SUBSTITUTEBASE get + ct_EuroDict exch get + ct_AddGlyphProc + } def +} ifelse +/AdobeSansMM +{ +556 0 24 -19 541 703 + { + 541 628 m + 510 669 442 703 354 703 c + 201 703 117 607 101 444 c + 50 444 l + 25 372 l + 97 372 l + 97 301 l + 49 301 l + 24 229 l + 103 229 l + 124 67 209 -19 350 -19 c + 435 -19 501 25 509 32 c + 509 131 l + 492 105 417 60 343 60 c + 267 60 204 127 197 229 c + 406 229 l + 430 301 l + 191 301 l + 191 372 l + 455 372 l + 479 444 l + 194 444 l + 201 531 245 624 348 624 c + 433 624 484 583 509 534 c + cp + 556 0 m + } +ct_PSBuildGlyph +} def +/AdobeSerifMM +{ +500 0 10 -12 484 692 + { + 347 298 m + 171 298 l + 170 310 170 322 170 335 c + 170 362 l + 362 362 l + 374 403 l + 172 403 l + 184 580 244 642 308 642 c + 380 642 434 574 457 457 c + 481 462 l + 474 691 l + 449 691 l + 433 670 429 657 410 657 c + 394 657 360 692 299 692 c + 204 692 94 604 73 403 c + 22 403 l + 10 362 l + 70 362 l + 69 352 69 341 69 330 c + 69 319 69 308 70 298 c + 22 298 l + 10 257 l + 73 257 l + 97 57 216 -12 295 -12 c + 364 -12 427 25 484 123 c + 458 142 l + 425 101 384 37 316 37 c + 256 37 189 84 173 257 c + 335 257 l + cp + 500 0 m + } +ct_PSBuildGlyph +} def +end +%%EndFile +setglobal +Adobe_CoolType_Core begin /$None SetSubstituteStrategy end +%%BeginResource: procset Adobe_AGM_Image 1.0 0 +%%Version: 1.0 0 +%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved. +systemdict/setpacking known +{ + currentpacking + true setpacking +}if +userdict/Adobe_AGM_Image 71 dict dup begin put +/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def +/nd{ + null def +}bind def +/AGMIMG_&image nd +/AGMIMG_&colorimage nd +/AGMIMG_&imagemask nd +/AGMIMG_mbuf()def +/AGMIMG_ybuf()def +/AGMIMG_kbuf()def +/AGMIMG_c 0 def +/AGMIMG_m 0 def +/AGMIMG_y 0 def +/AGMIMG_k 0 def +/AGMIMG_tmp nd +/AGMIMG_imagestring0 nd +/AGMIMG_imagestring1 nd +/AGMIMG_imagestring2 nd +/AGMIMG_imagestring3 nd +/AGMIMG_imagestring4 nd +/AGMIMG_imagestring5 nd +/AGMIMG_cnt nd +/AGMIMG_fsave nd +/AGMIMG_colorAry nd +/AGMIMG_override nd +/AGMIMG_name nd +/AGMIMG_maskSource nd +/AGMIMG_flushfilters nd +/invert_image_samples nd +/knockout_image_samples nd +/img nd +/sepimg nd +/devnimg nd +/idximg nd +/ds +{ + Adobe_AGM_Core begin + Adobe_AGM_Image begin + /AGMIMG_&image systemdict/image get def + /AGMIMG_&imagemask systemdict/imagemask get def + /colorimage where{ + pop + /AGMIMG_&colorimage/colorimage ldf + }if + end + end +}def +/ps +{ + Adobe_AGM_Image begin + /AGMIMG_ccimage_exists{/customcolorimage where + { + pop + /Adobe_AGM_OnHost_Seps where + { + pop false + }{ + /Adobe_AGM_InRip_Seps where + { + pop false + }{ + true + }ifelse + }ifelse + }{ + false + }ifelse + }bdf + level2{ + /invert_image_samples + { + Adobe_AGM_Image/AGMIMG_tmp Decode length ddf + /Decode[Decode 1 get Decode 0 get]def + }def + /knockout_image_samples + { + Operator/imagemask ne{ + /Decode[1 1]def + }if + }def + }{ + /invert_image_samples + { + {1 exch sub}currenttransfer addprocs settransfer + }def + /knockout_image_samples + { + {pop 1}currenttransfer addprocs settransfer + }def + }ifelse + /img/imageormask ldf + /sepimg/sep_imageormask ldf + /devnimg/devn_imageormask ldf + /idximg/indexed_imageormask ldf + /_ctype 7 def + currentdict{ + dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{ + bind + }if + def + }forall +}def +/pt +{ + end +}def +/dt +{ +}def +/AGMIMG_flushfilters +{ + dup type/arraytype ne + {1 array astore}if + dup 0 get currentfile ne + {dup 0 get flushfile}if + { + dup type/filetype eq + { + dup status 1 index currentfile ne and + {closefile} + {pop} + ifelse + }{pop}ifelse + }forall +}def +/AGMIMG_init_common +{ + currentdict/T known{/ImageType/T ldf currentdict/T undef}if + currentdict/W known{/Width/W ldf currentdict/W undef}if + currentdict/H known{/Height/H ldf currentdict/H undef}if + currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if + currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if + currentdict/D known{/Decode/D ldf currentdict/D undef}if + currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if + currentdict/O known{ + /Operator/O load 1 eq{ + /imagemask + }{ + /O load 2 eq{ + /image + }{ + /colorimage + }ifelse + }ifelse + def + currentdict/O undef + }if + currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if + currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if + currentdict/I known{/Interpolate/I ldf currentdict/I undef}if + currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if + /DataSource load xcheck not{ + DataSource type/arraytype eq{ + DataSource 0 get type/filetype eq{ + /_Filters DataSource def + currentdict/MultipleDataSources known not{ + /DataSource DataSource dup length 1 sub get def + }if + }if + }if + currentdict/MultipleDataSources known not{ + /MultipleDataSources DataSource type/arraytype eq{ + DataSource length 1 gt + } + {false}ifelse def + }if + }if + /NComponents Decode length 2 div def + currentdict/SkipImageProc known not{/SkipImageProc{false}def}if +}bdf +/imageormask_sys +{ + begin + AGMIMG_init_common + save mark + level2{ + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + AGMIMG_&imagemask + }{ + BitsPerComponent ImageMatrix/DataSource load + AGMIMG_&image + }ifelse + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + cleartomark restore + end +}def +/overprint_plate +{ + currentoverprint{ + 0 get dup type/nametype eq{ + dup/DeviceGray eq{ + pop AGMCORE_black_plate not + }{ + /DeviceCMYK eq{ + AGMCORE_is_cmyk_sep not + }if + }ifelse + }{ + false exch + { + AGMOHS_sepink eq or + }forall + not + }ifelse + }{ + pop false + }ifelse +}def +/process_mask +{ + level3{ + dup begin + /ImageType 1 def + end + 4 dict begin + /DataDict exch def + /ImageType 3 def + /InterleaveType 3 def + /MaskDict 9 dict begin + /ImageType 1 def + /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def + /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def + /ImageMatrix[Width 0 0 Height neg 0 Height]def + /NComponents 1 def + /BitsPerComponent 1 def + /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def + /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def + currentdict end def + currentdict end + }if +}def +/use_mask +{ + dup/Mask known {dup/Mask get}{false}ifelse +}def +/imageormask +{ + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + } + { + save mark + level2 AGMCORE_host_sep not and{ + currentdict + Operator/imagemask eq DeviceN_PS2 not and{ + imagemask + }{ + AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{ + [/Separation/Black/DeviceGray{}]setcolorspace + /Decode[Decode 1 get Decode 0 get]def + }if + use_mask{ + process_mask image + }{ + DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and + { + Names convert_to_process not{ + 2 dict begin + /imageDict xdf + /names_index 0 def + gsave + imageDict write_image_file{ + Names{ + dup(None)ne{ + [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace + Operator imageDict read_image_file + names_index 0 eq{true setoverprint}if + /names_index names_index 1 add def + }{ + pop + }ifelse + }forall + close_image_file + }if + grestore + end + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }{ + Operator/imagemask eq{ + imagemask + }{ + image + }ifelse + }ifelse + }ifelse + }ifelse + }{ + Width Height + Operator/imagemask eq{ + Decode 0 get 1 eq Decode 1 get 0 eq and + ImageMatrix/DataSource load + /Adobe_AGM_OnHost_Seps where{ + pop imagemask + }{ + currentgray 1 ne{ + currentdict imageormask_sys + }{ + currentoverprint not{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }ifelse + }{ + BitsPerComponent ImageMatrix + MultipleDataSources{ + 0 1 NComponents 1 sub{ + DataSource exch get + }for + }{ + /DataSource load + }ifelse + Operator/colorimage eq{ + AGMCORE_host_sep{ + MultipleDataSources level2 or NComponents 4 eq and{ + AGMCORE_is_cmyk_sep{ + MultipleDataSources{ + /DataSource DataSource 0 get xcheck + { + [ + DataSource 0 get/exec cvx + DataSource 1 get/exec cvx + DataSource 2 get/exec cvx + DataSource 3 get/exec cvx + /AGMCORE_get_ink_data cvx + ]cvx + }{ + DataSource aload pop AGMCORE_get_ink_data + }ifelse def + }{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + /DataSource load + filter_cmyk 0()/SubFileDecode filter def + }ifelse + /Decode[Decode 0 get Decode 1 get]def + /MultipleDataSources false def + /NComponents 1 def + /Operator/image def + invert_image_samples + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + 1 AGMCORE_&setgray + currentdict imageormask_sys + }{ + currentdict ignoreimagedata + }ifelse + }ifelse + }{ + MultipleDataSources NComponents AGMIMG_&colorimage + }ifelse + }{ + true NComponents colorimage + }ifelse + }{ + Operator/image eq{ + AGMCORE_host_sep{ + /DoImage true def + currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse + { + AGMCORE_black_plate not Operator/imagemask ne and{ + /DoImage false def + currentdict ignoreimagedata + }if + }if + 1 AGMCORE_&setgray + DoImage + {currentdict imageormask_sys}if + }{ + use_mask{ + process_mask image + }{ + image + }ifelse + }ifelse + }{ + Operator/knockout eq{ + pop pop pop pop pop + currentcolorspace overprint_plate not{ + knockout_unitsq + }if + }if + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/sep_imageormask +{ + /sep_colorspace_dict AGMCORE_gget begin + CSA map_csa + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_avoid_L2_sep_space{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + }if + AGMIMG_ccimage_exists + MappedCSA 0 get/DeviceCMYK eq and + currentdict/Components known and + Name()ne and + Name(All)ne and + Operator/image eq and + AGMCORE_producing_seps not and + level2 not and + { + Width Height BitsPerComponent ImageMatrix + [ + /DataSource load/exec cvx + { + 0 1 2 index length 1 sub{ + 1 index exch + 2 copy get 255 xor put + }for + }/exec cvx + ]cvx bind + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Name findcmykcustomcolor + customcolorimage + }{ + AGMCORE_producing_seps not{ + level2{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{ + [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + currentdict imageormask + }{ + currentdict + Operator/imagemask eq{ + imageormask + }{ + sep_imageormask_lev1 + }ifelse + }ifelse + }{ + AGMCORE_host_sep{ + Operator/knockout eq{ + currentdict/ImageMatrix get concat + knockout_unitsq + }{ + currentgray 1 ne{ + AGMCORE_is_cmyk_sep Name(All)ne and{ + level2{ + Name AGMCORE_IsSeparationAProcessColor + { + Operator/imagemask eq{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor + }if + }{ + invert_image_samples + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + [/Separation Name[/DeviceGray] + { + sep_colorspace_proc AGMCORE_get_ink_data + 1 exch sub + }bind + ]AGMCORE_&setcolorspace + /sep_tint AGMCORE_gget AGMCORE_&setcolor + }if + }ifelse + currentdict imageormask_sys + }{ + currentdict + Operator/imagemask eq{ + imageormask_sys + }{ + sep_image_lev1_sep + }ifelse + }ifelse + }{ + Operator/imagemask ne{ + invert_image_samples + }if + currentdict imageormask_sys + }ifelse + }{ + currentoverprint not Name(All)eq or Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{ + currentcolorspace 0 get/Separation ne{ + [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt + /sep_tint AGMCORE_gget setcolor + }if + }if + currentoverprint + MappedCSA 0 get/DeviceCMYK eq and + Name AGMCORE_IsSeparationAProcessColor not and + //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse + Name(All)ne and{ + imageormask_l2_overprint + }{ + currentdict imageormask + }ifelse + }ifelse + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end +}def +/colorSpaceElemCnt +{ + mark currentcolor counttomark dup 2 add 1 roll cleartomark +}bdf +/devn_sep_datasource +{ + 1 dict begin + /dataSource xdf + [ + 0 1 dataSource length 1 sub{ + dup currentdict/dataSource get/exch cvx/get cvx/exec cvx + /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx + }for + ]cvx bind + end +}bdf +/devn_alt_datasource +{ + 11 dict begin + /convProc xdf + /origcolorSpaceElemCnt xdf + /origMultipleDataSources xdf + /origBitsPerComponent xdf + /origDecode xdf + /origDataSource xdf + /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def + /DataSource origMultipleDataSources + { + [ + BitsPerComponent 8 idiv origDecode length 2 idiv mul string + 0 1 origDecode length 2 idiv 1 sub + { + dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch + origDataSource exch get 0()/SubFileDecode filter + BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx + }for + ]bind cvx + }{origDataSource}ifelse 0()/SubFileDecode filter def + [ + origcolorSpaceElemCnt string + 0 2 origDecode length 2 sub + { + dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div + 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx + }for + /convProc load/exec cvx + origcolorSpaceElemCnt 1 sub -1 0 + { + /dup cvx 2/add cvx/index cvx + 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx + }for + ]bind cvx 0()/SubFileDecode filter + end +}bdf +/devn_imageormask +{ + /devicen_colorspace_dict AGMCORE_gget begin + CSA map_csa + 2 dict begin + dup + /srcDataStrs[3 -1 roll begin + AGMIMG_init_common + currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse + { + Width Decode length 2 div mul cvi + { + dup 65535 gt{1 add 2 div cvi}{exit}ifelse + }loop + string + }repeat + end]def + /dstDataStr srcDataStrs 0 get length string def + begin + AGMIMG_init_common + SkipImageProc{ + currentdict consumeimagedata + }{ + save mark + AGMCORE_producing_seps not{ + level3 not{ + Operator/imagemask ne{ + /DataSource[[ + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def + /MultipleDataSources true def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + }if + }if + currentdict imageormask + }{ + AGMCORE_host_sep{ + Names convert_to_process{ + CSA get_csa_by_name 0 get/DeviceCMYK eq{ + /DataSource + Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + filter_cmyk 0()/SubFileDecode filter def + /MultipleDataSources false def + /Decode[1 0]def + /DeviceGray setcolorspace + currentdict imageormask_sys + }{ + AGMCORE_report_unsupported_color_space + AGMCORE_black_plate{ + /DataSource + DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse + CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get + devn_alt_datasource + /MultipleDataSources false def + /Decode colorSpaceElemCnt[exch{0 1}repeat]def + currentdict imageormask_sys + }{ + gsave + knockout_unitsq + grestore + currentdict consumeimagedata + }ifelse + }ifelse + } + { + /devicen_colorspace_dict AGMCORE_gget/names_index known{ + Operator/imagemask ne{ + MultipleDataSources{ + /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def + /MultipleDataSources false def + }{ + /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def + }ifelse + invert_image_samples + }if + currentdict imageormask_sys + }{ + currentoverprint not Operator/imagemask eq and{ + currentdict imageormask_sys + }{ + currentoverprint not + { + gsave + knockout_unitsq + grestore + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + currentdict imageormask + }ifelse + }ifelse + cleartomark restore + }ifelse + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end + end + end +}def +/imageormask_l2_overprint +{ + currentdict + currentcmykcolor add add add 0 eq{ + currentdict consumeimagedata + }{ + level3{ + currentcmykcolor + /AGMIMG_k xdf + /AGMIMG_y xdf + /AGMIMG_m xdf + /AGMIMG_c xdf + Operator/imagemask eq{ + [/DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ]/DeviceCMYK{}]setcolorspace + AGMIMG_c 0 ne{AGMIMG_c}if + AGMIMG_m 0 ne{AGMIMG_m}if + AGMIMG_y 0 ne{AGMIMG_y}if + AGMIMG_k 0 ne{AGMIMG_k}if + setcolor + }{ + /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def + [/Indexed + [ + /DeviceN[ + AGMIMG_c 0 ne{/Cyan}if + AGMIMG_m 0 ne{/Magenta}if + AGMIMG_y 0 ne{/Yellow}if + AGMIMG_k 0 ne{/Black}if + ] + /DeviceCMYK{ + AGMIMG_k 0 eq{0}if + AGMIMG_y 0 eq{0 exch}if + AGMIMG_m 0 eq{0 3 1 roll}if + AGMIMG_c 0 eq{0 4 1 roll}if + } + ] + 255 + { + 255 div + mark exch + dup dup dup + AGMIMG_k 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_y 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_m 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + AGMIMG_c 0 ne{ + /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop + counttomark 1 roll + }{ + pop + }ifelse + counttomark 1 add -1 roll pop + } + ]setcolorspace + }ifelse + imageormask_sys + }{ + write_image_file{ + currentcmykcolor + 0 ne{ + [/Separation/Black/DeviceGray{}]setcolorspace + gsave + /Black + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Yellow/DeviceGray{}]setcolorspace + gsave + /Yellow + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Magenta/DeviceGray{}]setcolorspace + gsave + /Magenta + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + 0 ne{ + [/Separation/Cyan/DeviceGray{}]setcolorspace + gsave + /Cyan + [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx] + cvx modify_halftone_xfer + Operator currentdict read_image_file + grestore + }if + close_image_file + }{ + imageormask + }ifelse + }ifelse + }ifelse +}def +/indexed_imageormask +{ + begin + AGMIMG_init_common + save mark + currentdict + AGMCORE_host_sep{ + Operator/knockout eq{ + /indexed_colorspace_dict AGMCORE_gget dup/CSA known{ + /CSA get get_csa_by_name + }{ + /Names get + }ifelse + overprint_plate not{ + knockout_unitsq + }if + }{ + Indexed_DeviceN{ + /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{ + indexed_image_lev2_sep + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }{ + AGMCORE_is_cmyk_sep{ + Operator/imagemask eq{ + imageormask_sys + }{ + level2{ + indexed_image_lev2_sep + }{ + indexed_image_lev1_sep + }ifelse + }ifelse + }{ + currentoverprint not{ + knockout_unitsq + }if + currentdict consumeimagedata + }ifelse + }ifelse + }ifelse + }{ + level2{ + Indexed_DeviceN{ + /indexed_colorspace_dict AGMCORE_gget begin + }{ + /indexed_colorspace_dict AGMCORE_gget dup null ne + { + begin + currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse + get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and + AGMCORE_in_rip_sep and{ + [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup] + setcolorspace + }if + end + } + {pop}ifelse + }ifelse + imageormask + Indexed_DeviceN{ + end + }if + }{ + Operator/imagemask eq{ + imageormask + }{ + indexed_imageormask_lev1 + }ifelse + }ifelse + }ifelse + cleartomark restore + currentdict/_Filters known{_Filters AGMIMG_flushfilters}if + end +}def +/indexed_image_lev2_sep +{ + /indexed_colorspace_dict AGMCORE_gget begin + begin + Indexed_DeviceN not{ + currentcolorspace + dup 1/DeviceGray put + dup 3 + currentcolorspace 2 get 1 add string + 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub + { + dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put + }for + put setcolorspace + }if + currentdict + Operator/imagemask eq{ + AGMIMG_&imagemask + }{ + use_mask{ + process_mask AGMIMG_&image + }{ + AGMIMG_&image + }ifelse + }ifelse + end end +}def + /OPIimage + { + dup type/dicttype ne{ + 10 dict begin + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /ImageType 1 def + /Decode[0 1 def] + currentdict + end + }if + dup begin + /NComponents 1 cdndf + /MultipleDataSources false cdndf + /SkipImageProc{false}cdndf + /Decode[ + 0 + currentcolorspace 0 get/Indexed eq{ + 2 BitsPerComponent exp 1 sub + }{ + 1 + }ifelse + ]cdndf + /Operator/image cdndf + end + /sep_colorspace_dict AGMCORE_gget null eq{ + imageormask + }{ + gsave + dup begin invert_image_samples end + sep_imageormask + grestore + }ifelse + }def +/cachemask_level2 +{ + 3 dict begin + /LZWEncode filter/WriteFilter xdf + /readBuffer 256 string def + /ReadFilter + currentfile + 0(%EndMask)/SubFileDecode filter + /ASCII85Decode filter + /RunLengthDecode filter + def + { + ReadFilter readBuffer readstring exch + WriteFilter exch writestring + not{exit}if + }loop + WriteFilter closefile + end +}def +/spot_alias +{ + /mapto_sep_imageormask + { + dup type/dicttype ne{ + 12 dict begin + /ImageType 1 def + /DataSource xdf + /ImageMatrix xdf + /BitsPerComponent xdf + /Height xdf + /Width xdf + /MultipleDataSources false def + }{ + begin + }ifelse + /Decode[/customcolor_tint AGMCORE_gget 0]def + /Operator/image def + /SkipImageProc{false}def + currentdict + end + sep_imageormask + }bdf + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_colorAry xddf + /customcolor_tint AGMCORE_gget + << + /Name AGMIMG_colorAry 4 get + /CSA[/DeviceCMYK] + /TintMethod/Subtractive + /TintProc null + /MappedCSA null + /NComponents 4 + /Components[AGMIMG_colorAry aload pop pop] + >> + setsepcolorspace + mapto_sep_imageormask + }ndf + Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put + /customcolorimage + { + Adobe_AGM_Image/AGMIMG_override false put + current_spot_alias{dup 4 get map_alias}{false}ifelse + { + false set_spot_alias + /customcolor_tint AGMCORE_gget exch setsepcolorspace + pop + mapto_sep_imageormask + true set_spot_alias + }{ + //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec + }ifelse + }bdf +}def +/snap_to_device +{ + 6 dict begin + matrix currentmatrix + dup 0 get 0 eq 1 index 3 get 0 eq and + 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop + { + 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def + 0 0 transform + AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch + itransform/AGMIMG_llY exch def/AGMIMG_llX exch def + 1 1 transform + AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch + itransform/AGMIMG_urY exch def/AGMIMG_urX exch def + [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat + }{ + }ifelse + end +}def +level2 not{ + /colorbuf + { + 0 1 2 index length 1 sub{ + dup 2 index exch get + 255 exch sub + 2 index + 3 1 roll + put + }for + }def + /tint_image_to_color + { + begin + Width Height BitsPerComponent ImageMatrix + /DataSource load + end + Adobe_AGM_Image begin + /AGMIMG_mbuf 0 string def + /AGMIMG_ybuf 0 string def + /AGMIMG_kbuf 0 string def + { + colorbuf dup length AGMIMG_mbuf length ne + { + dup length dup dup + /AGMIMG_mbuf exch string def + /AGMIMG_ybuf exch string def + /AGMIMG_kbuf exch string def + }if + dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop + } + addprocs + {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage + end + }def + /sep_imageormask_lev1 + { + begin + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + { + 255 mul round cvi GrayLookup exch get + }currenttransfer addprocs settransfer + currentdict imageormask + }{ + /sep_colorspace_dict AGMCORE_gget/Components known{ + MappedCSA 0 get/DeviceCMYK eq{ + Components aload pop + }{ + 0 0 0 Components aload pop 1 exch sub + }ifelse + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{ + {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer + currentdict imageormask + }{ + currentcolortransfer + {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll + {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }{ + MappedCSA 0 get/DeviceGray eq{ + {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer + currentdict imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll + {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll + setcolortransfer + currentdict tint_image_to_color + }ifelse + }ifelse + }ifelse + }ifelse + end + }def + /sep_image_lev1_sep + { + begin + /sep_colorspace_dict AGMCORE_gget/Components known{ + Components aload pop + Adobe_AGM_Image/AGMIMG_k xddf + Adobe_AGM_Image/AGMIMG_y xddf + Adobe_AGM_Image/AGMIMG_m xddf + Adobe_AGM_Image/AGMIMG_c xddf + {AGMIMG_c mul 1 exch sub} + {AGMIMG_m mul 1 exch sub} + {AGMIMG_y mul 1 exch sub} + {AGMIMG_k mul 1 exch sub} + }{ + {255 mul round cvi ColorLookup exch get 0 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 1 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 2 get 1 exch sub} + {255 mul round cvi ColorLookup exch get 3 get 1 exch sub} + }ifelse + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end + }def + /indexed_imageormask_lev1 + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + currentdict + MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{ + {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceGray eq{ + {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer + imageormask + }{ + MappedCSA 0 get/DeviceCMYK eq{ + currentcolortransfer + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }{ + currentcolortransfer + {pop 1}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll + {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll + setcolortransfer + tint_image_to_color + }ifelse + }ifelse + }ifelse + end end + }def + /indexed_image_lev1_sep + { + /indexed_colorspace_dict AGMCORE_gget begin + begin + {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} + {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} + AGMCORE_get_ink_data currenttransfer addprocs settransfer + currentdict imageormask_sys + end end + }def +}if +end +systemdict/setpacking known +{setpacking}if +%%EndResource +currentdict Adobe_AGM_Utils eq {end} if +%%EndProlog +%%BeginSetup +Adobe_AGM_Utils begin +2 2010 Adobe_AGM_Core/ds gx +Adobe_CoolType_Core/ds get exec +Adobe_AGM_Image/ds gx +[/NamespacePush pdfmark_5 +[/_objdef {Doc_Metadata} /type /stream /OBJ pdfmark_5 +[{Doc_Metadata} 27730 (% &end XMP packet& %) ReadBypdfmark_5_string + + + + + + + MBZUAI -Brand Mark_Techno Blue -RGB + + + + + + + + + + + + + + + + + + + + + + + + + + Cyan + Magenta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +% &end XMP packet& % + +[{Doc_Metadata} 2 dict begin /Type /Metadata def /Subtype /XML def currentdict end /PUT pdfmark_5 +[/Document 1 dict begin /Metadata {Doc_Metadata} def currentdict end /BDC pdfmark_5 +[/NamespacePop pdfmark_5 +currentdict Adobe_AGM_Utils eq {end} if +%%EndSetup +%%Page: 1 1 +%%EndPageComments +%%BeginPageSetup +Adobe_AGM_Utils begin +Adobe_AGM_Core/ps gx +Adobe_AGM_Core/capture_mysetup gx +Adobe_AGM_Utils/capture_cpd gx +Adobe_CoolType_Core/ps get exec +Adobe_AGM_Image/ps gx +Adobe_AGM_Core/ps gx +gsave +/0 +[/DeviceCMYK] /CSA add_res +grestore +Adobe_AGM_Core/pt gx +%%EndPageSetup +1 -1 scale 0 -132.902 translate +pgsv +[1 0 0 1 0 0 ]ct +gsave +np +gsave +0 0 mo +0 132.902 li +151.699 132.902 li +151.699 0 li +cp +clp +gsave +0 0 mo +151.699 0 li +151.699 132.902 li +0 132.902 li +cp +clp +grestore +gsave +0 0 mo +151.699 0 li +151.699 132.902 li +0 132.902 li +cp +clp +97.139 81.1432 mo +94.362 78.3662 90.044 78.1152 86.994 80.3592 cv +82.469 75.8392 li +83.524 74.4392 84.173 72.7142 84.173 70.8282 cv +84.173 66.2052 80.425 62.4592 75.799 62.4592 cv +71.177 62.4592 67.425 66.2052 67.425 70.8282 cv +67.425 75.4532 71.177 79.2002 75.799 79.2002 cv +77.687 79.2002 79.408 78.5522 80.808 77.5002 cv +85.332 82.0242 li +83.356 84.7142 83.32 88.3692 85.24 91.1082 cv +80.726 95.3992 li +79.378 94.4212 77.679 93.8072 75.799 93.8072 cv +71.491 93.8072 67.999 96.8972 67.999 100.707 cv +67.999 104.523 71.491 107.614 75.799 107.614 cv +80.106 107.614 83.598 104.523 83.598 100.707 cv +83.598 99.3642 83.145 98.1202 82.394 97.0582 cv +86.878 92.7962 li +89.953 95.1892 94.37 95.0202 97.178 92.2102 cv +100.222 89.1632 100.211 84.2062 97.139 81.1432 cv +false sop +.799466 .507378 0 0 cmyk +f +66.4994 50.7226 mo +71.2934 46.4236 li +72.5684 47.2256 74.1154 47.7066 75.7984 47.7066 cv +77.4834 47.7066 79.0324 47.2256 80.3044 46.4216 cv +85.1134 50.7306 li +83.1984 53.7036 83.5734 57.7506 86.2264 60.4036 cv +88.8694 63.0446 92.8914 63.4236 95.8584 61.5356 cv +100.079 66.2916 li +99.2664 67.5736 98.7744 69.1316 98.7744 70.8276 cv +98.7744 75.1346 101.867 78.6266 105.681 78.6266 cv +109.489 78.6266 112.58 75.1346 112.58 70.8276 cv +112.58 66.5166 109.489 63.0276 105.681 63.0276 cv +104.168 63.0276 102.783 63.5906 101.645 64.5186 cv +97.5934 59.9566 li +100.073 56.9486 99.8984 52.4676 97.0284 49.5966 cv +94.1734 46.7426 89.7114 46.5556 86.7034 49.0056 cv +82.0834 44.8636 li +83.0264 43.7216 83.5984 42.3266 83.5984 40.8046 cv +83.5984 36.9926 80.1064 33.9036 75.7984 33.9036 cv +71.4914 33.9036 67.9994 36.9926 67.9994 40.8046 cv +67.9994 42.3266 68.5724 43.7216 69.5144 44.8636 cv +64.8964 49.0026 li +62.1464 46.7326 58.2704 46.5736 55.4234 48.5666 cv +52.4444 45.4626 li +54.1434 43.2366 54.4634 40.4166 53.3614 38.2256 cv +57.3034 34.8836 li +59.6884 36.7346 63.3614 36.5356 66.0154 34.2316 cv +68.9914 31.6476 69.5464 27.4186 67.2634 24.7896 cv +66.1074 23.4556 64.4424 22.7866 62.6964 22.7866 cv +60.9934 22.7866 59.2094 23.4226 57.7404 24.6996 cv +55.1324 26.9626 54.3854 30.4876 55.7764 33.0946 cv +51.8854 36.3916 li +49.3504 34.3336 45.3924 34.7266 42.7854 37.4166 cv +40.0384 40.2436 39.8444 44.4986 42.3454 46.9316 cv +44.5474 49.0656 48.0904 49.0706 50.7814 47.1246 cv +53.7394 50.2046 li +51.3934 53.2686 51.6184 57.6766 54.4554 60.5146 cv +57.5384 63.5986 62.5064 63.6266 65.5544 60.5866 cv +68.2194 57.9216 68.5284 53.7856 66.4994 50.7226 cv +f +45.7754 63.0276 mo +41.9634 63.0276 38.8714 66.5166 38.8714 70.8276 cv +38.8714 72.5846 39.4044 74.1896 40.2724 75.4916 cv +37.1124 79.2126 li +35.9744 78.3486 34.6014 77.8636 33.1404 77.9696 cv +32.0424 78.0536 31.0504 78.4766 30.1934 79.1036 cv +26.2854 74.4456 li +26.7934 73.3896 27.1004 72.1596 27.1004 70.8276 cv +27.1004 69.4676 26.7854 68.2076 26.2554 67.1386 cv +29.9964 62.5596 li +30.8394 63.1596 31.8064 63.5626 32.8764 63.6426 cv +36.3484 63.9046 39.4054 60.9316 39.7004 57.0016 cv +39.9984 53.0746 37.4164 49.6806 33.9394 49.4226 cv +32.8834 49.3386 31.8784 49.5876 30.9674 50.0436 cv +28.7634 46.2806 li +28.9564 46.0376 29.1494 45.7946 29.3224 45.5266 cv +31.1294 42.7266 31.0804 39.6656 29.2054 38.6966 cv +28.8164 38.4936 28.3794 38.3976 27.9134 38.3976 cv +26.1434 38.3976 23.9724 39.7896 22.5374 42.0086 cv +20.7284 44.8146 20.7784 47.8696 22.6494 48.8376 cv +23.8534 49.4626 25.5114 49.0666 27.0274 47.9666 cv +29.0794 51.4676 li +27.9944 52.6516 27.2514 54.2436 27.1134 56.0606 cv +26.9804 57.8586 27.4694 59.5306 28.3524 60.8556 cv +24.8104 65.1876 li +23.9334 64.3956 22.8704 63.9206 21.7164 63.9206 cv +18.7454 63.9206 16.3364 67.0136 16.3364 70.8276 cv +16.3364 74.6456 18.7454 77.7376 21.7164 77.7376 cv +22.8964 77.7376 23.9794 77.2366 24.8674 76.4096 cv +28.5704 80.8276 li +27.7184 82.1426 27.2454 83.7846 27.3784 85.5566 cv +27.6754 89.4816 30.7314 92.4506 34.2044 92.1906 cv +37.6804 91.9306 40.2574 88.5396 39.9674 84.6076 cv +39.8624 83.2316 39.4054 81.9876 38.7264 80.9456 cv +41.8654 77.2486 li +42.9774 78.1136 44.3234 78.6256 45.7754 78.6256 cv +49.5874 78.6256 52.6794 75.1346 52.6794 70.8276 cv +52.6794 66.5166 49.5874 63.0276 45.7754 63.0276 cv +f +130.066 63.9205 mo +128.884 63.9205 127.811 64.4615 126.938 65.3425 cv +123.056 60.7845 li +123.888 59.4795 124.35 57.8535 124.218 56.1025 cv +124.092 54.4065 123.43 52.9135 122.461 51.7595 cv +124.306 48.9255 li +125.899 50.2235 127.7 50.6765 128.965 49.8805 cv +130.788 48.7275 130.796 45.4595 128.979 42.5785 cv +127.595 40.3795 125.552 39.0405 123.848 39.0405 cv +123.32 39.0405 122.824 39.1705 122.392 39.4425 cv +120.566 40.5895 120.56 43.8575 122.373 46.7425 cv +122.464 46.8855 122.567 47.0055 122.662 47.1395 cv +120.649 50.2355 li +119.667 49.6805 118.558 49.3815 117.392 49.4685 cv +113.914 49.7265 111.339 53.1195 111.632 57.0515 cv +111.927 60.9765 114.983 63.9475 118.46 63.6875 cv +119.578 63.6015 120.584 63.1715 121.448 62.5245 cv +125.587 67.3825 li +125.143 68.3995 124.868 69.5665 124.868 70.8275 cv +124.868 74.6455 127.196 77.7375 130.066 77.7375 cv +132.937 77.7375 135.265 74.6455 135.265 70.8275 cv +135.265 67.0145 132.937 63.9205 130.066 63.9205 cv +f +40.075 33.3888 mo +41.833 31.7778 42.747 29.7418 42.65 28.0958 cv +47.096 24.8918 li +48.329 25.3518 50.068 25.2318 51.85 24.4168 cv +54.807 23.0598 56.736 20.3308 56.156 18.3238 cv +55.795 17.0608 54.537 16.3808 52.921 16.3808 cv +51.953 16.3808 50.861 16.6258 49.753 17.1328 cv +46.814 18.4788 44.891 21.1808 45.434 23.1898 cv +41.595 25.9598 li +40.006 24.7288 37.083 25.3188 34.757 27.4538 cv +32.244 29.7538 31.4 32.9488 32.871 34.5848 cv +34.34 36.2248 37.566 35.6888 40.075 33.3888 cv +f +127.892 92.6216 mo +126.756 92.0876 125.243 92.4626 123.844 93.4546 cv +122.282 90.4556 li +123.499 89.2566 124.328 87.5456 124.472 85.5996 cv +124.768 81.6736 122.188 78.2766 118.715 78.0146 cv +118.573 78.0056 118.43 77.9986 118.291 77.9986 cv +114.993 77.9986 112.169 80.8876 111.886 84.6566 cv +111.767 86.2656 112.148 87.7696 112.855 89.0196 cv +108.257 93.8556 li +105.727 92.3146 102.161 92.8636 99.7565 95.3466 cv +97.0145 98.1726 96.8165 102.433 99.3165 104.859 cv +101.382 106.862 104.628 106.963 107.242 105.36 cv +110.644 109.647 li +108.714 111.844 108.003 114.404 109.093 115.668 cv +109.507 116.145 110.123 116.376 110.854 116.382 cv +110.909 116.382 li +112.328 116.37 114.163 115.524 115.782 114 cv +118.253 111.667 119.271 108.634 118.051 107.221 cv +116.993 106 114.606 106.402 112.378 108.048 cv +109.047 103.848 li +111.263 101.344 111.602 97.8776 109.955 95.4806 cv +114.353 90.8576 li +115.277 91.6356 116.398 92.1436 117.646 92.2366 cv +118.584 92.3076 119.484 92.1266 120.315 91.7716 cv +122.069 95.1386 li +121.811 95.4606 121.566 95.8066 121.342 96.1776 cv +119.626 99.0266 119.765 102.057 121.659 102.947 cv +123.553 103.838 126.482 102.245 128.203 99.3926 cv +129.925 96.5436 129.785 93.5106 127.892 92.6216 cv +f +grestore +grestore +grestore +pgrs +%%PageTrailer +[ +[/CSA [/0 ]] +] del_res +Adobe_AGM_Image/pt gx +Adobe_CoolType_Core/pt get exec +Adobe_AGM_Core/restore_mysetup gx +Adobe_AGM_Core/pt gx +currentdict Adobe_AGM_Utils eq {end} if +%%Trailer +Adobe_AGM_Utils begin +[/EMC pdfmark_5 +currentdict Adobe_AGM_Utils eq {end} if +Adobe_AGM_Image/dt get exec +Adobe_CoolType_Core/dt get exec +Adobe_AGM_Core/dt get exec +%%Pages: 1 +%%DocumentNeededResources: +%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0 +%%+ procset Adobe_CoolType_Utility_T42 1.0 0 +%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 +%%+ procset Adobe_CoolType_Core 2.31 0 +%%+ procset Adobe_AGM_Core 2.0 0 +%%+ procset Adobe_AGM_Utils 1.0 0 +%%DocumentNeededFeatures: +%%DocumentSuppliedFeatures: +%%DocumentCustomColors: +%%CMYKCustomColor: +%%RGBCustomColor: +%%EOF diff --git a/assets/api-doc.png b/assets/api-doc.png new file mode 100644 index 0000000000000000000000000000000000000000..bda91157cb461cbef501e98e4efc44690f232bf4 GIT binary patch literal 78398 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

    M-^( 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

    Iyo(X!{LwPh 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�T+Jl$t?2v#O?^A-SM$3K2JI^GW7qVle6dcYak|lC+c-|8Xt2x5$NlxRs9-R8 z+&Ne;<~89L&xphcqtZ|JhYuc6;K*a>@l zfJ<`?ZHKTAy<6gIu*qpHg|Y0)TDM6%?eqP@Y=$kUHNsOcfyZ8pP0h{;g$!(VJar;e z5cVW>KKJ2d9&rmByAvRJAoqc@$$hDty`otryXOuF8`KP&ai%KMAF&lGU+}Qh!FmAz z<^O)0<&YA=)*(g42;@Hkkmv?W_>})oIrsh)J^u>fKSj@QpRk<*7Wb#1Tz3wwy9bpQYW literal 0 HcmV?d00001 diff --git a/assets/gant.png b/assets/gant.png new file mode 100644 index 0000000000000000000000000000000000000000..3e066b400434c3076c3015ab4400158a0ace3c03 GIT binary patch literal 233123 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

    QvHK{1A?H+Bh7` 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�~%O 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:Uf5vGm{K?nQh z4FV++peK%Cz(~N+x8dfv_xOQ6#1fU{-NL#90#q3n&2@PhUPEuXJ5l75;J`*K2E0&z zER|*3Ufuu>as#bc;;j5nt;Q+@kK44EcbDjwSf~vCl7AB4S-0XAA~rpXw)=?|_H~#_ z*Za#-{nrM*cXRq|^z;)OzbpY#L(65>)IMEt#-OlOcIOt6koMRk4{By1S89QB_eWJ# z=em)+rFw0jN2j|jF@2cW!wn9<=b$xHx7p9ST9A?){Le@&ipnrPHH-D8S}U6}aT44T zjf%`kWka7AFTN+L`xFAu81NmwEw;c=X;YcTPs$J58nPewT^A9EEvM^j$h?!RwG-PP zKf$v&LJsCU+W{l5Ed!#h{@IDWzIk>s%9>ZdQ`gs5Fv{9fT7*!(mIe2-50D(pH_rL1 zdSyd9X<4jHd*L7(K~KT(qnI~zvMkTHoqmz>m5Q`)tNYv@Jnsvo0^gl3g*cNPTud!h zeH`rq(+{wJMldkk<1irM3&wB4w>W97qM1R z8c#?NnLgY#vm3vfk%shsiN=qp<^08 z#ZQCgnnn;DVzQaD#|sy>hh()zpNIj^lH8y(g+{GKbhjPK4S$zy%b$(5VhP`lLC-F5 zrzAopN)NBv!CKH zDKl02s4D(@tii{~LT-;mfZ;+subF|T-mcBOww1e-TJT}B+UoFWRL*BA5 zx;SQ;GJf>v4kJWDd7I+{b!qU_2!S&*oohStvq?t4v~N_+w#_^ZyVw~c4%fU$1rcI5 zc9m&;WV~;Z(XmK5Axw18;E}WhAqk#`BrV)pG`y6ve|N3+z>pcRE z|FEYFBlfgGljqT&MzvZc+nw*=g7@Bu)@XT6-h@`GaZvvtP>C(2eHCaEx@zY3^E@Xu z{$3@SP1v6(9gvAK`=U}IV<|2N^&_oYJ1oJQ-~Y;Pc(^@}#W zWScjX2#=IDqS>g?BR3S++IQ6jz=wlAD8%2vw!xcy*tgt z=d#x)H;_9z3u(#7cA*J$C$?udT!Kr+F(^d_3v+6Bn#q7?QG?u!;A25<@Vck_8>amx z`UzR!i?(PF%HF7pI>E)v_Ay;!cms^AQ{T2bv74o*2et%ZEOjh3s_I>?hl4yEu}(;C z)gZKYoU0Jo7E-S#rr+pDf1lsP2nTerSte?}OApx|OQpg=9OJDaZHoN1v-#PU54Vxr z7RSzhbmqOABaF~aZ9xG<_b7&s^Llt|dsQ3#jA%5<=p8H|bvzSzgJRk6oiMMTnAePW zpUe#>oAQ+5K^0&He{hX`JHQ;r|Ms(=uyj3)g=6ZpDrd6xDf$#myt3qswVO$=kaIX2xK+j{(+!l@8T+#>+BvcdP0l9$2|E}q zmq#K+#R)cA^`pG~eSYp!x&mm!?AgbuudV9H-!hx&=j%>Nx21`?V_@#!04PAUd${V*@sds$wZO~DCSJ~!6U|q z>9h1U6`zv~`xBo7)+{Vu)2Lr;`R2vH)-S;c?WNxY+ULQdBJY+W({SwU=amduoAG#v zg6zH0wzewWUgKwa>@v+yYxM(8-k-!{@VC#(+YCAo0J~DV^XX#YBKRf5HbUh^w<_-$ z4zzLhF5doxl`T`qZk=fci5RvAT46f35k5+&D5^)7V8TXXN5aoKf@m}npjGX{Yhc>m zADw9dyfF5Fd%BUJB*hb@8Ux!ZSskd%x_=B0AKJ$BCqSXtRB4ZH3z(EsO7Ds|c&6Zr^Pt!tpSm5KCfzq7ag0-YW~zO@j$NjZQI{pI=-x8T51$4ruh%B32-zq_ZC6uJP~03tfKCr!o`Q!Py?Ccy;TP!>%3B`YG{N z`*&77+)hI2dX?N=&QOAc2tNv(4!Vqo{M|4>Vu4q@>jT_5HvrX!B)hg7Ey6(p=1=?c zDia?89HOkXN)6&f0;%Nr%VrFMvd%s=j z9^67iZ>Q~xRq$WJWjawF)jIh^#ow~U%`SK=8noG72s8PkcJV0gtY#2)-7Oz%y>-in z)8Ef>T9%l$e|oqw)|%ftDctrQQp*YgMq4}vEjy3Y8@6rQ)50m{+nF-2Gi)ejzaB&P zvR~K*t?X5jAY`{aUR3PDAD;oUier;?Z|wAK;l6v_I5vN{MzCWl+-~=KAESd-j>d1> z6WqjM^23XEb$9hrNgw|4_YIO;bT5BZK6vqkMUzCP zYaK~F)s<$0W0>i80hxRElhtkyujI8dU10aU4J0Y=q9++kO* zmEP;1cIqVp%jVS6Nwn{eeQvc{{d?fxr7}}&Tx~wk(QS4x@pe*`-cXme6Eh~C<^V7g zRvfW=dl~f23wQg6$?ll8Y9I1H_Wi6zN;G+(oq4MC@i#pqxu+RqYU5##HBY+{_H1Bluy2@tGCEt}s z0e52<$$Me;LO5zW^2I4YNVJ)$F|EGeO>P^nw6^ftWG3wR^jh_q$hPD5GL8ER6-Qs> zTiX~HirHR~p^nGLSazRI?9xmi^6V!{-OgM) ztZ}g{wZK=D7Aqy`F@uVquL|_D$oM~fk&9^1+E45LbNu&Lj3u#6l zQZ7>>+s=?V=#5y@7PWb;I0Dyl01&p{ZEVa55fR(t{S9ZadlRJJkuJ z-DrwHw9~>);%wE)>TORsK2zd6U{4gkS^$plFL~o%O*seWaeS{NVaILNtdtzlfp>I% zE0xEBkf=Z_BmpElj<$QpcLfA?g@C8W5bxrgpS0#pvE)0Sp0$lMmdAze?rs)xNaZ8D&&tO<_QQGNxl^&Hn`p_|Bj2aH5@r(-2Sa`1 zr?uAk)!mM!YD)G+J!GOg6yyE}ScbbOQlk&cGJD9LiXnL(d}-%r%g2E~ml*R?%jP{B z=0C|7#4qu?E4iS(crS-Mj}wRJ*RS>nSC2Izk#NuJevW@s%jX`K)@^c;lAZFokbQ|M z^m*nyF1EGj6O8VD5e9ESWVQu}y|;aekWMjr@7Gx+izrq0>o`A}KLQLNc*+(pp5aPhvwR9!n-Nh?0XqlXp^y+MDFkVqc$ZD)Sk<@SK z>uaUf2Nzb=7oIXldMzd>W`xaGt>2x&O#uj{hOU?sCu%+uwAiht?S2nC-?EZ`uG9y! zTXgZSR$Q%eAi)VntZH~OGYd>1mgPg;J6_ZHFm?|y`V~Pr6#YW!@4i!F*i>(FUmabn z1a>D+Ffkqx^fXg>A9FQVgI5~Y4E=Icxt&ix`SmHL)H;0ki06|QnJUs$ATlC)-#Nf7 zW3@kB9BAuAI)`t);5_uY>SGrQ=$*|>6Y@^%w_`^);RNsk=cZy8X1r&NUIQscLzmlS zBhn&hV*}32!z61%FtM7t^AiQ0tgG=>zldWX>Y#{FmF9%2M(c-g=f#lC_N5IKO@hhMEsR`)jyfZTX z`1e=jsy9K{dG8}tk+Ia~ixeG?zbpqh(;dH*Uy1xG4v_7^9yD8U0jIi?fgf!}ZErQ|7EGxj!E&+2>IQ zmKBNtC2mrxaydBZ&z)}ecO!Yyd+p0{a_l3g#VD)d=AA+49_a$}_JN(xdxG1P()bnD ze%%Vfx*e|zL&7)@)40rUsoKa*!iXRzD=WVRmJ(uVrTaNfUd3Ec@R&tN(i9pBg9ukh z<~}BQ17kOg%F`S1Q`Zd1O8BZsxK*0gc}{iF(}m$ z9NU6ayxw+8yu!*tpCox(GJfqk8SiZVdipY`1jzvK5{(Dwzq^-6Hc-?%qN$am`6$!V zW`iXI?P_11Le}I!4mB;p1Nuon&`8hH!Gd2RJd2nIV5TCLOQQXPm<;BaEptRKp}hW5 zrrKP-rSMTv=QywYx$=NhZk^MR=MiEFafF-N?BvVWwnARz?7<@fz0Y&3iZpE2@nOQ4 z*_WMX93{-H&U0W4o5%CswwD)`_{%ykB8D_}+%Aq|-;#*v7w%YjUhaoRkFrM4*306% zaXTN367uZ+jt6Q{x#+Zbi+9xkA;}0Cj2aX63DBdn?D=`^fPW%7EbZ}f;Q$~hSWc9~ zZ%mV3e}Y$rha07Pja+!mK>q{4OpWjs$XlIyfC3M(t2Tbh{Y97t;Q-~trI#!$Fh5d22ur;st51f zIb?jbXXr_Vx>8*0jWlG0u_h_`maKDs*!6dQ-l}sC^@y~rLgP4Sw3*|#Id8NS=&#VO zCz^GrxYcoxR}2PG(+~TBc)h18oG~FUV5g-Vgm;d)@L*ee$vm0DW;|{@alALfccD8j zND@I(Uc(F~*|}e;K;>Oz^f-z$Xw;69I8g)1j5W>vi@>L( zfuWQ_8GEUQUUgvv@&KyEakOc)qVjI-m$$CJ(}mQ0w;b#_C5Cwba}u`ruvZA#Q~JKT zOK`$!r)~Ee92iiatM5x67XVJdH&gqkb9PVXCWv>)C)ltCg$uGUJE$tMO& zG|g)+SIai|cIDU*yz5FVwAVn@5R}UIzOwLbm0hJ0ZU`RITe zsG!G~boc`@Jvmz-EY&6=&|JwZ+wvoz z@+0(w*T)48UQd!K_2gL+ZN6@(qr8;%=j5V|ljo@@^Xa;_hv|(NBC|DCdCr+w`t+nB zPNKhw(}N_=KQhBY2~`mQmk3lG@*u}YA0YaKJupRcJxU~eh}5n7lm!(?#6I+1MUIm8 zTkhLkq)rHz?=L+$Hd{bRe>VRN%~EXW?1yI=yw+%<(@RA$G!;xxR`X=vX9-H}Q15n9 z#S8R(X7bv=`++j0Lqz~<&|oLxct}#=ftPnI4?$2`?E+u2vHC%cP3hQbaT|bQe4JEl@v&fzA00Sa&f`d}aL5IfL9$2~LA*#TNT_YM6BPsj^1bJ+NGe|K z3~2uOrW9RxLAFb1eW|6F9s>{SOUmAYRd8EkaGao9S8 zGiW%}l68`v(+y2$dO;G>xmIu+0v8m<%ItmEe5MFuQHgz5@ceb|b={YpKqOo!P7dK1 zrY1)KOTddxn$&UpI^1d8ko)s*Vu>P$4R8HXqO)Sc_D&!>U*9!I`MvurHD+IEcp8Zt z{cupf)Wb?~w0EgX!@>ZUyZd=LkSkaA3)lTr+hf6Uh%=oG%`gq`OZgkXS^8~zSS2me zngdUWsO@1qbqFj(Jj(e7$cjpPALf=G!E^r0QNwJ{VMaRW4NvRIfe*H`HXAWDw8xXPPD*S6B78A{fygI*VNOf*!@ORC3X)L`p-BOyRF@j+|> zM`69#BX2ZvIA)ilC(|IDnXf0wJCrFzC-lVBeg97M)n!*_X2xl5vzwIrFbXsmQ=O*5 zti9hakxKU$@S+k?76BL~H8Q$WF<%)^HUbkzUGm?n7mwV*dzc<@Xo@+COLUKe4ivrb z(oLgys*qXfWQ(}C%$r28uDdVd-~{>Y<^u?tF-oc&9&>{<%q8AUU*!3HLtEM?MHFo{Q+B@D;%Sp2dss32~%CdQoSB5!6@H>S$s%V5J zE+8phnoVbNgbV+8T@LF^xhfYqN~F49MmI(11ELLU$6)Jp%ha?vA zTmbe{h-*_{cNd%qy?##f4~nqNR?{jOAfMfw5!px%R*I9Z2}CeQB@HTtC3PWnP)Grj9>q0Zr*Q8 z6HC2_^-EM^=8B9cd9nEOnp!FGnVp$>;jw?lazH<6Kn&25Rhj@LY&;)Twvn`upeK~T zn~*@#M#3YDN&B6J&QWx`5(p^SG-ofbGl<=MX?@5!rDq6Ew4&}r=)~{q)x9wxH&G}EMYz0pwfXwOvzx_BXZQ7mmLKcX~}>sTQr>WJZx_GKCOg|ISY*q z&ARAxD7l6R38?Ks6ssiCI0(-675zTf!GNe81#C^ZA zSKYb0!2wYDBGE?R_y&6kTdl-vs>E)lQTx~> zz1+(3)r&lQ;VVh8r~~NZi1kfZ8WXmwbo{tT3Ha$O=$E%dc=tt3?Ih)Ezf92&UXlJh zcX=#BaQ`jdc%|qiQ%M0@7>QNIj&KLXLtRR$jQs{2qwzqE%x#)O*1i(T!Qg6s5dZc!R%mL(0M7 zLrfqqAiaTQ_&35|kNg|qc#y`usqx}5_2MqgDUZwDoU6z4wH;wwM@UsN5 zM!3>_H7_PInZCR@pkdO?<^vwVANMr0UNf6oBZ*{YD(OT^n19D}D>Aue4jtIpA7i9~ zv01b&`~4KU`+^Ugr>W|H=2nz8qJ3|Dxp&t_WI{`sBDs1B5u!4U)W0O6AXzUICbo*| zw)r5g>R=l$w36gaiHX3g02t}KA4qmMP=NQX;Tt7^O#R-R#c!+ZwbmtdSXnvK{4|WD zztC190xsY%Zmd^k`Mg}+C)QYDv%y=TIGB))>M|qUKN(~xI_#!6w{nynW>_T?c46IvzAjAzT!Z7r8G( zWoeo7(PSW0s9Ft5J%N^_%wNznu6dUBl_h$PkoeSb@qQ|Y$k*Z$FMdLc-5koQkmZpi z+-j8CAOyXOz>%21@x6WvVrev{hrOiBy$#=G-;(1q`hgbgp&n3aLn6?VcpNDp+!G9o z&5ods@R7TJ$xG*zxB3}3!t78dYnfiapy0WY7oHE750Z6Ie2|N^c~6w`HqbT(yY)I} zbcP9lCci8-!WLdgGiRV}p@pQp`6+zrcFl8#wAX($k2A&ycvz#ls8`~JR30kYbaUUl z7(*61Ho~CFAxcz*rXhmWRq>RCg9+zCP7J8BS0lX_L^S>O1|q1`Sie5+zaDkV3{>;b<*II6Hxar`$&~0al^BzAOc#c4rSJ5ipxK4pgKyGYP!DKgK=l1UR z()SPVeYs_uRtu=6@^;gWw+^o}INBZ6AK$@&t!Yy`lY89aePr1$Vz#0OncUuKrG%SAO_yKSFN+~^nOMjoqKPV7r zmwcUf+*2SCu~o||0W25xQM4OgAv=L*6o<>0cWTN~smB7PS8HOyddjvd;MDPOtAdsGkv z%CtGz9C}?4!6S8vS$i-3{B!2M%#)^404ImtOZi)8Fa|+kt_ssS<~Mh>+|vz!gIs;9 zsB-bvKuR14p0h5Be1|~tMO-xglql(CiD3zYHKIG|@0U7Z~7_#FZmTfK_B zC&uQ-n)wZs)>!7V6zIj6Od|*LR1s_yF3NeewGlVz#5J|pY00Z}o4~`GA%hF$pw|tb zx$=lhiUVl*=uD>FEw?u4mn%6F7{A5sb|i=8z8o%v0bV-RsC5FMPwI*%qV{&A6wuX5 zZlWMRdHj6laIv#+oAw&z!oj9TJtzkqx|cl)^m(4c-zq7OffRO18&;X;cnH}9-nbFx53+UBvAHgC$z!!`bp(mh3n6p7s~D;5 zdlS)1tvPx^s&79jk%Z8jqd+QvAdG|^57S^4g8ao2MEtSxl55x6c*(!Fx^*SlWeY+qUn{cZudvhsfDJsvbHe z^%Bpisgt!{g3t5}$tw2J9Hpv$uF!h2F;jz0aZ0iraJgljj$(3k`!1)RPL%&B zlR?uV2qNWK=zcfTRGYT0ZQ^{~{iLS!5bgEYom>UXGSw0ort@%*=A5Q|UXzata1+h`?CNDKK z<_odc;%D?vz~PIMVkAxLRIWsb>+8x>ho^{ZrVM(Qh)>8SFHJjbv`gZT3K9vT4kDaa z;%yJ>6?cU@GjM8-pAY6$4v(|Yq!vU~xAB>_d3IhYGK?<;@1(V9^dp{&*+X`cUn zDZX~8UWiBPp#LZ5(x{|xpI0Xu*-p3FC8|R;%;zyM*J4!L0*Z3hXP}jAjg$)NURk#RVy9={)z;BQ>dR7qh0kw8~+4mO}LB5Uz`n0wfPY@cCO>7#+E> znAy_0qfq41lmJ|=Y|KvHel${!dUWNJ$TTQ|gC5<};!mi5{2!rS34CN1 z-Y+i%!f}-5YwIs3yU?%IT$ekJ;mJeP);(M-n8_{p%;@|NKjR^0W0QoZ4%E62QD;lr>Cu3Q`%K!g%Uf4EO(5sDz#zO)|2}!Ks{n_I?7hR8QBv=H}3Lb1z&5IK#|0RNLs3 zMYo0}w6-(n0e7;JWtYhq zTqqfi8w4aVB#I4P>O$Y_9e=MSs04|yhVBIMp1(?PSIGRLC(jmK;IrsN z+=wi^{RWA|MUnu!W3-?Y+djeP@1B>acuC<4HiDWV-Ta20m2GEUG!6NyF--pQsC)n!nph1HEJfyfRGT`*smJ5~ z$khV8DZv%QYH|(9e@9^;ocL;@*-Nv-3XNfZS?G{5=v<+Zfu1%_xcz9d&&u~c0>`fT zDe~Sve^JEtg$K)F?*;DzofwbFjqZ`f01t3x=405ktYSh3!%4G|=2LltBa)s)=6udY z9i5+X;wl%3_eBAg!7Z_WsZ zSf9q_jgp`^m;VHMFr`#|=6SizWUAW#Gi9h}+cio_kpDt5>1TVGWpSM4=Qqx~n9Xzw z-4Sl3hQBiMWiJ7J4`b1b%2v$%k<#zKvP7sjvXo@q+rRChV0ONfsW5DwAyF=;hf=&R zc4R>0@c#Nn##D2Uzih%j<6|^%7g30~jGkck+GuJrRJJ*i2pq%%RW0+rC9)d``TgnH zCi^fKgRdR>5WB#uXG-X-`mJ7YY%5}^6GuN%II&JPYMIGjHlCPSY>IkVjqJY>Tv1&{ zwlV;VGMA^TvNDit910!Y95|s9SOy4dfRT;l~jwYIE+>u(^DNxk)XBKeaN(QGb?epJ=yR z*<9O`U-QML2u3%Rw{^pKktS&9qsQt;stwkX#jLaVPSUOpDbn!Zgj5pRvMxG&`WR-H z5FBUQP1fX>8!gmZ@7j%v@@z=9l2W)-tLSuS=_!uy2{G-wf)tVD z)wLX!2gjM}*v8<|p@P|4ED!$zjla3f4r6r?yi$0d9em)}*(mV}`VrH2xB z_^TNOU*VX;DJqNeVFB=5^p1-Tgz}DT&us#vu`@?8`4vau-iVa+YKRQC0~sFWAsM29 zz!pG_z%n?wg$!1IJ5upQJY1HwlWMWyt6q;fXD4X@c8M2Sa0BkS3P|b#kA|`XZ-ty{ z70vcqNCKVEB0_+M$e$=t2}-;|X55n?Liub3>q=o;MzC{jHITZk`i=FoPWHjiKieF@ z@0p`5Vic#l9n&ia;qm7f(f#j{RJ&T_#k9n$|2O&2FOV zkjiK-g`u?PGKA09lw$fGyPBSpbJNFF8kNxd6JHIu82XxI(GRax;#oIJP)y~7{pwEh zi-H?ryHD>`+U~6nwx+G)xno$9z92I0_uzayZ#B}-eIEW0707Pdf_SDEBNEQpgfHpXY;9xR+G1)DWa9Q1w<^?(8 zMcQyum-n95-7g>;C^mc#zFX|S)-_am5xmg*9IzFB-iY)jTC25+&OI}IPV*k4IlbiN z>qs1jUU>aCPpeMt$-FzROo{4DB(BzDC-C~~2TS#0oa_iiE6;udY}$6-W)GPR??rbC z8hU$T0_Cx9L+X%fx1HxZ!6)SU`;%pAIJ@6$RKF{-3Biv1$OYZt)@}-A-lj(+m(=e~ zKP=uICK*dd?_Hnu&`b^d+NoZym;e!q5-v|jrBsvf(A$PqjA9AsMWeecjzVCsQ`dhlo+YiNg|AuV`Lc_FX=cTOrZ9 ze!=CLxM8YE#?QE4=kk#szE+ujg7$~5o_-cH_9j?V0@}Vwmdeg}g&A<mPom^quI+rxKxO7N$9@`l#Wr64nwjLS0VryG zdi$B311tPm{Bs`T3|X=dAy^ntm?M+_zB!M>ud}V+$@nA{*d4#t&nt`;Mo9%E(+1n+ zBLUqke$b`lh(4BV!(KTVH5M6if}76i*=mO>LSD-*;h;w$j5`>#at<}pVx}s;fg1{S z_YTMNf-Sq=GT?ElRCbQ@1SD}8_Y`r5;jHLn83gWp6z=AzGZaE%kq=)*d`(>5Thk^H zh{CkJs*oxkyvy3jXxmF4>MHUt7l7;yJh2@KIUFvz@GXVIYUEsvrXPa1kd#B7JW@xpLnDuzEK zFrw44gDt6j6cceDiqTroF41H^`2{|3y3C^{ss?cfQ3fdvYJ4$0dDZQ0Z~xPH%K?_j z8s7d{44(+k(Sd^5m&Bf7xfU39d@xP909*3`}OshKyg4W#y|(xR!h4CJ;*Nt zc`lMV{#l|%(6O3HM-!S2E>YkH5U_UtjW33anYdwOVkb zqd>#>A9EyX;7c2LgMgPHp~4IjSeTNBwQb}Nr+2-?$}c0Y`{GNYJlw9|Zozk1kj~sm z4&7CgwKX`P>SH@X2Z$TU`MQX}h+GO732#x%wltqM=wyO}yRG z0y*%{jip9;U~nLT7G@+%-J7k+z`gOc?NN7N8Pi8#UQp)s4}RNeqyq43xYXM!+XG?p zF53u@wj3Mzkbu5--VmkNB#Bp-Gl|-oDTA4X^-OLf@5j_v14-rM#M5lr^+6{O@A=xc zSp9>v%@vcy=Xm3LAV+f*y@oB`$5$m#`-8wMu{dFpyvcUASf-?S1_eCQJRAxSIk-+0 z!$fJ>Y&kU(?M;5l^MLSA5i8LvFT#)GjOWz+jD?B`eF?|j-{|}=w%#(V$}Z{_ z-n4*#64I%3cY~lvH+$110@B?fpvVJ~(nxn~x*I`2xi|nyYRUBXz&w+-SY#&{HH?Q zV3qfUkHy-YmKvH=j+TAQCrUlL5MxQT7xso9H`Zqi8LBVbNF6*-9O zNYkeG9XxVhaWs&u=gm?=!yIn&!7X$!{O}BJqBL7!O@U+g8d+9@+@W>Pz5ZQXHv;nZ zKD4)v6xEJlZ=Wqrgso(#>Ny)6r&YknfpcyB1L;q+h_nU4NOZ-gp+1faA86sxeOL7V ztSn5Mg%Yo{e@VY;Oj1IPNSv+M!%i;qg`-8pW1g?iKdBJ2rM&)$kaVEM-G%JI@@ckC zE3mZtM@1@2^r5*AG5s0+ep~1^2i=~49;FEh(|M=KlGqQli<0BSn$ZgabX}r(M2+5eYJmD8`I2umjf0dzo25(Z2f5_ zIL+xtkU~s`CyJ(CA9JfL?*!&4^FyU#m5UjsRb-$gYL89wDvl}?E5pJqJ*P*?WPsIG`P@T)D zx5Y=rP4Nq@sjBZf8+p#F>ZE*i#{BeNh=5Iu>+UQ2s-)3=57-Fd*)dZgR+V_Qa>%AH%sl>kb|F=ry`-6_RP^q8VXXs4 zOoJ8*%y@aij-w-_pQf;@moyz=R44pE=+tBCveZRb^mN|O=q=w9ZD=MsTySFKH%t9dosz9-gUNwy);aK&4q%%nhUp0|aXMXvRi!1*(AL)SUVB}H zvDLaB7H$xcYMNzVuAV@2h6SWZh8y{uy73EaV;b>DR9R&bq?EZ4Cz5SJ63}4LPy2tq zs5c(k&0lO%u?XOq8Gq~Q?KeaQ&^Nn5V08^x2qM{}WlV629m9H5__7n*>f~!F1h`iG zb!g=fsc_IxOuW1tRkN{x>$1QHMu$A3WuMD&3&waIm?8Wz*~oDLzJ`{!peLCLZEn*@ zcX(g9$)-D}rmP``*_$_rLOC*YE%Y5$k(29)Ztw9fM|t#PMNOB~W5aw@WuZ8hS^aSJ z3*8DbA$P6jRLe=pv#&kYjA1vgjgZ&I(VP02vlfBZQ7qy<+ojFTO8vX7&|uN1U=Ex! znr6-`189Cn!edo*i$sMYk-EF|fIKsmS2{q}c-bRUXHzi(UC*65XA`vkAK+qf^5A zMS{$P2G6g3Yp0s8#P0hXYf-~x3b-|a2raV_=Pi#~#A_M{a5olCMa60F@!Ht5+t=Gq zI1tN!dUt%4hDS2wz4)$tgMny`fm`FgORqMEn?n(`m6$e^XwZxQl4<*`-jH+WbxT3- z&~5t^YdB{ZEk$reF+$O|x9CW)Lk}5#K>XZ@mg<1xZKyu-Z5vZuY9eJIf#MWFq!b7D zuT>8tO@9~YF8+0=`iO|ngdX?kCq19hi5R&G^!(2p!AORgW-nNg1#(TUsj?lqKjW2U zzD{Mo_PyC&=&eR7i7^9IB$q`YSpd2RKSL3i-7m5{XOrRniR6XmImKuF<3SCj=qe=< zQq9|W+%kHpk6+DW3POb!l|9K8x5JHV`{063ro3j;S)0N>g>MZES|p`@sPuo_?F#c# zb;{A53O}&*Ay9!=%)Hj~oTe4h9x;iyd5~JVZA2>(G1K>EEd=T)+uEYmDj^Cf%Hq)P zX7Ts)wT*iYJNrdd7$T-`p;Eapr#2Kq1Z?k(g|+@6i{%o!8cv2a zwmK@UK&Mbpg1>DLfz5RsX$$;{E*lYw{N$P$%=?>&{0S!bK9Jh>$ZM~R3sZNB>M-+5 zDY*-$4k$esE^O3`W0>J)*+6$BD%B zZ)nXjZ4vev3(Gg?T^8FU0%g#!cQl`R4T{u}-s+xsWm*=z?mXg%T|gKrw1J4aK*~v| z*6h$UV2#-*bmEyL*0VL_ej<74bVW#IFGwHdGRDPE@?GaZpo!sB(O zC-N-3%eq+9g)1I&6D5%Gz6KJN9j%1+)rSuI#5RRIm!pM2G%@lXw2Z6k-&9>7jg7U( zC;JhIW(>9+6}+*C3EZcJ*o@CV4bXWQjlqaRO{MS9Y3d)- zL8ZWB1a)7RGoS@?L(4zU3M`I16Z575jb=_Q{LWm8rex9kmt8*|z5Jzh%=~-~$2 z6|0xjySy)>XE*9RX_v*Lm*ppFb>iCrHz^t^dloa@_5P4^>Vf_2%hwLD?X^D5e8F4b z1I*!M%AHNu!qR%zvA?=MbfZ7hagwsdoitJVc3SUOf6^!C@3jA%SZvPbm6{Qbmq67g z?S4S^Cxw2jBLjeO-*|GTK!*R@H+hJubU1n37dr|XU^|c`aynk>j4BE4_HN-X)hq7# zh>;UK-EJDAKPxT7101ikuaLm21aISh^Y5d=S!jocQi+O#pzd<%X)XtG1S%RRcar6g zB_iBPXsRoP8kNS|FhXe1V(@XLthN`Q>8q02f4Aewzr`5Nuk6lj>h%)&D(`l2SjX3c zsnvXVIm?l~fWBY2FRSMGnMuNYC>b1WC4Msnjfh#(m1go`NfVsMXR`Iz!tw3qR=neC zil(dIqa1r^ecmhu1ahS8Bbjb8TA)B-YK|7aSEEOSbWMtNs&fom<@C048Wlm_%Z+u!+Vz+U`Mo8_qv zG2afXK&7RI9#FXYmFUD;^*$!D7!Lp9IVxJQtY|uHy-tudJ)abL~ z^6YlQLOKnVMub?VHYaB0;}4fk#kxT!Pv21R+I-ISvm8h|9erTo#jFXBH0_I*2U<(x zlX+m6fLVkc`eReP8u!;BDZfozh>AYQgg~$4qnMhe5ZpHTGFkj)eNevwQ6+SM%l+WF zcE#HQlAT)rw22dov9+zD(g1NS?TB{Eyr#R`ATCnW6INZGXtc-xFjY5q%$2@8HtVz? zZ#xw^HoaqP{su+E(yrz3NsMJP$KfcIdwlFzJ56rPlM(;>wgLK5f5_G9Z)FR{|5MpW z{#LfX!+u~YK=&G>!o}B*U>AmQMJ@WXe-6{%5mC|u4ApVy8}9lMKopFNzGb4qB+_GN z4?$DoXcLK`esOb!V^q^>oie9lF7d6Ei?OFLe+FW5qTpBLd1_e{B@#BxUCC8$i~Dd} zzHg9RIQ#WlNCUY~$=g+>ea1Mihuq|&JS}7`52gf;sr%S8OW=bK>j=fPO%I(cEejD@ z2Ne=Nf6f%oYiEYzUj{d_+XeAYqV2!KM}&#HFQOF=W7O_2$}F5Zks`s?nKf@h?O045 zaQ&_OU3+eCC%^2=0BXnMqm@+s12KM4tKB9*!yRM6N$^yR8oiGQ!>U=Cz6D z_y%VLIbNhQh~T=rI`Dl{OQ=@aNR-0i*n66wS}s=bZoCHxO@uO!HoP6%2m-^V-@Jlv-9_ zl<5YlwnC1v^d^;H@t_xU=fVSEkVVD7s2a7>F;ES$!|Z}trYUo}OSkrs(NkKQ9rU6X z8$M90CqM93q>P=7@YtsXMX@U3bbJ zMb*q%ls<=Td%E^YjG|wTt&H%@O-asD6QD1G_NRQu`1gQ);*Tl*=ODnsy4MQ-4-0PG z##D1b@MilOkr|4C@_`S%F*&PDr&-6g^@guNqx`i7qrY#50GflOLpWprTtNj<7ILJe zjxIu^J5o?!v*R6>*dlP9s<(_d_}oTouZh)~J=zRKmXl}2?kPy7-dpplnm;G}6My93 zKQHUS|MO)DwYJH{3Q4RfN}Lf!*pQVa@t{+{ieN8{UA}01@95~YlUWn(atGGC7L@E| zmsD>X3|Rc3D(SEUpM0wI(EBovvdLc)_NTs;J;1O0GpvZp`@e>&J|YzTSk{azJ_cq+ z(J#FOaKvrF^q+DnO%bfvza66z8Br@G-e4m!s*I|f`8(gp#oKzmp1uyIJRfPUcWg2~ zCUbO)#;0NmQ|tI%flzq)k(1Y-zhy@m7Wel*)=LLCGf;P#|8I5IG8n?UJ6stBeit49 z#qv*t<358jGzEr;1Au687*d8|6_g1P8951jjRqHklqK1K&r)P^Tf=8W&}wCyz5UNs zax^adeV#!ukP)UVIe$r(@He#WRq%EDbiRJg+gxn(x7l5qkT@L+LEfF}zlZ^Ihpwk3s`ldFl@V{4}^5+2tz?dk| zw*8O5Z5aig8UxG*^bRnJFp0G|Y3<;#ItWdV?~) zv;cUAX&CW(ow3NHhwdIFlosEw++NL~@>te?3rM>At2Q8(t}43!{QsX=Is~uGbNMh$ zR!8Rr@$HYNgw}G4MWs#D{CYTn&~8`4>~_oRi{J{g0TQSd^c#ymVMu$(bXNZZA^U^$ z(8~*TS*v6^pUbn)Ts=L6G3_B!8ccA|%~c}n$QfB{c3<1r+;6N~&(QyQ<(*uAHkS7P z-dL(leiL}348`Rlp8kkM`oeB~fWg+btv@xhSXgRDhNb!Nz2dW*rvcFGItm&*;jH%E zf^UBGE4eRxHre~Mq6l!dtgHTLzEr2%Q#jLS-&{Kn z?6!Z7GAf%_(hhzPS?gOH;Gd7$6ZP!H;(z!V44kG^9>0{2{<8~OD?8*W{_aFfzCTaA z`M*^Hs-WphX*gXCrl*)ne>Q_uY{j_m6DnSbCEzjtOHp@q=$-E?3f~O`cdhC*1U(fB zml4asYdLKcSd@{J^$7EiNkK-= zi^W>YHIm;w5z^oPc`P2sT(VW#7J{eiAggili>A%@TPgp%J7#Yx?NOiMt>o53aZz`h ziBtEZO^HgQ#{*tPKQH}i$xlR{a|%Z)ou7;i$pm5Vu6fn|WFhF)d{8Z+w5x*O9X&g8 zhQIgD4YNb;lXo(##vytH=H()TDC>Yj|ig14BRo8nXu`VlW5!| z9DWoyNjFnG-f6H>&rF>KH0Fxj8&jQs52QA!$A7ww{{P)=Fu>Zjg46myQrMesE8=lA zyR&j?o7ux1#@4DwZdND^?lj|Qnv$sbAhC=44cT>?f$t_k{aI4cp`TZf#s^7sr?PEN zgV@il)r{^Idqhfj9La-mfbsp_xZgsb47_z0S~WrDHHtlv1_MgO)Gn(5WUxSjjHhq+ zt+J_kUof6_h5fCh2U5uA%hRpi6t_8QEK=UcY&BW63Vbt+hr%C+%MV;tXvEGx99*W2 zML>$M$%USoba}J!w2Hg#2;jql<8e12uLbH{4!SVm2Jd!RH>WG}9ujjAfmC}5SP!nb z`Je(aRm$w)n=EB8b^oRwudUE&T?xD!-+DpwKAH3%_%Jb)nUM0o>;GCB)Qwvc7?JM% zt*ArR;60ZjZTq4RaChW7>WKOr6Z5S0VKadN?P<0~j~aUE_u(Ks5lE_t2X3YIKrEQn zlHZ>fH62cuP(xMk*?w_}Qg)E>24I;-!2J%Ldz?2GDBy$qFY)BuN1xJQm3`V$`2@lr ze=EOZBaMQ&_0Tr20iX8Rk65H~Am@*O@7XBs7UsrXo>I!^lM`oXG)R#};NB^Y0TD{~ zxK13fb<1zhd!_-)N$`x8L3<3xyb_P_UvEnmJbtq^&gl54Ywg5uYoWEZ%5FiaRPjTQ zIUb_J9wE&lI@$wdD#3!LpS&`&R8L>jP{lg*W*2bT-HL#iGL*x8*7$epY6S+(Bu(%K z^BR;+zQXw-ERP;lM}^GhU}`3$7Xsat7BFSRZ7b{nBgELdn%G)k)_-Wl7+NJ-fV@$p zX}r2S*|b-r6M<1=+P8K(g%0;b(!%=exYoP5&;gY@3`na_@hxe6ob8d3iv)|NQ;ccc zYtR*P<1|{EqGcJq8TX4djH+?`+YwSN+#enLkp#V{0FvQewVug zj)6xn zNqMj9QcU962)gbNsSRQGW=dhkj>9`2 z`p;%mHC!L{z1iOrb(}VhmnF|e#pR1(BbTw$D9Z|ys91TI^#Q5K2`XrQ-rLN)A?Phr zV>1`d_k*gcB1z1KWYGyv7EBtQrdL_c)`Z<>(tI94t#>%d44`WwG&fC&Z1y^DxAtiU zK30T=SEijIYmO%y<&i;9;4qy*C7e;tzU78Moi8217oihk#4Q+nBa(nCV|2RpWwcV$ zt{$O{i8w7yfLP$;OFg-GCUVc|%$h@ipzi0!ybhz!AVtDC^6_k6FLdRM;JfB+Op_00 z&i-w|u*U)L|sN?FwP+1(NWE93Rt}s!biufT9orW;t}f5y%@sO*xlW6`%5n2N|;G z5I1DgCo9d}QgWgS-fA?c8uMEJ*u}8w_4dz4XCeqEAHTf2y zQtVayz+OhkZJTaN&nbsY)D?NxS)3xyRepqZ-~7<8UL39*)vl*@y!Xh3>y@j8OIo)K~K^Pj-|8-t{Rs}h$98fW1X z%cK#LRBee^HW6P4E$jukzTx9-^+#V8u5s|+Y#yCzE>O*}VGb8F#k__}78p&d@D;pf z89e#WwpA4%Uhx?h0@HSUK$Yhmh%riTl>ItK!(*?WFx}dUn*W{KKP(BgDqm%Rt!$2G z7)i#sg21PgEUXu}x@G1gb}VAgPx=$B1No6t6BFrqP-?8E22~naKLcw$1p*l8isHq5 zfMrQbRbh`DvO1@H9a$GmoipkT`8ri=8mc`E;_^yu(G7-XAI(h)d+x{+oxlB59eUB$~NYgo4h1IjpdCE#2+;!J?W{B4OZND*Q$w;%YoS)$;>hJZ2Y!Xs&D z(qDcjq)_)-)>b1sB!jloBPlfAV}z(PGI_q^5Hoy| zA*ZoBOp31D3>@m>rGxHdJ|b!9^Iy!gHDli~Mne4h#83#7lM$5n9B@SL)OlkuOcQeF z5S}$%_L6d;r8)y>noc;1M22l7TUI@LTtX0O4ShmZZ;CYNBDKx-*LS}Ke9;rGQSL~k zTBUF@F(!~%8K*4v8+kZ`I`nF`XOFxw+iX|IPXa5OY24QQW*G5?Vf4L|F(oP1zQ;o} zY_bn`(-_cA&H-nVQ4;i(1Y8ij!)!6%6o^=iK@dstg~Nvd66x-X+hsdnAys2LOUIhT z8-13L<8X6{b+jkEU!YT9Ra>$l9X6rNQm?>usp=~-hq0gRwwXr{d5A+P_>jF}&Char zwAzc%;^WH2@-aJ7+m~-_vZl-?Q`pZpaTg`#9$ZeeAsFy*KIy^&Sj-3p)9O zG9h0U{ZyYbVn$sy+L+fqY*anwNQ6gQ820%b2vs_bW+~SXFp7dGJzk>fi$7N%(M$4L zra;>3bw6A2P{H_hP}+Qn8akCH->pO*Wia&!kMRV8T$p1S{ZbUQ%VTI>w8DM~SGyU+ zE@?NsEYv7@7z>r(9Iwx+vYFBu*mo*?myNbAxhIyfjQ$3FF26*l{56WgR4rKQ57m&p zGO#=mV7zMokjexqgm#h&-+BXcByGg83toT@S3Xf(TMZuL@|t8JIkAe2qTf#DOVwxL(2RHjCdHfesZ2qL4%tOCKDsV47An) zH2}h4MaA6n2TjFae~_z?nZ5JW+K!B_Pl6BFHNnR)>=C$^k-z{^nAj1_@OU6Q{fZ;~}2u zVbZdfx&51)a57OEC-b5BHI+|~5qWJ!Uz+#9KLn#COL%3HNxO^wKy9Mj`B9EnSlAL(f6sI?a5dw2lHJ*U-JBZ~(rOT^Q&<|}}L+Wl0es}>tokgq!>IgADJqbV5+5Ru?085FfoGmSKzpBK z;7CI*w?RUxK`}yl+!=51IhTFn{D0wMuk~Tl~l((Z_Tt@`@>oQXiejBy75MZDf4R1yOxJqyx;wx8mh;3 zw10WjHN!Mk_-C-R*7bm{PfPSin&XSMt(>VhD_vMeV`<{(cxO!L;@ic9JdXl)kXby| zax{&O=2S~s&Mf=2G-3WwTfb+c?<>Ve!b=VK2s_$~)iUg))g;rNj(wZrecqDRQ@Y zTSos8mzDg<5U_Fb%0NPix{NVFNrj_VRZLs{YddD`zrZ2IWBd0A`kiLzETb*2+nB^~ zHh~PP>Wg%>(_dyrYJ&WebWWzLWttQ%GvWThG{nAILZPWB8+vpHOYxg8Af4 z7JqPQQSI0VLrPI7^OYuu%ri{=NxZthhV&Vx9yX~Z@!J>>MX&t!tlOb9uy=pR?WIH{ zPE2 zub5pK{ZZjZW7jn$e^0e5M8cM2eD{mg>8l@C0bFt&Yy!{umnj5emtK}jcA#*JtxE#HWNF*^R%Zq`8I6$;&D2OnXfn-M2s?)xL`A%Fd)3m71IdZ*y?5zQbBOAu2ks5Fn z&Q(F;?E=k>Hl~dT*{pqK>34K4dU8fwB5-@X`ouSY{Hrz{vVEr{m(B!ddv4Teg?;;2 zs~~8i4&9Lkvu%swxa_Dj4}2f)xc>omFUY|65ksr;>%4EXUz7p9!gW}{_Wl9aCH?)N z)J2XMGXqCRa0VtO)e8FwDHKuceOI0&HfTjm({*nV1ctVn5kxVnjabn1`E&Vx#;`xM ztW+Qn`u@@-hfoc%4`8g_u?%f;N>AhJJIC;0MNnPaf-3*-G7%5XL`#00ZhX--SP@+8CR zIU-Z1BPvWo>#Ot4QqY8RO4|TVEUEc}v#jK%%f}hxQBQ-`#+18dd>G)Kr@aVTf#eZ2 z5z5^}1A&Y~0{Cu5o$`wIaT{-6Lp8QP0Cz*gqC>~!Z^3?>o`mw~Cq;^Yy&;hOpEk=o z!ViIY;e}2*;{E;o{&D;p%=P#I7MJFfLDj}oLQYL7+!xUv;>)jxJ6#)engv3cdp;la zG9wtB9(2f{!?k2%ANh{Yl{(V!;>B`ez_(~~+j~XexOaLFfW!oNjz468L*RQ7a_KN-p#^Rg?9o?%TF4 zL_}C&83`s%k-Fo#D2G0OAT+yAW;_in7$J?C%>U}1FxV-}vp-+uj>5k~*e&+-0&CUH*gz659MS)&FVcDTgC`=zT?CxlEiE#u>OndN8MAlY9E%5>;DD2dCsz; z>6LqTz?ewv^;?Cf3+ftil327Qm=-3~}}BvWA1h;pp9(xJ?@|Ie>oc2oX7fyaU~ z=3?j7NQ~3GKp-|eB2xGAi2OM94rQ9H=`L_9U|R_Wi&IGB!z_E#syBb9R-oE^Dag)2 zGcmB=lCp55U>v*f&)T~inR7~Ytu^u7n!x{R?L8$chQihL8mxrirM(&6Pq_s1~~Mq$|zAG@LRqgP(t>ek}7N-Nht_XOv;t|73!7FX;8 zu%uTKH->)YmL1WD!$SW4H+mob5Fue;QTpQ0->;IPbr|M<$_tz1rzwGf2=Mj{8Ic&? z&WVoRYQyI@P71x*&*U-GN&(tI+Z{nJZAmCGL3~QSB2?&(IKDhYDPlYhJog*H?_a zq^)InE>#{pp8>Ir|NPhR{$}TePxE4u2mD)=~!p~ z8X2)%3NzlAuFFz)6h%IK^d(KX`ZhJrHsL1a+L3UIx|w z_n(otfmS9&FU5Klx+7j@sAQfNR|ui$$w3f?Xkh4?LiPM(+r`u#e6wHvz{uq`NcQ`1 zB?1A)8bkXjPWCE%cXcu2#b}W^&UBq|mPVnTtmR}rBM=wFR8{e4w|EQEb;!iU73=i0 zqkLN3hm;#aPVOaDvPp({E*RYceM^bbSi zL_8Ei?lJ&8cbRTBuMKtg{xDvmd$p6!s>EH4&-3c<3oJ|*aiM(Vr@e6;^!8lrP;(BRB?om_0<7Z8f1H=_g5 z@}WE3o`?q6^=4>}E$*k}lJ3Kg*yZk81n@=vN%e<#D8uVr;wUhrng>iv?;8EmV=cH1rVEfMS}S!Rs-~;#du- z@4S~N)oS$QI5o7$qqGIi%1!9M2S?MdrZ(<>X44k}1>c!E_~=+>JteV3npj46;IDq@ z`uq@k>n69tdoYnnOgd4m-$+fSy;edrf^ zeK7L)tba0q$!<0agFiX?3D=jWyO3^)=O>|I~80NXPo z-dE+KB&98!PSd(rD+{w*kQQ_%>hBW=S8%+gDDI&D{H`_>zX*x>S zWFicjkY_ftHTu8U6WHU=w$V@~-&l-h7gSlyJ{dO6J=vX-p1&Kq8qHUIQJ~q{0@rKN zp;JntiZ__S*~-@__~&B5^-9Ivggkar-Mse$I^OE|raIT^N9qcXV>64N+2uP6wUmq> zOgXL=oC{FeCYq)Bf8XriGEjOSi1|S)BxTqXTKKoEXQ#{VzCP)oNanAuChV4Lc_EPLAR z@vC%5ZhAaM;4I*Jm+87m%!veN*8PFOJ!tdxB4TxEsl#;m6iG5f*C$fhexjJNtv4r- z^+SO9lhLk^a~@wVnRb8H=x$AxKE1m=zp8lMi2+ninTQdgp%1k|YBf_?jqL&(pc|qw z2-MbUGHT@j$-tXCQdq3_zyf=`Jjk)%j^1|&SQ@fIeaTFHBMi8E&`N0 z$NTpY*HKo)YGF}nOh-^S1QmT!pT=ctG8z@)#iK;&Ia^#|eonzq(-M2CVxN;_{iQGgsxRstk7A^z=K06`6cGPkFgln1vQVY8upsV(EGwEMX}dl zF5`!hWNn(!T^2I>A|HjwRK<%6q0F+l-c^XH``47z+Rqc;T?`vDeC2|SS$Zj{J=y6|9P0k^k|W$@+L%?jwEOs?plvP zF(mOASvAE8*?whgBu$pwF99IPa&laL1YOmsMKuejG4IH-bWRmB{QdJV?v&odPjj zBPYQ7V(DE*rZCMwQca9*%eg+J$jO|jKR$?nnjA7RQ%$PT?6MZC*&Bd@iSI6U(1rvu zhMr7AluIlpmNF&^1IM4=^l38SaQ{{ibmc)h703-~l07)psdOzCIatKe2<~htbLwW} z&0gn36=_l%rbm+p^oeuY%oAfDd4C#kD;h}VB)oAep|v?Rq7WCw40skKJ=p<;;DB7U)mRG^l_L?y$$Ih;{EUaTpN@R_?V zT;uL7J`5u#KrHDx@mzwUHYw4Bn(A2cK9+m_vax|02@fL+S0LQz4$%+&D{t>?KzIMC z;4Ecx`%gn;&JRG3wSN11RuCbCqR>Ov}RB&B2wDcC{rdz9;5t zhBU?J!-J$GVYiZNz)KA`sJcjfuW=tygT7@oXd=4RPg%PpMU`06ytVe}h>2KdhIhR% zjzte7@V}o+NeLS91?}RD%(Ul!cbI#TT!`0qEG-Yz>?l-O-`a4%{XE@z2e_Y*C)rwZ z>32R2RJ6eL>PVO3>$g=|^^A%c^w>VW0%%d(Pd;mg81b=mox}o+#Ql?24K8k_=QnD^ z7CNV8`-u+&SDK_Gb?x)c1a^XS zQzJUbTt?f48pT45;*e={-JZaTreA6xA8MlKeU_|#p;&t$7S$Uw`sae1|4`agkdtg| z4S*Z}pLb`4ztdQOqdq>Y<9`T%pCki*v88kMZGmfqS_L7rZ>v&fmE87b80nSYFh@F4 z1r`#@xiGbD2;&*iFfyW3yfA%+iMrzzDWsJnXL_n9B#pkNdb2taagpe$1>zl*RHdLp z$$)VYH;^GyWy%%JInXY{g2l9qII zB4pv7^kXp9x_fI}JqicjOkF?KRE!92hldt6wX5+^&op#KE?OL8nUXGH4bB$DjqjBT zwba#}R9*1Rt=^D#5bj@|d|c);ML15*)3QA%pu%A8iWs)+SvEZym|CFPEzK>=0J9p* zCn=~hiaRBYxi&M^FLlW!wPWLAnPFCzRAX|DuG@%2Lh^f!cUKj@yRY&q)QnIK zmG1l7oM<^}TF101n+4d+3Nt?exru#AJJ3t{vok#A3q3gk=9b1%^S#x7g&6 z4%z@H{8Q*VbA-FA{w?%Jh*$s?QYSn!UAcxZLyw{7J4Uh zF(erL+LPW1*0?)p*yPp4(LDUHKXl~*EMsP!(lne05;%2zqLTQmm|~fspM9>*nJx;D zJC#8D4fU@EH`c)CbB%8C@rIuITjNEnfEmb4dfHx{r4>YyyE|Kh7?UlB0>QtOO+kKS z`Limxu#?ZoFckeJ7X-d;Q(pk5ITqa->sSl*+^pLxURQ-?>-mbrz36mS^u?`j!O#GlIQ>zZLivSu++c{(cXWhQ%E5GV!g^M=TCH2%AMg+Zs>2HpgKlPj7vly?7A`^3e zc}7*k^F9xUM6>}&G1)}DT%w7`%w_MGTaly;+uVK5Q=2Og?2C}Y*N4A$BnWaUCS~cB zIzLfdJrkCt#XfU1NBZen z;l-D!y^h(h%*tVzGyY#BIN0Y(g`_GC>GMuYbR!$2D@&Uu(e3zKO_tm|Mkws6u3UB> z?LOol*%SAE^kmm{WKwwMh;97zUV-2D2S)o>f$uQ^F8+XL`#IAFv_1~uz&C0yRRTKb z`#eAa5{93zmH&?;BTT7zCHx;b+FSJ%=WF4Ah-VWryKU-IzCa@vD$~nUm7g&bZ&-Y* z`udsHr~x|%kI-&fFfnVLpLQ6bs6ajMt4vc!6@pA=uNClCzSsU`M^D56OJH3-yP3k= zHIQ8vWuE%`)AeSAa*?+8`d|uzo06PQHifO0GEpomx7lFiFB#313dc3Me)mK+O}!CA zFy8yj&{q()G(_%({k{RNxA^;+{af>R26eP*4<9SLVFkeV=ESdmJOk?FRc7YxC$GWPx z6`4fjsA#r1p@QDt9K?_3Kd%vsoHU&OK_hT$blXQ_fv2~aU7eGwNTYD2E>_NV}ih69EQ1$j(Z{@ZuW+WHQyOQWUUd2e8#pTp^ zxqbi<7{r5an#eE}`B{e`tM>tI&fu<%BunEjzhIAg5s71UF*`CickS`j*W_*|jO>)d zbiHwAlYvdGM5IAXq%3n8fKDnMdU6PrVzD&O1rJ`jcC^vk`#4MgxS?bhkEr0oNb#h%>{7kotx^-Q{ z;MCY-XZ^B<2@T!FcGgjNvb*$Ro!%_CrsQ6J{rJA=`2P*p>5>wGR0XGJxMhyj*$t+H z@Onogrj$4C2*AEt4up>L5Gcm-tI#~gfA)2SF-Ji#y9Xt;NXb~Q#^~#7Xgx53f5enj zLlpm7@53Qktj-ssssUgyT6isN-l(2t7ix%3y<9UP_@5R45hDYyf$~=AU@b0y37+ps z@`?CZAk_-z-P1z%U;U}?om*!-$u#v{a^MD)F!SE4N4W<>tp@@9Y5X{4#h=HEb#XA# z27p#H1K4P4cL#cL;29daKl3^KJ;m{O;r$9@9;1z7Qf?1m&p7Fn)mn3ss;!XKD0~oM zq3UOe)`~XSO!-PFGx>%#zb{rsDv*Xj$Zo~a-2Oa^dai;h-ZhvK;Ck~t>}Y7+Fa`k$ zZ9~C(K)0sNmDlw5Xsn99n6hD!gZjcU^^3=5a7KTFAHPJA zl6zX(OUn|;=N24=Oxma1w(G{BnhOUSV+R#1v>amRNJubFy>pN9`DQPEhRX)BB~;35 zQhwWqYWf3i0^dIMgCGkk0vlGSF$du;xDCUK*-Z;$a$XgE49WG5tF~JZV{J8P_N?3B z>v!TF9Blg{3&L=-7{!KMeqeidECnhw5o;JL@#VIzmE(4;R+q8K$FZp9kJi}eHd7Pu zRlTO1@#80gw`!`sc-!u3I(LK2P)`o@*4?JWWtlRxT@dy7Q@X(46c7N)Q{ zTW9>Ve=Ls)uG4}z#9FK)^M$YYa8y*?a;hW@zo7#{kCyH1$hbM3mA6r6v+GIze&CC^ z;pKTN;#LazXrr=n=Yff5AmO!FNGK??C1=QL!BuFY zKYqdz32d}A+pDTqHoLRQyW+t8Mdf(^A%u^q2&nRyQiNPo9@M-Yp|L=(v>#-dDpP&& z`|L}3{v8*wYqyGpG-VEVI@CY-_aGYzu!MosP^L`-l|j}n#FgQW{5R)oO~bHdG%S+* zA%xPFvj&mht9UXNJ5RI3iIEKR`5?BWJh4%QwIFH7=wnxd5c2|4s4lZce)i_)Y9k{9 zEf8*ZXp&SS6Ybv4;~6Blz`7p&%O}_IR!6CM9dSdy`=;NqzD}bnc@Sy8893E@m#Cw{ zY4oF^ZTGes zXGGt`nzZ<3)GvH)UliFdM+R?ml~R~WTP_Rd>waKghrah{ZwGf*hICB5$d1x8e*_+O z=MQ}B5_`S76z+@ukL(YT^gh%UX)@gan`hmt$5)@e(8Rk?{j^wUX`W1}%)~bny{K6Q zX%HXre`7RB5og*38F;J_%&nV5h(6iU9U1qB?19IrLwCbSlrJ%8)_E09#whA__Kh^Z zNOJd)qDRzVaI%=&I?~mZRcUi>c{6bHI=QI(a5VBBM>)p%-M!`NWUBX(Y>Eq=cf<1a zct;H=N7n(s}b|K~{TyAVkE)*gG{U zG5nM(N6%6llI`J6!OTn_iRwC);?~=EcUh}ZtOvd0J7_?_XsBBy)M8vjD4W5I$O77C z*{2ZN+^^)KjtaR$3Djs&A(Pc!n&g$NT4gdf`5R$5D=lMrkgO;2?4j=jpUnHYk7Kov z{W|2enIw8{8&9EY^E|aB{sdfTh%4!oKC4~K*VxEgjF+kA&#zbciup|l%2DSJ-imvz zBN#zlcK1=ZPiUIoYcPfoMCJz2@ZqxrlZ55|c&*SscG472s6HU?@wUD&e``d^=UUH@C9H#qDOBC`_o|t?;q_JlW^Wz-!lO@OIFyI7|oguw$HY zEGKa?PvX7j(aG4|XMh*|0B*GULbE^L^i8rRsTZZ{dCd{N*_qX$_d)pi%6Lvh(FmLD zXSqq^OjdFK7xAH)xh7NQ-84K_|Eo>&WKRv}7t8Xo8j^_bX}0_jb9$olHjXb{zZ|>l zPHHDvU^D$%JyAWiEQgYMcnnsP5Kv?!1mReWzDq&+n0-c#i0FV$6}{5aE#+JO9t~&n zy1eDruR`l?=optQA0;0etlSHNiM6^Vm55aIu;fbRO4GnY$|UB_XgD8iH)+L>#P~oA zlgcP8sg!B5oR8;7Cxw7}hy5;S<$;fh5$9L4*8}x}Xz#h21RwMTadBkfIo*l^l_>c} z^ctq&ML==g<3KT2iSSZ2Rg!BAdnTcbb?&XRNnN`hpYu6-{sr&KpPt*rFtO8r0x}_Z zAXe7e`Oe1&GwK1ny_dMBo&3Fzf$wkA-_t|BW|piw1BcJ?G`M$OcnKQfGkv^p-BL7k za4@M?-vWtFG-VH5LT0K3&e7|uTxMiRiH=6s2$>iQKzairaawkUp^$@;rHKMPb(p^6}n&T9n?o z1BS6PopT5{_y_sz#esi;bcWc+U6i4{8ZxJ^k`USbx+P8jL<>fXe{%B_$ zbcL-Df|mD4ML$CWKMT$HLj!RTik@rxPjF!oc=?QPUy{M}vrtLo@}hb@!)f&kzoy-bO}IYX<&h*RI?5Zw2ZKo%PO#YNB@ZP$m~8Hv__eiiE&O3P^WJ zHz-olyqEWLKks_h_pSG*OSm|5pL-ws*vDS){oUE^Bmc*29G*J#YHjw8NspI`kEHE+ zp*ar*Wh_)c|Nb&DNBU`FwJppvrS<4buQ1=K4AeS(YWPa$Xj33HMQ__#e>XyLlh1hE zkzfGQwezx4r1k>nnd#WfSl;*f6YuII>=v|tN6gU?R9k`ytK^C`DHyQVY+|W7a)7R0 zFO!9h${3TBH1f{s%CCwzRfM9Ij=U-gilMucv|@zZ_Mh4lQKz#lK^fuQQiKiaXx-7X z_vZC|Se6uM-Gy1&>ev>I7pz(|CT8qbc5c7?0X=^xTRN`Bp^X*R}j+;7cub( z1&S3zS!bF^1m9u4_Y2UNuesXR3p0GXA$b~z-!hA$)8*Pr4Sy7~3i+-C2bh%5aW-7a zM1l5VRvcP7N6?do-{1rZ-07$UrE^5-=(qs}7cn9GXZ|jorSIz;$R&HNih*j-uZC69 z55jKo_m(Q%Jm?&W*pT&cXvUB+=9;2eN;e=|x`5UK?pi^|coA8z^V zPz1-F78rNZL11f4XZ-d?w43Ynr>kFLL&z^UKzs^Zm^d+gxd${S#?(K-Q#V(e^5*J1 zAu)ZV_h6v(;OO^`kmM|}DE$HM$1B-ql$WDo-Q=s6fUA-5S76k;gG3xAO;7eQytUAE zR&&mgYH@jUnuSg0QOQ3mI>T$?NMe}$!sHc`-NEn% zv|7!+eFLsMuyyZ>OFInbjhFJ>ViWK~N-EXo2A$$;&zBUTJny)qc2S{PQTGAL`RgO0 zFBqjA(jDQw&=9NHTDy$*)#7&DB19d^6~58YfIuYy#+2XMNiuh`+T0_s2IZW~d#DDc zeNKD5GGT2jI%c@-=TCMHn@|9y8j1d*HkTr-ERry|>hkopGPGzdE~NX8x~io+n?3cs z(YF$bN?7}iB&;hGf@(!UYa^-zKFFVa8@GoDN$5$Tat2OEY*1whyjAUuGahYRHTR3Z z)XCjt9o?MXM`fa*A509GGp+Xwm#E|*-wJF;dn{!AYX;=;d+mOF^?4K)Lw9N4%Wh!; zr`c)Km)^N#*0pBBIne{kGgtBTV$?u{1OIlIbRHib= z$(Z?hG7FouuYP&Ge3&=_K~$qz1j+3wS`Viu-jPofK;SN3{|q2`AoIJE%Hcj+q-F6Z zy>hA$yzeVl?BA0^v8(m<`q-Ebfv#90<%$dnlouq@pz3K#8joojws6}-eND`rR*J(S z@bcLokI*AVJ|94P0XG97cPzdba`bNTW1AC|ra(T!NvBnIo){imT;4G0tj^-EVb09) zq+gOfrmcrG5K{!*xcV8>gLD$}gHs%O8U?=1^=R-CcpBdJ$9VE8maF6O!)Vs9eHZHw zQV&ha^#GiAAOIx2_7Fl3rmGOXNuVT^e6(Mp-HksSXZQPlqMiIscOXHIwlV8HEIv3z zz4CsPtw4F%7T-?%q9Jah4FUs(v2SdS%3zlVXh&;&E@Le3a4skfX9o2rCck<#G*(Pf66$W*x&DX%00Z^@Bry zli9OSX404rHjv|)G%^s8R`E^__Tp+jg4@fe5uAq! zsCV@|`ud2%z<7OgoxIc5_PBv3x&h|vq-iFVlLE($ULRVSs+|4sG38Z+d_n$6&!ox7 z6CX4RWZ~yZg80@Mm_}KZzO~DJmAlf}Vv1efoiMeB$}GaUg)uxE3ga!+t<;6i!*K&{Yb>l?E)0eOD`@-HU z!x|r+7Hk-e5Ao4;?sPlY1Q2d$2h!@1522FMjycoRcWCzLHJFC}>^-4HLM4XeLK1Vu zJz6h%d4rm$w?kjOI zq*dNNIo|NJy*P`$KVaCkifK5U@;kQdofXI#!44PK#^3&_B(_m#PH({k2I1~RoF5OC z?{y{-1w6B~30M4DEL*OLOUmS^AK&|e1FaN&o&*ep>v$fNd90Kj&Zs?Vz-&N=A=Y0- z(pf#w2QOWGB@2b8c=X}i@dSgM$!SkYghF}|pmljbhQvfJ%m-p)sME@^Lz)V|8^0GL ze^sFKY%`d5g<^5P3oP&LBWxLMZH9>yl&~>e)@q^^oTHE5^TT}_BX-qG~5X$GXe8ic!69Ul&AHe7G zzd*Rb!TOE{Las6ICFT9@Ws|dMF2v@kdEsW-uE%Iu!PI$$@*qc0{n3#8Z6=eR0UYPJBQc&V5ziUGLfWs=jvj8HA!IB- zgTY6hc=5$y^m&NKeUN%@_bV3b0!sv+9FeBn74Zqp6gU(uV84_Rg+1!-jit|Zt!Q1# zx|(`ZocHazYuXP^(|q7V+qmxB)m)R_$HW@r(tGIez^-^?Lr_&OCzc}4@ zt0bT;E392zi7RFpTg>1goET($UXAS8Ukp&_81hwdd@t{3clSOWd)TLsmX#(|BhL;= zyf5A^_=S?24-?Sn-77Tu)>6E*f&SSHWJ{eEN=pX9o?Gz`r%~yZGX^bNRuM`o+W58d zRy{Yl_az~ttTy9Mahc@Q9(>syH=fsgLFtJ#{LT@+vDPQ_dn{f_N~1_{0Z1I@w}^1e z>W)BPfk(xCM&7Cx&e5sOSv0Tzh-PwjCArk;_Nz;{o~xofz>4q9MdD?LRf|k+I!3w} zyoFg*v>HJJ?7F|aXWP#o)Yx?SRyb?DNyr*1F}LyL3wK_*&>$eCTHu2^1*$U10QguW z)vIB7EH8AHYXF1` zCun>HQqdlKs}7;clz~+1+k)c}?An81Nem;`7`FpR#{fwa$Jw3-!hV+Hm#%~1`2|#0 z*7i!~6Vg!IsA8DCFF_vMcx(zGAgR6nK%lD0EK(!jM_`#wKG+C>zY}|LFKP@7aTH=h z63CNdZACu8&ID0I9P{A>fm!%;#Y_kqjNQ(71uiR^v<9KUB%cLL?DwD+?m!+IoPGy!#^^YQzK}G z@ow?i{nrw(xR$l{^cX=V3I_QTVOKq2^p87R&)CUdiH#(cm*~%cNox(LVPFl(`);b+ z*xc(9Z!%WjVHmGsZ@3yc#YsSPp(+bJc~Z7S2rH1u8P$H*=bFZitim+>3W!({|JCbv z>>&}(MC1etIJj6t2So0I7{euV+vhBHpa-$m58NBVi{P9y^5UX>-S@-QqRI>dg2~a} zpO=y$%s;+<*blR}yQkrbZ$WIA@d)v0oZ=~-|$ zM|%Avr`#f}JTsRgBjE38Hajc?;%bLCKiR{3Luv~F4Y#y+wfctg(rDBc1-Wz>@KAfk zbWULiky;Az$q;;eN~L8i>ew6Rpl!P5JKcsaSth-0H9oi%x;mNKR+eUU-&eJ96-K7S zMsXPCVyBcqs@h+vw-0p3hnkyqn#1|%PIni3yk!N<>c%&M%9~NtCLaRHgq{aEKRR`u zaQ+r?PUQN-Q>jI&H0#+-hX=LX1ZpxFkOW2bJ$rx8=9&FhdoB4|CLN%_1L=OjR#PeXgir_dI#}0oD5r+~p%s$^LV+k!BeG(r9pRhV>4yOBH)g@Q>;c#u=C8 za6FL=C}h{iBx1hVqh{c%^Y%^zi1*DqQ-kL{OvLg4Nlq#3=kSZR!_i79wS;wo-MN}1 zrJ)chz09hUyLD?KKzHo7Rh6u?&MkxTVfj2$le!n|DljD#%?i?44(VkaI;pbD-ojo^=( zE5L@NQUj_Je^w;gd+`k*hys1Acu=8!HAoR);o7y&PUnSmpeUvvfcU5-KPH7VmP7PF zZC$|D4Tq5%_()J2MyIwMH)Y~D6LYTjo$ZxzuQoLDpZYaH1YDfLFqL7qA^-lvR7fpFoZ@UgEN9aGpO!%sxD{C3^_gTC z&L)N^!*43TdpNsv)lFE~AVbH!)Fvt?34EJ$+aJ!~dBmH*N(n|qEvl>+X^!EHlJ4eX>pmn>B2!?4rLJ?xiCirmq#a>5|GS(`f9@3MSnpSD@Bo%w9!Y(H9k%={@xcj_5 zRKJ$#v&XKF#B$iD-SIbLzBt|cgwD@#7aD9@zE39Wz{hBmW40^~aNZy3YTbnPmNda8 zFLY?@G#st|{4D#n#*@O|25k$y_PePw&vPOAxG?71g-ICw9OmIPS{^%NQ^wVO->~pm zjWCIKNHL$P|H$Jr?tJ}ro$LpV#z^QE9%u^?rt!5`|CARUF>dD zId-V+PDp>vzuzaLbXVi0Ug7hdK8wgk%FxQ3$l;$C}0%wL{{=x%uFu1YS1D)v-Y9#}gSzl3D|*S;}rHT%W@BJd$>w&)r?T zIJL~WTcya)DT+dQBcUcWCF@o&d;)9^P-&*NS~zweBUiSzZwE4GxE6Tp`*HCbWAytn zkBwz<6u@6V4h2~3ACtm6{*(*pH-YXT6xRZ=oPRS=dEzposQU26LHwWx+D&iuArv5{ zSPY>(ULFOdnxpOWNDw*1J>Q>$m;!`Yi8%yQTTn~j`EAHx@cPtjaF`SrEObs6wA_A97aZ@ zz5oIn6!oI;OI%Auh3o!HEWXpf8Vl|PPRDA->?&b(BS}$}V1{xZgki86^A-^sGa)mZ zdSQDUqm%-E7ws?=1~6X*O3Gl|@q&0z73j${7OeZcmYF!wq0nOXfQ#F1dhy#_0(#`gBg(Sh#NZ%$sENa zpBQ?~(o+hL;x3V)iKb)nu<2t)@u6&+Ul$ny&PbOipzI;^!FMTOBT3V*rSiEuOb=9C zlY%oJ5`v_|^@m2M$CDJsd{Dru&qawckmkR*E-7^5( z-E?a(6e_cu&$-!1iERCf#r65OG2Wl;4^zlU!SS`7gyMwOt*0tt{d%Y)yq`bUWLFr{ zp4qiyo}aR(CTp8A+S2rn#HRi{?o6TItk4!C#o6O!yv<_qy-)t zOZoK~&)ouIs7W&-IPjBkBRv;6pgCsVj!WPtSg}LrtD0}$3~KsFrWW(B_0{rXZe1(n zpO@Yfr&6eON^!WT3q^jBKMJYrkp1(cXxS(1K`p3q{r5_Sh25_fag7aL1f-i;f1P&d zpz5Z~nymmgAPdgZbUcpM7 zB~T$)ikg=+fOqkRBY1Ye^NMfnE4{YX=q7MI$lieYc9KT#S>R_nQt8qnX#61b3g~cL z1jQ2h4s-hmKF{hAa1j7)7Ec4k+74`{cSs8>z(*g(c?n8ghP4kA(oqUhe{oXKWn75J zF^DQCE+9d4pb6O?GaW>>L>?yigNn-WhGX7Kz>%{=5|HTv`3A3PP(p{)%|JrNydHOM zLo(!^QjSui!Ux9{A33s15U>6~0eR6ig1C>YlBh6!g=vo!$K*^AWCD7OpvOcV#Y}q* zM*fN_{&SV^YlO}Kt}+MCV0RTDtU`n+uqbd~;^c7Emp?48FfXyKdycg`oPo(-$KdUd zqOl%;nGBkNu-nF$oj}TdM4pKe_^>D&A9phr8jCj#2UbvpmHzsSSsxd%VsR#L6P>r( zqcHmzjziyFy{GpsFj=WlopC!LUnJzE&e=OTVhmy1+8L;d-t;P=J?_EdD-puk=eu2J zB}ox4`jxSOy_#v^rdyOo_YH6^ghK_tNPh5<0R92vuE+qw-i@{ysU{I5&7W7F?zo@i zG~epv*|*jlF~E%rs`ozk<(A+RRK9Nvmpgxo~!q`pMLXzh{e-tF|n+Jpm+rv*9c&jF>&G<~M{7QI`x-zv1(cFm>&*pDa<~*7^ zQr*Ksm)IHnyYyxM;Jy<-2p*8JZIAkMJmcFIuAG|`ll0u+u57FO>qkJZ!_jQrPi`am znrVc-DlO@ykLGHwHO`jP1?F6T7Yw4ZIpn8MX_fqCG{cF|Q>);cdl0`g8bKgbHV7$v zqslrDFF*nsvIA`#Ho0F87D`VQ7ic)x3Xf`%bMFV!9yMQQ5hYwbdsv>;P)pV);2py* zMbMLuU8$4<;MMOdHG9{e0~m(bhHY=B6o`*2A50l#s~n+t1yS)3t+ z**TNZvh8~f+*rII4G`ZC0Ft7F!VFjt;n|Nd#6P$^z2J2u_(XlwefRSyJP~#XUhc>S zQ2wyuI@Zg^U#*v}Z&)qwC4UwUPD()dr_x}^lj9lh9&n-dVk7cAt@4T39+ZbD$w$2+ zUB^a3y)bdB%AH-j*kkJ@^L*0i$? znZ{#Ntdd@K1b@4S`Uc#YCxvK24DY;aIAav{3WPoTjgMETdnQI}5E+3#9sB5|INvzQ z?aKUGxzg__4tzKkK5)e@h}grYS?@9Ri45wzJ!ZJwP$g#TtS+ylXJr3uY;2>V&US+o zQd7oa;2Wp=L?svLOg61PhyNJ@v&qXxx6^|7y7iq1`Mgz^Q_gV6-*``hIuJs^tm@cb zuwbvv1p(Zt1|eu{^)Z2w^B`V4ZW{X~9fBt818X0T`^_2TM%jx0D(*M(J$+HsbF5j= z2Ump$-8^JO3YCtdepeHw1jkS;;RdMvx;_9azbyu?Zd`M^3p)U33e#%tJjOFw-}zxL zC}XD1#&;RAnkc>A=%$C2HmBc`ozXsm3TsVruY?}lf+uyRVi#e!6hl}JgYfRNWMe*Gp|OQdXyy?%#0mg_z87qO^` zUmvf`zF@)*gvfS2Jkf&6xJ_CV&}|Ln7X~T;b(_Qyiv@dFbrZ4$_3J?#o8v(H0XMl$ z=cr~;esU=6E{@As=^*;ZZ^!e^M`QE{w>jE=x0AY-@9*CWdDM(-9<^|pEX|N*)~n9V zTbN2?(*lBsOj=m1?cDu^Xbzje`#Ezh$D{pOrmvXHuc>LFlg~E&rSyWka)SU@fakpQ zMs1TQN2*p+A~0{z_~eP`fC_Zt!Z9tH>gV|8=)04~6XuYS7c(UpTRvw}I>=gWl<^o- zFRFUBnzufMTF!5ThSAhz@cjTbc6e-0IR7xen^_w0Q3K+Yj~4|o{EpTVH?C>E88 z6_r;447W6<#3RqJS5+?%c4 zyiLF`Ut_|dZ-oYWetvt*svqTyyb|HmCM~et8-Uv!_C8ICm7of2Kh1P3np8}nP%6)S z8B@GF?0+Z#_60FtB^buVa4vxf6O(;qL3|)ECj146Arn@#u_V!6S14Jf9}Q|N#Kb+| zOtiOK0vtCb*BwR4nwHb7bt9$iPC4xx0;KY&rYwjSaTkHR&puBffro$$7Ib4h{Vlmf zhyW2sj6PW9*5ZoxwjuP91xHrhrq8v+!*n_-e+gbpy-=UGNn;J1>Sy4G807 zKtP#(fvqMU?DZ589BBy8wlbJEY}Ba?LLbUf@ebbOkwt(@A_s7 zfb7ss!FL~+{XmW|@3+55a|EO^?vqcQq9HBZ@6YEpJ0ToKmzPWgwR8ecxNn1Z82Zh} z%k(^;^|x9Ve|9S+AJc93k6n){Awehj0U7t%zsFK@ca@Xf$v&%cz zt*GpBp@M*NH=Y1h%i*h_vdB zNJ^WXHE z529WPZ(`Ge2|@7kr{4&WQg|iAmCNAHX)-^`lrROH-e!aO{72wuaxpw60`_19POf2Y z4Uh&H_FEDZe*sZYS0{0V$bsP?0`7*)@gh=iv4Na@QEK50f-n>!or!>GWS-gGhqE-s zpJm&j@#tWwa-6XH^9j9D3Pg@7nXCuIaAS+n6HhCy^Qb$A3JjD_)S8nS`9Zi6kvio> zjK<9GY>1Sa(Nvmz#vUN*L*rT@O#IV53yWHY`ZD=xGHyzxN893pOCOUMg|1mhie5!y zV|nX0*;uOxpT)o8LERlBffdRH>q-YotFXeQ+sSH~LzHig)Ryo;FlYgVyiy!%ojM0-v~pGZ4MHE6ab>nE1u>G zOF^AQEEw^Q%pbe2_Mz&wi*c+?iH-s#nhuAJOd8|>dbAYp?`0*|G006$K(>yX)R(BQ zvq$u@T`r3Kkvm#=H9Ks~{VF0EwiC9RAb#iA))m~3_!4QV?eK*Uth`uS$bEr$3^4HZtw&HApnm)bHbgICLVKq)-RS5 z#@`uPUL3F|SV=(h?DZbm4`YW!H`#8L5HdQvi^KJNq^OJ~oj0!XqC%7CU?g8r*2pzM z-+tsg>-p7G+r@icCv|J@Cb@V1Q(KWS0tGEM4PaeD6*Uc^pyMH5n zA>*;^kTq3-&W}UAM$z7@t@qVBMYG;e$ltB-Hluz>TGLmEzC({^l0L%2a_B$q98Va; z?U55L7+PK#0KpdUk`@{<^BXyo?lQ4nlh_;B9NGV-DA26%ClZzRv1`sdQ|9|cyz78; z)no-zvwyO_HE+)#7%^MJ{<0T94V2HAj{tA+s%#+TZF7$NK`@Sv3-s|}mg0wM%cdQo zB{``8%kqfWDPqlsn^#MbGqkiY73CXUQ_u6$%+Kr8I!tizNqf7n$zq6 ztqbOsCK2FGY5@))E6)xNA^?fcneyP7Fu+oKg{Ynwn`kG$MMM+9@onxZO2I)m#QESY zYDxo0n7-6+N%+gQaME&=zSDzR2afpJ$O8qg1DlmNUfc!A{namGY`t}<~U$HCFvJt;lemLqh=Adq+ ziTEYxCD_?uu`?=onSK_RyO;z+-51|}*Vu5JP8~1!t3L*NFD_);XD{JBNMzm@!U>K5 z+muV^fdw7KFQbQRI-88-#MWU5+}1bvRZ4kqK58STNGviC4GHra2T?xz6=_~!Tdkz{ zmcF3>GJC{L*C2-1SQd0=Pc09t0imuyGaIKEp-pFS>Dn|_vobv_fB`Z3)yGBx%NX)?8v;cus%!ORYEM`5u-0R^4r^PO|< zjL=R~ki|4*GkGZiu>;c)CSu`$B40Q^;9Wjj;}v5c>(Y#&MhmID@yy=Z`@_Rc6L)UJ z0tPKADwa)kM83ZG^`nJ9VH3jwp=FXYf8)_VTH45Oqo;yGN zVI95SVm|5}DbzNZD?<;ehLdZ=?w~#cLcd0CIi)*{N`FkYjvlgme-D!KcePGE;%0`Y zp-ze}c(jOFj*V^Ty8`t`cwH}KoQJNfI=khKKqhp=cglrY=VoLgJk`bW0lMUj7FmeZ zdQd39hhirPbTo%)Z|7I1mjz{oByq!R1z}Jhe*i_aiB`$QVj?nNWuJX{@P$5B+Mh^2 zUd+(l43U;rc`2lSaQ>|$ETeSb-8VsK^y|2ySl&rMGriDfr2DY9E{&Jgsm3SDUMe7` z!Y39Yrnep#dY}@yu6HqdF+QgIIq=WY*G(77Yt!*Rs6L+i0VxT0Ui8hUT-l5r-}Ai> zJ+yqVC1Z4J)|QH1DXyW+-1(;N7KUe1F|(W5(#Up11r5kl?nya+c>WX~6HLmOou!T zP$6Q>>k-t3zT#RB#uEv5jd{9}N}>(7)j1z0%EbJ!XlS56V8qc|DSr10P2%>_J^P(c z)Qjkn$3=ap&cyucaS{YAo05j*D;*H~SFVw3G_yGed?j=1O$B>~Nx6}+pIS3FYZ}zd zo6Nx9(Zv_p)_LJWI!nJ}I`14iohPQx6%uiqX3Vv3bDO-xtU@hD&`Wfl`_9ZuPV08q ze=xk|)h=T`kzb;~L-XDp>XS0h$ReHbw=YJ+zD_A$o{=slp3?QKJUb)Hqbn=z&@~7n z4*mL&iSg>uGy^Mu?l>2c{SI^#J|*-NoK^dZhql`*s0#l?@QJ!7>Nm}-4zr`QU)e%@ z61?X@daa@cTDU`N%FCw#QhBw-``^%zEKKMeYX1FZvIm;_y5jcQV;mfUc14_^(Fv*hRJfeQ&&wS<#dybVw4eUXEV zw&y9mA*$`Sl{KxJ$}|~INI&%4-b5)52rWEs`8bIl-4=Fm)~$k;R`CvRx-020j(g-A zFbO{$+t8`+v(-Z8be(^U!QKFJh8SM5>dSE7qIx#tSWgM1G^}p~l?hJ5={|>X zw^eCOy;9J#V22tCR*vqalcEXP1MLY2zQFYXjGNkm;bm+G|6srY;`9}2!RmQvLu;@b z_w~^JUB*ebH@9Q+aO$jpopWmEoc`e?Dm@H?OKT6pBb-XPMb@GGV zrF-Gr`TY)bXkbdx2NJSuF=hpVRP3ZgY8LUEIAiz3y6KK{zZ&yR>p8i@J8PxdBKG7* zo}_Z<1*`l>#&)xSqMT5Jp6ot#$m=SN+1)M86X&EqG*3Udk3A{6*F+<5k%q54;J-6e zjn?de^o7PlD(mJ@^QXkio>3~Y0E>|Ji5k9v`Y1DWG_`~>FD=$buD*!hkGEgWe!EBe zl*fg+ugSVrJd2X$@n}UrT}+a1-}lpp71O*;9(6I*z6!qebLm6tlE7;J@B%Uey+wRg zhaHPrmB_!D0USIN8kfzdcWZ$jUh~DR)0^KMUs}{rIh>H(2Fy;81%mz5d zB`{JRh;&y;JjZS7jre6`5_OaI)bJ<0aOlU-g7>G=R_?K@T0?5%YT+A!FMiI@={WiR zM1&Gni6s40zOCfL3!U+v$PIFrcUmlH0awQ7+O4vOQ}yVjC!ieSswrWH%mT7>^|6?a z6*!zY-dT6G4_TXS<=i3aGTEOguGX(%DW#>S6Vu*Pd+=Dtw1{BNE{>-kS#w@}`c|s) zL2gW?1mbTha|-ZIW?EN@%~&9@2W*s2s8$~T%zs+o=9Jq<=0ntgGmq7ifCD^bYNnEC z)LG0UAR*oZ`-ir$ghAQvXS;qZA*>oT;JjC<%(Vz{Ut-?Is??sd+ngH6PrZ?*;H0@8 za7XYg{K|Zf4foT|EdjN~N$OEV#ol)!BdqL0ritGFtv=Hjl3@|N&1P1E*%?t|P4U=4 zC9TzwVEWi#GQUhv*9OIC!v`W>5mO|Z%D(W8j~3mY1u58u1eUFVU%46X#S+SGXk z%a?#yzu{R6P5Q{JK3|1MN&GqBZZ&9VKySitYT%N}O$YEc0Q>W>~e#&Ou{O9V; zW39Ubmv7yDDsZ}v^#&0%y(q(Z!vX8Hzk`eu zH2K&Jsq_`t>}don6L3cq8qI+ZHNI>3Cym?OOTfHBSox^Y9=Z3w16=yg02%(8jyliE z=VO*OB?YN5y-GrLI;QWkWt_6&8Dv#Y_ZNkLdaHCaG;D5&CB_SqWNT`{y z(RKu#DGZq9j9so{5=AJ>B}ht6gFCca=|hYgz!- znY;H22KD8Og!KCVp0y{G;S=JmzeyyQqo}mE$)Vev?;N?L^#Vg!e>%<8yZx2YfIj)? zDj0Hkn!YoE(pv9JdqvV;D%j|*_Xw_%<1m;dAY3|-98Q;gpIPdoUjNgIk9=t%MQJ=5 zHlLpTvU)3FQwQ`M=$##IFt|%pL}YGeZ0#f})e#B&+0Iy__5Ft)PU=fmI40tNwHa%$uo*e~Dx)U} zg9rJJtga^VS!X|}0XeUT`e&vVHh!f!Ujb0n(a|-N^C@7@H^fdU|9ew){@&CvPcymi zfC=YH0%p3`u&$r|Kc0p1eZs2A_vZH(0lKvvAs-HF8gCe?PE%||+dud4LJpHl!YJ0a znk36!=KD(!f|tuTfr1JnY0NcVS*IRb29AH?MAGDq;ko{5mDZ&S)l1{6xx;(k?9*dz2_e$TnOX$*=yj!bnlVxuX*njO2aw!N%$0=%yYHZzIdRfbS{WL%$CCvSXz&3e71Hu}Zv2*#KQfva3MZd6&dn6R83Sr-G9son#krkX&b&cuj&vDeA2 zE7|*UJftuhoxx8e7DkJ~cJW_MCg%=I7^_pp^yCLXkPv*0cWN!iPZmJmdgL%7kvn-yuEC@O#zg$zwLis1mt2)Q`;kyc(}PG zHV%Rzp5wPmUn2oA%$~!k+mOeAfViOb`A)*9p*4uw`5MCCdmm1N;O5@_6z)z~6)}q9uh+v-Dyj3R!0aTSeqC1nE1nYQbk<*r29QB= z$wqVWAa<%$_f&&)G0vkI*AUiyyemgQ_Tg`VQ6IoGT}!^X{#r#w4GZZ7W=LGU&UqvW zn5~g%tJHrVoMH#StX9laemVU++1?^Z<>BGdUfS;eJT)%~FgwdJtmy!`xd%Rx+#e0- zD7Y2pqcO&LuIX)R%bIfK_T_5$I5M6~`BhIoX?6pc@M=$DhO?+kU%uj|7NFl*tg+gy z;-_aE8ok>8K~@oJ-$vyc)0aLJ?j{YjZ17y>2m~rBeKtb*-Dc|nMapRPscOq&)r31L zOK6$#%8Fwr+aO{E3es|nb4Pc=;mzfTr$sj#vrkIUamV`s{@;^UfS=pR``)H?*;-CU zP5*Nu>NlTh^&7HhLun2=jONnat-@A5u!ZNw>TpLNkvyoJqQnK{GUe=t5>~*kiDZn2 zCZKt*Ey`27H3kcnx?xU|5*Rw=#G3V#)tD52wITFIvp-!xIs&378)+f*a8P8CiI1x6 z*zVuADSw3@aLiX+S!F-`zx^{~8&RiG&h3$+m~oVu*2T&GeLylK70~q1oZy8DIQj40 z9u~-^J-xjNx%gl`S+mH-8YZJRSu@9GRHmH<=qYFxbtj03pev8}{7NU=;;QLk%4wQi zW*h1mgeNpFmjugIIqjp}rtZ1A;?Tv(?s~ki-q^v9g~OFscZ-4cA>LolA;mul{9Gqg zL5{6%<6%H|E?PrPM~{=8iITkbL4wsEV+Y@By^l=Y$Hj8oJzv*)tEWBfagUGHQx^A` z=;rRIAl7&A?GB&V(0R8$(k5FSQmgi}6|i69<*gf49C}miS{k0NA$$%N9a-^e+aR1P zp0qlYK@SpC3G_-?Q+F(fR9ZBq=k@&aECtI6{6+FE0RDLsSDcq9GT)jao;ZfYyLMDayN|HX;vb6;{z#))bNF+;e8AGA^h6 z?X%mQb6_-(t>yv*ZAJ+K?arHZho$+-rOwyf2@xg?4Jb>sHkV<2lnW#Nk*zK3JG3&o z@J-60TY_%?iL2rd4sZ4SX8(m3GhYHfaCQF>*q{9jMGiR!UZ03R1%!ftF76P?-S5Ic zX|c&@zKv{!(S6*I@*u9>X=T2#PvA|iuTmQ4pMOo;XtK03guCW6`_@g6Y`Ul~6p`KP zT$UsrZ_Oy15>=JSlT?u~X|Wm~t6mzA0b&!H^{xiivrS_=f!$_h6+)tKOs!r(yAzqq z*u$r^GOBY(1hK*r^W#5U^t>38aJ)wy*63pJJdvpHQ+vCT(F*W(nG@0w7S7&HqQ^Lw zU5twV`l1Z9*C=IA!h1^QhCgh!Yhk>v`LXnh(aV^=^v-)tMVbm!qfn(W&+tQ(n?91$ z0!Mu+_wZ|Z!Y=l*% z+HX19&boxO?Xi3nN(^+^d%s3r`f*r@mOhGA$e34M={!&Xblyq##82qhibF2_akYQm z0)4NKG%S57URBaObxQ*zOL|$5JQI~u$q+oU&gyjYYJS47Iiz$y8**5snYD9> zjwkm)6W~GpZEjqw((mA17!7W{9Fz!LM$*~$oH9?A0x~{NphUh{Vd_-xj+)DFW;|Ji zam3E4i_@GTvvv+faKDDSJ*Xcg6s!6#4w5D6V(a`?l63$m0}0fY^50@x(A%#@KWhtR z!L$5r~LC5>6&Xzc?EByteX6=uPwmvz^WD4TNynR{xtP zO@e8cp>|7#{i4Qb19@SyWeBoXzpeFDad+}!tgl;$Jt2t)J=@^)DmsI7EV*X^R|%Xj zLH&c)c_E3(1Zr{+b^^X(o^nbv50VH&1bwurNeqWb`4bWGX`MGDk=3mnflthF9{$Tq3XC}JTFdaaMCG_Sf zZ#S;wy(^8rNr>|M+Gj&7Ip1(q41Fh>@VCBI-Qi)e)VSY(L~&O*fx!#mQ(4+BseW7u!7;4h}*%qU4z2&k^o-EOrB#=0d$=#Ws+%N>FR^>Pm%eGt{ zL^R&^KZ-!adonvm;CZ>5$dRJRnTG|d;VS|0=zGW(NL?B(Yk zljJqET?@5cYop5ohlDI#`9KCL#KcU?V7iuI^S9YnkHsIEtTe3e-hO|xe$;XSQmC)L z&^)^~1~jpM^J9LBJV5oVyGYvXlxi zfcw2i<{{_5vu_8gM0aP^aTab6){`{8E}z>i`jNVs$7+RL<=%3=J4qK+O`(~wpZwmp zBNEWiFc817DTwfbcf}pbil2JO=GKEx9keSF zhiL{`k3*xgeSS)!D5X_8>=?B~p~oXp#wKq3Lk}rvSwXxW3r!QouYE+F!hZdD_U=~x z&%96l;c^$9CCA?^J-N=fjmk+9KQ{Tvz+sh7A=&iV#O-NCpL66!5#!~lbQZb|Mclfk zG}C0SMGQk0@2WtubYFdA_u)I?*E@PX^AB2s5zsfFMaQV5eVF?YcY`ME&trYAP~C9l z-FOwJ^-7777ZqBfQ=a&uA+9Z97IjX_5_m>o_Bk|XK4_?Av`R%dD3O@V<9ssFG30M3 zc?fj7$Wv3Sa{r$QFrjk=K~tcjR>8r6T%&SDU;0?^d{U(`X}jM4RScxP-vpGWZ+x<~ z&2<$t&)u(m#(FIz1A!{NHTv$rx6d;S5KGXrP4+3gRZRpKlpo*ztElt9Iys$_%eq;% z+1!;u0BFk+Hf0Gq{*{GkE3*ikph0P){J!(XR!lxLy&NOU<2Nr@TC+qV2TB6+KIq`Y za0q(w?aUGC!z<`v zp&xs}H2~ZRFdcRJyNSx6(~JR?Lj!|RKOm;NgB!~7PuOs9UJvpW zunBE6x#Z-nN_4iKR{_*?{1|RlJheJ=lQ6vFGp=;)kfH}h*4l;G?}VQXdJ$FOBXdLo zQT(@08!f!I;ZEfQmr3EuvxA4YGWI98TM~$c>M6R4yK0GVWfev_H}I{t(R7@4GcT!_Y`5B_$vr2m(?{ zgD4WxFhiF}N=Y|^lz<{BosvVh^biV?(x6C4Nl14-_xSt%&U2pgob$f#TJJyehpxq% z`NVx)*WUZudmy7#&B%92NaU#LQbU0pB>X7`!2#%EZ#&!Z&$ydSh5r!!DM+#P*Q4k$ zt?*iwX@`C1W@{d`saRMDEuU{Xm=8Fv#>oOX44^*^z*JrKiuS??nyBG zTzqLL#5Vrx-jGT^o{;JE6J;lVHJ-+enCFyUtCRQiUGJ69f7vxM?B7mvpNUT}_ETut zOWU$~V`~|xb^LzpN9A&;4?Oz**zT(`v!bGr*K-a-yn(8(jAuZ!&H2fd1P6PXONVSQ&Ukj_<=B6)DQ;z}XJJ$);Y6T%G5`iU=LSZ~y=^ z(Q*`IMP(=M?`xsBMy1-2p55_bWHW;sllw8?i7MwLFPAZ;#6cLxj&rjx2P{QVNTMUO zri*ORYkaGP%mE#xw6sJ7*dKzPEET5S(>}|-IdbK;F?lzZU3r{!Lr6&1v-Q{DtyY&W zh_Q&^;iZl*dklmXN3$7s9h!DRzy?V_En?yhuK2>&%?Jv_jx4_!>2LAWl{_5WKBY|e z;(i&)hlqW8zH@m0QZ4*17?~I)jX`eiNk#k}bdH;JnY?08L4@g2TdR1^8j2Y#8db1h zR2qS~FmQ9-X!D&hRq!8#-O9%eIi^>CbvcX5#x^;~Jtrc#2P>x)amrB{mFuKLES5KX zjwwxWCn!w2ANt#^r( zuTg62jPXAd=RuA|GN3j+jcrB??)aV^C_M1lT|3Jx4~G`LdSx>9;6okftzGJV(|GN8 z(s%;!#qQDUE#E8zpa$wA1!806q-eKty-DNmC7SzGhXjn$Mw*>=}8a;omZurP~=hx@m zX@SAjm=XA5#Drmy!?3<$KxuZ;mP1yF;m%^Irr<=^o9iq&su@-0-BHXM01tVt4eudZ zQ7r(0x&Oh3nGJ&bd)gH+w)3$Z<8OdckDO)a1Z#P+J8xe(Qc5&~T^ln?kD-5E0cXsd ze=;-=Ug7^I_>=_PJ~q0DB)_X9Eu9kGsyunq;D8&@cvz9r&oA%Y|DG210VbHgH4m&V z{{6SM&}+ZLp0@-AsgY)yF1_yAZQk-zb^G(3&HwmB|W*%kujyvlTpkY+sGbQkbV$_Zn}8`&@*^HqYBFP8r@2uMZZko z3K>g}1eyr{xwww>dH`wlb4do*L|Fwh4-Sf9E(Eu#i%GmcC(Wj{?fSUa@PRF;w@!+$ zXF^E>79+c-MVuD_-xY5p5jm2xK9cv$)sSubc)(Ohg{Q^C@m?sLHHK%OAyahwR!jb@ zA{=_hneaj~F74AxMQaibD5A8K^KscR&p%&5%>qL#R2BBP%HbgZusCm$-oZ(S=qtW< zhkn1KGmLyG0Pj{5u*lUOkUX1!oWfN+T-S(ki(2)1518wWEqWMY|9idf z8A+1l#W5bjp;ZEb@tmmVTOTcC$qA@jPk?51RN9>(L_Fp)m(z-QgkFwCwYRt5M2Alc zydHe&`|wnE)DNn-a}f}Tm!oJJuMw(fZPW1>SjI7SY7-cMq!5W3O1yk}om_8`-G7r9 znZg*Di?r3z1SqHI(!qQ2_q*dElBRgmK7u!b(dBppG%jCD>SnXiS!3#iNiOFPesuYK zphRR)nh4p9(hWCx3V=k63cxdI+l&>ng}PQG^u%-af}z^HC$6y4^@jzJ3e={0>A72v zHN?}aA!Rohwh4cC-o77XOSd?@ZTA3XOpDuZc}7Yfg=(<6_M`1F-sepP+B=}Q(^}6I zCuxnz>Ts^NFxOEn-64)w(b9ny(<98i@x49&xd{Li@b^UrfJfBU1Jo>A9lk1lu+w7E z>JsUO`C$yL^NCuN2*XC#=pXj2{eY&yRb3F?e3^k`BIJMR<9T^9-+)z7Dq3vUa4@c) z^J?J>ZX84fv|V@2zPybF6j*oad&v*6qV6%gK06V+J6+DXuRcCK^|S-&HNm4G`Xjl{ z%0jUiUNoL4OD9;&OH4bO0O+tDJ>m|#(eeO6+evwhrDd>Qwn=eF`k5z!0~LR}W1IUNbYkI(`Q$(#w4u?(!~qY2i8Arco(P)X;|0Lj<5+&|(0jaf1|-55Yv# z-O3MtvVw0XXo9n%TWOV~lq9OGB3c;Obo>jy(73h503;#o9<^R6m);ars^xqOw71Dq zbA43<7^JEPtjY2r$7&7rMRZNq7Qc?X7|DA_rQz{4m%6uVP@IcfzXs&2d-V)%HmcgU zUbx-W3Lc+l!J~8(iW(~#S8Tm(&Q&oaR@DM4KvEh=0-D_D~GraPElxueT@+ zyh^5@`+C5!nRGEM@*Q(;UCsfHw1Wfi1L$~^OS5rBVeIcgh<{IyN_IU?#9o$;C#|1$ zweM;1?&?aeRBO;TG33~%R|}XF?_?sIWCQn~u6d(Gt~#|ZlHU6KaV^ZxT#GgDT|D2z zv+pUVoZgv^ZsHto6qA^~Ox|V-iLbD>sFkukaacb+oVwg+jb6Fm(?08qx9{ zGXPQLoPoH81>q$_PCpMO?pE9I%+{Y7ohHe_4L8mIaP2V$88c%w>THffe;_Bn$vb2E45c4@rt68BJvU z*iDpbY~XP2(PtfNgb_DlLR)5A{aZJ_*F2+?6S8Z~Zc>WI;m!7IzXXQ7mA*uT&rQ9; zrp+8UsOfo<8?DiZuv_)FH$FL=y_LY(!0U-R{`pCroZB*_ z+G-w{!)7oc?Gu|y_Qb!=SDtLEzTU*e_ zF~a90k8b}{EpAaeD(G`$E+FcMqNGFNt46@0^xrf_1cnd&thm(r9`m42ZS#YV^5+)j z;Na@>Tc!Vlp(sWDz;^X96f|YY#oOi!U)~KjxW0r_x(ZI3`QF5nBckTPa33~C1$R)- z*K9>HCgqjv6~4Mk)n>Neo)|&EZ>!%jb(@xgYMU;6dN|{u>9zmcT4A`({^xB#SO~Fc zdIvwA*CR!XW`~W4NLF0yIi=9yj&h%&;RRkIsO4FmU`e$ zV0Q+%k=tmf=`cC89z-rDpzca|r7>4o41i$sB80N?{4-+ zN&<*u(MeGeU1hZ%%Zpda5Pe+Qa;hkj!;CC@>j78!=B$3XO&zk13W{GWGCr%ssz_wa zxmHZCmFqpV^Y2rgi4sG2eb!s5EBn_a(5N{ z51D;6F?F7(jSu?v(R2>ymDgy1))^(TJE}QoRWRe}1R{BCN(=f4J4p2E=^K?hjy_$& zszEG+?qZC(iICeyqt`j4P`fPsb)Kl+5vPW-vpVH(ls_Ox#!ffG{EbXpCjrVzvZ<(1 z)J!d->H#WZ~^dPRktwyca_)2kQ^5(`Y%iIY*ncf8_UfOSvYmth%Fcf) zf{w&<|E~4a*8Nweo~z&~!Z2u-q$S2pn|i)TJL_Kggv7UkQU={N^MC;m>j22;+22~^ z(mbF|&?hwueBw4=qBD0EW@AB*NYjZS0HB3nk5z?5t|gBtKi!wKuYM)n9~?#>dba0z zt=|~HXdc)mmZItuXS^M<_g6={=58qF1FH2a@I|zn51KG=eiu9n^#K0H&lP&qH36R{ z6*Kg)t2>Bb!7c+7-on#0Vu^{TG@>pArHc=ZJN9NC3Qf$lQTK?f?AJA@19Y$X;;_-_ zD;xEc$fQT@o1aYwayTa9fsO{-y|>2@xsw8Ke9NvFBz-#P#{6)cifVJ)V#d^A!m5e0a!@PS>F4% z$8hGw9CUORdf<#x;!Zr>0WcS-sH3Wxe!i*p(X4+fa2-~*|Fq);uN@6%tB91fWT=Wi z)L?cUl=lOz@A+Pu88YnjhN(RO476~DKv|77AFeQytDk$lXE%{q{@lEom~Q;XvwYBc zf~IALQ^2CBjNr?PRm>g@;fK<1sc<|>o_4CE($lC*H8#{^*0xd7r>w z`MD0=1KT*Ms}m@Z1grXKwk#1GS_3S>w;Wc|_|3!9Uq&0aO_@`b%3IA5u%|LH`tE0) zAJ!fH;PhkeBy+4bX~Tkty&G{RtvyXDlan606>Kk^7sa@azJz@+i%3Ihzh7G9N9JDL zB^+rrJ32pBi+Ef#`AN*>cR9V*0rek=Y+&RCq?iqqdK_l=9JG%&%WvUb`$&>n=d?5_ zZQk19bzZ$%wFpv1;uHab;rD7s;@>2<7zR9K5VOz=$Gr1Nr)nMri}NX+B`i+lc^!v5cY z&gAgCv6wC1MOoa316O3(M*hd&8P{t+##EblgsgIbo%KGX$guISGXRbUkWgo3f_~C0 zM_~4p%T&+|!hL>jGG1NGUV+`Zd0MPbW9?YH4OZoBxBd6}hlcZ%>6G(~`n42;4uwE; zG48dSCYgZc8pn+UOg!&~;DXsh;0EGYT;4V)cUFO&`0sT_;J(A?t3|cX!+T;y0Jc>~O*& zz4RiGU!jouS`oLr+ugj&s=&lNSeXz00aZxS1%cO~#$4jjX(%53J7AkR-jJ4XvhW!m z(fdvWvYIm({-RZqD`-KxSf{YQ(q_`Ry$u$cqaGXbN(ZihTH{0W)+Py9q+Ecy<*Ie+ z_s@wERRIc_xovwf#a~^~1NyIzv8w*>CMU!U?DhJ$#7-tKvpRlxn?z`Mh@!PgD@;df zF228=F%kef<7RdI8pC$@(54ueVLUVPzaZ9pcAan%EQtlHv!jNsTiA4^029093MSzi znZya9BdurstD_x$5Os8M7o)!nrB*^WjPzW#v|-JrA8)MFs35A!W~S+c>N%cp3J4eF ztdp!Y(7}jL=4;p?WtZ8u*`=&?07qULu}_9x}W*DsARpJDA9AZLeh^ ztVB(qc%D&l*J!$K%^0@n8|qg0#6vkDlg@(@`9;LFG4{z(&E-y6f_CFNoknz== z$V&G?KZ&CUC)*t&yF1hGfzZ&q?SB_PS4{EyX|ePw=wHPT(=_}a{Q~DzW+0fqb{6|0 zPwsIQcbf{?eZLm0ijx=l>tWW*#bT6pSqtsvn|lVIy4$Y~x14HWOC!I z+V02rAM2+ozs@R>-$%mmy*Hea>t1nb11joy5ecG_ z5>_bJ6`AI8(CY4b)!dM5qPaR&lz%s+{X?RQgu1Eu*(wWJcz&zozCZtQ_9N8kcaB*2 z-HZ5?*4tak-%|B`y?clT- z>ozX&8}4j(OgUfEv77v4G$7fSU^_f^<43KOIv8PD7At74Hibn_;xrf0Z7^Eg*MYXYTo=u0P^3SQjA=S&gr z;-OPA>0ME*%^Yo>^cK)u+XIQ8_^}Jesz)Wo84TrH?U(`Mn|sPbyLhR~9aY4k#F1au zjgG-HkF5Q*pPCk26#7{Tzx1o^@7n3rMIXUMYF|#+>#vq6#NMfteoW!MG0n`aR}&+k zBK6o}@KXBm%@n=oM}Q;mS@8Eauy0*((?2#j|3rWi)VHyzBw-+6p1ymaRf4E`YA1HI zK`J%sUzDt52Y7Q5k(#qYDw!#@w#hR8ih>EFV9{NFPU{Q@DT zxOcX^m1gQh=+D6^N_heE?Dv__oAb8=Vow}3{-RYVXw18y2B#xUudX1C(+n}!2 zPW7H*)PVa&FV>ynT5UD8sUH1Szvi~AG{Rtrfi%-0!CBWp2g>_-SU;?qGoqc-prfF7 zK~+4L;9F7e{eJTrzn{3l2)Z2eh~#KwpkZ0kXQ+ye&!IaDaVQ5Zqv1skJ9pEnoY-M|Z9w}?yvt)5S zxoDN~%0t6hyrjYa!K%craB_KpcaKj@p>xFsYiBLFs?e+}GP&I6-5u9i2UIa=nvxo< z|9n573h7$&H|uI)NfUE_a5FeOf)Ync{WG~|^<+lprkLA?Rw8^1@d?MiBA!5JHQb*g zYf`>gC9*g*Md6SSi4ZY!Mx;or5bkTIcDPW6+&x|3RN6OTf4HJ=?>W4ZQ} zu!_OMYP^qB?iLtiE{#|7AO3DZ*P`@{CE0nY)ZfRu3dumIxOg|m;&Il;ir5?7Hez~` z%hng__g)-FbN~$Gf!2l9KSQGYXUrQ|fjIfI{`U=R>iw^8Ab9K|XC2=H40zD}##!Y( zLN3G#ox~}(eqmX3NQt4_RPJutmX92U^-`9URDU#n&k(09IN+`{{Os_LG9ONq&2UbZ zXZyxf64sjups=67BW5(M>Vi{gU!v#Ib~BaMUyy z!Rq_o-UqQNZ_XXaaxi;pT>bV&S6KR&^v5hKPq}f0#hf^nSwfeh`jStwnoho0{r@?S z-V+v?@Qq5NnVdv`sgXi}mcHj&Vg6F<<$CKP;Mm}7qwF8b2%~E3e~Q8%!RxSBiKy;r z;HWbgvN_h@Es|f8^xD7KJMu(+9*q0kS*L04ejR@9t2Z=t>_%Ca_ErW3K93U;_lliu zRN28>_6EdMp%Xk3vxFy?N3AajIogkVu!?0=jv$edIv%D5o}XDXQq35~4fGn}e8I^@ zrX9GlS&@^kzkR+rcj|Hl0h>i!v>{frvIA`yxW)VDqcAeJoMBTKqU^mF7`-eW3$;cr zXPIXxt~zSali+n(OR3TY+82Fkl}QOZ;$Hvq%D_j*iK3Cs-iK6q#XZV^O53emYUR%L znGf9h8?PyDEXCJIPJMrWx(Vjlfk9ak#(4)nxdiF{@e@T(cGf#D!Vt5Pvwvy&i@yTy z2jYO@_&?A3zfW4{@_q)VT4b7SrzDNYt`H5M&nMfNCfNqJ_1kqn{ZfKc*-CK}>=`Ou zr&nln_}G0w7Ke~vS@Qs+JD05&96ExBn~qO}tp*~a5%HRJ`lb1xmiLsKcI?j*Z8QSe zXtF4(ygb~epgzsMeu;`k@?17p@0~f|6%HSs#nchXQkK7IO;QCjuLABhVL9y~I`+Ds zZYjkE^%@{|gYx8$!B z%?W!D)_#S~B`UZdeubmvRKp01o=8QU_VR5jy7OoNXi;9&c=Zid(G+L~giQ9b=s9=< z-T!>AS?)ukEc%m^=&yHS=}@%VT1bvcHj7F}2RK9WqWVZ~?hQZVRRB%Zl9C}|Rq>BV z2C)|*rGDQqL%}WTXF=2(l+sMQD!<$ZMc0d;XHgz7o6-~PV3cfu`h${Z#ReYp!3c{) zrVlkLQ(j04pFR8MBGlp!*lwgEBR98u(|h)-``%$_#PRG9kC@C zI8h|2uF(7S?fgql?*IP=s#?^>PzbMn7yQu`&&C>6PcrWf@P*N+=Da*qvVdhN7V5`6 zEr<1Sy9aX306$57>r)?mMNBWOmNn>~B_TFpqt5@A`WBZr!|WIkjOS@<)#D zo&~N^AQsol!-*z6{3a!garsM&{)pG@nOKVF>&937Ix^26_`#f1Bo4IVS&S^cPAO`h z#8KwO)f(&emPf#SrUqU-y>=#hL|SS5=768ArTV(U9Xf*Fo2^%VXV*}M)34k*OrAVh zYm@y&>VF&vjRzyzByhG3e%ICt#9N;GLvqA~Ghohi>baXw!NB+(UGIO=Yy4e53P^=g zJ~(bsw;l%rSlu{|`EdxnW)t)m=o(OvoKiI#bR*H#KDQkuvgWL?8@G2|DAV2x@V!>IC zqAS)t-Ydx?%-idoLhb(ae}J0dmyhs3@=8~%fY@?XX?e1!YjViOSS1`nzVhUl?s>G% z3l*VW&Ce)z0HUi2jgn|SVZO!eDJmUaPqxPxgdJC7(XU4?0%Wk?+p!!PR(tzY%rPK2 z^JwOy!0dvXJ@W!R%!1{4rKql>zWU>SaY}XRL?X>PpfQ>E{=gD0^666U`F^2hUW!IU zga4KHY{J#i)n(2}xr&h5(@)Grv;*lESs}k)MgDQxa^H$y?oaMoMlq7==5@94))Xxuh7cy*iU!TAEIj=+ve!2JwGX0_-_X? z$^&$;#Ev6WZ4dH0v%_>DAoATp_MdAjm%l-vHoMeGSX(Yw=WLK?rijck*f>94c;9<4 zVeD|2lgc5?e0Z$te;UhUeTs9ko6u^z;&t|?j(Z?6$g^#EsFu=F^)z~r9Llm(AuB~{ zKGgE3GqAbU`&pMse2u)nOBsm>6m;5Di+fos!_p} zROiTmn@lhmj#qe~j6Db!v|Xe|lQGF;8{E-Ur-bj=aJ9!%0NtF88FaG_`Gh zo33Dyyt)oty!5Cu)yvs6R8Ir;nD~~Q+wmWtR1+!OodtT`TKP?a&-tXQjFI`u$|(d63iy#r{|5MyAaq`5 zum1AltQUvcz+`3V3=l+mt=CaBNXpvG&3&Q+)34fVw`|))M5r&HS#g!WYk2;0?epb+ zu0vPCU$O>hB*Df0Z^)WTDP84!#_X<7?VOrKd4A`Xx~8Ac&2|?Hsj|mwUQ(x|1c}&Y z=c-A(Vz6j&c|sm1Ksr-s>dLBXX&+K~_tqpiOycnPI(gbQc^WK#hN$aS^feut$0Hf$ zy^?%erAQurWH+KCwmQhZUYI8=>%Co&QFt}H|1}rzq_% z`x4}o(Douos7)6WPk~aU+j+{7*8q7 z-F~`G=t`F1G5UO)V{mBxZMpU==F#pu=Fv8+@iPvqwZ$NeDUFV|_h#Z6plU&<}- z-Ek9FNn}|B5R;w%=KUWk(qHoPf8#3C6NwJWsls0oYg`-!IqG-w*L?n5^Cn=7IAu~e zWCemqe?GYLuf2QX1ui< zGM^@6RXokk=Fqt=sAwcOj(>Y_vAIcnb|vk*e8K^hB$7ABbk(wDGFa}oo^6(H!mX{q!_=`g#O9vQY$Q{u^6Pm3edQ}^RmglB9y6T4l01@L>bbi{eyQo3&MRo% zKQiEdTO&ueYMGO^u=I7X-GDL6^WWJK4Wj--QtyN9PloHR5$IUIcHU(0%*R@_*uIL1 zjS(v6YrVhp?yULp>yS-|kAdIHqO_l-WE&dw+W@~5>n7)9B_N)Yp#;N`gY&RA7>yrM z8f@lRffRyu8!95+g!P=v9>)a=frP8=LMVK6Zjyzl)ng8aN2H@q1giBQ+o3i%XqxZ7 ztGNl&m({Q)X*QTJq+uIoAf5F2!QvoR!M4L3o@3~t8vK>PsPOqM*Xz>QB5WpRr~9j= z;SA*wd(e$<#!TG>>K_fRFyUlk@pbOYN*YCeL`|4d&)pG1=UW z={v*rm4u4B$*6-cx-AhhR{&y(nY>{jXj^>#4lA7W8<|JQDY1TLE!I6rP$xhbFVj&+ zOW)%gt!851Exd2EzP}~$y-ftozQ%bPeuIb%_jo~gl5C0g?3;09fGEfyGIre~DgQc| z5lN{UC2RAOV+aek_=cI&&2nHX`7X%{%}I-RTTBc?L{IUiHWTZBZDPwA4~SYe%-B&s znSY5TDU;VjK!8*}e}G{LS|T2rp=B^I>v(qk-Nk^pN$~r3i7edQKcPinXm|$3CP7sG z$J5H334)x|9WEiF<$L8n}2dHTswhUX3&n<42fuQy^{*o3bxIdX*` zqKTtcE4pquuP7TMxgj)hMyw$#pC)g)k}ER%;TK_NLv1HRFQFG!M6&UCh)Jx^lq=|y zQ*rajRLPTb0|R^-(nvXu+pYPe(t;Z}+rO^%1009v!f*5u$nXU`qR)tW1iABIG1L?L zQ#NUJZzA;FZ=xUBaai}TK0s1~%(0Roh&Dp5fiP#5dogN=%p5$Gpt5WkSo@Fz6VrlB z0q0&P`$xRDrv4PRK)hZM=-MVScEhS(Pdi)(4PvF02w(`@;%q*0VjbCz@aP&-G$;RA za8(_Y3%IEC(ZLX7SY#|cV@vG}5iy4gEg`K{FTV1xoMq;;Umaf_orz`;Ur}bjT0xuZ zbBs^TR`q00N_{&*(Vttd+U1hTkKxk9%L~LjmF;Q))#WW%x-OYHNev@&m6bcN})q}L54;13D4SFFJSu{^8q>Ot(b9Igok3$ zMZKl+g~ZwEZQ~XbZRT#yL{jkmMTl?o{Co%l6yL>`MY19aCd1%Ys29Kbk{^0H zsZpx?x?9+uHOiVKU%F*QTGH6(j?wVKQFOOYcU0EE(G!JW()5&+{MBb`g{>p<&hmrK ziX}ju(EBax$R=er;*{t}Er62AX1vQ;&;gzoPS)b2&POVK%;xU9FQ>#dkNTTQR~W8e1HGG6EF06cf2gW>!@JR8nC2&hQ7%})%qCz<;258 zwlVb?2qU5}v&9?z$S5xqZS4eo#EdOWK&f+*!pzCjetT6)q!pruzJ(^t@|Ap1#Zmsc z)66U~qC}0<_YL+?=fAZ8hf|h33Dk;NDfSItFVgOdGm)7FPEzfXbYq=DuJE&RxIr(< z2{l4KvTf&E=}%dqP_3p8Z|`BxWA~Jj4tG@K>1#=5B!bH0+yoU+fWiqW_$9vOdb^y{ z!7n5n*vh-T;2EZR@R9op`aAju3aFh*8H3_40bJp-cMZ8ThFla_Sccrs;f5gyeCtI& zI%Db<=znN{3S3Fhgp!!+>39gVsC$EYU*_Dv?i4_?8>mwEfeL*7Wa6q*XMZt#Y%>T!d9#*RYB(bot1T{CsHEE)cSjM5=dx5_ca)P0IoD}d8tXl;8$7)~{S{trtc&jHe}tEP_|hiL|0|q!N3%@DZi#?==}^qx zUDC7mwCJa|i}saw>plGz9RM5TN}jTz(nUF3*T>veY8|%fR3KOzGQs0dok`t)e=`CS zM`p0m8gD&fDc^EhB;kFaW?UBheUJR>WHj?sgIz|8ub}0Qxuq5z___0F_FtQ~!u!(1 zCW4co!pO(MS7aJ3a?#k|m|7_b`UALtX(A~aCYK?LPXUbsrOzmc6br%hg(C)n8)OG1 z!hZyd%;LYj@wWT{g(Qc)+UH|>bu?-Fh+11_i*CJBuI5O&{K>-~yQWg;Yt#@KT!m`l zAZdc9-O1V~nNiuZ=o^vG#0mlm^zf!{2ff{U>iR^UNeW0nw5%AH$PcspCxcm6wK6~Q zf`jF>7pn`G1BK*5OT@`>bjVW-1mpd{3&r*drmV%YeUw@Md&j}a)s$=03POWsG7YB3 zyD#f)&^bBSA;d&V$h{F3^X?CgyREzt$0@D>A&$c<=G5QAw&MlA4mzXH=zw`1=kz8{i?gBf0f`UinVi3B{0sh zFRW97Ds^MW#>LH--^A7JFnnzMUmdkQc&Pr*jyepFLCKVIKq=BT!&%pqGPNT-;dj%t zs;a89AHU=+sY_=i_~Vu}M&8xy)Z5Hu@KVmGN$M;6lU+)ld^jo2BY>Q|f*{O=ok9#~S$4QX8kNyBw_QCk-@ZoTw8T)DxbJW6@7G7Za z5NmtUBD+VWaW^-ny*32Zg8C?VZciy%tj^bGv|8LAMx62hMJl2O{vf-A_kP?_S8Ev@ zhgS_gM$rFxTp_7b>!72ku= zS`cg`MR~ZRxS#6fT`eVPdJ|$B_8U>K+HSsJJ=_9hHUU!*XZWPSs7}G_ZUOA$EE#6$ zuy7|NuGW1ri%2;h);QxJTd1v?AT$z5T`eosjCJi8r+Pc<^**KAQyseaIiwy^Br+m~ zF!#FY3yx+aVzCU%3i4-?_ohyk$!!HuYC4%?$gP4m-Jv-6Sl@RH3q*>WdfwWQO@7ff z!EX9SIv{aVCwe<|53e$d@b+D?!#f7=Bk0`bn{Lu+A%YaMjXK;o-juT=ug&3Yn2JGe zhqFU&Nx%7~%oF*Rc>&oIzWtQ(hCJgNAtfOkCJ1_yx(HWH1ROe0zD{zZ>?&6GE5d zJc;8OPk1GX;^qY%T5@7uopIaBZ z|@EFvZ1FpvDVtqOK zfcCpiy%XvsELXSn<(UYa=DNmgL3x(@mQkh2Wxk4Ut^H5Ee!H&A1<4clLZH3nJ^jO=%F^jn!^%aBL957Hk1(WfY9;vAA;uRuduY`b8bZu`mIw4 zO5;;JL{e!9q3=mkL=oJ4dcl(!=Fuk{Irt}mN>ysBM4d@K&(IV| z^0QrudGCUf-*h&-6bAdje@^O1?=F5qGsx_F9c})J)7__w!tI1Q9iu#u%t%6CkPXI( z6+D&4|0ipRlSJBj)L zDtB23U3;tc$b@YL=bkywbreApmH{7i)Obt+VTu55pEhFyK_bj1`bRHU@#F_*>~KCt zaaN`6T$`U<9y-nspIua)M!4?Ap#I=m9j__F>^ZLGD+@mMUEzK{7o7NIg)wf(pN`x6 za5I`+PWlm~9Sy#{0bgi%^?epu!Mms%3baM|- zO41J}uJe}huF=QsKNUtemsT(A7`7~<=Wac)-w<~H)4WhBW+=q0UC0i#Ga6OFEq*TK zEaNbNg#WG$AOG;T28$(t&JR@J%@%}s`7mDV>ofi%NgtXZ$X!Bvi2kv_u>#a8UQ5U4 zo^sKa2vzRcudc_p(M;N1sKgH~yU9MBnD~Ec7(sZMHM)kyYYk$gv zUde;&FUPb30z)K>GMU2Z5ouaas#G)Hi4|4a{A@VTFtn@Mt)g5T+0wdtm5*vDb-S!M z!aHsa#tso}r}Pj*UqjuYA|(qTWrCt%1<-pq{tz}Kvy&cQg}N%VPEE=)iG_%Sjg*8K ziOYm@zpVnQqQ($O`U9GS)K#*fqK4xl846l-tb9~A?`2*KzcVUWjb{r*I@y)2q}eT7)ZiCp2WH@$B1vY zKi6k`a}{qvT7`#n8-JcfFxu}MJEMxCtlUQTj);40*3~{~<2UMGSxG66LrGkzT_XdD zyFF#EXxIlbPTFsJeCh$3p+ploV_mGqrkyWzo1cQragQ3Yco+O5N>kc7`9h{B5PAP? zFL#4f^zTR@Qt3Nz5G9SmMwA&fwG+1DWXW4BKRT$R`_zOu)@$mUZ8)G?A)Tk5|B>o{ z={exvJG{6E^ioc<%=fMr=AepL2ChmzisVEx4i2|!53?>Eq>+Y{1!jc!hZ!&8;F!PD zlSeB;X~)h~3LKhWbv(sU_%Sxopmyv=1 zyVf8cbMGQ)eu1$zoR-7+_e^uBmZBt^90^0b*Xd6nm3B?>s?^>y$<52-m>#Adpk1mq z_T6lm-TL?|sP|_f_+h#%UXi|A)DSeREB!0Od0zeR)k=IF>5Z<}&zUI__TR~NxK&5Q z;F+rp{qZTFX9^-En7HTx@00QX zLwBG={Y?r>_bu$>i>VM_kNXFdRI7B))5i6q6RbYx_)^tL(fh`UjGTaQZ^3v zvx@Z-Sl)b{UAy9emf%U>81y^$5Ig-N%;TFs`eKK<~F3Py#dDzI9!`}75dRi57LX}`BAqiN7+UIQOL`b_*p z_bhJzVro)=g6@PURR5UpgUl4W2i)NAaX+d%zc%o*gK8u$b`&zVtq!%VVDV&?BsaQd*8ETAyNlEtY2 zi7lE_lC%#qcD5vp6TuKWxr)|`Ig-q&kyg~Zs?i9XgHeEj8l2J^y@_hTDVG&C zR8`ix9M^X!x=~co>#THpcYhyMN;VGHHq6?7nU&YJTJpKN<=Zdo4#A%)>rr_O7kHA< z+2$xzYytjzCn8sBoSyBrz%tV(l}!T6428vELz)^IxvE<&Ud10`K2nkdI9N9{t8%E? z&=AI_Y0Sal%Jq&_(+u=5kH(Y~V3-?k8~n zd}5GEp`YD;4D2!%!ujD8xmkCM+Zj%_kIvi&OmWKfnmh{I^Fl~iqrH~a%j#@qR@eqI zA-5ouA|+}YG0yd`7VfCPYwUg?sAuFVD#FOw8_u;kY8qTti_z@LMfI)OpZhn}5{14j z`6((Y4#{X9iBW2E3~{xg*8)i;M}2n<(n}g#*RAa5dj%g>pU$I1U0yzQAO;41LpGZq z7s0?DFH1!AvJ^F-7ku#mGjQVxy{(Xqu;96S{y@2}1q|!S;=Z|~CED70R*^g=IxxFN zLL5kh*^7#Xmv=3Q7ZuCqlMRXrqC7K+-UvWNu)^O`muUg`xRluA^hPv%|GCxrw z4rkQgYh?lk%=dc$ZO2?I0E!N!hJnXKJRaB+S`BP}`+n+M@4WP$ zM*3)QHNTHlNse9r?k5%XKF=rTCvO!DFTp4xHHI+Dx+eEHZHq zR_bEH$n%81ec`KnIaJJJ*x0?4aKx=dWsF!dgCUrS%j{l&2PF}_P8GFCXpxS-aP{F| za=|Vyu7z^%4W3=hh)Ux9N8}xcPVwf3Bpex;w`uXhP3fp^+{~y^8z$3}H@U`sq$_9# zVy25>LXuT#!mbw+672U(^cL9ZwIO_{iry2pXd|*uQJDIn!hL!>)cM)e% z8p6R}|Ca9tb5eFZ49F*V5{!qmHKDHVU3Xn)s8i#hMQTqcYWe7N+&P#X#KpGt-B$i;BsxkBPoAw9~@&FVLKk zUwG!#KDbC+nwbz5bq12;m2+OX&Ur^=P!|Z-+5ge={8KZLV|kSB)SIbKSmeci+RS~! zgtA1P$$fObBQ%vWBK&tjwai5-3Bh!+NO7KsFfIoSAvBb#sl`;R+Z>`babF4~O%?%y z*!U}8k^OfkTANT=VTL(XAvpYQ%E=F$yBuwMW(YOL3H;jZ7-kTf)n zsXew+!@2ysh53uUuEssU%Ztr$&w`l2E1~xt7=%ZMs{Zt0S%5WU-OOoFl2Fs3Xjkjfr3^BWT zh8RrBZ!=u!$>lrmrr1H; zh}yM@*Z^rwBn%?A-Df3qjN9#orwzR+BZZ+HCS zXz)(!@KrtlRINp;0(hquZ1D$Q9Z*s|hygYsH2&<-$TTy{`F z2m7+Q@~{$>L=^K`VZ5f{0k|8c7qd2-+&2pLrW#lD3-cA`3vYOwPpTK9vi#$@^5tun zXL`PVb+svJYBIn<+#V}}yWZzMdlC7hD6pTLPiWSWG6e>_icPH_j5nb@A-Yd^WXe2uh%u# zcFuLq`Ml55a|If+BnpG-08V4RxG61zL4rBBoy8UY2>!hgxSRU_y2+UVY-Fd|P(lr# zP^R7-S^m5kVbWqRoFoyM(hRBElkS6@S5wUxs&kG9r1t8ja%#ASxZ4Wla{%j zHjr@ovD@ndl1%bWUxT3gLp7*maJ9-$+2DZZXzFykca?&s)Nk}igO;)D8+i!}V{b0Xk#e)0x&&Z2;=?AHZx@!fc%{FO5EKvC$(Kzc1);m;hszk$l3ku9IYfi$>p))RX9Z(p`k3vJ54Oi#CL8wN(!%8dPH;!r3$tM%mNKcIKAe8> zJB_|WoP^a5{55bi$;qU_ayb>C6Ot~@G%(F3wFpufCEF3_EI+$8zVA%e*kl!+o{w+d zAf{mA%{3ESVb%cgP)g89PemcXhd0<1Jvf)Xxb5puU}Np{h>^SwhAZ z{xyGqO|BV~Mg-JViL^lr&)B7smujdF?cDwMU3!{%eDK4kKL(UTAl)A07Ewj^=3f6j z%X$B6mUGF3613w>9h;~Vd4+_`c2)^Vv~`{dx>+(EE`ggU_xWE+jz$=s29afv!!L4z zQLMrSGtescy6KBWDfoM7d~KBwE8kE#}@ zmz$P|B{YTI=6j3;1Mx+%MP2MobF2pa)3Q=}PMH#XNkktCYC+E_B{*y(2i4g$8qJ9q z1w0KNr+!q=PNTpj3-|J)C3IkW%<-WU7g{43yF1UL{+27T12cc!vTQWR z`$J<=Wu-(aPEJnFf?eY2RnXEsg;hACeNshzI_BVI&C)B_WtLURV+zmbF z%TgLdGj74}wMzY{N5aEZ%W$(T&md?) z;{RKp?$alfyIBiD8w}b_7n}qHzxr4eIq*!Vz*E6#t^x*_Nqf<6Pdz(3bc@Cp1}c+> z3pp}j?tJd9MzV^v+ zP;1k;u!cLKMAWpxD2$%-=JIg$!1Ml&{^!GhniAIgsUwsI!>V29x$IuIO|S1U->sW| z*9G>{XZ(hm%5CLN7gZ`176lT zjU}t_kU^aeqXGMOk~<(cjA)gWms@5IAvwLPsN z?RoV2h_pYho$R;}&)^&lKiBxSW*hBDmPDR$$2kQlcOdS)*P}kuNBiIu@qFv#cNlV+Vo_V=0luc~_&P_pbWx^i^Nh*qsBsJ>JvtIxr{aNpyf=HB9(N zQNTJ<(Ft$u*|9X+_nr=?ffoqybrhLzu5nsz|L!>8KTxaLpCyI56z99X`*3GHi+bo) z^=w*N+Q!iQfbDL!zZhbAjfNK08htsR#X_Vc4oA~2&9KYDVzQ2__U?E>1)E|qfhNeX zm`Iko;vmMs!~|t4qGjos_{`+HW%080Y94>3_P(Ql`4Zbt`IR85v9Z?7Kpm7pI=>QF z&pE757>646dfy*h2aG{ewP?27nPyRsFPq)BBB~e2&sglOms~x$Q$Nxg+08&zO;%cz z?We^=$`+)A6_z|ymejvcCFH2rdNl_-^qU#RAb0R)#3%=gfCz0=FxOMQQS!>`Es&x1 zk62$U#oQya0O~2A3AdYr-_Cc~2!^2O z=f%}j4NdkprHq4Ec%J(Yix}P|Bco&2ysu<*xD$bAk21S{FWGGqVUf25f@YvT-@ItI zsz3NrTxj*HwIpO=F*eUThE|c_M{d%2@GA&9G8@bJ{huA(W%LI{dYn~nL}?PgcRT%V z!_!~&?pE8iK=5al%^__N482~2MJN;zdwS-T`-acapXWI2GFkAk9-yH^=||==mOiB^ zB?AaV$*voymHH(SDwvKCwrSB|0Rs&Np0ltr79fBGhTd$#g)7L=*wxHj6}8tH z*Bv`;sCd3a98=hIsI1jIr z!_was{hFgFlIUA>^do~AnaIR>>)-QSiR{W~c%i|>iMrK<6g2$ohEft^)5Vo{>b?rARx^%bMAazPj=l9M zmZYtu;OddQNpoly8Gnzwr^Ijvp~HB-UOnKjZd|JrhMq1`I4-88DAu46!hHwZz;0{4 zXX6`_-qWYEcA+#vMefbT-!vZh4PVQVz{`Xigc41dk}NZ8@k#a{dl zN8H~O{PYv=$T08c*dwOoX2SBYsHW!qQW}!*WzRgAs8Hxzz1og5qt=R9lpNW#xE3CD zNaB|FGm$^uGK9`U4MU;hPsb3C$5Uc8b)92r+cS^X%|9IrhvM)>S2T>){;U{MIjR^v z{#oRI(`f)DZpCtFYNP(I7|IiJm*9zv>DcAE>A-Dakr@~6lR=dOY$gWF%O_#OQokLe zE~V{?JdR<0ht(dRCh2gm+;z+wJvo>WEpVIDT?rol@|9-!KHgr4!S9K`tTxc<$q8Hv zoR6peRI5#wN)f5&`uoRA8529x76rycHjk#)=f#Z2ak<#j5K309fQhL=wzUPH9P?R) zJ`54jAhO8JSK=EHf&Rlj^^~VGdAJKzxqx3 zC3$AYsn5I0PD@??W?*UXBWp9Fey=Un4i}WcoHBxDtVLK8OW*BcDk+#>^RYS`ydM3$ zR7{fg+j|q;pL)v)hDiyB@_A}jM`aC(_Y5el!A*`^9KE5d9i3(psfR0H^w=dY2qLu` zvd>sRTGXwn6rXfbQFJ#QDk&9KMKJNV*XzwX1>l|)=MVJyhK->`lSN!>J|{@J-|3Mb zuTcXH?UlF3_vWtjmK)kb8OF;72Eroxw^z5?(9bQn)g?!9O;l0t_cvz1gU?INVEw+r z`3bkGt}MQ&)WxWR-I*c=xdH;q^5{Lm1HbgA1kd1M!>bsc?&n+MBoS}8|1HgN#y0y< z{)2h=$v?4{tFx@eE8LsbLtqjXXv1#QO>cOqYijdX)BuYIXol-iyUL z7Kyl!D8>|^Cs1>)TfS3lc9%^1C`2!hytGMDu?YbcSl3sWMSJy0OD`ZywpT{$ns|i? zKdGmHFdiT6ATFV~_HyA@dB_DWM0KUhfJnKO%8ez;&|kn~%!Gu5?|=1TNC7_r_5S9Q z!VkwZE>Xd@yiZ8SpiJyYwee^}`x3pB?RQ4NwHk8>)pMm6;{FX?+d?9Z8gcmWpYeAW zlD{;T#A=m|_zYj|tV4vc~UwP?P)(XpLkz`-AlDYrNJ0^9M4P6ml<~U_H~q< z+`0$dH=c*n9hSQ{e26MAf=sHiO_W)2e$!^LU^bx|XOLnjQ(cX@f+4$W$bQ$E_Y`(s zx~2NyOTa*F>TUDXi_1*1qVrd5R07&Bi$B4ur`uFm=Z7H(a=RM7q5Qg&Oi7lalU=HZ zt>JU|s!{UEoWq_^rKUP{9azlIW7fQHg*nz&JY%{b7lPE=KU`;Ov+F`hZ}gklFq_C- z^_O5s4JUkE2D*Wbxo@=f`RcLwO~UbQS5Xj~>UYPk{yPo;XFV5?udCd0+vTmHl^C%h zekE{=t5_7Q5Ipx{2aA8)+$(@nc&Lz;rtXk z05$^sq>h21p@o}jv*>SsdA^wls|yuSmJltMp}yjD6Zg>4sy4H3rE26UW99?id-T zh|v{3=QPF6UP`&&h$)1iD!C8EcRLhFr1wCDYH)}Y0lNNpYlX(~(6-u|6tc;je8f&s6h5?K$EzD&e!86x13%j&Q3BTIV!nhL^?$omX3P-ZVk> z8W&dE%~jgoo+z?9u^E+x6+X0Z`GvJcOsZNC9`u`&DNMas6<#)vDx<({p7!*Lob;N> zz*K92>`mE>HmE{$Nj#u&iGrGzbG+&&Z;Kj)3%(O-Q964fbCqzkziGD-&h0Sy`Vmc6 zUHemXMVnjCsLI)n{pZ74c2GruMM)xoFVJ$&wbvHZ9+t}M@piBnKbl;j{oukRU6i2^ ze*M6Y{OHJ!2&q|kPfqWLkQ1gst`Qi)0C3Ev`hhpZ_lD(f->`EZZ@SJv%KaJ|1{L9~%yacm4@RGNw?~Q>4g6d3H&!&~tC=e&52 zWI+)qF_Gt^eP_QccWEI|VY9zTIe4(Gb3L)$OClyKN9+H~G^h|K!DD#?{g5ofAQ9p)L2A1osb4j<>d-KVF zrLyg?6BlKi+_G zrVi0p^7XR4EJ{fgF%_t=Z9br*TAFx$W^<*&X-?M^!&1w&*RD6+6jk@(v6!ncgkcTV zD@8s2GnPvp;x^ZrsJB)0sNtYjmnES-+5t7OM&ce90F+iQNcjD_?1OICl@7CQ(rL$- z&hwu&?|IA@h>~q^JeaflwTqcw>PNh=(H~pFjsMi;ARt_AhqfFNkcpyRbTu6_lkA6G zbsNPHe?dXSR1k^2z*twaKJ{{_O>T~B^I8AK?n}3QJ(rW|(-t@dw@3}mQ#)&iQaqge!ip6&wngOkWTb5pvu0tZVXPfj@X;5NpmWx z;7mh7np;ZX=sfJl;IajIe_w5v<6;YKOwoBy1tCZ6KI^3cmn5&Y`lVSNPXG6$lS$D{ VXTQeXd@}ISRMov-rfl`uj5tQs7}>%7$s_AeN}n(=YGQE^rjPH>v7Kdg-7qlldj9!g z4mka?z`#Hk$w_|F_-b^t3NX;{Si3>b7spW3JgZbp8C#$$V0l)XF=c7O{MlfQ&bD>! zvYOQ?f7>qEsHIj{cS<|u{pt++>$M~n?cxKo^zU{|bI)4xprPr_LYE0?il?u{!zVt& z;7Av%^%2wE%!d!xuDnGlE+zy|E?NY0+;%fJxN|N9yY>;oRp`ifPlNtGau46{JoxnD z(cecN)npp;|I#gZUy*6!gya{5xY!3LKP(o%c zJ^#p3qgg6dea#9IBNitrPWtk%himRwd7V|7MNj`~k~@8nGdMAio||a&UzZ+a>Mis7i$H~a0OB&>O%bK;j9_k4CX4GYQ^d0O5URAw|WgA(&*57%C>Fas< zuvd>pj%-qjR85;Np{OlJRZfOF+>)#2_Rc%h>V*}LS?+Tz^J*^Izb4&T|5j?x*b`~I z^Cu_x=kwv}>qkqT)b09=4$9E&>6u^~wUdX$>YDuhR^mx{ehC&AM^Udg#|h{H9=Z~LZECwQb-fr^l~z-42Uo%V~5CF zfa#Ng{ne?Y1=+N<1gF!soP zz{8$0fo6LGbJ2(5ZKvJwlF~Zjg*;85-)jjSZ}*p*qc$Ku7k+P^%JDh`*ceY91^yz|=^M^{&8%kU?=3ws^asA3TtVR=zl z5Sy{-o2;m-L%BJ2l*qC|;jDDm_4_UJ9?l12=QQ@lw|M#yMTo6kARU|NOqMCp<6|H1 zM;cwNmv0C8>AAVM2)7Ty+y8{MbX0f22yt8?(<6p;(Ij`mir(tupQ-<{+jS+F1IpA( z|KJUh7C4}&9`<0mh7#a2<9wX>kfD2pdsDDgB~iSgq;u;|9ef68k>87uhqv*M6d8}J zRwV)kU?pTTo;(B>hjyu(NohC5K!i=j25+XYW}jtHi*+wgYjm=BU@|5D$3xjl+nz{VmF1hK`~F0We~Z3O zxaUXSltPqB=nK|?RE_Z{ZA!}!x{xovq$T!yzxdXAekXqR zo6wdAfIjy#>64a#0?x;@#ugH8P8Bk1wO!J#FBRdi*2}9omqsQ>cu1@8>n+>IlOk6Y?~W9dgwrIMAe^!cT&uJIv%mBrev&JWl)< zpW6c;M~W4OJe3{;JT_EMc@u=q7vgsH5euRq9LLc~9IC*l`f4TRZ0iZeL;y-JJ2Eu> zNRw5kJrsr}{XZQdk}%?SJnjz8G+pUnmp{>G$&m7Iw;S@|uD@0k0&7KwD) zv_6w^eEb5mdOX%2slI!vgdpo&ESaj?;YVt;Uh#g^rMN}z-M6xyyODkLVpW0o{?yn4 z<;ZVzzj>E=Dw&>#2u17~t(VZ)k1Fj32l?BxogMRtXvP0-yTxw51LFaAFs!>&t|K%N zO}?v$N1`|WGRTPey=t>*i)2TH7ni)nut&?_229M-V@S$5+e`|yN9OjR{=vHY*(cXV zdvkeE32x?<_1gQ^r-=A$7q!ErfSbg?I#Ej#(*jYoq#xWzwUXQk#%)Fl2aTMG+a`spxwec2sI#G6UGSJZIChRUq)&S3Nm zGyCDxyHapH{*?*h7J<`L^X`sOxgbqv6{;QRaL3uW%$(bv$kr!ZourVJiczG$X1W$> z+upKs-`A^JGOo+~1WT*RpbwN(bhFxnIg4K%Aa^)LPI$c9p8<(gwLMZsy!b{_!R~JI zovfGpc=u4Ome@3DV1e~*>EAo)1c|?}y0s!a6)aK{(c%FF6F6bn40Om1lh|n#+vKxU zwW3jVt=Jtp%m@0I?r*iwKTA2MrjMgHknM9g-zyO5Tqnx&zd`tM(gLkjr(Uplg$8Xx z2u}j!Hq!%8Zt$jBUDInipx4}fJWEdMSkZRd+PtM|!*+HyMj^t4+lIyiA+Kj1=lQwr z*O17MI&=1laru)r$#A#Z)VpNA4uki)GTVC#3i3=|9xy$r=yGXK#a4`^^<$jpI-1@b z$dXQRt6kRvUO{o62@RTa{CfYY^eH%h=#EiVW6YJYOOUJ?!;^=>Bm@NVmP3ws!*hS{ z?KZewS*35AMlBA)&*v5FMW~{q+HXAQmoq_xO}~bTrYhmJ^DSImTifa2(f4R8?Bnk8 zamne?{rnO7)iGl&Z>5$wrK_XztETHc!a4AH*RK@UQF=WjlQk&#ApR?5Z^=ZF{&Q=u zfHH&f&$X{dtUk?g?rdh{QeJ4YnTS71OwKGU+@__wrbm!W#ed;*&g~85^?bHVg->AX zuG)2xA!<6zu~&`*v)uX?`0QV>93bI&tFtvPo7jDS6?WmN zx+u14iuvP#5d*${88tD}<+1ZX_noqOBb*6M)bpv<2GGx8Eo^tr%g^s0uisIY2gbN_ zloi5?0*G0$nhg-dX4Y~|7r^(Glzq$XQ~PtI&90Ag)Z5@3J6;L0u{fb1wACjNaUpB` zc%D$I?gogkb9L4vS&Mk)`8!lt-9XtsiAdslNda~jf*f3RY9#CoGR@R>Y0%*IJqYjH z&i^_*%xc&o-u=Ed@b%4Yo~je{S1)OA6Hy#P(v z-!ZD=y|un={X;k4zlOGt;d+tkIr+iWo(@J-VR8E1IX435F^0r}R&~_fvt$?J{F%C0 zKA)gVf0zdO!MwWX%;VKpasuu57qz&YFDPa8E*==>LlWvXC=p*t_tRuEOWIe}uToA@ z#?FzTy}M`kVW`y#ciQ`YMd^O`#6D{-KB}BOf^%=wyqb))YOnhN;HVZpn@L>yxV7J( zweQtA>02$z;#n@E)Wp#h2K1kH*~K2873JimUypqx*)_sul2Ed|6YqDyOnSGBPwME; z#0wG0J~t*i1!M;I4O@kHH8C&owo6H zyH!xFNKj+kw@Tn^+Kv!ue0~KnSVZBMDXsqa!GAGb z(*;U+Qt_+(nYkiYommi-K>8Vtuc^BbSLK@T&F^ZS zRe3rOREX>|pPaS&$1OoHQd-;(+F94NTA~2f?}NQb4r1-M`9F2aRP(Jf?(VRa{3;e% ztytYBMTl*`M#auEi&U-_rVJrJR#jI`-N_QbvBLT%S*UYb@O5n@9vc%EF=?NkY}>xF zBrl~XCq||PmS06Xb)26|N3gU`IgJLK?Z>%q`pl`e+tk41DWTn;DaKZd-;6=mw#acN zHj3U30=c-kwrI{9*{r@;Jipa-axu>a)<;)lzWOdl$L_@7y}V}f9U^>ajV9@JJBS<_ z)Va4$8Xb;T+_Okg0G34ixf($XC&}-RZ+EKIe{1SVSiohrcc8RvqJ;Wm%(d;;2QNK| zv;)f%H`$sNcpm+=WGkNjleZ~`XziBM{#5y++s`ZNfDjd5Ry8b-r#wh#o<}+O6+lI- zDhoWA<~v{GTpjxFgrjOPzL?Wf^354~3eTU_;Ltf`oy4g9kMdyr?H5@ zpPZtD8{68ofRa|hEHwPmHeP0m?;{i(m2Y2ib}+IzUgzkxOQr@hd3^N>E4DbMEoBaN z!RhQJTf~w1aUwLbTAe_(V<(&4BtiP>uN1|GaFs?qG=mBcB7*I1`!|);F0MXv~cw7%9xLP=6r;1^CmCF&;+m6$7tmC39AKS zk(bJ&gwzhu&yY&W^5;@AWq)~}K!U8&rh3s8^l$SIhzWDt&aNk>^H9G!n&_2eAG74J z2#`i?WQOQHN5$)bf89wF4s;p8W{926l{j(wtgI28 zv;+`?$9Ubn+>^O$-e*6iK^p$}T#tRG_qGbL(9BR!o(N{W9X@aIhYQTdFcmmXqUDz< zu&V6Q;avGuMG)W=$|zkg06*!nb!j}jElg&zxYCu$`OLTK#)iQXH9F=0`{$)np;WfT zS#v0vDpu&XRXphO*iS_rmIL&>fy}Sw<6n^;`>o-E!J`Y;l5vK*IlI>cGGA4n5;gcH z24d+oy^(LuL-lw!dWLHwr1wo^i-Uc0zP9+M*Ht<3ZvDxk5^$sks_>bQ`$r~)@`6su zPxd;I|1&4f+`qhvMTNtgwVzC46KecjRLR<`Nro3 z7UX)!Z*>9W~QmkJN_1&f8?c8jV$CEVyi5L z`W7Ipe!FBxRf)Y|_eTmj5dzD7!9~_o?7d+o%VLSVdxyfhPQv73yH_rNYKLg*Ha*fy ztAAzDkmc*oSLIO9HCawgbSWoRrc_##{!i^Dgcdg~fWWp!+Fr0g)?vwVj$sz+MH&2j*xfiF zGd#n6&B58B4)CXXrlIyRTlvl~uuIgpnVFnyP}$t}IQAPFQa3aAe0qzu$yGWOA^%Y^^>mirGFIrySm zZV5kAwrR3+3v`L09qYI~J!XDr9KFA`?&Oh08>+vSzT7I(N0G;uT?zkfuJ^#XGUV|p62G5i68ufw4Q{E zrcm`FnLxCaS&na(gJpO)4(b~JnMj;=MxF8HNZQ)6bdhCp=u zp_KxlRSJE90^Gw__f}82^G8~^PJ4-A%8sT4__2t_*vp`~udjV%`w_SFqW6Rw>SBS* ziS^z&d|8OQ;dbF}1iLxZEtWeo1@r%Y&H{E@SuB4yqBwo@+K!}jtC4S)y?CoW2uV;*5EaT9Xmzm2j=fUj;;%7>w2f#ZX#~?2e)$>Y zw5JY{V{S?BDuJw}5iU~$ueq+X`$k9r>6f2{zw^$Ns4e@;zH|H?*9xa&J|rRzNcWCQ zfDn@a=8dE0QKYo&UHE9xP4+^3WU4^4vL+bnmd$Oge9=+oF9&gSxwNs{%TO0~?{&iL zewdnc%W!_~DG#hXIbV9Zc+2eiEC4YB;VO>fSoFLHZwLlEFculHJex%0qc7fR~{LGLt(`OGa! z?yg{79bk$FV`F9Z*`;oHpe|;*Pz}6*pI&;i*Jp`cKU;g4``VB^%Q6LkADMqBn|#ci z2sSRc`(p6x=8kCZt9Te&=;rA5cCR!d+$dDn(V+e?g5(NH8Q&?VCrbYS1406Z1O`%l zfu4l#EhVQL9(Hl77XgA+9iW;isVR#;n-bce*YQq6m?__VWer%VNoa3(uqbxdly2~@ z>f+8eTU&GeEqOw_$Z6zd2n=8wx{4FM@-9Ad#gHDUL0YifaA%Q}!>$1G%GmEyFx4}& zFaK@);tJ{qipaOt1beED;*B<+yo5dnt8aNK+olU;9Z0lJTY5Y*)KV#$?%h4OIZvl& z|ArWk^-rQix^wufWQitLY2&##Z}Njw6TDR}U;+UCsC>7pmofg^Fl3ewtk zz-JzfU7kqf4*O>XUf*k2am!l41^oPgCs&V+~0tv zKEH)bJ!x=~k=1xG$DLNObj#TY(UOkQk>dF{!IiB%xOW@!=uhCO@!o}B(4|jnIge2N zX1L!oJZRqfMAJ+oK9ww|n03marDCgCNZpf^n!`w%5Sf9Ob0!@%l6p}jQC6&R=Q|X~ z$}>#mB;+okz$TRx$8M+DnB42E79Zy5N^9}&lw^H1A`k(G{Q+68C%@*dy?z+VH~fMRo+B@m8`)9;d?@1fRqt!nZN3F5*;7pz8yTjA$~oNtUgzi=j!PB zt?Qp?=F2E2r#6rpuGQ|i-MT8m_5R*3x;g#ayz&i9Yo;aOJ$`v9J#0che(sVFGxdYN zRs7Cr>O9{Suj(@_y=Ln`iP7KLoBCyi1~*zK!HPo+i{y+eEp2!xlPnOEL-GSv$GCyA zPsDx6bn?g41RAS;Nrn;)Etu`B+l?t`dYQRXwD3hSDheMqrWe`)dQ8tP@tvM}1jGFg zA%1tVDsC0CeB^9X7s!8#WtY|ItM$WQ^#REE0C z>%&ediiiEGFn0kZjm^$ZthX6IRh)UYXoN78$)scwKWk<~e3j;gX&GWI`{VnIi2ofr z>xIc%mj&%mRj9~JAI?yL8hyjX8?CulI-kx~F;gC(y%+m-V!HCjPbJ~Fl=3Se7->C{ z3TRO&BQvRW{e>L7#u6icJDSvGjPv>o(y1+&wQ+pr>x&&r=7=!xLmjf0<}IPfiI=4A zD#Q?J1qA*BYb7Xr@UKys!vf^htTA1H;X%ew@2yVTtO+=~GU}$t8V$DZUssE;H~B#x zKHl{*8Y!0$EeaZ5rggkO13!(JYQbF5)R0H@yPjf8_cR_xe2w#-&B3 zLf7OjM0vzs$kk3sU`fNGkFE~qwJaBaDAL@m^BWwQ(CO_B4lB&sZYLMV>-(hNhY~I; z0ZszMXy3HNfE}_qKP20HVtGyUV{UY?H@j#_>NH0TSP~@kxd|zZOz13!XPWxoLersf$7ATKeSe2zu#xx7C_m$HPZ~e zLz!$g%_!DbQUctlq|K@V3zb`u3nQP1BePqQ50%Zn+pPfpEvrH4ep2f1hA;X#wlge6N?y()B1Hz+pbTC@+{5h2J_-R$gZ*7e02Tptptp(it)zWL*5*-fhEU*z%+Z@=RP_PXv-u)-bYkX4=LswF@H4`cV($?*MD+CLwza49VU+_e~C*Sx|*-m4Mcj9>1o$iK_h0Qe> zc7-vMz4vNDZ%$WRpDkxyd8(C2RX7~~oZu_JSkAND&93`D#y)`4j_l>$yNT{!j9`z@ z^4cZ}-k1c!6h<*)!1tI#%#udgtY2gOq5vbiJ3udT254J|SYElaSpB}X_vDI3auW4b zND~KM<1Rzh0K2rENQ1Tk+NB11UwY>K#6OhI_nD5kw!Ma_YBIZg8GeMC4V63xw=1@~OdFq(R`G(BXvcKp=NkUoq6U0gNH%IJJ7Ii3E7m8z#ki};<}wpN@!M`}MqZn-W1xM|E*ix-6V->5 z2to|}Po-dEcWO563-iJVGWp~dz9==rbL6|eG#q(jb>maT_|Q@BK%|OIsQ+=0tv;;h z&L?6UAOG+}7-BNuO1ZGWFSdC1WEuDry1!}Wp$&7`W^z9`@U<^}y?Q0K|65L=e*^Sg z2n?mPK|WLhKTRHTk9}SYU!bro{QTw^tuLW;{ZhGEu^0Dj^5v?@n8t~qcBt^Ikm&6Z z!Pr{X$P`ma8n;QBYv{5#G;}MI>7xA^(?VA;kjRV9Yd>}9!knCyWHKBSWN-T>SXy@^ zHyirvQkb|*YbB?luvPf<&3v2}j!Uwy2w6$D!0 zR7cWUO)9;RmTtwOHJ2R9;y=hmv^vA^jxSV|OS%51Y_KAko>khtJg-3RqQ0woZ08U1 z1TAkG8g%HO#{%F32X^SMi}Fhz#zT#no7$;jOK zh>DAf%A<(1H+sJLde zNB`jAPUfH{S;m)x$2-q3mB8Jh9(e;Wy_Bx9=$sE;9}+xvM+h(Srh; zP^j~HW#F1W1#A+kgGVE(t3Xt~1bv#dO?H?Ed1*&;{whNrdafjTo<%<FW zeL99=*-mx;*^>E%oJ}Z<1?}C+#Bh`tTT{BlUz?-CvbJ}SLnqLjwX8C1#iL&aJ;asJ z@m=>mOK~4jX?K=F+s8iFRFcUOL-<6s*Glw!W%yJn_GA}tbbUf1a9%hX9XUo?w35JQ zk|Z?dVNP76myb}Wij7{VF| zmkY;F4Epw(1WK@UB0I=9uFbY@FnfDPE&QVVP!FLu|ICQUpE=&)p%K3n-f~nzR1`5O zIB}1Iw>p?Q0|yt7c36cDAHQN4SS-%{x>K63oE}_;`FwG7nDX(bWsvfImgl%e?Hzhlh?^+g>7qU@U_K1A>#0uDr ztrIpw8E~tC}xFtOOZ#o^aTXJ8-cn6aVe~@>n>^*8{Gzo4No_(+A9lLpG zgLN{#F?k_~OYyWw_vEutE<18DrO74CUky%!j_pPQU8(Iv_B4wh{8VQbJ4FbW_#S35 zicI=Sn(t|9mKdS864@5|7h{6Ieht8jrI54!IQ}Mrm`RxY4`yb4E9r=k~+e3vUG1Erx?| zJr~PX@U1z`?_rJ43Axr`+W9G-^U;Lav#|`)+g@$ftZU+3JTABENK1P+6;Z!`u4HP_ zi<}WDlmJE&MA*+gjul3E!0S8|ZyO?7R4UAl33~SBW#BRHU6gbpA<(5;3)HD8y>ATV z-pG$wZ!dI{=q~MZ23C@Hsj3NFyGn-|(OWcGS>1Ze#u}HLbeCIcCFHDGjlq&B4;Pgl zXNqLYeJUyeXmcK{MG_vR{eUgh*f$=t7dGxC95?Fpt#nU!tNS}pdZFP3Y zyOC2uH6W5#6E>8UPZVtXoG@;C5-RQ=JrnyI13PEIHas4y9{kV8 z6d1ai{!hv9m<=(A7VvZJ?l1?DB8z>RCOos`0k3y5A()HObMT&ptZaxr;8qX%aDBlq z(G`~jS5>$6?QLEuLx<4;;u!0W3* zuK-c|HZIxG_}zdpz3Q+I&+)6}nRPf6a-n{?rr&;$7NYZSC0=vsf0#`5WIj5nF}Yln zLak680km1J3SzlSzxjz#dH!&;tLU*_fP%IjtYRa*>uau~Br2J?il~{=Vs@o|Nu}ri zEwp>!tG`TF`3+rW4t$R#pq~MZYVLcv1X7;8>UX!|>6*)eRdWc203e&HW2vu5Cx67h z_LYr*UpH~nx-AxQ<=B)zYOQbmqpMBOmUkcQY(m{2&-n1)*%qdycjUO4jRe&44TZ2- z6PD`2H^sd20sjFtHrS)n_ew&q>eR&0LLD*-Cd&6zJdwgpfCN%P;Q^#OyfFl9N40;i zPuo+V(SH0%VTzmk2TxG482srBG7 zczO$2X}JMHoS<(Ltde(si65QYY=~AwE%IFRh!wPhjBeOA zwpv}G@{i{`+m3`qTZFrQ-3GFtHbtkvNhF~g^BeUsi5;zPoBiSO+ONwrKu*aB%UeYL zl{ZQ^FRE1v&El}t(_-ZMiS+aQ)Rnev0J~CUSGc^7A#|_Du&01SlBH3MD|61U%5_yn zxO69A{*)1SwSD@4NRU2sd$63)VQ4Rki}BHsrw!OM%;L}Uj{S*Z;!pQ6=_uN$;$Lv3 zUS_&F(@@H#QoD9pk!<7B=NW@Kriah#9eERdm!u~1qG#w+s#b5p;qDx?7YZ=ZGoRJj z2!;9aw)uzx{XIckTRSx~#pWw=ev8HT9QYd5g}{etCL zeuvyEPXCM+p)ks<_g=sb-wADOGEWp|VeWMk`3d?2)b%Po7F+?VYf*f>dMOI6k*%4C zO&+6sx>Ow>NHbFZaLnP2#3T-gmv*;DP%>^H8>I{S8Ng;35RKSL*9agDIJjywmcTa? z5lLAiPZ|zX7ry237ug>T=%#*U?X@?;l2B8rh1Kv}4lJp+E%!QBe-P7BRZ4zWxnJjA zVMEB4-5d09dT7KKm&If_P4+h4p5azLxjWxCCriI7o79Njo*c=3{HxV z8Z$o^!du+yZEo3=?C$C}oA$5ycW-RpOHA>{y|&YEVBrlcc6!H^cG;5fy`h=CHVN+rvM&C6Yn~!$jA9luqX`42$igcH>lkRRVE_CgGK=kX310H>9HvhG@3#PMtK}F)TOoeF6QKRofi5;xp3JA>|*Kjtz3rx+;)%iioJt8RP@ZU z*HTAXxXdFrK0C_2#7}8+<=U@iD}%P!`HykSHPPo^bvul2<8e|9GnZl3mVEw97qD5> zBh>)>e+(-p-7UkyVZ!OHXKvZii~TXQXsc3G@#v%&e<=;`3r}ArK7FPgWekR$Mm77! zgoX0<`MQ3^bE9{AWq%wK&d=KAS4g8&at37W7^~!;@MSzKnN&P-W9J&K7?HGTwZx4% z9)#Udnj8yp-{YVTAvMgg>e<12@xWH9ErSZacK{5}O>8=rs zRZeeu_}OiWykgr6{S!^MY?3H#P!ryF)KyhqlPF<=qjRN+4PyP0s<=+&m1pB;71u{`L6incy4>XtJTpd_VU*y1i@!Ao=O4P zNm`UN>SxH|azx5v(bnr)Vvcdc;U(H>2iUOfJLoc-89u>D-7B+iOBbO>f~nG<9RMX( zP2b6*A`c{VCWzi=4>1(HYk2?qo&$ZFrBo+OR?Kf<)6U}SToH=~D0`Re-z$#zDEy+@ z>!n|xj{ve(PsT1r#{?R^k(>!1?MKX{r9Fz3DuaQs3kST_Px$(Ln9?#xY~gW1N#k|B zP7i4b-tvaW)nwH;#8ThErFWxiRXvKiVW?rLPQg@_g@;``YY=cPK!r={*y-n&Wqj=3 z=Q{meG9eSibKRZ5ac&zOB=+Wed`Z<$4F7}-U2DhM(F%k!=Ei!Iu zrHyzC1wJFEampCpk8=1xyp`L$pr~lU1W7Qq!ubmD_ac(v;1VTtHe0^KD^TEwGjd=j7kQj%R%?L+>qZd$Y+T z(}oD6$$2(ca%OcLTMHGF4_sCBa}rwyQVSeduE~)`S)07lFkPmL&WzXk2~w#IGyCnk z9Y1$nX;J*e!1vC>-gui3b+aVk6OK8i=K9Q3Q4Pr`G76oR*tz)(7CRhx(hSKFjaie< ztqmFNlcuLlg#cBUp+FYE#}%kCinOPg^~vuKc7o;cBMYwmwX0>FXyhs>wG-vIN5F{{ zF_J;@6_x1YXYWkndWKcw(q=-sm#oVK~uT|_=uog)n>F1dX2txJ_vF}lprM=FHuwq0u zlo#}jHyM6*F?FZsGCn9L1}zAm8@$gM)FFr}BBuig&ZG0&xi7}#SLz*|GbLbsGkT^u z8J|l-Fv1_DcL}F?`X@`$(&7*-kimHJ{o!l(5&~WU0AiAr;W=V5O|($hP^)CZ@=8NU z>C$7|YRmiihiC857X`*UGSPU=ZPVdXSD-vB@*jbx6arWOd%RY#Gkn$X|BctU1BMGE zV-Chto`~&;%Mv;eylp}|J<>k#THqw$E-vRP%-BoO4(DEX`qh;5|0`|VtWntJqF<%_ zvlu+AbJh3qPr=qxyXrL^YBp(HY3^j%Th~|%vx0MP0Ek&y#$W>ioi2*`tp$Dh1)Nr1 zGPU4CA9B9KsIlvQ!2YWc?qj%a0D$sSZG7-j6V2d6qyMLJ&qut! zx&rb$1c8V&R1b@Hy zRB=>=jS+<;eWgnijp+W)%ak+^=clg9cXSWqsV@sWJ8JRA_IsbJJ-BiAY;=)w( zt&K81#na7*)DCcS9a!!Td`v8f)+;#QKkJNe|o?3 z+G1UJh?F{#084QD%@|9*o;Z3!;ZX!hc{(zkI!yo%8sLXz;`?2$gjY za2fXBsPKF_rlE;lRqsv)dV`V5s|}Z!(KU*w?C%}CaRwr0myA{5zXg7|Jjjb1fwBYG zohvexT+elke2jh31qA?FtIc@DnPwS*H*CRa9~9u!MGeR=^@rMZJ0yI>Bs5s_(YR5h zlQ;w>>`Qt%aiCi%ZKU`r`AZUxuvTFa_m+-jbXWtB`JslOb2_!`51y@h;bvwiZq{Xy z(-BM|MPW(o$=cm3VJshp5!&Ol@E<(lmS=NT`?69OH)QnX^itC5Kmwk}H*~hchl8lRsO`9(BH>)@Up9 zD@5;E5~m2GB1C%#4!HdoU0A@@6W8JG@eLH@Qu>SK9)7++0p=ZkZInNoPA~AzXvaOQ zZQuk-_rdjRj4PYc|A7a_!fdqYD4{?giuo2I4_2ff8(6Buy7PoF3X(5%ibQ<(G&vFr zT)5OebFFR@`B3^0?*+{MQ=^{{Lm;vmNMVqVDA96CerN5nn5%$ zEufVqeQhl)09cj36u}sxmDX#%0T1iAd`McEI`FIR`UyJqS4@2V)fU-9F_&1mS-~BB z6byE*2~M&BKQw#OtdS+{Xv^GERAPH0+bnS0#h)38?ob4Ex#HP%qLS@EvkUz}Y3S~D z;v99v68V4=wPn_?WmMK<;qZ8ULq`3*50-mgr?7|%RqymaOMQu&59?=ZkVCy!xO--D z^pwBmfTb%t#MbeE_Zf9#efD>(Ip=M6GY#kl2xJh+74ev|UAdc%g=RIYtn2Ks;%Z*> z*(dInalf?qEnAOB`#xKHcsGb!MOa5@w7V{DZ!t+Yq05&}gZL$ZQq&QVEuL1@rt!!_ zov8JC%DlpfPl8y~W>36~u~uI|5xVXlB(p7z?#$-Oe zZx+jpQ0`_GSk4qyrSsQmKS*ip%*XFPY=|hTJ#R?E=6j&YFy!w<#G?IvuV{uimH&io zjpb45*v~br>XWMFPNudM@-_1y-X;~6nBD8P+ttn*wY%n+c#$30i0=VYZR8F=>lX*( z+w^R97w{{1R*mqC8Uae-87LSfkX3!u! z#C!C21B5){-3B@(pr7VCr*c#hch4`|3k5|O%&Ib`-I%*{6O`kRuGZWAJq|?v53o~a zr%x}V3$Adj`dTc!>nip4+R8H_JhITCe4V0oN`u8p|2wIkYbQx0U>E%Ta`c^rJP-MB z?5v7Pt}WwS;08jYK4vw!lq@QHBl6IA^+r5tnDrG0|L!K_1jLn3(RiQp8 z6)4Cw>#?Az1;f4guS`Y-zl}X2wdi5S_%iN>ZNmnsD6e!B2vmn?eT0&U4yvrLBK(-Y zMWB_}SN#sIx?#eJa(?>~PYUw==8617>>B!A;x}LI?3LqBeim7ud0k2{dw}Nq3a)Pi z%dDs%)1^UOqa7-9(fa^@RWWfwXl#jkLoTI)7onQ3N)A@mV(0RJzPlosDe<%0T*pG@ z%Lv_(!teK0%hd6y(KNr$lWB1UhcfT&GR9V-`YZ;G4#p2UL_ePXe5%-7y!H!yjl*xz{13LMO3c0bVLV;5`qqv~;i%bgB1MLBitASYY@ zCU(MLGqgs_HlJmLU3%$s!8jO>ctdpI+#6Rr zBlCi_*fYyAn}0-9@$vkm;wlL<4Eds?VxUfC&|3xU}H99oadZQtvnG2ql zr&Gyr=t}1;Nm7UzS76=OCnt9{LB&%-{`H%$DzCABg8v=;&6f_%6Q|MpchbFqLYn-A zfb4oX>}*1!0c;+~myb5a^2)hqHLBC@*uWQ8b&q?q-_y)8f=X35IjQYejrn~YyBP4@L2Rvp_uQrn-JhApVEwL$_W z0u!90dXipxbS{fcz@MadzGO`}pm?izRU-oW9#By5)IqyvF;fMSQn?n}vGjX&5+5|* ze(*7=Vmwbl377#nS-#p9QxQ+D@aLQqnO@c91)tS$2R8`d7tk65>+eiB*!>@B}G z)De{j^V+^dfoq}dJY3fa2>X~2^lWWtEEG3nunmqTQ`|(3dHAAQ6(gIYo85Lzmre<;YVB~55&(b7QT-Y zVJxO=67%AxQ|6Eq{mo4Pmv71?4#+o9FjSa3@pMA#7Xpf2MmXJh|5AVa`1~XmXD%NB z|CMbNe8CYJE;8_5__rnqhwy@z(mzsM_@iLx$w8OrVUY*Irthjg_QiMlMkhBz<9eQ+ zJ(c@%Y8^N4J#H+eaRiZp0HZ34%HI0zk>$h?@U043007N6xNEeJ>&rEyqU+k>S4a7` zG`o@tJy&#Bq4_DBV`D6V!+TSSwtz3y9ZZ`L7U7H~(zaluafFM^Oq2+DZiV$7CXDe)$sn7Bkx(2VR-JlMfJCOQFnYk)=al;o^^Kfj`yEwU|Lbj zfV8+tPBVD{{{9V{Rpm-T)*m19zCS^b{trw>V7^!;kHpOEdz-q6lCV)IMaSb}QF=`G zSX8w^$Lj!^JEP7lziv&l(}YOM9m?Htz|A$Z>>^PF50gn2HE?)kAgGCqrmsZ0x^_BU zMH|p4z2y=jCr_UymB_iXEhjY3=FMrQxL>BcdqdY3AK1e~PkTVhZFGy6*PwXgF4RIM zj0es8&DtP=s(B;!k3S69bv>yta1GgL^EZxHH+UR&OnU`$!4VP~WA`~EUdl@S9_CPd z7-NIJ&q9@iIy2&~VZ$f7X>NoJdA-Wn`MA{2zgBcZTCxNG!aDuzI7m@fg{*eVY767cusqudL4fjtiDI$S6d*vX93>DRvEA zYw){aW8n^;JMR^lCUe248w*}QqFZh2>NNO%Q)a@SMc`;{GIGB-yDSfB9>!VXi1QWJ zG6DOq2p7EOGDEp?ai>L!?$h9h@&hLHrrQE&+jeN~Km(~$g-!NBBbyaFFg z$9-YACKum1k#eL~<;$?tJrpqFhKa=3)l)g?nGkf=8yv z3Tv?4J2rpM?Z?G-dT`KA(=n#K|3p=frT3%-{I)PIHgq6X^{$*jjxuTdB9_clxohkm z1wsc9&+kRScLc!OTl1kdb>6@q3ETXuW_0jFFKso?)Z+Hf6%Y^s6$JzV z>7A%3z4soK-aAN10wN$?r1#!S=p7=`q)YEadJRY?2}#b4?!BMApKrhKIcMg~oPQi= z07sI$lcE3(rSHXMxOo<4wX*l3lgge4=Cr=+7?}dI zHtJ5Zl9bAj<_5`Iyky$-?tff-Uc4u`Znqj3P29U#i7OZoi?65xGa(Kl?#?=YmI?mg zd$y`&wmLNfu(-5Adrn;Zh4&0cB=~yZ^-Ho-w1arI*(Q0>rj2(^t}IiEvJ43DvQ5;X z>Gt!GgzU7uicsK@CMmm0v9WH?-LNl3XT`Pm-BmDHBp!n<9%?-tX=tiJ<2-Bg^pL|K zm=GKUAhY$PJW>ZmC*~V6+mT}p%M`efdR5fd$RpDy|AetxmuN}cL!k5-XMumbU`?Z%;>S8=rK<7sW=iTvEV0dOrL6h{xO(efr`_xN(M z=ke)R1d8O`=UJl_u(3=Y28$chF=o*#;=s0gUJ3}Z66O?YbeD&fb#^KChw+JEig<~mG(~{9cN(zYFW!yBW+2r%| zZtuSTY?0=>w&W# z36FLU59%R0_6Mjj!+*>O?2p0y4-eNCu*U<_AfeE(DA{U<^jpDRjwuw*V1=B(@H7wQ&Fi`^R_;782pX@OIVG797ElyLCo=#3%k z?8B=yd5K`B5qN%==x(=fc|ND>$@F~`au7AOxG*JtSbON~nQJzE)P3sQpJ9B_GCy`LoA=mR}@-@S2l4#h7#49u0#NrUz7r;sAoP0=j3Li}#kCC4TV|FI}ZEw(P$n=d*3?G#T?aA)lK+(kd zOCvE4N+pc3I1#fXWaYfK#o7rlv;)1aCXvnewUhwwq*ea`)$zPX>-^Vmd$_GzoDo42 z36pisOwWMus!b^Jd0xr-ZgtKExq)T@tWIC3@GV^pE}yqEie-w-i%~a~E2=2?R;4b) z&no8zVGaviGUsiO&x9Tj$nk54zqZ%IyQ?_9OxlGys^fqe4 z;pdU)UR(-?{8?bSAl2rExWskS#cy*D+azji#rItkith37Jj|n%&`V_AwZB?-=yLIcOisj8_~$%smFOD!qab!|81oF^{1-)&{PZ<<}_LN%#&uHI_fU{oq4RQ9;0Sg&5CxpJEw8>+a~$6*2e z5s0V>+jo5=@#ffBpoqa3zICxUrD-wBmnCX9;So$*3}FUIhG{VWRzQ#KievPYB!(-U zaJFx;9&M0FB$ey6u&>`yEMrk?>RkxScjSI%ZHKS?hU$XCJk?%?O5YdUWqGB$E0{rY zQr8xep#WG8q2R--x;vtcR9 zbeJyRqgB#kX)e2&a?u(-Xu_r}b|$F11@D7{q^J3+4uWdtp4vFYMg&fjqW)s)AJ29lV(5Vsz zr@~hlV8-b4v9O$(1h;oDpPH5*+AB~;nm4*XQl4QEz&k87g;~TdoVYhNdvN~X(LJ(uR4e;uvg{?F2sVeAH36Z+7|Kdai zRed9QLQ$jxlUIa;?qj|w=}q<74Q)e4H;zw^>Tjy0(eDf%ZIQI+^c!aKl51uWCG>g^ znK2&LQpOo;nCxh$iC?nFBDv%mSe`QMlx3+f6aDshpYnu`g!Bcir5<) z7t-5S>(4PzVcM;fzKFzC6V--hR%3y0rC`j~id3yh0-XF|n^#XK{*4&P~}(5;0HfPh%`>r7)Yt zou&T5TJDdPRQ8jA=h|iO7borhrt}#4`yKf%2V9!*H2R0~nFoi0kwrhBBmlX9mrxy^ zI9p9A2Eq%+r3~JjTOLsIG5(Ob1j>rRdP#}F8s+x~6)t}tw-=MFCy zFO=oTn(h_W$JPN*yg`CPG(wP!8t4mR;RpsMdTYor2i=iIttOzpCQ^KuYfA=&@~`#)j6 ztEJKX{+Ed+ngPD8XHDMgQ3~$$a*alsj1>+2H4dP23eU^L8ZB@YRQz1Fk-qudNwr5{ z_TAoQ&#!dHY)1x!Xq3n2#|{MFt!mGiwS*cRE%1FW$xV;;8R`ck9>jI{v1h~>a#D9} zNJ?fK*}TnMlf0rK*8jO3^;&)O+l%B{csX{)tw}kUE+h!lo4OwM_=+s!z;xAfY(e&z z+X)Xb62%>Nb7$x>i}Y(+j?~ULgM&gllZ#ITE~;6)yBG;N6C)w;cw7o2g8FzH-v&~sTDsNDO1;OH_?1q zHC#+}$K$u|=F)fOB^%U3J_3Fym_~B@=@)Goh5NzM7AMSK8Br;xHae$ax%wMkx}~=F zmu3T8?H>qyo?Y6iazIjt8(nMjdb?=Y<*?iS!LVGv&Ei^n)rNT2LNcRRVc`3${=Mbd zJ1MRjD*OY71D?xe1VmWyLzvZ;>6VN*#yc?_=x|p7**iv-a{@Uma-HGveaT zsvP}b5_^H_YMDDr5~IuK3-NuHHp+-i)Q-Sh^y^7y9!J*-PdCR(1mXm@w@Gm9$bTw9`lvODT>x@sE(Wpi)n@wu zS0*B}7`t`i^i!4n!^;7_0ZrVU&t0HX=X45b{MxmcPINdobU1pM1$SN8)~DNeCDO_ZEGB|ExXjeI+NmVUBj zY^yKtRN#bu>#9`sU=~o5dX5TZL=Wpyu>Q*kLSb^K=h_&eBTV5W0`*+>b zxl?^3Cre%U{iN&idLBGW#9=36^|RUVD^6R_1t@DXdEpz^=wB6l9gm?>4e|JpeA9A}WVt?t zN0Z-O@s7}1)*rH_02i1|^b0q<_g?3%b-K6}>RN(>K3ZpZk8sOF8j@ti*MF(Cpk|uM z=wRQ51-182%6zkH*jx26J&DrN7jr=E7z`fT`jMX|WQ!Y>3JJ0lAc`|OU! z8yi1JUhh{f&gul?9`UM8Ar@ZLo24B1gB+c{ZjWP!2|IMX`NOS;V-W}hW-QpC3*24D zbvkjM+&`DLN{_}YwVjx07OqN8RZHF+xE_pSx{;79F~58yJI|}v^dhp7cTa)cCcUdoxh9TlNl+SrR#m8#Si#lLa_0w;0IolZKwL^ zhCsi1vC^DW)ND-l?vaj{(Jclxy_0R@LV;u%n>8n~aj=x}I}l?R@unUj8bRJOr-fo^ z5{c|Am7Q}!Q#wL0^KxbV#*U-4vDPU|s!-RIy8Zlvp{0MJ#_CPQ`|`8+unBc5rd-o= z_FL-pFJJz$_!@+0s!Lxl!=7%pt=!>_R|o^t)-8zp9avb8<^M^wj}G&)$3&pT( z?Tg+xGwW{Cg!Gfu@r5Tz72;r~#uqQ;csR>6GX=G3WnSw^c0z$lf~iQ`-~*=DU+2YM z|B+e9yKpUKUF)~t`NM$UneS>@sJDds8OfcM&B>GN3noB};lNFUrE4rb3O4#4BSb+K zd^Y#VgX~**(?nZ+UxHE>Vpi)vxJ=l`Mz;{!~#7 z`X`|M`WK+JmHRED>YvJ}@uxCs-rr*9NkJxuXV(5 zm~6ue7q%(p_C2t?TNCMb@@Gfg zHtaZhC@V*>fW$2RZ)_I7w&*Y?s83r`;B=?*%%AM_eizcZ*IP!0KxSBYQLjqz-P`7s zt`Z>xiY&1C2Q7S;#LZd(+I=+s9Qqu1Sl3)+g}x;I!qrd=sSb&RUMJy2i}`tuHccz@ zR|c*0UD@7e*K?*g348!N+1K;PcO0HX2yot@PT5Qzq9~y^&horXALFZe7LQRJ#N^`xH*M<2uuxSd3Hp{#Bt$hN4G_LE_+;i6OEU92NB$xVX$<* z{F>n9j{B`i*tpgSsmfnSs73CIf4ydJ9p4^_InvrMui}vZpZqqKDYpy7& zPx2Ifwd>E|Os5JWWCv^f7Z06UR9ziZb+*a`|DA`*+rl88V=xxP9jahl269IqgRCi= zQ@y)GZ|`TIHRL=!C?*v6-Gw)?7hM6JSjUYQT$`rFrFzPPmb$eVheY{e*A06|!bckZ z#!BD)Vx+eZ~ZN;_}m2`5e6`82LuaV@|-dO9cMn z%Hj48%cIo-8f8%BZbFI!c8FQTInKi)XCQ6iX<^c)r|MwC6w|{`u_e*rM*`zfSY4xX z$Y>r0U)|tgra&h27dnLtO4^z>t4hU9(gzLf{m4?;j1sHgJ9jItEK$2Ot;Qjf zs#@6m{L<7S3(=WAhY3>1Y;^!XLL?d}#yAIfgbq*7L;{QeeWqV-m33wwd=lV#Yvs-D zFKMClU6;hQ^xWnrypoYm-b;sO;)OxtF$Mf>>kH zhQ7Q!vfd5Y4>;tlQ1bcHi49ba{qYqBe9&6?4UQ=&yW0W!WGaLaq52xlpW0{JPoO+7~WpYI~NKhPkTtX`Eb>4*-C~54gl0({QQsz?>f(1kec7DKE3hv|!MSG-p#B08nYee`v2jjt>$ zey?+GSy;{odX=sh#TojoOJ_={zGydiKi;BGuZqN&QH_l-COMvcA8~tkGWHTll)tv% zcHgGdh?--?mVc95kY;#PrQd;Wra6@pXWUMY&O$9zJ&Jxurwzf;`MCI;xa(&Owx$gs zNJa9lX$0NSWMK_E(-Fgt@1igJROBW+5gx9G$j5@k?ONz@IB3(kNf67y?}|VTQSM>V z1zT{xIMH0IU&sm7g9J^UJ3rtjTFdjvt+mdiR97bO_l|ywu1t#qaEcIjmEz(S?OuN5 z>|oRuAh@zQ=6gPc$c8|vSzU|e9+4wuY+dpxy1F?c<^-$X!Fcd~JlBPs1QSoDa z29H_G!t_+BUwJJoV#$$yCUoiPe8k9pcz>r($t}q^?~gg)sH~K4jkK&KwxHsS6L-Lo zMMe@UhQxC8j@P1YhJ>7O1A zU7;Shf;(8K4yHYzye*d0KZJ2@3f-+dUx%}aq7ihtpXgD95`b8ha$VW~L!Av6i+3wV zUiULP61$eh`(5Z8ZZ_3cMNWSWM+fR{gJJgr1^dd6^yd;p<030|hew74%dYFT8P~O+ z3^Wq3H)w?;J>ZGUi*DPVIx>cRw%4v1HhHjj_q4bA_a`8*YP^OZ{h-#fHG{@7?5?Gq~?) zgXAqsV~E-fg71R7Vr$}p!_237E_kEp*|s*q)^1i6YXc7z^@Z98DMm&O-`?p1@0Dz+ zd>yn`T@L_=p3@539dr6jd96}fRIi0MAwdY1By7j`m`;O(g7k(!}Em>F!VWA&3t_>cUxPqz_BSMM0A>}l$v;RGnDi0Jt{+f^zO0+40gH#L(^pd zSg$TbR41K4)DnG{j_zhxZ6d|EMz`bTKP=ZfzE}RhaoQNZMBMAg#`Mzm2fH&i^FBFG zZkreLMciELZ2x7wYI$CJJ-bU$C2{@DMA0=^BeYj@ub(%?o^C-aBnL#{^R!7czs4J7H z>FruYm|NM(tEN84<)b}A9$Mjw*!PoSB6}5T`0b0nue)U(!}^A`K|*BY4{`92VukPS z>r0kbov=VrsV(nHjYA>=w!QJ?>Yq~V?T_Xnd=^n2Dc3VtY1f1YaZt4uw^uZSaRy7r z=5+W;(>q5;o0p1OYB|thTV+{eSGV@;=3;^#+s&-Z5@2(2xvY0*%0EGb0FnKUGt}~n z9)C=hde;{SUC@_1=EXGEq_(y@*^AF*NC#>&lxS59k=p;k&oq)&h>%|@H+N@!>XHKqj4|g)-ws#Mh%f?zZ^BU z&ut60M@565n~8Z>*=}fvU$%7)FE4I)CK?T5sEA6+-w-0ms98iki_y?LiH7SVqS?T@ z_m(<##=nQv5<28=-&MhXSLNVJCwr7twkHY1uIRp#x`N7LCRMwSQ@NgtvL{p@W}7Wz z_{~zjCH93k8!dgIXQ{~C^vfG8PM6h}2fWyX+3)YKKO!LQLImGm8 zEIuqc@`m3VajU6%*Y)Z?^~Usxt?#TSOxwS!9|PC0Jrw1RkYb>cYh0x#dmh`|T)fu5 zK}Y+pg9f;}nd3Mo0qw6`?2O!B+i$G@_Eo<>oYM!H6i)Qj`|nTda9ny1^^rmfg=zJx zk@DewON3o(F3{$3qDUCyHW zmv1{IPAFmp{01nFeGst(MU%i_yCp#vBZLZOnx%&8E) zGpENxgtSvR7zWls6ZpYN9<8&iyinJLId!h~yQs(%d;;{D8kqsyhS z#;G?uSgK;4U)gS2ZdQgy+-OAeq}N`Z+Qy#0{v_I^yqe?tE-*dC#+C$=t)JQ8n4Yyc z+;J`M1~8$S`8sK;yUTTZ`1N!$-~_jxq_(5eYmUh{;+LIP`_zIHHC{TaMn5-17esy) zXSR0YoqCOxTHvdk@Q>+iPV&Z7J@L0Ne_^C~E%ncDQZR)(>3cos{>Xo77gvqArz`v8E6(v7gH#TLMWskkdEV6V97uRT_ z5$RT>lJlqwku<$EMQ?^vAEE)4q}52Rgcrt__pi?gTo&QuNdSDPr-X7fV$*K`8L)fyqZ}h->)~6r ztstW;pT-IEC%ri3T9Y7)Qq<7n@4M&oYI{?R;K#g6i}g+v0laJYk|X6 z!LfTNk?AsI&`C6G!_tn#dlOsfQ2XAaercm0SrTzR0#o{K4W!kouY@9|YsxD%aNP^W2hb&1c0Ct+8)Qn< z#Bo*+L82P5=KE$^wKPmo7|Q{kf;c5m$tPsM4!5Kl-z@Pb%@_psYRJ@*eUYvOMto5Z z4_USk3OOShD8JR_mrP}PiokEVUR)Sj;T*gZSTN|_yZptRhYUL%)WgNfeN$&}Le;(p zNj_4-u*x@Z>!6xKlG8OQu6Co!ER@eCVAqzZ8hc2r0~^^dn!GtI_90cH>q`jPozhr= z@}#dEp01G=ZMu=0nAfg%N?ZGWw2WPJD=IUd)$+SWGg1iq=3Z>g=Rv`4td#bsi#V3o z^e@wjz&hE)Hl#6S7kX!1d#Q0Zt+x5BBx`6*-kfC@ze7XqcTpO(f6@*@9a~DB!yb zVvoU|A#x!pU62IH0sN1IyNSmk4{{~y@y@q$Zq>gbf9?+n%jcmm8scvVgc8Ac%1_Re__s0$z5F;{3=3bZj~HwO}NL-EE$_$W7)>_nXz(i^@Dce3{%*2?5?>V zfS2GkS&JkI@(|bh{qC~1wbs`s;rc@5sS;@A)tDGc`&A+wLye{}m6aqMLW{ly;sZY|aLYriRw zaV_pRck(v{V!-$tH>fwr$iTp+uA3srV=5qLf=9nNyepTHs{zLCTcyPRQaJmvzsJhG zeR+v_&~gOKDjI)4tkr&XsNE+lJP*@Fh)pjsy47n9u|c??Eh?ro*$BFXnAB2S> z!+(9tOeqtoez*DCvC@|S>uupocF~7L^G$pAfiCb_5Cd%5Rh0@7ET5AFyr{XgfJhQCbtsQ059?cycGdm^&hUw4NPrM>r4*zgg0ZVDrc+7VpBBtD0 z?t^R6AE0N8Yowa=Qs{Er7}&@t_%ee^M@K*+iGe#IR=C&z#0ESNR>O7N`_1#jX9z65(u9dYUnQx7U{9m!p;={McuQWZH)X=z~b>y8)x_P1~LBPmSu=O1(HnO#xW`+t!{k!AJqDfPFcx$(>>0OG*9wtzE4}yLbzVR5 zQfQ`YEmljd0QSFuv3RdZ`0JA?tN0rM1p*QFd(%mu3|3O^*yA+?3AWX<4?3#vT>@QY zVNfNsPrP)KyjzkgoRr(Vw&EgBYJMZ2Z~y+xTA7e9JD?nzzh%-+U2C{ldj1muJpkX$ z&?Ghxcg-Qq+K3Vl*_2XW5xulxkFlY8wX)7|7xzt*I*iQba<;xCx2t4#48JB8+l>VE z<3X;4R}A-+UQDmOA0oa1MGLcU9vUDy{!7w?jKI@OSP2*HqM-h?+?U| z4ODG}`X4?qa`80nqtpAApR~bj4vNgmFs7yRyYc?(Je5=bO|gllVA1O(Vm$r<&!0Jq znd;B&*SYH8Fh!r&jQzG@S{I(Rk)p}(PKr0D+2$Q^x)+O&d76kBEjx5}cvh?!_TA{n zEZz9%*ipHjQwh;|57?CtEtm(Q=p!0e46WE%86*q8?s1OhBQ)HLFqQ+F(EpTJdv%*M zuola(AbQZ}zj~^HN?sM~@JfQ(kY=4>TTb2*7e$-L^v2fQhRlTfSykJVnq#9a=i3+* z^GG04&N;(BGflUN8q58#Oroy*EW>D~n!yH#@A{T!NsP=6a0Tvfd>+^r4#IS8|8^uh ze>svfiVxH{kk3QNE`=D`z}7sx4VSDwN6gUX#jlC>v_6W-roqEIAz6AB z07^9pM2;#Pa?jj$G`^QY7KV_oUj$$F!S;pAyjT;Rqu`QwH}Af_lA?i5oo%vME7)Xe zeB0-6R97Z!2oPYAy-AYKPtvx+4U>gU4T@R8LGF0)TaG+l5_r#TH%~GmnOIeCB)s zMn9&$w(S{c`*gSeXoZ*-Mfxnap5Y1*PIb-Ea8$7d{nM{hzvwiA{Mf1Ws&>fBd6Dep zXyn4f$m4;*BoprnaBsBXxZWVT15$U-h_c*p;r5wSC$rGqQ%N(CY|9VZf<*-fTQ(UHg* z|A1ZkLO84&d}Z0L(1ij_*R?pFWmk6+M6D$`muK<9{d$3JrT9zo?3AXZ?Uk&fnEat{ zZ1Rt)_j#J=CR|`Z!B;rCH*mrHZUInlEvHRvvU!A|a~e^EVE4^&;$qv$I>AL;e=3{E znjEf?d{F*cciB3*nUfe6Zd-4G__9ziM^&Dl}pPf$y<0Ma!k$vxmM7QNM2t5-u$e? zJ#y72U!45*`Mgext-lx<5T5=8wlM4Cxx0UYwp;$8|4y88fIj6$l#N>;bzXT~+3r(? zFGg->{>rN27ofnY$Gp;NV7{M-IebKB$?LVjyfK5qwtD#IIZ;1tBQaCMohWl4du_4# zIUIdDs}!spcJKtDgbUh(-*hVX&xFqRPgJ6l>QK6Q%-|pmy!O@g4K=x^7gNj3h-_~I z1C}{t=4TWAJL9<$hN%_9)eD_l92(PiS)TgclID<0TZ)XKxg6s4PL;_H|4}~!?>+}?6yn}@G^7chr70!W-s4un9l0RwyJ0V^1PhmJ~4 z!<)sl&nm=dAacg=g zI%L)Q++FgOZxY*qdx-u$0-K}f)%QQkft_eZD$s)Njvo*TX76N=6>}6Ew#Hp^aUlz= zIP^<%cG-T}_#uY}%XNZmIlBqGYY#gONc%Q4V`f{xr9MhA+6=~Wje zovls+h5<_L!5oy*f^-K4(rhl!5{G^@QZ7{aNm{(Afe_6$M{Q?^1EiYRHl^D~)KZ|y zlhcD>NDG5s%0W)S?W@c1V%OS)o+hRQjsl-5qI?D-CU9LhSA_$c)@CiMbpF0c63j)&i z0faqQ*Q+4?Y0oqCt6 zm0R57A>$xhg z8=)v`eEHnaYpyEPLk?RSVXhTUH>sytA?RC5Te%7DosQ7&SoB#4N^!)MJf`Y<(Lg+^ z+UMjw&SdbZcK=hdPg>YSs*31Yb!Sjl~J4=VedPY5-m{#C&hkzbX7~4M_>u|;8 z>=t-8kApC@$Sgt#D~(v&O~OsnRbO8H4mQ-k%ac}dySAzEn+%C|aUZGYGZ<#oWvZ~0 z>T8vsp6J7RX3+o51o>)uYY)HL_eHuH_>ylTo5!HrLX$v9;}nCCAuo7&Kd-Ip#PB+d;k-&y@}adJzIt?r;rxTZ5`~yNr+Dg{;g1`8 z?uUHbD2*O|lR?Gk;npjd=MQ*_8-t1#KOe4mof?vhZb(KqakI#O@gnz1w)SWL=;sdJ z^$ktT7zY%1fd?H&U(ZFRjLVlBKxxzwQ&K<4Rk9B|-tLP~<&t}3^>1Z+z07`Ms$s

    {kmOEy}5Xop3_e(xb1w@l4O)6lKk)bru?7!W|So#<#s=5 z#cM1-!ylk>dKJSu$?*>}^OzDgpY$@3Fw#%xT|X3Qy71i0?VkZ&{P+Lo0bVo^;Kkn2 z$!)g9F%69+%hR_p%h{z(Y_K@)O@ia=_bn)UCxi`%HW2yFCck`dN7F04f?&ZWk&5HX+DkU-x- zGvOAAL{VRU=W99U-31J$63fDQ6bv+%7yCOr?epK4BzNxDRnzNpKxD(W(0BS(H$J28 zo-sMybFK8vYJLjlu=5~IoHZrl<#$G@!?Rb`<%r#shzY<=A6a&e1KbE9>L-}cgI?S# zR>G2fXd`(9^}gns)=b$kV-*&SijFL&D0#DDU&>YeHg z4PL~k&k*jsHwIZ?W#RsY6pxm?9>0$Sz+|N315HyMmRx(cY7U0myK|w|RvCwP0{~?>GDV6mFsmni(FDvMLvow70RE^GLNrav@Z`Bgq|9EsmtstxB3e&}& zWhFZe`*8!`Zt~|JZsvC#h~ASa9zYeeojmQAqYWOZQm?zJ(-{(RT%HtN@UC;xu$oTurv-bJ&(M*wZDfj zo#;J1RB9IT{&(JaeECn_3EIiaA#hW&kW33Nt3PhcV!gk&#c-FH(pmJLRKdx!J^%V! zqR!Ws*?$y=ZecpAiOU38>R;i39-CMZ#gwUbCN9%ykf^S_Q0NV(xEY5v`>qqf@cnyDj!v3o_Vj<)+v zD^tN5LrO&D>qntnL^l-?EV7_KjL8P-Zd*ZyWm!k+wuCcZ1AsjjOqO4$c#1sxf%~eW z_a^PbVVT>8J8z?ug($Z!QMB66V$^9k$fM>l{x!g;H`LcSVY}<#Sn)cW%C-S`plU)-|{T zPLkyaa^VsM<-O^KaeWOgeGv=F1n#bsdR`4ZxAMV8t1?5O|5kH;L4I{Yqf zkeTphg_N&kaWi=Z~)%u{lWwIlXOzBJLUmXIT)2wlgJa2dJPo#IJy)4TfuE zrs+S1Wv>$GV7D?a2aXMV`>*g-s-rC)v?G@pw$;T*45W(r-tp8k0OCVN!o&HVUqX5G}60lpC~@P)L$)pN{K^ z=S>Ligm9i)a?v&oNAAuHod=EsO(0Jw(9wbVam}m}k>Dm2N2Bqn)PjL#nSU#~rri@^ zBa(D*#QOd4pGxI%feHw}K3%#3t4@IYexUrHTf(b##3%nZ9bubSG5_fZO9|W%OE2Ba z&sT*L?7MDTEm(Ct7ij?bONM1~rp=2WiW&73w*k+Y3vCs3ps?hFIt<2hBIf+ar zm<~{M@OZPs>*aQu8%C3DM_-`cEK`4TiQBL;o>PdHyzxkZp~-Hh@5;o%2$ThwlN~g_ z9u-dvf!Q4~k^AH>o&Q68 zcTYW`K`rKri13+*AnOsu|Gk3(%)-sCb1j)DmqJ3+)|g*|V#O~Aycfl!C~wN9)|EX`)0*Q+ud}oY53#m(ry$J5~Z8W=2t3%mOb>2)4`&l;g1>_m_LRWg?1S1pY9&7wsX2CUWU&b<`}&Yk9Sd9`*#j(?VGwtb=rrBFmqd`hbkTx+PH>n z_sKC$Jim%p2kA4TmrOE?r0DM!DP89eY6@{SfhNT;pTpV(`Cr@h0i0KC`!xB>miIRj z9MV89@^t zA7zifZ^>0UJu+)nt1EmLncAw*Wd`v)Soo0J2FXOQat2mqP{8N(8%GB+RiNdI9Njt2 z6JOFN z!7%$&pYJA8UM!Y-xN+8avAt$usk$Pe5#k*UD<85nUpvvAL>a)I--zE*Ae<1_LAg))D@X9VGLHZY?1dY>rT*75MzM5SlpteB!Dkdn-qGf1AYfbTsku(+7&N1Z@l4 ze5%}XFf_Q>uY0)eUM@tK1p!T}4jk(wtB$=mMhs0aTy->n_J*EZsW$86QF%M5qF<4e z3{Q%B6<^$3*~X~9;b{(F;8o-MrhP3W6%{eFnoz|p7^G{c9?m*urOZ|Z5xSt$WPvfI z&v@%JhS|O(mYaRF5G?>DPlh;ht(D%-pPD4k2U6NdpIYv*t}GRY+reMRm}s2pfwJ$aXp$GVY+Gwf=T*)G!5FQs15)w7Wu_i%YP z3SOTi^-N^nXp*R?JZRh(mgLwKRn&y_AbGj0Brp?)aUqBtmWqD#OSn|$TP zn&8_fSm;KhOn*~j17%H;L!^C|hJ-KK4<;5X)1zPQ%iWdw;y*JM1=+uLio1WlQstse z;`fhjt#K%F==}|;3%7{HB*wZ#mTgv>-^+_iA#DNWafsTUVME6i!kp1Fk!(|%p@mzY zF(_ydg3-<~Xz*@OTK88jMdH%AhM&nsl78YfB`0D-7X0SAmW zTP4K(f)2h{3dVXD#NP#61YkB%{a{s|iv4*Q}Fah2CDB@<_{{E%o zT43m!E`Mt5=&S*i11U;RUBv@k8^X=Nx4jonez47GwwzDO_^(G@dQ@F4>(!& zF6#Xq<6MLPH#=uqHys`&AvAD=YlZ>>DCBS(yhuQTBJF&hd`zm{SRm7ywSygx{zQPM zVV7;bp?Y#e&&&sZ{L9L6QCj(*g|$RA#Y(79g@EHnN)pOD6qit6?X>C6)O2ZyZm3@D z!+cmhlC6=`O(#Cey$W{0pC4sT0YB5g&z*iP60&qgeKXt`UO>pPK>wuLnogfe}+ZK|;fTLWq z=Z>}%=3_|ft3_G2V9~F^A3Ie_PPfby`r3+Vj(Wxwc1^UGm6Lm8sJ>evMeUnbhNpgj zCOXXOA)gfNPoCWqr1LHHtmL~H$y3;tC0UMN-;YAXwm$E`*}(2CZJ2{APi%1ulAk}< z2GHsvjqx{(A3oJN7@LIUuhnmbM~8i6_z?Os>}R2CJatH7fJBf5wnC>pV&^tHtzJ8m z0gOnFarzP^jJZ%(#d-M>#fKZqhM=n0x{a2cRq84?%jl}Wno0yi4~dbyBZa=M~OseNTN;YEwxsfNbR1u zGE!`J+<+Tm&u~Qt!#QBshlipw&8)>5AU2&P%SyNo#uVw4L(K*mcMr9xN!D>c^P>Le z^XQz-I5jJ`#KeyGsd1qxiEOj>YrGR19R?$Zs1YAXvPfCPso-m}bd#X=uWiS@74Z&}u3W5tfG47-jL z`&Sel%3vbRB%s4>TrH07pAbW4j3{DDZBFlorDLiMg=VlinRRP6f>dPGJMPPf?& z9i{b%q~I8_MM$PjQGOK09V=r`GE52U<1h=JJxxK_svyV=*qSlz;^euJHdy$iV zaP@r)Id|-O10ki+l{73}hKvAW`2H|cdQ%`%f7Oro=H(k)46VkumfrGoKYIW4sou$a z>LrQJ2Uo6&kLKF_{uV<;_ zSzq0lJ+v#|AX8x*R@XbrR&Y<%-R`aJb>FE`l^JXDZpMZg6|cvif36z&=_68HtJqC* z$mVUpUn=ZU?fIERIQKX9p2=bq7S>FC;E2cPQ@0XkA|X`~W&KTyR$dd1Gae|DEfim$ zI-)m07`aRZvy0L9oXo@g^iee9* zX2TxZcU)nfKI8*}Z*Zt6VLck=dqf`~-8$79+rziH!=n6gbpk#HjYn@7YcDDHIfT}A zB{@tcc^bf_D7hx_(hAgy^sa)iTn%jH$9_wi|BJM@4vX^p`hP)`kWx`XN@*medr$;K zN~OEIOL~S-Is~L!8l+od014^t7;0!3X_)+tpXd8LzwdL-bAIPK*ZGTU81A{5eeb>Y zTI=;*dqp1kixSnXqVVGi=e>nB?K+H%UkB6^7(y!KdD1ATr(ynfP~6qMOp!3r@VDP> zQk1zUGUx|beLea5tylVp@j>G+i@|)HFClKdlU?FJCq<7TzFuEhrlui#_}rrW9uYG* zRv^FBHHx`JczG@I5rF-2ELTIvBWuf<+E+hZE)vE^oUB9E5oPS{niz=VE6 zNz|cY@=8pY{@gsDeDbujcycL|eX~+XLd{j}G{b4{cH&RGF&Y`8`RKdk^j>*!&tf)_ z9UA;P%osdzQ+v%=xeEyoL-`%s5XPQ0_LDPjg<7NfS4P&7y=$*Amu&YVqB>OJ{!pVM zpZ5oVj9bzMur`K#5lD}@nfL=MCm@(!zMy|n+fU%4&ll%{(V8*Hm9zNi)bUg`ls+pwQ^wlTZn%p-tvXR z8;?v~@Wadb1k-(d-qZ$y!90`6c@peh7qw2l$5ma>e}{XG%w!Vito30BP{Ru(WhSJd zg-%wddvYplB|PE(HsFxw4v8r@NZmLYK$y%JmYSJ%VwP1Fm`#7#mnCNKJ8rf9c54T! ziNl{W<0EPFf|x@>ub0T1Ark_LJ^YEQqA^B?*ic4)Yziu`{}O=I!_|WHO`MxJcIgkr z3q4x&Zs4=KUI^9&V-msHiD-1y%V_$>^rKSgcX^N*=Y0?}Re6-phAE}irQYKXlaWcr z&9^NKa#wcq3I9Wv7k^s^TNjQS@R~z9}oBtm~wA_JP<(`TWqWnz!v(Gp4`=P z*7fX3IR75>`s3vlzMVBJx7_xwxubOcKED>(GdMomkO?n?N;`w?`W|8`^<@W~H1fFo z4@{EfNBQ@$>BzJ<`>K7Vf!!0+sfJS3F66G{de!D40s@_jA(b+)5k}wqy zO-Z8j_F`tE?C;g>LeVRF9f@w5OgIBBho0}>cH}(AhsT?tp6*G5{7{Syhw}-?Hg}~_ z#&_Zvjk6TRH}_RvBgyF&=T*KjrP=?>6cjFut(RG&P>cefy77&x9JL>>s9h2VGx}pD z{m_B73s`d!U%j|UP*msEkhK@U7MbXb^c8csjpBQn;Lp8!dzpoB& z2ExNY1tYR@!hGO>uQ7nYR|he#8IY^iImv+Bi+?i&vDb3ayw~U6WiRPe8apo^pccp3 zHRj9Y13=sS>=m7_4<*&|kR>0BI=DMh8%m%;j-91r+`v|eRG~hv<<0I+q;bf;OZ6F^ z2QAio$o6Gwg1IpQ6SHr0HEF>lb_;y9Nn4!6H;1troU0!cXDYX9mb8?H&}!%YCKb+b z4>xq`BqtyZ_0WLI-2lQyR`t8!0x*Bp{F53VfMA&~J0}0lvFRMUfrx5sx5@2W`%Ke* zeFLNxihI?H=9E+bMa+myycPW(=E+<)_{)C`7EyP>G)0n?icg9lMjwjG(Dru==7gE=}X-5J95BfUxdoI|2m>_@i*B^I{;~> zRO(5R&Z6Y;+}0nf6K1kkIhFk%IEU~Co=XUj_^lEo4ufJK&*CO5Z- zBq6evHf#O%^4NuZOr!}7m3sm3L@l9(bOSHnhV zetE=q1z)~-H6tSOYlZ?G)T8q>2LG_SO;&FIilF!dzppY?Ry#E^^?GT!ik+K7fxq_< z;W4oDe9?|kh)26QExF9JdrK&94zZ8FuAW9vDBy@WV7TilHrcxWO<#jCnfD~e1^9^M zLGR>*$<-&$GIHmg*{K)hbfa$;DOzBI`)EOSp)+Nn=_C3X8F)m8@PIheaxFUO0=m&J zsrq0tzEivF@`=lfrol<3p=}eu8Y1HE;`N(xF#Yd@utRErE9a)6%VE_-ux_&; zIU0yRz4_CB2 zs4Z`okrZ=MVTbP^zz3F2{cE7w_vWRO^ zf`8%Px`16y6e%3!Hc$Nrhqndy7ImaWr>Mh@A&0%HB-WwRy&Z<_nAnF4XuTCrhr4m2 zpaGp$P?0aHO-y5Ln;I1{EL>w~)+5Vprkb^I<~-by>b+qr1$f$LC`NK^v$Iyy2Xk)m(c;=@2jhgb%oWK zjXLA@f*VXrZL!K+hTM-(_9dfE%=T<`bP<47)cwZuaiAkOSWPgZK6`5~LCUN6>qOo7 zTNJOT{*}r7*OM;2U?(oj&;cOiJ@wm*#@$lyWolZ3XGS8>;T?B{)kl4kMqsmZPCM&A zl5NpqU9w>`*?t301r*~g8a6YsP_+^XA}25EpjhA2!i05SiJ)!9?sYdRJ_YJlZsneO zmmWn{65Tf*_{Lu0p`14T1|4PCN~JDuagxbs;Q1PK4)BgZ{F{^XkXxR&xl}V|2OoaN zYnI>x&&d5)Yzl1lfg7{>O0KL+eF-$E0e*$4^F)MtCuKh#Y|S7~6NkATc0xX&E72(u zKOc&3?)C}=45$3W|IUq9Ymi@i!gw$P(D%#*zuzyt5`0H{$u&UEH$_s%ryIH1aQHqq z{{6YXT{!$pPkbkaP$KN=07L(q`F!r|wOwO_d@yZ9XHFpw!CUXg8F0R24Dj`Mt~0-| z`Jn{o15pp$Dp^E$SQ#Ea!nwE8_)`AQ8Fw(z)&thnZ!r zne1IDqZT#=-+E%Bp!40wfa8WF^rzkFj+sfCwo1uZQVfoc;ON8Eh`R?_Q+ytB=8~ZZ zF~*aHUn%td3m+G8bd{(pct_;==j_MKo?l`b>13b<`y5XisUjk48;TqnO!>j9lFzkj zZ4RM@ZFW*Zyt~;$AKF_a(@Ub?xf<5dAGbGdawyOi@1BVc_o_4?1z@{rYU`jy3yeMXrqX2~7*0J~uU3W7wQ57vE> zuWFDAuG$}=iNN&$rdrVn*;%qs-(ZD!Fo;GltGtr@{i$SM{0X-G9MS<px#=pSfsv z>k#-W%RCIagk$pk^&a3#GW`7Pv+?IyorE?P*=Na3@aB5Bf-70TJ7%MOhc?O;%sS72 zcUJusTQ`YU)f~X*aMBv%SF0aLu6h3?eO$#bG~B~nxYPsj#&h*SUFd2>!sC)T z#u~IAs#+Dk95lJhOr5`TJw*fW zcEgz)cbbWqYVF_U7Y$HRndi0?oo*_liicVt$UKA@f5nghJPD$zD zzMQPb5I?15u8G%smM!DL_%_}S#h;7FcnTJNBRcI5p*)djjHA^oK{m!?LX)dqK-t5e z1D75#L1pc3;3m`T<&hMU=yHx-Yd;+)vm;49LD^PzhsAeU1FF4i*Pod%Lhv`U8w-9l z^q1arUe0^=2QNrFb5DxK0;D@eM}>YCqCWa(;_SXEM(sbN0ZF{=N0>~%-R%lJ_GkR4 zP2LN6pz zbO!mr)t#~TjU~q>luNmmA6@t?yN~rcC0G3yA`A8Izy9!MR&+OlL2TJuRz<~8T$z!> z#xZF8vuReT^jnk{UaREV*rEliCa2}9>efDuOis=Q_ON1!@L^D9Vz4>cd^WQH+W6xy zr!E}7ezlF1mbZl{j*Fw|iriEPzuk(-?^YMlYk4l1vge85R0)9h)3eE}&Cda{aZM<{ z+smWty4;`B4=je0ykbjA>~N@O80iY&q4~Rz_rs|z0jPmt)07_&1*Jg;DVn_o_=AZi z6Gpk))z~c7sI)X1_oWX*SedsedeHnbjCN4ln2~eboOk!|C;uksQUrX&0$>cZNt)Ax$R5J`CRmt}pGTa`NH=6Zd`{Sl6ue!?mVzR$-`p zpfP&O$g&r%*;V52<`dLn`Jx@ZeMY)JFROu3Wc;8-ZWg&ER(HUARfQB*6hK}-o*!}f zn#!gA4&d7VDGXk{@LhMaS_d51IC>wmrmCfI=VdWtX~j1gfLxsKB?}BE=D)UHa;dWDsm2!& zoCMLhw9UYDng!UZXw7yGTQA3OAO<0)6nlWM91!Wn5})QpKlua$#%adB>SJmsPMre)vRU0N8j(kP9 zHEbozoQ7Sz?7BF_D8ZbIWu1#u_xHyaBdMj1Du3wz2qLvhjV>Qm30T~!b1#jUG|;)@;D-+>^8SV^`|lA0S)KDbmmAagvf42GTq3Ii`q? zSHijD>+10W2zrsux-7!1dPfttFGu6+`)0D@y5W4gVt#KVz8G!do-pYA?(x5`=QD2W z_pmR|^A_ed_1se{7y9ATkOEvfx9%tyT;rM+OToy4tq=#ISo|I^@S>`fgT{O6#{^ka zzFv%@v{(k-d3%<$vZA-jV*Rw5B{yW*7?2s_~)a#?G zEK68hXg&rrs_*!{JCG$tAJgKSnt8s$elgjoy!QSFFxK5j5I zoHW>Q2H5*yIoZ!F#B?1U0jepG`g3+2eF9($8goZ*@h-|pW30I`#9EhB5q0mboE8g~ zT(k(n+hxngE_uYb#J6y7$ik7pLI(ggy}&$ySPbWaJeSMihE;-DFybFB2NvrZKC@>$ z{_;5w^837G7IR71h$5LaDZuRSlShh3G2*`b3Yx@dPrhX#x>kom*+KW>l7MHQ${;2F zi#qW_4j5*OS4@0>E40Pl?YwL?>b1NJ66g5z`3!s?I`0U=LovRthkOMIr8V0F2BhZ` zzlnrIS|lmep}S6_oGfW$0DG6}(g@*8+RNOw3~~oNFry#Q97Zk>{jA{>`tiJ;0RX!M z9b`JOZJ6xa1FC)BCa`geP742s+aZrdZO+`6M&+kKCO_L__uOoRh}-it!}#~Z^Ytd` z&M|$8Z^~y+_MqfiRlg!uNGaBb4_sggQHmROqsPr^j4dNYv4Vt+etg8-v`J0qD*QsEy}!Zkm&Dij5ia*}Kx zas|>OB(r4UzfwIQ6WzbvtN~*TdTVvnWe+jA#Mzhn=)7W_*%X zY@&3pp#D>R{|$oZt`5O5g~}5`U@wdH_E$6Sx)=VW$@clrEI)%J@vZnT%n5}tRz=fz zB!_}x>kPG!Y~IbS{tB)?vnPAE1Jbevz*dxZ<1*;pvyieo!Lon0pxp?3fnE|L3+HE? zwW2SJlN^2jjEC9G6Y=tWN8JsnzPCyW1p{QW7rR+c5cWAE!f{&Gb`#r_=>*29v*G20yoU=i?QcciX7& z2!;weuiL0XCg@Zco?(Q`@Lr;r!p2Uc4)G}fbf~dvLRF!QX64%`ci`OZW6Tc?WvfT% zI zLineBzT17@$BdQAQz;3&+`zN@`M!X%;k!r42SY}YuO~+E$qr>eXPc{T_8ZsaiH>=- zx|5+E;P_3(xiZ_kH7DR z#IZB^@`8S6ybbtOf}Hg==0Q(-6wQMRjt}?FKnH}F`+tY{0o^fPDTATx8O5&_O7h)c zUNg28f0OksqP8V@XP)IAp1>z?oTu04C$ZzD&iMIQ9@;Zsy**be(i4`3K+&4_Sm?UJRcd zzMcUvdE@Dwh7V?D{bFc*9~u+lq!Ob6@zO{T%|4Q@=j3S36w9+7781}A?v9`nu_Enm zw4zI|2uoB}xh*J;u!x`@YDcO}ZE@FiDalWsTe@`oyyJoGYV=;IV|uXW zXNk{G_eyKT58c782>+PP&$J*xu+#(6m{guDLU=~Fp#$qR_e}}o=MLeEG{$stv z;|lc`c(MK1KTuN?%ww~$19^)f=QHj8+_rBeF`!5O z*_*fkeO_`S=P#|UP%~md z^kXlQ*W+G3tu(3X`VDQnZd`5={yQp4*7i*?%o@AG-)C)W9Y)A=Gp>=5H_V5?Lqp#ttapW%q0>3odu>iqgH5X!LWyVIz9eZW$iAx@AfI# zSDjJ9(i(S$y*vHVoSW4Ou0MCVdjW&a35<7F87K^R3xeBmpcR)C=C|{m*OcBdvFp9% zLwlJK*Do52Q zV*On~vHLUP`6b(T!O4 za9nyd{@2^YQm5-|VB zC<5~G&!#+Fn_~rB`>4D#XT&YQ_15nSL%T!mD%tsGkgxr{JRW5aML@G>>&_SdeHSnH zXFBw6<|Y9fpZxSQ#jXy1Qr;3vx(O*fNb<{s87tOV><0)4?rQAZDJ|gkkV#J$|55I! zwB^?J-1+SvzCStoQ36Ho?K)TGFHA+4;h9|>@yXXxD%Lx{r1TH&IQEuQ5Z~4cgwEtc zrDRYXt<&*mGcDPL87TTi$xrOj>`G??uz>7B*W?0K(L{-(yjtY1`$$Xv#O-{9uRZ*O zJNprvmasCDIFuuL%cfz4A3V0X4^^=j&SVnPhi`2T57Hwf25Z|`8C90Xvvj}6@QhT~ z`@o%d3h7w9KZ+++ja!U;F4&IaVjJ966-q1&c3;Frre?W+>%%)2LY8DRDkOf>JvoQ0 zb{HT^qz`gG)C6y;^3_>>)_?TW?G(B_QRRom&Nzn>PmrTP!kYyCxy%y|4?oVS zMm&A={*>^?KxJ$Em)2tEs;w}!U$v;2hf1EbaPQK>zQrK@7hKY&wJ+tfWnTiv(r?Lx zWj#0PyBs%54;QyCvQ|;_#*jrZ9o(b>XOvTZm7>7mFvk&8LFC&Ph5~+_lcon1#j1-y91pHOM-x z2X$X54T{_s(3dd~h_(+U(D1sjd5k4rmiLHZpcK(SE%^1pmT7 zq29F-bDkiXZ=!sQpIaSWi#6&K7uCU6qLwDTEIC|jY{?0eP2^2li)YknC&$vJo@(QEEM&oV$L~fphA1DYL6Ng=kd3qN)mpGOi=^={X}n7+*9S5m zucm1L(n&wP_E;a4l>n;7NQcyL(9Yimjyv#S2)F=ZYgYih*&uPV#|iG85i9wq{rclR9TSg5WWecc>#((y^~`V;MLIb>%v z+r=ZsvRGYTx$b)mZ!L4Aq_*rvQ*+tv^SF!JFFtLp|C4^?cz9V5D4vAqsqGl%MA`z} zz%A*nxtjV{bj}A$?gg>+B$pQ!Q7lpt>1Ok=-R#QY#r@AM%T!n$>>GZGFAvu$33lTx zYxi|oIDZj*Z1mt!R1H;1#p{yZN)<%yRM9Or8csnt)AzUZkrZn@F~5VmQ6;Hh8>D+N zDltC%lcctKpnZ{ zF-ofA0scgD)%9{KqgV=+S{6?2BHOLPK~mjKJ+U`%L$|7|@te~mpQ9(7ecx6}(lc!P zSjLgn1Ftb<@ks#f4>7(EBInqA!%EXz8pOF1)ThoX>HdrbL^UN`O-x(mypfiMfv)>7`k_~T{B?)#1}EfDDS&rqKndK?o{mz(b`v*Z|LD}D6Dv*Lr+*L}Ps z`{BdxT<+9^_a^O$U&xRbyyTylLEve(=98=C$Tq%UHAR`N8*R{s?K!4?v7A?eGf$pj z0OP)5R9+N#{e=RiBOHl3ojo;`%?PVQDYIurPjq&_IRo9XF22s~t3hCx35mq`WPrH& z?a{}Rm1f!Ocd4dV%0iQSH&N4OM7YP;bJ0x?U>vAp(4Q}JXP40z;Doc#MTn3YO)ed* z?~jo|%i#>Av-(ZSI2H7?QZAXF@P80~RNCa+n=!c}VmD$tqM*95?)enxOBeV(L+sY< zaIqtm*y9b)6Jb;J43#c#)AI*)kL&T?y%YILYl^?9p71}*IewoRz#+fClrtHNrO9gr zQp&@qJTAh;9#y$;7MzPp>IJrcr8wb^x&n5mpSZE4;r1szb=g(1!j)%_7TXxJI7hU( z8Honj)k(Fwkl2(H`&{}wXFs5-fuHlWPJHx?*xOIN{U1~zcdiO?vNmtZ%+cE3_YdMf z0!8AtVsSp=v~-GuThTJ+?OEm*Vl;|CEFlPWK9E53MdZc^rrB@^G6Xu-!i-vuqtqz@ z@b?qa8@ws7r}YaTG6&<93hqkQsSjhNK;t_~0=t}J(<<458fuw?kfqD7d^R;8VWT2RP(|5!&jvIC2n>Hd2w$l4TTVt+XYy}P4 z>PSgfUxo(3dLvTOKb!>q$Pmx{`xjbP6XL~G!8vG3dr@?Xc=~yIt2?7}mpvvqSBl>c zovv!0)!=TPZV!F){UeAUv*^^@*Z0UKHH4?w_7>Kny9t#h3#|7TzLR}lLTL&nE{nxs z=BF0mqCF-Q?E=6LOpVod;>UAfwsoivJUYQFCz1 ztG5Qm25)`0S)-tfEAI-^R~>ZsR>>9QO`(62G;d62qHh^3eCq0p4D1td$ zT<`LUKIHTc6p;Ml*lNF{P+GXe?EJV)Jldpcj8)ZbwaKT351eWWU#>uQtthMn61_iV zo8<%XtsdAjalgaJE2#1#SUb{@++Gw(9z^`~qSJ1Bp|l9G1Hv3;RYAOC7y$_= zK|R3y@U`>da&Pw&-*4z$eY7^!uXUT;ZHYz{E{*(3<;wt*+LY^~`h`sX&}#+=d1(Jj zj(LEU>A$kF5l{Q+-T6hmHc36j(QXwTI((w?$&IG;y)&|ak>(}A#><=vfL3|7*BkVv zo%_J?&PGC?%7Jj=&w5F#eY}g9kaL@4le?6EHp6K3Di?5W9W4%j19#PMqzOe|rOI5N z{rSB*CG5zb@S+v+)IeSE*n6%r2S}q{&*bA3Wzncu<{}~yX6G?Rp=5~k;DLjLgItr* z>*(oWK+uUb52n!sm6;V@_Jd3Y=*6OsZv9BOlY1s$$EOKP#>O!>JoT;1k`%%(YDH0lvWY!Zy{}f4uY9qZhg18s#d~du2&--*6NIketEfo=nmAVr;Aw)ZuSnHUZ!* zfw?lnhKK;DZe+8)OaT^#d*(b2a@W~b2E{Y%df&Wvg` zg%fgHSVR^FKMkj?2&As16clQ)ZT3;)$C%u8Dr5YSU)PT}x3TS#lHyB6#ckamL1<6A zRDkOEyao(@xdaY5^cL#?(beCL4PU8?3 zW~h5XViKdLSg-%AAQdwF#im?L^{!E1#mL-;d?~uJfj6JjZ+ZbqxF}=ZChQ#l%sTWd zz2Epu;FiSiN^5*nD9j9TE#XEH>Kmi~eY6h&p$8->15OKV}aJoWCu9nl(c!QG{zZo?kS4 z$}6)4giC2ZQoKvpi=D)?pz+yU0rql&^8p^(TcobwMCfNpK~!pRGv0rfLo^*!;@M`R z&1I^n2P;g5OOnHTUDAY{IVsFHKI?$bHEFHa!ZJ)Y&t^^Xiu1LXC>q;nOvMYFBRBV| zAT_t&ggkDtSLNwUpZ$VAB`v9Xu0i(IP$iE=S_Gee5@gPBdwZQ=i~pn6k|X@Xwai%n zRNY3c2?Viq2X^&aiA#y>HmmsU<1qYSQ6+KxI@`DTi4#ajTr={sz%B{>D8+h=-D5x5 zb7Ca<4GyMZ5bTuqGY+5oO?-oyQ>jJUp}|OsWQ{@onwM-gyxekjv&1L=0!LU_ZU5_- zEp6m}w86b!OYzDJK->>|@o7r^Kb|j)u7xT&xXlodDB61{9fJvZlLJ+?e*AE~!=_TM zL^NxF>DoNHJURy-Gp8Y^uGRnMAq`{q@HLp5s*>)w2~w@!Zvfe*`RTQXpWEo8@8@9V zN!;7}@@$?oAF&07&fJ}as6h$(ORgy(_o6MXwA;sIsK4KXlff6nWT5 zwss!kxP#NZ!1xl2Q1jiyVVZH9eXD~~Mw%g573fIB9kD*W_#Sbb5v!@+t1402Ys3nI zR6v{qZ+ME1vJPc9=>6}@Khu0>9Jy8KCjOw4>=<6ub)rgjng`v2WR!RN&+L*V{&Q_U zjDB2p*q>6`K<}T5m+z0nmvb(u8nUH!R6fvunl0nXegf(dAM^WGPkq?(2k&$E0OyI< z<1+zWZ=SYh@W9nEthS@B`vy0F*?mE?E_M@n+G()1dam+t{*ITBFHRB>qy)Y|x5lwH z0%vs+`&_smgtaVvzF&UmH)eRzqEhSq!U-|?-y6{nuWZNY(Y_)>Ga=A#qqA4gP#A_hIb zbkHuGtfTdQMOG}b@Zjc3MV<~{ZS;SZ{?MqUsA!&tlK5OmTa(#k)S8oChmLI=VsG`r zklX|`CSm(f0AdzwT7!ERMAY8U)J4qpWpVhTYozm$)F~a>(7e__~v4 z#mk;vRI2n}RI(H0#Y=HzryTJOuV~{Cq?%jGrgn5w@jWYZ->C6REv$V62b%N4ipz~b z^r1h5A__UZN1+vNarg=kZm`#mHij$Cy76C+qeIB7j~>}ocRuElCE>)zDIC9_Gk4*V zSAUz|jBGOH7$fL*A==@Y5?|1#ETnX@+t{jr+tD8@>Z^7Uwa`hyfOgMxeCi38Z~t34 zKm#-Eq8SqnpDY>r+?uX)T zo|tyDi#onKaeU-;86LGH(+JwOs@r+atr;kz?6F+QVX^ff5 zFOI|S$`aG?bJhX(qfYh5L5I6sLI|snD{?2yfyIQ(vg7?Zuq<%n@Q2A%7^@pXrVskk z>;TlPi9VS3dC_;L#Z`0S49R&>o%=MNh${SD#Rc^Fe;9G3<^*B!TK^>xW!Gy=3_I%T z395)rQ&Rez^#v_O009Xp_=&wv$LER>T{K0sh(}EKM>Gm#e)IL5PQNiuU%S6km;TZ7y)Uhuo_dkUIXPQO5rg69tT`LB@;0`3?j{s=|R9g90 zm;f>x1N~c8VDaNil7aF2QL@;418P|+i88jZEZv3_xmcnoq>Xc4{7d*Ht^T1QZb=juMSC05@YH0oZ{a8NHbq_+4LysMES{fCN@ ztln+204meU@DIKJ6a)*(hLA=V7PCatpN;&EifS&iuHoimo85XN&I#}BzB6>t0Vhsh z+amyO!eP4G9ZDy8A;Nb8pK{r8K+FKb_6UOrxnGgxwTLmSpSZdEuL@=u zzj?`Fg!a!$kRv4B!I+7_j=Ua72b5)fYLzA$JLU1AV{`+0gUpl*}SE!=S|p+;@!U2uO8t z&qlvveDZ)gRe00x`GNxHLi0-m=UTbvM#8|n?NhOfIY!+d@LFE#&Qm>Jz|vOXW|58F zi)wbGR!55PgKo!IR^FbzD`_-dvnXIvWOMUJ+M&Z@PHL!Q&WN>k<#PD1V^lySEALuZ zUl98J?oa%An{`j7$~)D+Y6;{n2}}n-A2b(ntSewR>}~ndhjQ}Eoev#% zuK5C^epw`kXzzO`+Fq`g>Z7|NCvyn5N$EYD#7uN>-^ z+{+u^YK#WNQIH7pP6y#TDiBK5Bp z;u5iiB}8gjtCcC#1=DZ+KG~D$1F>v%SL!Lk^I&_Pbq4t#NI$$OApKeZN4X^%AJT2? z)aQd9lm3(_D3eG&&$e~lruh3Z{AR(SOq;>|VP_U1j7-~+Yoce7dDyoRSlEPghYc@{ zT{WM@-`T%)ckMYZ(r1|@J7#|1dG}#ceqqtF?F&?p90ev^*iQQ|_&Xn3mN0T0auZ|-|z!v;Zt}SHZAJ~rd zY4IO-YmRfO&2;{fWG8jf<-i6!5+uyt)8>io4_UER8YI|2F|ZFx5Yzg8%sD|63ODS5S~AXRbhYueDxDllbm&$e-$e zzb>TWi`v6gCXX3WRLwOLG6C{Hu$77`1M6VUwsxJ-i2kWBcCjU6BmauYmGKMWWQ+su>U?H<3STY?kQWCW21J48%8CTA6LJ0C~7;_@QSoRFI3^Xi8-!p-QfhvwiEG6;#~(;Pz=x+Zo4Qz2xs4%glimZ-VNbOjM#2PK6hX`CCxq4+4XJI z&HDwt!q)vjCXow=?ARydXUiyixqc@xm%6{vM~vK)NN{5fafeZTVV2k3VUf~#zhZ)5 zq9xbcB|yPTkdWR;=0PWrwK=ZwA%4~he?pYv3@3{tqKW_OqfcadMU?kSu=0lys31>h zp^c(PU|P7x?w#MUi71k?bC>mnEx}UXMU%os8NVwU%Qq+Zb(`c#qT=Dw_WAfU_meZ2}^!G-U*dTe5^ED_2GvMXJ7(2V~-HA^@v>HI)wuQ8F=T^?z+Mk86P(R z5_Z#?hae@Q2Ug#XHd%_a&Gy8xVyXVGgPhI%p+@`3zK540>Z%N~qs76Gh0DL78;U^0 z5@A>|PvP~4Rb*4vmrM|zR9B3Wy2p9r3-K=O@(KV2!<`WnfSi>t(@J&2jGLEg@1pB; zo3;$RhH!qv2u=czuUf_a8`W=|ZTnBE|B#7>izA)7!iO=0^|1Nn)DrH`D%qt?2qeqQmgl7om)Dq0i*X34KUy{i)^hyY=VjupFB^6?|Lkwd#eR^yY^tC_r zs^Hhb--oM1lrfC-wq~QyZNuJ_S`?(5t@GHKX0t>k0UvdFrE`?+U`g#M)!|AniIFsWRfGJfo^#xe}n&TIDc0= zShM45vc9^&P0YTmtgH`;@48i9R#d#hABT_ebc>uuxp15ct(PVYof^-&<7&85B{5(- z%E1bY`y-bfnfLP*(`_`UnD*ZO3)SnGJX0xVKB_LG``yzhLRqz1D!JUkd|{$$IC}|u ztl-o9wnwt;9>DpZ#WHXUu1;8f)hUAMR|o#kd~Se{P|VCY&aC?Z!f!%i8hM9L=X*WK&`ng0SbEDB?cIGX-vu}Zs zyk^10WYn+J!M%N{#x&`ZKSGxbb6aH_+>>S&Zdh^r`C^gJ$$tq+iC2 zA&kFoc89)rt~(sna=!P@4^Y~^3`CO~Vs}DJm^l7Q9ACg0F`wpS(3d}VAv{J^z8l7H zgKWCrPFOPU%qWeJ$e~x>O-dKf6`+!(w@N=B92qgwvQmB;zf9^T7XrrdwdWlAhJ7rH z73D#TF?%j|u4S~>&iT{R$W7wuCKY zbLX%OGBRqfvqwksv11D`Sq4s0hSC~x#cKsw%w`U`b2@YFc#_70PFJK4IO5sIoCf(0 z$Fhyb3UTTqP#2I}38jtxW5JIAos6>5okI#=KuK!dU7n>Xe)BUg%;3&3=>eh==9Wt8rEp%J$h0WBZ??}4q zw-vWOmh|>Wg+!tEyplnfi(I~AB!6OIuX`@$8$*5PkzBQX(+ zyutk**A*slDltAM!b-+LN-92DJRAKs+Lp6t z!`18z-J0JC*?& z)KMX3z2J|xf7!j&*9lpaR`0lf!e*k=V}PjA&wLHQF}h$BE1&$>8Ci>iE$(_xt_Q9Q z%+Wj$4cSEbjE#7g;(n)qnSM6IK>1;V&(PC<##!wEq^SOWs!HS%O7t}YG15`ZuosRU zh#$GtzZri3@%u&T5r3Tq`&Z0qa2>Tm-t`;eD1${&S02?CuatVFBu$c?`1ar&KAVYi zsGgx@Wgz}Xu#&*@ZyIh3QOz{bf#Eds2}Ty)g*{by59Z%WGz*^MDqRn+X3aC3A!nS(0Sk3y~oZ* zW4n;Wx4AWxFqeBNozM~W{qD#P@yE^v%3jSMxHJEJQpPQQ+f$H4^9co9Tl|@otrpQ1 zh&$aA+`pRjr+1=y9FJ#TGPWd_v=d$YAn2#dCylE`wILZqVm+?)t{1E^v$c6yOa~?6 zauSef!6FzqrJrckniJ@EInCT|K%Ic6nD8DWA}wz9RamV_+`><~#7j9U+qJQVb*>#M`*o6U;_;Umw z+w*kWFQBCobT@(zXG2s#q$#MjcKFun2Ios&T0ECR-Qqk|((N@`)Ey0LTRaVA(hJ}C zPx|iX@;}k{YVNZCD}Be$`WJn-zo=Akn|a5j@f|DRx)7pqZ}(s88N3h;UDi@oO-jD_ zMlIi+Ur=Jwqu`#A%;x(gZc!$S=Dc0{_gzx8l{sC3O{W%mwJ`*cFbI*GC5KgRjkljy zwd-wH0BjM8d>9nX);=St^E~bgddjJ(!mixZi9@QVos02PQ^j4jGm!WQCCkD^eqZ~= zPDerNQWFkTNw?d=_^0NI%c1fZa!A>AMif*>U#-Q7qj(laztA`OCs(kTrRLnAHS-7U=w%*?y-((C%&&vV`P`@HK} z>-~$hV3>iu_v|^(<9mEQ2WZM`Bb=snuYrhLe(a?h+Ie;lx=$!K!2_kET_=Se3|F-N zA5a#eQSnH=>axl&&B?^pIMe0cg5bHvv^yyOP2}C1VkzmRPQyJf zL6YbdCaRAlW|Kzj^O{DwZ(%j_n?SK0f1V{@QV}{W_Fm}LGt?#63{~PQAHUCW!LbO{1Vjwhfn?Kl&)f)e2p@9M zl?CWIuhxbKUMyBFW~>%_qOi!w$MC)pyI43OPgm5q_Q+!J;S`!3RP*Il;uvNS=EbM|FU4-_Ax*C z(*}@Vixb2NZ`QIGIiqRq^;8uryEHNnDSIcU%ziQnXS6kw?dul+79Im>svBvG6@|Q0 zRNo?`Rlzvbl;FO!erUfzJ%Nx(HL~#O)|6@qb0PwsRr5Iv>nZoRE);ck(Q82)p$LKX zp`S$?Aru&T5nLak#_XWIS`sKU@6!(XE#M7jxudR0YBL52#$pl^NI@_WydQa@CCu{z z@&l&2UPvW5YiL=bt;N`-z*dx4pryrFcwH36l6e27Sgq5#b2dU#c$Pr>HLnD5vR!MU z(&h&~1@b1X{k%M5C!gWI#V0L@*{TpbOhR8YTUTdyyU(P~F8QbSKT0wdF0JMyZdQsT z|E;S)<3C&l8-S}oT)_IMZ@fO6rF52z;C%gp=$EM^dG=ic7b@#QHf;ScN8eB-=xH@P zkS-ZcBr2R<;RjiGoG?P|COa>JUu2k&y?4kDVfJmgy$V<(_uO8NLuGKWFP#MI? zZ-YzMo!oeELFWpk>a(;T)H>!V+Am1$J%=PBny~pi4v*m6HdKMGaaSTC^?5eGvgMpIav!4e>^({OCm40{&8l1HE9CXc19kJ ztcfXGy6qk{81B&Cnt`3|0BuKbnb@n6;Zy!mkoDc&?WEx?$t>6ZAw3T~TRg6y>{5Dr82|Xa9aXj_~W}8 z0@EFJHXUAcI=MSkUSb^PJMXCu?n{QHC`sD0$UXq9(}Y!DqmSS}z6l%Nd7@v85cEp@ z?(wJ?Z)@jb=}2=)oz>2+z~#|J2&a|1E{A|XMuonBLi;eGj2Y}p^Ks>^PhADewENd& z%B)Bsk6Rv()?jYj6la)+(ML|lFFxPjxi}e79AD1K@a`RrR<%p6rCv@n1U7cl`RI=_@#d|~B&-FX94>;&1|Rj3?r<JS+U3rbpfS z4mQVC7fWOg9SL0SdbZ}ctQhe{{%R8P>fSIdE43};?o6)nIQYqmkTOMWJa)Nr zThXFtAs(NT%m9}Q3&18cWQfq`(3R18;_gz)`KDed8p>>JxkPFi#8u7`=A(X0qy6fl ziyu7z<%ly9@xx?OAU=G-+~6_C32A3Z=*#EAel=p;HqsBZ;5?Jem;1PU&Mq1+^w27n z#~$l#<;BvV9@W_^tj*w$i%OznhZQTfEo!UT3l9f)sR|ZYzo?uw+;Ta5ICSCj-1_-j z{R|gs&RX!B)7|%6B2f6zA!LvP(-~!=qo+f4JCxd)+AI1k95&4KYX#mbE0j!8?)Hh~ zU1~jwb|##qeXMUqJWX=+So`NS#OlK;2Znf2ou$w=Wj0ej;w`J>Bbtvxt<|-;y?txy z_dgKY*k$2M?`O2q$=^lO8)!TIk(j@96J87bTX>yyAhx;PCIFh{ce`m>HK3Gm5ZG%l zv(ZzvjKVA$_fmr(ytTWg`%weRCC$F2cFC-|E)-C8Ml{5Ee#=LnbX!RA8!)&;&0pNs z2eBLKQVBL%FU|6?>E>`Fw+k zezfrFOj~VPP-|Qr-xnJXNvZXMPP*>#2g%QGHH?ZEhMEmczb^&Tyw1(X7u_987z~$e zdJ|2}LM^5VSfagD#zO^xmyYD+C3dbT_h-pIJu)+Z6~lR zs0C#_dTWX-ozp{NdHad;h;LReD&THG9>qGgINow!_p<6;cPbvQ>c{{*4BPoI&*2lN zd=FrU?~~j)Yky>7DI4N*8BdOOhBF7A3F#qOn;)|~q4wMG1;29Mzfc;T;J<_M|6ii(O241z zEfODSMq#EB7Xkvi3F`n@;(ODLDdOny;&+hdd$nu8v^Sba$bzZZK8gG&p$2$Gj-K4_h&j@qH#3t!^M;uV@w+DiGiQMkrkj{~(lc-29351%XDm9> z($e_%QSq@navI50t8UA<+(Mc7y7>XKUncpYD}sci@%xFbR*S;fTelh7hdtQ~M&AQw z_0L;&7uugQ47?-^p)YI}mOpKoX87JGVQ$u^3zHHyM`K6B>k69*95WXB(6G9nCax85 zEKmm2dBxkiNBP8J2cZxa=8km$lf|gC zfD0-r8m%foxE}6nfZZQjhtV@xg%~8M-N_>J0zOj9Let?-sY*oUEfyOrp(sQ!d?`;s zpEDu1JMdKnipPH65AE`gQ+4kbgLk(NZ3dm2g(D?=H+sQ+=S44X%S(cxt?;y_Z6n*% z5YdZD6K8_X{_*od@K=O>|74VD$Kr8~0f-mUD16_(GLFL2C+?Y*j`0EMwt0SoPA)m4Zh*2??<<-e8{{&u=JC5b!yD0$xFW5>E}WoC z%<6mMcRXjEOJ`(rD3#&NeclJV`w;AwSl`SDXf z>+QHwU2o*NWVsDr_dWLYMI>_wf$&h4=I-O1auUO^8pMyj!m1Ru1|Xn&Wb_ zh(M~Lh5oR7)46hc9QXYpOPfU|)(kZ+;;2?CG(!LS+GCJ6R8j{3gutyw@`A7F9UiqW zLX81AMX+d>-sAf9+jd4;i9|BB+$R`QBGqL+AC3AA4Bwd{P2d%wT&~j}kU0ekF9hphF#D{v7>MSSM zzohMF9DHu>p1-lYRbZyAWp}$+IiaSmn<$N2d&YmFZh>DY9RC$c7rinr93oSHErPKN zNn72zyG`;o471ML-~rAdi^a0|m+hw{fg|gXZiUbvn!bth(=3$R7e2ien25GEQ^Dsx zRdboXu(P-=={hm$VkJMiPTkG>L`=_Mn+Voe^Bm!4#ACn)Z?Mc7l0+}K&${Wb=xu2j z%uXdS`xV3yxlIt#43=Rt-l#aE<>HZ*2Z;Z2*27wLI5>Gg)SFtCz?gN?($g@&%55+}`XKfh-z4)Z&2 zl}LV_T8eIJ9s<{2+eF{=3|MYUC^WlHGvSX1PE#lu1V!w7UmN2#Lc?nAl3RBg826nw zQdyi>2v*w7OHer;UMaD=90{^xoQ4Kfez0`XR6q1}3U^l1TL>YiM1yLR?SG-+3#+W? z0q@{vZ`t8c>q*l3!*K)`jWS(EaI&w{Hxp_TqI+g_qA>XsDmMcCVcTc4GJBU?;jEM` z4has?5uKbFDPQf%E079@WtLnP)uUHM(#ZOY@;s3zBhjfJM{a?*CXI(AiKr(*Gq9*g zE&Qa}>eMYU+clUdhkjXflBjN=eRL6~F?x%Kv}LsxM3Q z%y9qTv2*=fkAC!($-jfjuQ}4OA-Fx`Ui+l3Vbt2nRhIabR)>6Vy>#YE=B1%}XGLxQsxwk>q#)x`|!6AyCLd^T-omo-C9 zcBdAX(MM?iil*5`9hdiF)y=sj~3>t`NHe!DtTmr0V%)x&J z;oke(Ym@6{$F;5C8Qc~k$Gog4%*kpKG4LjhXwQAxo>2QZU&*?brxV7(Af(%0={BJa zktwC3-nXdS5rW73M_`>es~oFeIiC6*kU@WL=9=Tm+!ZIRN&Q#;JHr96+}H0E`oBMD zKd{g||9C#{V~ElQp$_4_=fxBB5m_;^jT&-xpUOFU>hL-Fk;`f)=38_OLIgonQ5$&m zeqxm$I-iub8Egt$vL=SHA!>k~9E(%P_F{-}0hh^MGK8Uv=#^`Q?|J(^zvxTnb^2d4 zJDm-!EVt$jL?6V^amcjYP}6UA!aQ~jtXjGw>63SaJHuw&JvOsl+f{&djMcsRRI<3W zdDij$?9W@C6}2>4ImFkOzccVEf`7%)e?0b6{4WXjuYlU}9xSGgLRb%z{c7sG81G%I1Ko#=yDe}p%0`G_^)W`KxP=Lt3&GLE<)WmA_Rkd#QuUkv#z_P zsifMob=~UIJlX$=U$4i9Kg)HGzCCAmzh5$S*Y9rXv}fUA2GgA} zhZMPuLZ*8$?YYGd>VS5Q*9kk>x|Z0aP~}0yJpiTTl8ifj9Kl{EqWYyt2WiA|x~D(* zP$6b)kD_xY?s@fPp3K;+n1CmWKq|(|v3xQZagxV}`dV2iLPE=KHFy=IAd)tyR#s^; zx344mX|))$tsz(q301$&axDRWqv>3WjQ%ns)ijfEd9=ov_B_^*27TvKJeg&=Lw7BQ zEw9!KUY^8{9IM|Qu72c3`yc16Iaz6a#&&;-8ds?_wt`RJV%v}5fY-5J4rm#EA7_IB z8_tu%6rRZM--s3}Ro8v5G!$zeZ@=9w+fE_UX+9Zmf79Sb(Zr0NSagDxCizq3@H~0S z^*-L(?MKEX8H9b1^QPK5a|d*0E#L17)i0zsleBrix>IA4S1(hhp`fPve9Gf)s3xId)891T{ zm3{;$YW!83pQ_|ZkLQsgM5<`-DGI0#H95$+8QpodUC6}Fp4-`_)eQ*7(s;#t3c5WA zc)!*WW0B}^&%+J!ws1TPjH&>*JA`?bWrt`Bi0 z7oVMnPhQUy1VB?G27Jnb`TrSv4h-~ys4Ds6(z;FW z)fI(E8u5cdJXxdt^IstS%^?j?ik9O(Tg*IS!!L2dmNNACiSyiid4|Dn7Arbn)LVZI zX>jWPoVeYsK<-%S4R%A#dbD6xp7F{`Unu7Qcr&h`@{+effy3^BC0StClr#7z(ICP2 z6OPDf0;wJL*z|jHo4#CXM@!NPgvFLm=RDsqHqmMavBdI!0l9Mj@{%E&|vaH zo0caY0f&j4la0ItT#y0j=DR6%XpnVwD$UA1YAPrFQ4hGP=XmXdowU zv2FSktenkh2D*u&O=${+x*a_%^15Q&(PO5VJ)c1Fd0qPq<5b02T2YEE&*#2R>889$FY3@4wBZ{qmW4vs@)25L=D z%f*)(CY#)uYGs8l`>bagma8Ny!)nn=FH*#;0WQ7L^NlwLjVf-r?TEv{O**R_d7I90 zMR5Bt_LV~~H4~{RAX6AGgB~O~c*V?N!+j`t?*Qm=ML_U{WFO^1V-a}_nQ5^P3wZa6 z2#{J#%k|_UH+nW31syU?mVYEN0HpN+UfCcn>z|)ghJPNOWM$emFaqXb^Cj}+= zc8+!zdoBYKqO!o>S#~rB4<{&lm(|bq^WrehTwg-9`r7`xq=;-bhuImECAHBPlXQBB zgK@bwqAP-(-zMWOGWccluiGhbS9Pxba#tD7#{81p`TBNe$sT20BGa5mACIX2(RGXv z5TN3EHH$^q=WS!2N78L4{R1e^{Z~MF2m~6)JX_rwuFF7k!WcQSH`}`#^mMvzkn7p> zjkXHp+_(>}C`5hT_K1Gn=We}BnD7N@-r|WWEy1K^yp=$>=;i_667( z`pGa?sT@Kvi!J}shzmR2P1 z01|!MI~pMQzq3nd^ zuAh5V#-v&0D5Og})eu;BHKNO`ds{DfkD_;oy_2;k763Sg)t6JiAJG!dr!f0k|AwyYSI4;}Ku)UKKgP%2E;C>mJ&eZPb zD|bz<2>r9BX&rwr$E_I*f4g#^lsOtR^tgH4n54e?9nX7fERyh(yZ;xs?j-MM&!g78 zB%9B}N2Gb}M7L%Lz#A=Ni)yf0eC(lGVWuUPGuqSnF3!CqJO|#;fRd~7Emi1g~}vX z0c*NDk+1(HY-{-^Y)fe@y`6A+DP5`PG}0MO=n7bJOebezAz@fMwBio3 z$^IejBuyIMdlT3^*iY_~aUswE6rr|c+}hDSfF+UP;rTX2+Mli026jmkWUc{b{rG*UC=574Xit+2FH$_EZ zUmtxjPSnS;f^FM3wBD1_)qRYc9cnQXK8_ z@a7s*6HK=3Tu*BPNfnv6nIIbnHa?Z9o6`V5!7m^Gp(7-Qb8!B6A^$b>qT}A67U@@u zcB$i9JO*!d;Zr2uYp?w9JG~BM8=Em@b*{9$FzBs+Lrw!27YYJI9#fb-QwEP+$S7-N zj_&z}3e|C*S+$8$CX03#kN>H$0d$o~*&m)z3-KN4w= z{t;!dwBP8cwypXV**2cLV+s|6B3+=G4QU|7wQo~*{y{i9jsVC4^uc^k zegE-E#TVT^(L+dk*lt&)!-g6eu3_nOXHDnxs=cdKOyReUX%&W@KBamI^Wuemq0GWP zG@^d63i?&dr=Ar$P19XK^CqYkPPb{h7NN?=sO!Po^iAlc;XE(#*%NbYfyI#F6Jxz| zjd3fylrP;pdM+x12%S&Q;+Qru9SjoN&0mB1vXk(aS`|k+M8|sch?kRN_MlQ=K62f-P%{ZpKC;R zxO|zmo^D#8Zl+``UOd;B+q3;ApVDS-eogkK2#I zoKr~xjQe8}NddWM8WSF0^-4g*@W_?<^IUx8RV&m`m zxJ1(rDfo1o_T^k_4%Qm(IlUO);yttCyv}T%Oc-oNV#Z=hH8Hc?>)Ygjfbtp>0xo)2 zzNSesdEpVLy2kREGH8%}b%skBiJ4V_6lqLmO3;=Moodm|@b(L4{3E}cs`m(npLAb2 zdb-OBKCMEieYbciex)E}BIMuTD$ch~YbH2h)W1bPTzJif&FjSZz9-HSI!rl-7VL*SJ)9&@QxTvZ3?n4ybnHk6Y1T(&by zO$F0OvV&ug&0@T8ym;2;2j;K!1urVWJ9WZBgFn05Ei8U>>%01sE>|VaHt<~^%7Q6v ze$*x6X7Ph%*jR8gS_pkD0CV{a^iazkBU47*m|)62PkNmWpRTQ>hPC$Gm%$_f442hD zbxh;-uhAz_CS_SJG&xrM%)+j(09P7hoz3ko#nv?Pb`)T+?`EeHL;XsS-CYGr9`aQg z@UjF#r9Wn78jS^~8+VWKB0?ky`>Kjjw%32;=NTkdRfCxM?X{-b;J|6=Oxu*Zk(HmT z>O@7t?b{UNP3MVpI4NC7d;lp4$=ZjzOMWrhz4k}4 z`tP)G0xCkpL&Z#J+8Tw7vVmkIUA6Mo^TOJq(K|DPe*=q$zc9ya`ls%r9$q2QdDb2b zpZo`xj~AI_QfX?419dBmM0&1z=vvW{nLE#NpBAX2e|}f!G%MiFKSF0_Kg?%M0@G52nv0T&&6V{~Jo=mj))%NVpojXPrqcVZq%UQVwJe5O##VTDN0|H3d@8gV(4Wj`4 zUlq+Jw{I62uOd9$ET&Led#(AE)*v`9vyB^-%P*dRHwU$ni2MW|8~D}JZmWmHCW|Gp zg!$JzzzS*XpBF-uJYee_vAgyLI_|ppIS0|tjMa8hwF+K=={q&XJX-kQ=^kIgx@2VD z33@tff;RHNS$5YYbFSFPqB6OTADtFNxx$6IH+kQyfpsPEr!q9O{vcO$&psR4i zOZ>u5=}@ACC~V*w4q3cYU1Zdz2^e0(o~8=%fwiK(*LXAMt z24w>U9Vk5Jv){@J1!vA_*F4Uxp3CB`z6Xpo_Fzt#D?v4Aq=*e+pfCpAt=CTL@LvtF zXM4zi)o6ze*{K&HkQ2zwTG>6a+S#=aXRNW9oiW7G6vc3BO$dkde^(Gw&r4*P)piq+ zlSho>nsiazbe>4=`7?cYypI1U_?&9?FXB-7hI4aBo`242=7J|8K3Nhmea#u z50(0prd)59ke1tO3tL|;uw7Mr2yV|YG59M#qDwklb8n|FVCgaICP1F^gBxq%;*ooj)bI-V-yj`g3AV20CgNbu=b z$KUWBn~Techk311<(;G^O_e71xiBCN0o_HD`FdP#nuL5Ghw<2xDx8s1VoA-bL`N4` z+V(RH_A((0L_d5k>e5YU`uH-`{kjr^3Yq3a-4cu)hrLs@Xr7_^`4!~$)SvKX)t(=Z z%4?T^JrT@qRINh+R*QrH;fUeqBX>Rscw3!{riesC1rjG)gb6eW@oFo;+b^JW7a6}J z9@_}wH`oV|bC!(bXuud^lj*AJcfTpC_wU6q{))9YXkiyQCN!(u1{oO#8J&EfS9$69 z*PST(dXgO6P*-s?39OjZ^D{; ze*D7!CZ#C%_N!?;;>GMLeS38~;4R%gqP`=w)ndQpi82GgBxw!@BKuC z47&PX$Irm*x97CvCGd_2PiOYtHPsaP>tQ#KuB-T+JN*62H{a#<>q6D|{bc{~<>&9X zIYlC5-># zjwU!C3f{RMgI}nZA)kJTX$a7b%Pwc`JXmY@b=zV1{h9%6B>O1^fO^@jO=|qCOyWqO z00BmOlkOa+xB%Np%lvL~_|)T^-K*J|e7Rtf6aSDCq)m;?XDOgOhN1!TM>Xd2> zk;DC=ih@f4*Y29RxMPOPQk@9i(B^A9sqHT>$~$T9CMahjyjkif;FM)v z=k<|@1`UJZv&yM=(Uqn=1-ChFp7Y+Kl5YcPO@aBda`#rv(nJG_$Sr~~WMlpbrdKn2 zIW|KV!b2i&miQsUURC7Vb5Mva#3Kyl#-tdh5_(Vg ztA(~wyIl7EhZk9`DA{81G9bhk3zVsi6Ai?desv$raKTib;oEWb>sBK&!fTtG(9&Ra zy%EY7W8PTu@@5Y_rP%RXzVQ-wg0Z2LQ!l1gBF-OGirbXI47bsDAp0S5$ZtE>qV%D2 z*Ho_Zmx~84klR_yi{~p96GMbFb`cvltWS>U7_VpXz^A~%X$@Sf2|~7m9fGNRvfzN_ zbDm7eXUI64Pmu8w%Ty)M@~B0&VcT1N10;UiR}dP)-umX?41Yt&ZNEFp;y9G2&N2?0 zxGZPYr*Q8zunYVBQMIHf&zC&IZ;Ang1m8=WRBj+bZ{@Xl0PGm?0ppj_^7S636J0D= zx;7^kJ;84_N)it@a-%(VjQ-0znyP?&18($Zp|9z?10-4TOaL&1X4 z=ft3p;d5+Fi2pS)&Ha#hU%#lLW~~Sj{4ZyRk0N)3mLRkO0B7{DE3~GO)-4G1`~BG( zo$)6W)*vpgem6^uf1^*noUcuMwVYe}{9A`lU+6irpDx2E#hm4%`(uslJy(+)<`+S# z*T)LD+3uR0DK(w6Nt5C*D1erlh`|>Gx_$^pA*hT$EWj;7opH0!hYg?3pi9 zUYNQV_Cdu*bsY?)d)|qpH*XSrwZPM5S;#TOi(enGvMpkCz0oOC{)(#fLQp+TVv~wZ z(>;kVERsGn0uO~l%%=M#zcRZ>6ea0QfmHGJ{jpV>zsG0a>-U?j&M0Baur{|Ooq=2?;c=UAp~~1RQvq+Ad}y*8gv&xTkUegtw2TXsi>RaSV3* zjLRAMI`#ha3*}(Vhv0*V{%4V`Yo+ExG|XY!Le9^Iqp$Z~`?M79CBle#;yqR8g&#tQSzpH+w_UT424MXsaNS^KC z%t+#0YWISVhN6w&FJ|*<7NxETcQ)H^jMLRs3Uq%3fj5afR%}o?l+vR^t8?|@+TWLM zz^1=K&Di|G;DYRQmumU*d#ZEL_Ts)Pt{SafFOYSyH7eV}pjM>!8Z_PNhuT!i=t zAM!I$$b>0DCo5;gBr<)yRs)SdRj}yjr9;fFQ~OC{V@UZ?`=KuJpDd5mW>8t+33E3& zm3?!V@me9Hm(CVZZZrA2zo(_zO(#T*&Z8&Zi~VZKQ|}_+-$^4K)Ps)4*^AoU9L>T3 z_Zt~$uZ!vj*~+t~4idkLx=lCih#C>qfkihFe&$15-SUCa-s2H=VZ@!DL48%mz?8GK z)yUiV@vq990U+_q3R*oU&=3D|#I#RGTI(C0dnaYF0Tg2#*GkI~U!A0ATlok=U*jr1 z?dkMFg?$@m{rK!znu=p9u#yJ_lYY%D&dikh=E|3?;<-v*x?FHd`BMWVWxJhM_xX@+ z7y1-8CW1TVA-66DAMZIznFV=86WPiLpXW%bROpM{ylvwa3tm%&u|8UVbMFV!Wqa+3 zy!RqL({^$hw5!{aQBj`c9ILp0(EM5FRKGlxN5d#SAp`Br`##8N5j`vCrG-zyMi2k7 z3-LO)H_HTPt=?QkNygC+lqR?ZXzXgqW8uB1X7cz?w&@L#+o!-l0{*K!RAdP3dTU&D z2-I{QvvoNXis8Py6eAh;EJA2?=E6>iZj?kih$ZC2`&d`oo8w{L=@*}Eufm5IJeIvL zSi&YwOf!A;ure2=koFIpL5%8vG_zz;HHQ8}p%7@hI>YLUG9O|DbW_=$8w2tj0Mt;w zz87oI$*vE@NJvLnRmU1iGJ<|Po7@3otZ|^1LgK+bFRo6zFq^JF!n;wrPBF_MYH-+U z=${+39mARl>-DEN&CPlV%Md*jsmY*%IfEJl7pN0)=FmUfNq+#_#~qBhT&!Y2%HedU z>DBypGiv47Grc)HW7H*f!=c`U;9>(^B}%4-Y8;hu&bh>Ua@@EL)%Zzl7~T|9D`uI^ ziHezTS5MeM{1J;z*M7anW{G6fEw5@~;&J!b5*-#-+X68s)1TCH20J7`)KrwigM0BT zIOmmZx2-_PEpMtextHJC2)nPuYIe|A`-I|3*df%(A8a}e%R~BefY+`M=;YeVTM&8o z269YLxn3?1uLWu;?4-@Uoh}EorrT=1p>^-w^ zx&|8Ox1*h(UYG}^Ez+2F85;KYjl$S`ebf$4Z#!2DU;b5%41-WhbbC<6fM_8$%(We_ANS@Y?cYw32tA@qZ5 z*()4p#}^`YHCpA>x%dXv4#n)bU5vMFeb9Fy7&F~U+;A`WkkZ#{l#Oh87S4tKVg!?& zV#Wnd;&zlVVAq&NVCH>dj&NyEwj9bDCQ=&Cty5~;e;x0J=QS=A;e#>+Ju{rn+v zn(s@#BHF?mB5e7A|jk0&f;+bt1N*CanBTx}6t+L|b=F z%0@Xin>#h#bX?$upJbDmHceTJ&>HiNdo;#|O?XYWogRE{eOh0H%?^K8n{4Z9jGBiR zKR*0RG09$+|Hkuc*V$(XV*p0dX--2cY3m2w=qoE9vi^4o_;y%gO$wdd#biG{NQ~7# zPW+s@+-BF3l@U{M3ztOsvaVhFK=elcow0Juz;Z+yKLwzWjWloL%8018H9RJs+WahS z*xdc)lKu?!{f?eNIwc8qz+EqR#79R4Se?^-WZ@-pL@lt z>>2}=4~T9oPdb+Tl3!mZ(H!FZfd@2e!dMa_hziRvzPblE@y9BMbdb2uQLbj8(BT^6 zGGD#AxeNln*p=lUdBtxE8DZ#$kS^?ENvW&b+hG3_r8>4nI?*dU)_IeCaA=0I)Afj> zB>a3*roqSeiY^{88<2<;QvnR?@eL&3ZdDCE6*F$_6Vd`VA@Z0vKkqt4E#Ge9LEa-e7w!R;TFFRP_7^PzMLk5(oMQ-KJ>1rAmWzBq73BO_uSTqZzGWHA~D z(gT-VC!x6^8%Op>W%@u5_g_z!4=}O}%BZX}Rj-W@7J{0t(?wX>gihLMm^V6(*iT>O zWJ-eW+e()FJ{-4(ClE!ukhfiRzU10S!PjBCWlZsiQ5pls-wG4-fIj&vbaiL|v8I~= z*!~ISo$H_txw9r(VnFGpJhjimFQB1R$x3e)R$XVCua(zC)4e&bWqC=KMv87(w1PjS*qas9q*%_X{60;Nu3)4Tru(0c3h ztGds`&l)~|)+ATTKbssXQ}IJgmTpax1C?A8aD#*-Fn_vwC_#E9vUN&4bo$Gb(&m|*|-Y~P;X^xB%&li=|!B93HVFuF}f zghz8g5;$ja@m}jm=mPl3s_X8bHYfwfD)WrL_ET-&ZY9?_wn=?^eyQ!oit^Do|8r?= z)V*q{Kt4B> z%D1Dnb*$MW!2e7{O#DnavIRZ4_;~TCiDaFsMU!BnPQi5soyffGRiM~o0ZxLq-ng9I z-Cw)I`iPX$3f@yNOQF$3hfT!~zg&5To|}DP54X(E^=DGni3{n4T|s3NIE8>~qhBfh z+=G(W375s?uCqe3gO6PBXp}GrSKR_`UI_}GU(J4b4$cqKk_<$QXXc-xq$A>3K&wx0 zda@B%o#d+Zh>2|Pdu)r((=O;c8M%0enBd|9Y|+s5K;PclnnE>&QlRka%~a z5IHKp&eDLjMuS-LYWL-Fv}U!F4Pvx*=mipYXYoe{?LKUKwrpO)h;wtZ-NbgWV<&p5 zkgS?qdKQx!4uh+TLOv2L?u{|ZaPxy~YcoJs!07YpzRB7lLJAljlZ=+ zRl8#oUgv_7<`d3*Bq98Y z28zSXR<+d=sJ?91VsZSP&yrwtiO1B=xyLvX=)F}EV6b`#r~+aKRQcLYNFCiC43d)U zJGOjGF|ayCjf zeZ6O!G*0j0P4EC7)-`*pvoE$67=h=M`;Z5phasm})d&DkpQC zNcRna<%NJ{yg{eCdDal4t7isXL!sqy3XzVP$0bD7+3+7WwBqm?xT++C;&5*){(c

    avj8)sR#uf#wlcSm=NC)x(&PL3$44MA>%>}v;;iEaMpiKWOz!7tXv@8EGtN7umo>{*E{ABmeBW`a%( zpBazF*&$cBBbYev947H_n?_Zd7J7yrrPz=4px=_FBeIT5<-t0{xZf36Ad`{=CP)nT z0YS?5rQ?5K|6NAPGY0>jK{YPbw<*N0Q7Y(Bm;7g$swf4N!vc!#Ehh1(qE)Zcesx%l zzKHlGdN0NA;?$K^Z12Rx0+6~tg{?OX|K5Zv_HRwNMF0BOUu89C+j|Y~fcRj|iXoqo z$jh~rbl?L^wEE9EAE5l=zvRlj?gEUL;%oE%_UCT}{^Tm+KZB*70j4sU(!AF`kt^X# zp*v2fbxdw_xyDu3ct1Sb06iPcxoo8ez-sh<0LO<3SHp$_GP&fpCZP9L{H?TPXC zjDr5)D4P{p>%psoPUiDfTFxFxxpGUfzHfOzJeICVw)l5h?Cd`N!Vk;7Y=6%qIS@uazI2Zh$0*YL#%_4s-BuKQS*4(?N-H%c z*_>6AwSK}P!Q-FqI)7b?MNk^@x@3oTxj-hykaHCSv1|vuZoC&TePO=*x%)7Kz|0J0 zn6283HY+Ky6gN{;c8L9V^^%Qv04<-sh78Er?iMx}A2~+fM$zf3aaLMnvdc(mP2xi7 zr{C6K#fu)w+^{S&NT7aPZ%R)ZjZ#oq=Lvu873}%g9sgTUYptl(ONkR=x5T1YU?fzw z05If9U&7Q^7C*HD_Se>ZXRKAh;F7-nVQJ1c8^H)6!Gg|P)Sxs(s)}^ad`JC744{_E zoM$n=%}8usFwOhEU(+rN)zkYfPinvb#W_YSF!qBRNi(u{JjVNvoJ<%?+Z*w_qjsJh zzW>(6X2_04ADVJnYXr^e#p8VdMkDB)EEm6m=;%%#`&g1Vn46^;zZ5Ht))BtYRV)kX z<^~DghPo45A1@vG^;mpv-tz>|TFhe|3G{l)>jKZv;S~E@6Od+CfeUudM8r-1Fgs4p zm(AB|(dmi4atcNruwoEZZ|cB^YxU1wsn^$nCdi=cNsmX({v5A2D|-tP{}HB1&kh@G z0K*3UYmM#n_RFUKt-`i)SK+PU`6I7!-|r3LxyQ}EtU3BS@2IZqi{HAjNWNlC67Rn} z8r28KklcH6d3bD|DiHKIv$>+qjZWa5j}eH;_AQR1JOCd*pR=M=AmA|TA=KQUGnj{B zRx;S*E4;0wha@1jqhlqt6tlEJ`K~fk8?os&D?iA9F;3*}Pk+g}Pq$o@^{#0+`+095Y66u78c;(6nkLs7h4li4TP%G&S_eAjxw(Sru7Y%;pY zZ7!;o_{VXZxt9g?HvId1;Vc1I>gZN+dd};a!XV18;N8*G{L>Czvx)KH!#~&Kt=5ES zEADZu&0Pw*Wx=yoXt)gYT|u))!H0vv;UXWyTE)7!9{eo~x?F@5-amT08!`DayYM-V zw$nxw^C1eIXAebqgizlkMI!oCB)8{6W$_|Ij;HzAs#hec+yQLF%15~ZVnR;&svw}2rHfos-XLw1b2+jSECDBa_Uxqew(@8o zViO_2srPy+es;Rsb9SAVL~HWoAi{wa_-#tA3T_!YJ~v@K8|dOYknb-c5b#+H^qK%p zpjb%&7x{3Y@>f5q@PMG;I{s*a5}z@k@L>t{RITA$l>arv=GROdUN2}LiL!DPDxQYZ zVi}pV6!bsm1-1A46j2ap!Se1;tDmv<(2juv%k}+X(cj}vhNchD`(>x1;%N)#=(gcs zSF>RWDE^$JDha_FkLhMuZ&w4AhOt$Bf8>cw$BT`1$fI?<)9bAsx3BWaF52L|)Tgsm zXAfEJD1PdUvqTMlT@^2!XW9#EAEO6ASI10XuFy_2a zgIW6roZ_QGl|45FsB6;lgx#J&??5{<1>?)d#~qIiBjahaisS7PW70w5_36mdV*=fZ zkkD9qX9q5Zs|4Svml)>QFP?M1ftP(*B;1f@&`ZsC;a_T1HULx|3{L`AxdjBO$Li)# z>I|z#76qy`L@C~^bF35G=wJ9>-v#_H9Q&AlodIk3#8yflo<+QpP!GYd0S*3k zXH9g;q`NC;U7?r3_8zPQ0p{is)1JEp{PWUUt*gzMEB{tMTL{bWay9oLL2{YeZule~ zyqL4YxmzxqoLP{i#ewY~QC0SmhLSDKF^JW?h0C&=H@LAvU^iM~vKFfCKWDt|-V^-XwnbrGxAa|gtNhz2Z&Z?d2Q2$Y z0gw$9=D_5A0Is+k4i$N;+O0I$9k12E)4jNS6=0nzf>pH1ZKBfm9 zY2k?gAPd3+PPddO@;gFnj&zsNbDM%@cBHF`A?ngt2J%1*^U=3WQ{K(%L`zb~mT>X= ztlH}zfTX6McRO21d)jCF5a`h_D;!CvWtBWJrQvWxB`a3oFiW%lo(9E=*j(uA&k6Ur z6Vgu+K-Ljac0|Nw2x(1O0Vceqeo0k$qOXQaabN5Wm$N7ih1#$?&jcT{7{ z3q)|+?NFoTj|3`h@uH(L23MkD=cxRV{W-pz6k7ob!tLFwYCdXk6nQre&LKRG6(*J` zCOB&T$!?ZQTA?7)W`w@9OUN6aZ zSyR6<4Va#ZA@@m6dkHjY?l4`MjEo%6aqQ#AexZEi%@W$FPYQpubx9{FdEP@pQv9K` zSX%Z`di0%8oYx~?9Q2U%w{If{Vk3`aAM4$E>vgR3Bq-|g62!nr(0TxkZ%m26syf?5 z4lOKp3u#(LATPbqZ!wnVoQ+)iqle06OKnHK2(^vDENT+dV8zmIq2hOA zdRjv6*p%PGp(9;oE=do3+_t(F>B#C2lWmZF;QeqMEZY@NjtA5bm*y5}HyKo($GslO zUGIT|n%>7&o*Q}ZyU{cZ&Ug!%cbK`JBz{P$4N3{a;KsGcy%xPVV&l26wz()R^)JRjmC9Q z8ji*Hu!$Qp-f<;K345jNy-RLj9{HV)2V*Yu|KaT|quScqs8J|ITcCxa#Y&Ol?h>q} zc#As}cXta?pp@e7?pEBjP#lW8yQWBxgd{gT?>Xmv$GzYEasS*gGDb4?j;!pxrW+NA$Iy7L(w<~p(@N(MF4$o z!4~EXn%C00G}hDC-W?5Z#Zt>U04zkLvIe_eANX zVH7Tu>AJdq&~+o1KAunVV zg9T=c6sT~7vp^5EGv59uK9{=uN6aWU?l}#kUoY*=ja>UWf#{{w&x(HDv?5-Dg`MVW z_5PvKkz2Q5&0H#|Vr$664(6{Sp1^3mpZK{~cSbAa4?)rUAB)#rq^lm~{_y;Y z<$%wS)OAG#?yYjzqYdqHCd2gC99$o9Tn@iog1oF#9UFgyzTyfIs)P5s{){!53ZXRS zNb(>FyW}1!Ap{rvX4d$3ikxMm!^^QvDEzzT|rO z?Hm0%)tBYtiZ9q1cjkAj=JN|a@B*x5{6ft<1;R^oT83{S&pWo`{vJZQ5 zHJ=m(a3Ycd-nok%LX_ge%W8^$Uj&glskWNCV*R;!LpQG%IpYM`8f=-}3Qq=8uQ^Tk zM%kSwY?_iQEu!ThVnV*y-W-auT^*c7q*F72jKr1n3;EMqG9*9_R}6)q^XHLapQf?~ zG^<(39^vXOeK@0IurBuulE9|K@Mc#BAsHbNd)e>viy7lDml1fcknyuIbQ8yZeLuzcG4Hu0|<_8u&>LqrDRQ zu$<2qc^Ypec5B;x=1953n*IRQR<*3Fm`){k1IMt+d*Es}sGBrg>COyl>skKw~0bKbH^)X^_^$C2&D7ck<#%uDZXJQs?u6skinz5i!Q3F$eOlyL)?U z;bdqLJbN3h^<-O9pfB_W^9Xq#)~0Db)+8;S^^0xYk<8AtBl``d`;3~;{FWO;xi&hl z%#{<&5c~9F-yCx*H;K9fT~4NMa)@#D;89DH)t`I^P;HnuERRGQ+0w5->Aw-tz=G0c zY>d~$3KYnP#YSsX<8C#x$HL(rdaS;-!j<>1r)bLz6SO~Sv<&N3)Q#f;!)f6ZyW=n> z%x|yHPu_l_7(G?rgL%U*si^Br%TH2CEHL4C4eIxJK@OG+U-_Y+Wk)8BQSlwli$cKp%ilb443nY9Ys89| zaifvLdzEjkJu((8jg&v85t`~oufk1S_A*RcZfl~@^@PSG?(ggw*8C|_V)S8f>TQ_b zKmf`$_So=fEHPYnDLCf8_g*5muci&5Hi^(U@7Sh$NT1kO;0++~LM0EpYjK!;Lt@=( z_~l$Fe`+lt((3Ik!_?Ecxxpj?4rd0j#+zpdoUZAHX5caw><(xN+nGvK_6ts8bKB!P zLj;b|cJHFHRx>9n>aLb=)$$l_jO_+Elxr!Pe+tBEP1bjUaqfV@iszQO@ZYkm{%ziy z9IU+O_&#bztQcAqd+AmUz`52(H=(Ww?g7SJSBgS@XReGosA|0#vrre(8LZjA`Pqw5;fux5?+#Mmooicx;J-D>9MnK7lc+#E>!L+A zypM)wf#<=1+#;&6d>}}@+8xo12|1$Eb=wr~yO9V|WozAR+s-N};kI3pon;=(Z$>A- z4ab1Sec%0`=G84wr~^2b#{&dz*6vv|A)m1d|HTM``S+HGkY?=FAGuvq5=e1dvSu~? ze%3{GCnh!gnEd0?{)i)@erTNc6N|Q@WJWRjze0E9&iU;>LbSg{1%IAs9#=h*uJ>Hk6D{`$zXM<%IAz_i7OZh}_8m1gQvW#z`3wKIsg@N%N{iD1P-teVpY z9hv`GA|Lg-fA+Dk8KHEe0!Y-tmRY)(<`4oBgBPA}cE_8evBinT#3F{$ zWu10nMFWUkxq066A0_3VMBnvyjToE-ug|9R_df;^A4D`Y@@SO@)uMdfhKn*#y0KOlzqDJh>aKA^-RlmskRPk7LHvN2}<68`LeK&Z7p_``Thz%8lZc z8Ph(A*`sYZX5dd=>hFzAib6@1n?6#{oK*e+NtUfH#e4W3@F>YOXf|zCM=(0uU{${Z zE32(%iISx(6<$;~0+xGVy}Y98$#>oHIQez7svU`lstkUuWFDWB$Jx#io-$@)9qPEp zpU(!4(H<*4?V4pxlUEku0EyFjiY>`ufE;Zv1nY1fzBY(yeFr`w!_Dy=^N(&X#@|k6 z@0qgq%dAsQ9-}+D7Ie@^#N1pJ7w>}k;@*$OIthrarw=2H-edxLHl(;y^(wD7S9`$D0sRAfBEWaCLd zQpw;cBVhB@qSnbYM0J%twfyV7eSuqt!%}0=ZqSCpWE4@2Gh$X7Z*&q%Nwec8OwCt7 zj7RF7I6!o;jm*SN;Mg;JMq1YENgH3k@GB$;lo3(Aiq#XqO=H!HBK3 z%n3CFc}2Z01vjYOU6@8>wp|fHOhlW?K2=_c0iDPKxGTSJ(Q6fXjFB5Nw^es`d)}(A zBm26R^yeKB9S=}UPoTS5S|jIWM2^nfzokLmcIK_H!>Litgu^aORIW<;8f0qz_FNp#A?Sr2Shfzldev0a8Z&M14>1rv5I|mdk#n_{>^x_(aStU(6#xT&7q#a|@5;&rG zSbH5ofpAa|EeKa`YOsVz^f^} zHC$ps9NciU!0r^#rr)(G7$tuEz=?>a+B+fLo9Q-m^)IgTwiE9b*t{;EGvk%Xh@T>NO4X|QZ+Ww3xhFal>DKKeEIB_#YmHRf+u^c5jli#`Q5yNx z2PXqnvKG$bse|$wu6g8H&RU#JD;^Xf1`x9LilXfhlB&H6x>6?Hw-fPFg z;Jk@kSrV}?an6`tjFv<45P7jT;jGeQEs8j%TZ>+&8 zPqLI{-Apj#qN|WnDDk;-!D*7uUVhSt-At}ROGga)NuYX{J?Jdwm$cSM@AuIu)?mle zCn|AN2gN3PPj+`JO`1n#d~Qsra6VE|DNp!)|Ez+^vG?${=&3O!Fe^*iIyw{Ari*&? zm(?Z~(AT27sl$(c!!4(05Sse0}3ZG)6URf`1=I9r+IFY4ptntCIA|8ZVB{`vmg zK&9(ZeTkY2r~BRKOjk3nl3>GAqORA;eFtRmFP`9uY*07u(5A0Y4c|;sM9cROtn}c^ zX6egJR+&;4EqGD4;;f&lErlh!L>lea&vy48WDll3;`|Dq#C^?Q9=%LSf6B5x5aBwN znv^#AKhsXjK9)!-4sa(tB&CJVJY5w<;^6b}st!DTavz`+$e%IneW}9gcYJY^!&4u% z^jAn-Tgc{>5FZbIu@4yaQjut}VPVm#HraE)bXXPisEH4#(H}@=E_;9WQ$YJpou9-0 z;oI@oDpoe(z)@q`VGf>CtO1ppq6P>L4smtKGEtP!Tk3fDMZ`P(xzJs^RhA>*#S;oH zf3jC6Dkqlx8lBmp=s6z^+LB8m{r7!v(`ar&e{~V>5Jt5yFT^*x5wU2oTW)>zpM8lL z&%Us5nWKr2s^{=RNcA;^SDNdUy;&PmIJx=gc&PN%h*zj3pbDzt#2*GMhpfZeP1IpoPEtF|e};i1pw*6&zZMG(Mcm$o5wxb#lE~lqBDU ztht^u5VtHYX6*XA+-z6(-1go`j3REPrS8*f27sGw_)RL_ZJRvhEc^)tE#mKPc(%(~ z6L(Ro@%hM4$Wg?ys7~G;xGGQZ8}>aD!IG||I_|>UEGaiQ_4N!DxVl}bArI6xQOk2a zA64Bys1`<<0I6C;ugBEJ;IUKf&U_X+RZ07it##{sZo-(a>Q^Vyd6}kucX&&{H^c$G zhR?iRKf>x*DyhR|GiB(+INmgiXa<@Oc;pJ~%eFldJ6c9}qS$IbLeKQEqsROSP&zuL zf2fM$$^0in1lgZ{H8n_b5|N7w4ym9K9#R=s&nS~jZVP(#TS7DHzA)h4yjEX$4-7QY z;`RGEeMFcBF=Kah00ghx`BF{#&Sj95hR)Zu8SD;w8CZcx~%5B8wCu5 zkmUPILP^Na!C(?r6vzw{K@5v=R#dS^vbPLBuMdLxQj+pp~ zsu=)?4V}cap!N9|A7gwA)HUJ!2XdgV<%LwwjPo4Fg;+i7Wx%m77h?7Fq`k{ml` zzx>HYVYzXNpr*zj$;+<`(hCzG0j(cnGo@Wqm7-+|diYB$jjoisw{Shpd^22wV!s9S z3{lDbg?pC?m>RjNpkF{pG6M2Su6|k3vhzFbn^A@>iX6?7u^S{lT8)aTO=TDZV{m71 zc$B`YeDTfhy4Gr7^ps1b*yO9qvvt{ZC+-g))P*dMpHE;i&*KQAT$8W8D9ti{)Pw9M z+Jg}V4xD%idoNoYM<218g7w8qXX*Y~K#*{aZ3I7d@nx^_X>`}>jUr>w;|c16SyOcJ zmBA4L0nv%&PCK2})TJ2#=TxtEpA$Ryzr3w*Nu|JSh|W8@9mUYeyYn00cXtrb zmoEty@tpVfV6&*T*agORj`=}3T|O~rG5%wrL??IbmK@444>(TacYtS6DJ?RLPc6g@ zCUS~utAirr#9HZb$R`(qyvfnHF`vJj>md`0)$wHC{b0W`Wj8UKBGma-=gm_;5(za$ zH76tl>sPx&^Jm%>#iYzv>{rt6=^<80d;LEbkVS6gvD(sPS%~|pFmE0@PIuu&rprcD zznh^J>y1oER#@x~dI;ysHFZb7F!Rgbe%3<)dPpynFa@xYS2#i;L$suV)e+FJyg(c1 z?~^r|S)vPn@?j&!>Ffz^)`aCiNx#+8E-8&ifBLOh3pq-+j#n0a;yL_U4vO&h{5M8l~uY>*1OgV#SQVk}&M3E7iVAC}j&L6!tk^pKcd6ZPLRJ z$Z{(06L9q(3CqHlOZ-?dcE{v(0@Mms_|2twv&1g>rPGT2hkaL977)JQg(ONGb(6+l zP_K=p=f0SCMx~tUG;yAT;o9NydQ8obIb}T%{2b~%9JwuxMN13EGgP&)&W{w`C{Ga% zXv1>5skJ(HeOhl%b05Oe@>&H-PIoNT^E{}lr>P)> zKDhglZhgSq5&ud!f1yr<_{>sF}K+4cmE&I z#r=DJYyy2IoHF;r!<44fS_Y;~Zj)X*0$e=1B=LbtW%6I26v?HKL`Ot~zj+X0v!1N} zh}BVvcu@E>w25YsflwV`$b82BO%9(&Gx~sjLT7wFer}9Q?(#oCS&g5a?K1vXO(+%K zW+`TYdA=R+5fZ!Y0OMYmcCgIGjKjq&nzN4OrGEcesTw&Hx5Kz(n}GdyU8H4K06=j5 z9I(`*g_F+03yh!56ZRsK>Qo6l2NC!i<*SZn8u*fpp?^7sid>dRC2m!Ay_0!-XUKX) zWgrHJ3HL(g&yx)Uk-fI+cUd(PFg7R@IbS`|cj5gd1a<~>OkA*F^yuZdZd16C3&uh5 zs&^+YlfGr9NN8nJKsPxIy;Fi>d`L>;cX1azlJ59tZI~%1igyl#fCe7SEOf2O2&Icl zaD1sO<{!NE?pN`vH_T#z?HhDWUES#qd_V@r&nlZn2|Fzll7kajPIG4o!4)4FObS*X z)G;Y4cNlYRr>Wnw1EWMn7r3mP0^@K8$?vdR_`vR&^?#i4`6JQ z1-lqQ;H8xVB~Q9!TFgv0X9AVucphT)aoeNn1Zev8f02=(&2(wL)N-RcQEOWlIpt|- z^+&_V7kY$dWm}g?iz>{X<*xAB=CbOO@mM}Y4D=R8@*`n&mYBJI)FfgG?J$C$S!O|y zCB=T5GbFA3<_}sKmo@(fozrIKKtT`m7kX>1{LNZucaQBAha*?(YZQL95Bg{kI*EyP z1!h-~-<+ri_tg04f{#;3hHMT;SHVbUpQU$(ZDt$tLOjls_|E%f&7di<&Bm%~{+5mw`*QHCjKkuGajnHgiTCiCVNRAc%TM@Skc*=H^IgQoQqMi6vbb z#lWO!!#_PZXswv>8TxEe_krG$f|Iv^uxA{6ZrCawEWc9KnIFVa8x2f2E>PBSpxw^Q z`hl*n7b9k5;(uz7N9j)RisJ+QaLR9kbCs`6y0UY1QX`oRM|bvyePeeRBRGbi!dbO$ z5u8+$Ni``QP)<`CXC$%Y>G56-mDlcGzyi=7c1DC*TIQEi1e$H4;V~RpJ)1^npM%XN z%8k&Ip9Ee$y6NyaPY1{&j@4H8`v@$;% z%`Evv{8V}Lz{N&Ly%3eY+(aSniyrY86ngx&VVeM|s<&1bYOeb^%zw%mTSf$5b%lW} z9QBtK;KjD0kIh+7L98x(=G5rrBFUG30US&%-J^RK(n}iN^-g%6jbUtOM)PnGA#y?;Q|z`) zSozeY{9gqaGN5xRaJBy<+B2f*>YX)W{ev%3e6d8ik0Mt@chan}o*DR2{TRuiaOx@^ zR#L~sHEQZ8{<}Fv#ui3T|ETix>3_28Du2C#Jo%0tAmkNN=D^rUlv8WB!y)+lU$Nhx z%lCiqkd(A4WtX7;?`r$ct_A!5;2|0O>@T@rNdMTt?!g4@N2X^D*#GyMn|%EIy%0M7Z)7xRV^6 zh<~n2@0^5KDrC_wKIi2-fmP%J?>@B!u|fC!30!AzG4N8UaXJ6$g*$JkWHoy^T?E+ZhI1?N zt4Bl`_D)e@&-QoC;~XNA(LIzLmDe#orZ~G* zK4z(^9N~#*{P|@SY{p3TojB%o1$qs(Zt0DYIA%sO69A~MQPl?G_ifSvn7GaB=1`s~ zK$|zN{cbj^o9o-(WSEOgJnGGvjIYU97~ISCfxcw*J1{mzu*4)i_^H&(6zo9!yZ&B+ zR!d9qu0U}@e+qSqbE)jBU75*8p1Dy%Xv9<>je2(Zey)}-`DN>8+*&8zQ-lWk1Dh)8 zJ$d9U4;#6`Rs%Mx@H>ID#Y%8IE<#ifr3afexpTEB!?UfIjNa?sh^YFV26*6GvbWuT zS};nq3C^G0n1?T1#w6=M*;$=h)oqT9X~(QXDEmxOzALoP(CWI{3vnZbyn*cnR@EWo z5lsU8dTg4uY>&|_gE=PAa%D2Ve2^JeQZF`ua9`pMdz0Q3hHeSwp0a{rR$aj62(pl;*_&H^qRKfm zGoan>XH`;y;r@5mTIY6LjPgaMwDut9%IC*t=C4N47X%|FIqeIvLni%yxgxH`=gP!GCiwI7 zNxeWVNEK%eYdio&)iVBil~Y)=Q*O^R{Dl-}GKup>ZPK;Rn5W~)J>YwQJ#zY(yQd7( zc3Qgez125#e#ST@Lx-{h$_uXzA_P@mjUZ}G7@J&uOw>RQX~2~Tq|IYo5?_o9rUd1l z&ehO}uA-#78d>uwdU9_sTJE{-*E%|}Y_<}K5j(Oe70ha8P4S1vIyx%9)yvR0kuHzw zE<4jK4vbG2sa|^?b7gme#NufmD3@3qSgr=Ck%wLp7wtN zi_jkFlbsU2GtS3NM!4NOJY&r;_`}sAg28h(oX+;K1{(B$mr9|C2I2hly#4!9GLt>OngP>ipnl2;6wBr@SA$hm5;k19)UwD}fcV2xx`Q zW&wZ)h!h-*>TvF8tf!3H>0Ujx_Hlgfj-)t;^hOzC;8nnVFd4SEOCx-ow%hC_eFi-1 z!00wnM+F}IN(qdb4?aZI0+U-n*ASvN0`?g$;r9y~;FuEFfR{>zA`oE>k^Rx#uW|rZ zqFSoxZe{*eiHGF3kZyo@rh|MJq0p6h{x{ij;{&T>1Mr<2p3snYz3I z|AXS3Magr5Un&<(9PHxc7zlM9y+dP<+RB{fb$>M1JhW_s=NC8xZdrGReHHa9?_=>j0*0{T(}XYV%ZuQEW&Z?zZZQ+_UNsDVb916u zsQ9H!8wJYTF)-$CA$1m0dFVzbz?Jd2IGe27nbhaWj#AYOd1wgXT1l`s)0z-?&P3DR zHzU0oS$q^Otpnkww(}0U%z<3>{IHRnGlnmXWRJwz-AsJU7z5n4XDI+#Oa~|PhHAvK z$9OizE)!c7I;b@*%q)I!VCYAqsjuYADI`2HrE1t+A9K&hBqK4UJ-Z+ozJ?ka(+Z8h z56P5tr zTSi4q*XUbdflq=3EH)xJe5l~ZGd7j*8F`!CgNpTEIAV~;R9{apTE1(YtI2Czh;F>Z z$$s_Pl(s&lsq&wixw-xyu#1^FH$wK}9t%^fjSjQH^M}~peyi9s=f&xZ3PmK?h ziW~wMlHjKA;yNxV!|YoJYjg)M&<;=Q-4&0H8D)!LP1DqgnJM?Wjnb#J0 z5Q72?CH+rnito%cJszOS^O^bsOj`VJjm{1p#)%1}#yTD@^!Y_>>K8xyexpv3if=t> z(w;y}+Q!2n_m%fIBJ3=YwP~4*i2lA3Dy=c=)G@~$|KQRLL|UeO!J>0@U&)xYa`yU& z(TTD&jEk9_b!%5BaN^Z9AY@m(HnV2oQ0l1_mZZco+0+Iejr0iX=OH_ z>B=sRwqDdZm@4(n@EYcubhsm{A0+0526TVZdU$WleT7jm{Vaj3B=WU&Fp%0t03Nrb zbCudvheKk_i&$5oN_`r?d$TZn19-3?0y|Lt?0@y@TIHvIV19TGjqMG!j^@#$Z>b5W z_1Ka0c#%3dVMivr8_9y(lb+;Mh4#(RrcR#Mcc(>ZUK%@F5L;Xxk zU1=4sxYFNVhCkkj!Tx&_5L}@!)T_P|Hh45B-j%t^Te*2U>Ik=T z-jpKCg#G@^;9-%H1I2)Lh7{hMv-8mLa6xq2?y76deFxSUI*C2Z*$!|*Lq&Zw`$smf zsTAx#l}we3#||=97}eSeqD%93IMa#Vjv(IcFmAATKxTvyqn~rT#eO;J^sM=l3pV&+ z7Xf`Ty5|SD59bbA2cCY)ADxbZ9cey^S1fEyq*J4`5$0XVouIZjrBeq*i}$uYIq+j_NjO|Y zZQ;!E9DP^UR{2dh_Z*0Pp}4#b6HolK4QpM>wc1!4qR+{pB0rTat^R0e1d}6m5}{ao zgZ|Ng&A{KV0)e_Kd1^};4_9u6^=3>#`@c)dFh9gFmgFBo5O zrKR!^b)1aLfMpe^Qgv8|^rW&Ulc8Rvli|;t7ds;nUfiPvQ6Yg=Zo)lhKV4fz*19ki z6xdCvc5tullvBhP-b2J%oPA%M!qeq#*);X8nAp+@BMqm-MToDQe##VctgWcCS|QB* zjzLZL`lIMqq+&i41u5@Q6}8N>uYIpuo{?PPOaaoZ?qp}Wl~S}7bemT)Tc!xb_@hZP zwe8uz?SJZj`?BY#=QcrJ`|%Y}FK;_%+ooOAu8Z-|^10<>3faXi9^7bMSgbQuNgMw) z6R~cX$;2$V?+h3vz_ob3z2Hb-iz(ajV(%>YO$E@Mlx8>ndaw4~+{`Ln{nAx91_EnXGvz!iGCRB<#4>|91_=BrNP_UrcR@ zUk^6KWH>3jAH=-fb9PzFBG?D8+H{hZ6PCeMNANtAouZzxZ=p!0OS#s~PlW|zh{`7R;m97cxaVX~DR$R({c zc?fas=TH7^AE@2f)!Do`=i})yf9nztwTC$gJrECC^N+2>5F}fSzqUO}(i=L2&;|l^ zcQ=SXsD&q3nY>Hq6h2uz7mR!bF&ukW>Phh-xy$3@MNH=%3V%RpvCSrO&oxh|ZjjGP{J08^tWw%D*-h|j z?&`2+gGnWHbE!^l@ppU<$B5b;y_2YJ5Ok&A2F8= z2;P{!e-pzQE?!cW^6cTH_46Zr`Q9>*ZK?3#7r5+<8vKk7rWDQ?PQrfNKxvs0+Y-wV zXgq{RVH|LyF)N5-N|6@feCXul6~4WyUZH|@hK5AjxT@W$+x#O^CO0s&yn6MsCJ?sLtx<}qjODj?SEkAW%9Yjw183Jb26mNe`Ck4aIzyG8^y@wrZ7WKjl_!t z>+7nEK=Y*-V8~UfYyt7a^4M*ae@m#WtCcbC35bqZm5|e&E-?KqFf09Rq)vcVPe|1>Zs-mWOaAE*WajnxtMfV;+VO)A{k`2r zbaj)`bZ=7&h2AG1J&~rO8wb*2f?9P_BxAlj^^uX8ett;$3NbI2fTu~ZJQykhmpE_X z&Tes}zQT0J=VUyhAtrJtDBPWt3B2a+wb$O#LPaH{Fbl2GA=ix4 zveM%lCw>nZlGA~38MxJ6u93x&`0<29rFFz<Y8f}ATV6E{ZkKR|X_5$_*wzZ6NE=O4 zBk7~d1kuDp5kydv-|Z&>QjqCP`rhtAjm3C5f{p{kL}fEBtT?_XUo?l?7BrT421H!+ z_8+bamfr?jAo>O@spPyrG1lamBg&z&)(G8wI5&^T#R=)%ZvEoyn((RyhaFs$J=QZiJhK7M`OaNB=}4 zO|tZk7+jY5ciuxC*2mULdzrV_Oq8{K>qtuKAlbj^nfNnr`3f!F_e>x1d_KEG-R6cPPFy_n@WnFaOr3M>7)O(UDwf z)-Y`pu`t6f=*kG9_u3XJtHAzTVSybb>u@uLlx{L&*&OQ!00LYEwx#+GzPpmXz(JhO z%%(l?^ARs-fj()ODOW(7VO$wSLKELGP|)7}5qldwQuc1Tu&rcM6kJM881$%6Gt3w`2Y+Hv_P-#{*c*1nKR1wS9qpU_>kRc} zxcI@n$KZ@T@5W|?!X&)-IeFC=$T|3_ zHua11N}1o4MzZETkuBd#S3_gzMzm%-;8SHhN3VhQo@h-(-w$MeKEhbpwOs1XgUHrR ze#z@fK2spB=jzw4Nd{`Muk>&EaFXtPKcuwVSc{Ja4ZLEM5T^9)btqZK{Sa<1@Cr;F zNQrp&v61lUJJ7wQ=0qzMaR!sNR_OSicNbq{%^o!hGz?AfSKf@I|2X4ac6#2dmMt|( ziQ0s|`;JQ!ZGk!o+x-#+F4#j}>mkCNuM6F88F$x6#s41i-C^=|g+w}{mBtdch=1~G zW%2Z$@(_ajM?{8~ic+k9a}O=$59Lq*_`zszf;i!~t#AfMV?bO!l89a{ivDR(rB8>< zz;gmO3v4Yrp34o25PzDdj%&|8y?f1?*09)~ z`Zf0qYo(j=-Ly1j340GT=l89LR{Gv=O(mwcS*#OZ%obLL-&iU}#GJfSYG;ej zUq`UFJ!Nmx*e5*WjHjX`7us_$Cly|WoSo;`l5|>QSsyWw%L8_Pe@2+ur$7IrGTtrA zYuxR2`waY7tS{;Ni@#SrXcL2h%atq5LIizefc~+4U)0IQ(=ht+6s;1F;;Fp_t+Jij z$F#&&=4V!M{5x{nxVbzx=1wLQT*4wNmSS7uhBNVq>F4n0|59IP|DkXs+cyan-E;QU z&t(0srQZ{B<2>&95BAS9S2C(>KJ{|fPKY4?Atm~E%s?s3~>hn}6N5As% z@ZL{hcIs|YZSg9BZks!isNP-Fdz5mKvsBnm-+oaddL|y$QO*PBZH_%6Bm(V@#BiT-3*h zpXHCzXfC8=h=A$0fiJD@Hm(ep#>G72{ek@ZY89njn_6eWuhSO4pz`WBF{6(kE`EB^ z>_OHuo<*1Q;B`O3aqL>p9s-PyiP-Q^!wh)1Z_sB>Gh931;q`fju&Nw9T0@LVBFUi| zGZmWkd%lfD4yJ*#i8%*^&6NV^uW~2Lm=}J?yA@m!33;R*GtPM5`pNCbIDM`f31xMS z=6B171AAJ5WD-{`>YN*tiL;%Z6(h~lr&7Krn6x-r+-{W->^=A=j30!wbfo&!HO5fn z7lm3Rm~fPRS2orm(!Y_!LK0INU8iumUVBTcS8XdS8@@)MNaX|Knw86qm zv0UoD%nsIRwyC;Jh<;UDBfL}f!DHwZJoech%pbl&;#CW=2Z5;knNu@fM1Ze8R^IoX zuL0MdgI{qd9>=)PpnRQR3WaME;9u+-D2WSwv@scw>!v*$D^Se1qxJMqJI6%!_1==J zSF}0zJJh))=d>iN&!!rmfH%5&Si}db*SN+DoX-47QDt@bXHuxtldXux&)MciQ6Ssd4=_?O^7OWiD8N#_dv|YGad07QVYI3IF&ASiQEbn%! z8AXP3k6HNosy4peJ#`^bq#tGln4O#Wbmm+avo$D5v>eC1{^ zt@F}Xt~zJpGjBDt zP%qzkVWn30tmP>~JQeV(5JM4xwQ__46s+N339J5&Z49{-X$36|rp;76+gyheu|H4SN$QhTk01Qo00+ zUI|P*8)YlYn@u^KrT<{_@r_j@$CMB3SJ{Q5pO81h#vbpRw@QU$W}Bph)syS}T?$O< zuX&-U@3Z8lU4I;EgBg-yC{?j~wGI3I2Q{ZpxHdZN4-h?&Mpyy8)`2IfNw4_|XwB7o zKr&N?Fb?HgcR1Bg4CRjY2^PfQ*Q~{fqX?zWmwgTZKM&R{S?GP4mcaOLOV>1$N_-C_Sx$(13w5n6GBvfZCWTC2*$ z%A)ViXH7+YH+<>d-ig#{t!nPa0FZ~ISrvzG6X;7QOt%8*3-Lr`knif?bYLtC>%rW< z+}jUQRq#V^RV!+8Ez#txUDCRXqoddS-8XBx8_ls3WC*I|lxQ7$0NbrKq`!Ura0^X9 z?m4&(Q=2|pe+=9bBUWZJ^%!~O!l=o4F;7261^l+^tS2|kH>Y|6_(tbFBwpiRhSUCs zgX0X)oxzhfhR*#K5&z-00-6NGz#Ls<{omKU`@r`dsO-Ak&((E%zf)scW99&|Get~Q z_3)bDI>A9ihOJlq;>Ta;iqUVv719SD&#D@ng;^2ed($JcRsUGm4UBoiC;w=X3X%E# zPr^Ra-LC4@eYFXJ*T$xGD^)Z8#b=THV&wdj2qJ3U1W#MAq~jefkgYe4Dmk-Hw9{2O zzw4s0v_^i%m4%}Y1FxfOI}DlRal3$c(4M>+nn3^$?iVs{0WYqtC%;=H)ZhXcfYB=c zt*|PpdnErx(_AwLU=vD*;pYJ_X1rnkF^va?NuBkohreOFxS{rj(NYOQeA~p5^;PB09R40p%^{sn9r8UT5W zUn3Iuk`ne#F*Ho7Nxi-2S4sn!k1?;SY-*2t;MvKp;@tNS0ARx&)hvvVnEaq*9%i7h zzCKBUbpW|}HrD-Wu>|agDj}=ta0OxW?n3W`FN6P@hUwIU%Ql>t-NhNT?oLOJlmy6~ zte+kv5&)$tsh2XS9L=Y9s?yvtrt3%|jPK~FLh}&UcL#zM&uKd8Jzt2uyuF-DEY3A* zxnorRf8pg0K$}fhKu*{)d@8=;3Ku}(X7Zl&ZQ*LQxF=RENsQ}0VeUCW%3;4!ZI`?7 z6n2Z-$B~yg(FfAFWH{2r)t-&2)kPpomAY#;{Ok=G@ij1 zD+{1gK2)8Pqe!HrOLwf?-cfDF9qA?re50_jAHv4*0j>t5^3rB2B_9LmEvX5`kAt%} zh96wJS6Z)|xjm55*Z$_lgDl7%PTAW9)hSM7)};zE??qm@vma7B-K5wd4wDTq_6 zHey!=C~R=7IUL=c2Dsw$yIsG$ryJ%ur(Z__&t)tUq?6;$PEy-@Lkrvk$~QI|_s*bx zan@ikC9TbkwWyIOIAQ0Jk&&(yvb-Sl0U0n05HRmoZtpZs1OrgA{F|bg3}CyZ4I7$}koYU^ zZZfY3Q*W34%ekUeEj}Y1`2^z|1zx8Kk4zqezpM?ndUk7pZbGFHy>4TBPQ;rpUhyJIBxOR0XKUtF6Be)y zwlS~%i8|RcQDR{FnMn3-O#sncgn}Z?lx3uV_jI}x&Bbjh?q=OtL2+L+8l|(`*Hgt? z)UOZRz=z_Cj*`r@{O z$!E!Tc^iD`@K#QpUoz9cS>mECq<3u1WE}BQ6(4xHUieFE8-+DoMyEF%bq3-*EzVk} z;TzK{ekWHNUg64@t&k8_D;%pb))|yxg@%{zZ-Ad`?WCAxkHVb>rKN4wf<**-wB?(R zJSoUAf6h{V}X?i~}tw6I6C=i)~MMrQTJ#!i#lRz-@EBBpjcj8lYZWYSbm@D9g zPr6|b-kF$~hhT12kaG#0om$#JiaOiLOCOcIjj1nRYpKHVlj+u59LvNsQ~GPr-OJCs zWKog~iAv zcbp*bhau$diDA6<)t&xR!x!>6G`E@avhlA`6vCa-;PSjn0p2tyk;_^)@8TBE~THZ=a>M=M~$d z$R@Ua;dFc8`F1&l^*{rpZP#rjo?9QpI8%C0^0guO#zL=vDsfmSO&ZY_QZjvZVx*s& zmgKpHkOFgce$}Bm9(6fY(GgIH&Rl`oOYy<4906P zo=C-L1l>XW-fT!12{a=BU#t6EYEBv{K-_CaYUI0WfsE2u%zl0^TYIi$C6UzSs#ID- zOXv8rjXKfiC)eX5a6|Ct*LL1o6=9oZ9=pY*9IbhEwJZy646->nS%VY089OcXFsi2>+fl|r z8{-`*vxgiayVgQOU%Rv+a~tcQd}_;(=Q7cQ@r-~F#4hl*uXS0XNEG}Vsyyz_*)x4| zLYk&;(wRY;z*+-fZyzAvW-5h&nrMAp#N@iCXVgb4yl`jptJOUvV#mXssbVx`nHy1z zh8P55O|JO|wcax?yn<04ZYBydCVn5r5)m~cBA(#>U=Hh}o6L=4*Ylt|@`h<3-ANoV zvVWr5j$fl6%SZ$4s9gd*cFxqZoY(XBfWX6t(- zH?lJ;C8Fqlk`k*G2I{vceKozqHTyjlWG3}^^nRD=&qLz&C;SRfchid$x6TJ+ zAnZS+z$F9*u0Fvkz)XmuEtM@4)el7O@5SQs|5LUM6CK^cy%%&BcSzY!)tZ}$?Rf8T zD=h5@c1lBjy9n7bN-C1$WjE$Z;iMV2SD!CWw||ET2Ne5YR3P2_r;od_m{f_}c1eYF ziV;b_T}`xU^{LdD3`ELfs31S-Ors?G#Ox37h5*>2A&)a#0|}KNGP`PhPlRpDcau)M zN0W-2Ju&Km_s8k1yP_3Kv~&J$T<7?htWD9lGio>{vtrIS+_)S#FRXl~xn!!;2~qdO znhM}^WgM!@bMGcuna25N6k1%c)T@GPm{EYGu0{xLyl;F}_kBB}Lnm^?m_-0f`dJ~# z4|^Q)Hl&U#`pJ>SZRhd@^YG9_|WYmy;g$faGmnZ5I>*-M8piveb)00#1Cw=3cb z9dP&Ot7bnleT=G?NS7lymqO2w{LrT-c&;%drq33D+$C(!(POOMA!&Z3xpLfhxqIbk zNNZ_rm^6_Pf-O@6%H$(7a^BF_4hPzu*EN=bk925@gx&1jo2{P`IvP7Nf{Wo*n50W( z^+b<;wrPJm9=y@^8t+ZqNM9Qx) zD7rBU`9^~2;MPVO_xVbn=Arlky&4xvP8Hh}!a6tn+n2*T7BTB)OI}E_ju(3THtc_t$%^d6(npgpQQ3^7#~@_Y9%~%{W0c8 z#258(x(m{mRT?i?bY)`UaRJ}DmKOV_+ zvQ2Pj_uCJ_-s20`roh}aUbqVVu-;2F=ost(*{xXEa;6;2B=Qr6 zDEi)7)at>YBzWw(S?ub0A0WFYhhkmaakit0O1=r?RMzimKbKQoiS~eAWTV}(1USQS zwP~N?NMuP6RA_J$8givVBg^KDe3PGy0$;D-JUAo!HT3$R^uKcKmrsU?7jdso9Bum@ zdDBnSb8zKW3uh~lYC{LxB83*iLVs-0yEzqD>mP3+j-43IEo?Ens%MPh`Y$!@NhHa8G$CC*f$HDxko*UY{lK4#F?JX16_N1?bh*`>y2NlK#kbl8io|j9Lk3FO1BrR00+ zzVmEcJ0>@*#=}kse7j`7Us^4#(^1pR*$2V!T7K2dYNrbH%Jm|-Oab5TQZ~@bn8UmJ z=z0$=ye%Jny+VxE^>D($Ju8eKV7YwN+ggn%g(GS-ZCt?H#HYSfa_ANaz?gv!I6jKp z#y1hYhs!M&$a}`ZWb^lTNKvw|Bk#H;>nU>|Du$JJ&INk=`y5n~lAqG$`1y>nQtAeQ zyN4S$u}c{5*9_vVp)H{A=%c;MJxX^~!WkZEls{uXQoNDRdh|G?`DGDSSI74WalkUc zr^=Yk$|b?Cewx9D>?J3s9+aAn5*nyJwga34r1eWbXZ64u>33e8(wEi80#K*DTV1@z zCp>tFk`|`Y1oQ64{Z*)!DF$St0YT8qT$1+>7*jkNgS8WTKn&4+QEZw_Vh5-g9aZK5 z7gg(_u0Hj%aWx5*9Z|dh)QQ@ek@j}+pvpKePhk$KUTc(PEUqls-(7pcDE&-@F5wNu z%b2zAVJ%F*{FcuGS)#5AuhusO*$_IQu;c-;EwnF87D$>JKUmP(d_9?|Iwn!(ygZ}# z`kYpNRGp9J{;velo>ww9Z~(63eym}&8=2}Nb|ERA8@(l^H4)DT_%YJAA{^}EZ96zV z`g6~o!ge98ksu?R#GWYN8*en#L35_SaIz5Y$6Qihw@o2XV*crsE1`CQWbos#zZ8 zjPX8?b0JKt8yT!Fh>tb0tpF8ck*r2%y;2(!x$nB0mkj`qjk`x`!|Jt5&5XwrIH>{F z+VVGL!(LNi)s!Ksp9T9}hI=5m_jQstOF!+lfLOYk6hq>-Nl@6%ZO$XA z6k{s)T8P{#f&Z=D93koFTmI0gJGnbgjT*egt6F*U09Ki+ssF7$Dt(VUM<=|!in zIYECU{Ub$N`LahG1L#L4PrjZ&9)A3=J?C^edSQ%o9Be<(_{izu6D8VkeM=VS)v)D= zr*~d)l3g*CyBf;xhiKyEdFn1th9xG|y!;A({wqcvtpO~L_em3xV;Ax!{K^z7;CRk7 z0aXtYA4=uNVJP|2ar?Cr3F^|Xs-G@j@cofHZ6U|}pL3%ax!Khjf@tiLiXIK5l3V-m z&#yXJ_%W{ge%H`EqDI zvxci3pRJ>`+lSAy)!E~f07X>O6jiet{yYm{zyk0L+8?=M1A-O&`dfBz|H}Ia@qbhZ z)zydd?ks>Hmp5VmqJ)la74Tm~+Z`zC30U*j#mi9sAGSh8SZ?l>I?e3pRoyR}%(;ET z;fmM4DxnFy@&yJsj&v}6_N*DU`YoSJG!a-sP^C;-X1!ez zS?7q7e?LuQt#vY5Av=6jahoqOcb3%vh3`*Zqh0w(e{s1Ek4B{|H&cLG73^C{y2 zqN)mqzmZFf8Gepws{u@22WpUqZpqw>{|^*B2Es>QOE&m0CWJ)!-MqrW$e=k@5okb? z>@HJ2qGSpc+XKd78BBdoLkQ%nV#~0vUBFe&N5*9|(~o1KFc>Q^s_cGnHL944RpEhq z1!?B&T=_(`6H~Tgl&$-{yoU&>O2a>>`Pll&{TX!8{qv=zwjJS@>gssIlIT0e)y4aS z@4p>*`c4^L?NKW8#Gy=l<)@ZTjXIAwXK|kH%Lb8>C8l|OkB?LIDKW?cM-wp`vUw9<65!Vog8hq zv=rx_ewq7sx0mb*H?OPpPuJ96_c!i81;Q>>cW3w_iy;lIx|&GNKpU&+z5DL0O7E9K zzTQaHw&vnBeOVX_U+G;~HcY>u-ea4=PUjTG*f|rigb38UKvx@-eMh-t*#kzp)KfP6 z&Fd^vtvWgOd4e+c&+N6q+q>}smOVVw;w}1>{a*g@33$nQS_Ia*ef7@TrFKK6%9n=y zD+<*FUwG)V7M<(~Jr6dIrW;SYHXqa7mEI4sNbDv7nvEo8E(1aurxALCDRISs4G?)B z&Z*#bDXZd@LNTGCR?Fw10*75?^;6sjlszF5ZOFTVd9tc<)%~ufINQQJ?!$x)%Bom) z4}*}AW`Z;I7n8$UkWp#wi+eNm&RXd13=-N`h6Bhg5=hR*UNZI1K zF05ih`;St5(F#{Gc|`i%JCb~x57ASJA3eUZO9%kc=tf&vT#2`T4!1;8zTP5dlCz}; zYTO#h`CTzqGm?LMCRnS@{G-k0Ob;#}Au9=;@^8W>w@t+9%Z-GamyN?q_)i9J_EFFE z)ggY{->u%ZK%)-?CHvIWRGxM!_x%*6cTxONO|P6X+^Xq)#WC^sgdIfQ_~-T%=e-)X zE6Uv`?72E1zx6?`j<-odWy-6Kl6RZP?zuiShJK62S4&RaL{wm8FN{*(TNqP3UGATh ze2hga`hi8_(#hTI$uED{xSR6R&F3A8&OUK=)dOjOgSR<7&E-Dbzf1q2r@dz-PBrAG zO+(<%toB-r4_#-}$6HIEy(cN^wWi3N%;izFb}wQC*`!`4IyecwagpTr>qZg~Xf!CJ zWJ|vLx=8MBdb4uJ1$+$cf0`shm%XH^py9YL4QlA8#Bd#oi0p)sZk%eBHi$`Vdm6wz_MQT_FB>4Qf6OMy9k}ojx zsK`fx<>N23#MSlCdIAOI#p|WM=8j(V@k&uuuZHZEML>_Y4pf+K$l^8*`kh}Vx|D#c zmLsz)mu9K1-WWa5@b|h%omuyF01--G8)*w@{e*A}6>wJZ-@{fOLf@bb_h3#4=-=|^ zbkSe(r`)q+j>TfBNMedm3NH?M#-&d0(z?61V`x(X8N-y|MbQ|EwKAJ-Tko^%(BlKg z*eg#V3aHt%I9<@vW$L_wS$529U998Eyw-nbf0pE3GG-y?@4Q*(4g%<3MB3|bGlDR7 zmsQBc)j4i!Bf4Sw6+8AewUMTir=$&|+B?HpveZnquh)hK?S#`pSS(KQNOrwb%xWKh zZr8vsLdq7+O<`fvU7bXwttXuh9H0YUmZXf`y~dUvwp)(E8G=bbD*d(t{w9_OwA3)? z%=idt1#C%jBs8Hba?%BrJ|PH8q75_Mg_?-GG17%|Yg&I)ZV3HK<2$X4vz=C#bWp{r zd&8oBIS0+v7%RJvg2y-YhF+CDd12j`(!iFZj$Qx|Z)^=+ui(+>CVtNwUt#N2D>1?T z*cx1Tl@Ip_Vy{_e*gST0v-44XpkX6p!Fb}cgZ}WIo9Lf@-OheChCFTymDC&P)M^@xVwDQFu+rEc$H<~+rd2@5t_vyK^>lC(Mn#0CY_p2-N#R5B%}lG zkk8$l48EjdK-Ev0AUB24Wh+MpfItZ3j!?DV`Wvd73A0<*-htgTe8=MQ`^EYzUvW`k4m=9K9^?4)jzNMS zmgD#M?7F3VN5vySk1SzDX3Dx?F^-+8cx=XUeUIbS7mIr7bO&$U*-x~4brXhIk}$W3 zQ_JYrR1*XJkS!2VJ`{u(ae|kvD=DC{>59%Ty7lv101|(G!nV z57Z`5C<$zxw=^Mdp=tlDHwl(TB?@O|lMhML7$lWXb>TKS%C!)6*w`y7v4K2EU0vQN zIZF9zWQV(06sA%r%<4?Nb3e5;1)8@hsN>as+fV${_l)RcXaT zBF6-TIj1z9h_`;vGn6G7;tctdvu?!8|7iISvvP&vRr}CI>ke~4Jt{wPlpqXa9_dnJ zHwL81k@ze4;QfJCug1RWXXf0xuEQ}kE~5f{tRAa2x;}Ub5&ynki?Op}GvE`HHO6XC z>2L$r_9GYfNUxzC+xX`5fp$6JII@x<#5%_I8Z>$&*TY%g%?a}I>YbV?MG zYahctxgY82E?pkKG@ESvBtpbNRAm!Z@WFx<{8(pSPv7h|h7fwvKzUG78Oaln!PMx8bcRfTQHo3OrZxAAyxEBORpyO$xU(Y0i&OiPsX`kDSS6iK_V!DVpzGx9|1b^Xtw2- z`OYm%$7Udix`Q;!d2Y7i>B7A82)6C!KMH60Z-sN^AB8iZ9wBw*f8}sOpWXZ)6wb{h zalV_O zY-yviT3=V1S2|9PN}=wg*KMOisqE=hE+q$ZrapO!S6rd zjkHzcO(l8dW2O~K!)|u$68=Q=2kdtaQ;Yp}@Hl-epAE{JRkoUxwwef6f732rSV;8# z;y>`C9ehdAw>$$^B(rt;wcK&;^yaW-Lv!sA2g&r^5Ps5EheX}_ES6(Iay0FPBRhYN zhOeHz&Yon$HP>Xkx`#rRCR$rztJo7^p2--qvB9smJFG@eoKP!(%&%d&=XB_Ojhl=Y&fbO!Q!4Vh7{cuwBJW1zq(opI+E0Uhs9mupclQIL)OZWV%Az`tX=4{j4qnsBK5AeMtXjXrZel$q`8}b__4Dp&;9ctVMQDF`Cw>kib`*rt13*=c47X8o)y=AG5@VSkrT z+Q!!z%G))*81=nPr$)7#>j>oLhXCIKn zr;XczvU9E8Lu#)p9qBrY@kD|n=~G}LiI?N*W(PM6-Z-jkM(7h3Z_0e>24xA4U3CgS zdtR_xgNH8vDG6pIG4`S4q@GQBr=a z_0;v++0Voze64WqfsOro?JM4mHVAO|5hsg(1^7=A$D5t^^&Fbkh*I3i7}wQnSN!>B zUba6i-v5lsPDB6FFxhWzB5*&F#p$cm-l*pTI?wVCiO`>YsE<_FhHSt_7$?pA_E%CO zmqg@IeFX-smtc&Cuup79)(6fxHz>=u=lW}0y?V@6f$rrb!T}#;$W3Z^yTN+Fn!1-Z zB@hqpe(c-h0X0Oyfoc$ zboB130GUxMxmM)-8yWNaAITVL*B{bTetD5BHB9xGLr?og_uKeF6`iM710{!C%9CfVj={t&>;A zLEfs&8`s>zKSH-;Qf>==MnCR{RWemW(X0%Mr4qE0a6#B75(Y!5=IE-@G2_pci(7{W zdm1uB4;*YI+oFfDUQ=NSGjpE=fw%*s1QdHI-XCcreLo8RgjU_Fyq1G{J7~Qvr^`XD z8@E?^*?e)wUNONR?$S9lxs+)2X+l)MvU+@G-^%?xWrdcG46Iq<+dW7R6R1*c2R}8)Urk)utw-Q3nO)?y{VJ5cmj|If&iu|5{9Fyl7YAJ-mcJxX@;>5G!`~7=7d9 z)M|q5kE(KK5OLRz$VP= zl^`1p%jnz*@>7h+Y;xg)fdy*!9c#;&x;n&0dG9?Z630DxR1k-SADtedn z+x9bwZib37(O*AMC5IU5b(AL+$j5^D)#-C8$@&ijr0~_=n^M&t*H?ImG(p%;7E!(( zAav^5G`$9M2`Ia>xk2Rtd;oSQ>d6jn>)VsU`;#uOUxgqC(?YIoK++B9!$-CA;vKbUNGJgrq`EU)G+#H9GQ?PoXgNi9gD< zzqSfftSQjA?H0b$7e2mHnPXq<4Jw`}3v@Y2J3PQSzPf3(+|>7T`^Ld(uu9mjV=tfQ z+V}D&Hu+w zc2$Vr=68^RDda&RSAG@)Fw4lb_wWQ4`%^J8Jq$TC-&*E%r7ZS+>w4F+^~<-} z{qa;dTd0U%-$Y__sB`Q3wjB&1*D?7{MDh>6?dq0dxWh0(lN_J+pT9UG@{jn-4DD9r z`NvRJ+JciHf$|sk$O8NRbSJg*|8gg@9-MSr$nAQ4k9DJ)-B(Qa&Fvj}F8|Mu3jO0p z{Tl~)eC;dOf0v|5`ri%CX1sSX1n6pLa#&}7ntaytdsY+xruYY!00UZi-3B}&j0$Hq zf@|2wU2*Rxl%#5A^x9XJsPVgV5v#hy&|Ll`$w!!!=Y$z&YFzY7K9#fLzS78S*bVK! zA~i=3gm7Oql`R0ww-%@8TP${Q?3_hH*l~mddy3Uq>muyatpYMIV{G`Tik1V{QsDCk z*HX5A!9`AHl#rOoB#ojhwEuIjonZ!~$2Q*w!@8UEtLi>AHJT9LdOGjHRHPNoYtd^D zT8#`g#C;erVUemmUTN>v$&r&$@ueJO19x&xQiOQ;_KF}?l%4BbE2bSCi(lh@*yC)* zFZA6ik?}f=|5i$Y57u}G2|NKA4bLEco24igut>N=bgvz+G8t6%p94b$MF*|o2U6&xFejwj$?RW;% z^&nF%;KnN>;QO(kbroH0sYR%H^T&0~E?(iKsPZ@3b3p8?>bD0cwO@?{;!}Se+BE;y zbj^3B_bnmB@t&$(llT{NR=Syf-Qp%H?jKDz+?um}|8Ht!@omUac`zoSRaVkd7YNx5 zeNMrtj;1^qV%ULb80}$5$9+f9K__~myRQqUVR?$@c>33j?uMNr0D4rlp@f59*HwLmfK$3tiA1DXq0nkB#nVi=H* zd5qzN%oXP&eRyw7VJkGsT(5c0mc*Y?c3_a)@ZVPC=GtOKKs7Gd4F`|xcLeflF&W}L zaK%+VrY+^uR>@?I-dJ|-%3=5Qfa53Ex#m#29{ zm)CVGHImSEKHuNHZQm5r{uTy`lL3i0R>WLt*c3fh?cN>x@AEZ*v-xM3@Ueypf_5!( zb*$Fdd&aoI_pM3UsA{X1Lcs%SydYcF5ZkvnU zr9lbrvWJ#2ZeDcY5?B+q#sIO>^Q7{?xl3H*9aYAtZ#6peEFrO`d{L}#H|F@(1Hp$D ztR4E8DE7K8 zZtojicbm5pFr*3|_xis1VO@W)^XjCvUIS);b*4vYgVW(JzS78*V$9J?rnxMtiu3XQYRoVA^S3K*;@42dh z!_Irv&K4;rWoOBWKcJ@zmY!&YUIoS=&fT+}e32I-dC1s%D$O?HWWrQ-bx;Vssjd45FnD z{cN@?vt(1Gl81TT#=^YsoiK62f%8y2jNA(d?i$9;q41|`Cx;a(!gvQG{uOtTJKP*N zy4h+f+N8PSTpzu-`b|3Bmjq>`RR(qyyH868SYVdl%#5N`4IU6OVs^pAi`Wtu+?;8RLLacu?S}z9BNw@y=&RrTQfJ+=FX?_< z_{8v;C5CKE5&5OvF!}h6E$go@Zb#(h3~-hNzGD~zj?U79{RHi*virbGc-P(}<0(Ck zC6(}wo@nIm8q#?_;E}!LlR|xs#0L~rETWa`{S<78{NsBDLro38T@icFR*UwzlUqQ z;a3Y!eAegzh=lMZ8NcnCl(z{7%Tla7W8NKv65!=4ovLZ4!kyoZx}||eUUER@kH%Ms zeu`t1mjJhJR(_OzO_|=UcX0<9AZ^JF&i=6vXDWAWQM#JAhrZY+|BTWK`5^~fyp(GI zf03a57j8=Y)mep*UiqQ$3*5GY?8aQ5c;45vHmBJ4}MXvUr~$6Jf$9qf{AB)GP;VsN(a{o=^i{U4W!CVc$%0`k%qJnN|6%lnJSL=FX{aIfW``ZsR zti^Ry5#4H6J^>l#xZwt6cFvDn0%ma~$w!9w$j+Jme+c>X{T=d&>U#bOFom+-xmGTv zZp4rc_?{9Gvf?;%pyzPxWTCRb2F~fYDju5Qj;8%zXnXbY#p3_yd4dysN!u~@ac`;+ z%aKp1&=$Aex>EOzH?~Kji&AU9eW14}JB{isd3OEL)x3jOeY$I!$Fk(PMk*8M)^{Qe z(Skou0ucRk2XiY&VsA_+-y&CC_uKWn&OsFWKpC~4eA2SKYQ5JPpAUOX50&D^VE;+^ ze56wOYjp254~Wb3XQmy=n5E|NhE62Lj&VUp=DS7%G;{D^&!SMe_KK~~Upb+^oEjGS z7T|nD#m+cWInv|%>N1CV&8I01z5&*qf-@00%=kWv`R|<2@t#T>b^~O#*SXLpM31R+ zJGVxT*&WGMV@CzGAC}MeKLcWJiayT`c3}Hq39pZV4Qb*;CLvhH2pGR2ZCI~V!j%<1Vd`RI0%2;1u>*(_G&sC;>B-F;@_b2O7 z{Uilk#g^3gi=Pm%~@*WdF|T1n;u3-Ms`%an9KmLtrgFnh(A^!`m{)N&lT9 z%Ke>}W^V|7-kleY?BJ z;6=z&u)^*;O^d-G+w$Y3sLAA zZj9Kmyt1uDeP+J*;SAbzhI{DhO9TvjxWY)N89~dC3pzV>aXDgK0MkqTASH~-MvACs zpmQ~IYPh6QgmPDItImpXTOLk7toe+x^WddhF4|+%JG0LL^LdzgvRvW-XRH>%J{zaG zyM@}IB7^`gDzLG{+r{OFNa^O4XvYd#mDz5om zX<|Bq#=s$PLoZ~@^v?0-(M;Cyoc5Q$9lQ&L$xwi8Btk8sA+lqx{>ep}98FDpsFdP! z50hN39rZvG@qfWm*WHeL{ai&3b@!r%Q@=_n_+-10eoH@%Jo<$ep*F_vkEOtxAmuY#au#iE-DN&e_DQpr8S3h;0JOgu0y~Pgx$NxC-0`){KKO*p%Js-xp=u)sktel>rL(8BD;tuxIZL%?dx9l!dZoEp@0m4#T+fXabLD##U}=(JV28NWqGm!4t4S488muk?MUz`SJU|{gs?n=wh2F9Lv0i9a zx5O2+{+6FMbJqEhK05#Dw|xSgIEE&h3Y9P+Ad^59(y>L#u2M;f9Vac%#!Zv42OMg@ zen4PkeMX6$KDhpnXW%C;{Z1^Qvg~;Q_z*aq;xm*B?O)CpNZ0j<+Xuv5v4=+-6aG|Nl3y1V(q>?VDdPek z<-Naqr2={v-(LQ>UpvG(`;I#z69@n^f_9&~YJS|H{4qFpsoG7w&wwD~9aKnW?W-+k zlCmu0sE&w2Hvj&(J+UNn>>r`3Nh$7koOT~d=QI4={BHh&i=){&jE&-3bT=3uA<@th zki(tA4CZ`Duyj$(R#b)EM9&I`q=S7GEjo@Krmy->ug&A_vrs4|@bd?K+}7NK@nULf zWSf+j)^9Hek{Zc*I3Ov59_^#2kX5`3RVBM~`v}O+ks=vMgwg4B(_4zs0&=s9-fLPT zF%Y(Ow>RmZF2O*=g!Q09Djt3L$IW-g?2qY#yz{jC3qM{T!-o8{N9_iKd6>Oy{Yy}xuhFK`vo&po!MQy^bKK`pNO#mY%6@4J{Y z?NW%K-!S>qkyXLa_x6*<+1^ftEV#{g~#B zi8Wohc(QX1H^*B`28mXKyMd^r0I+k9GxPJ?1^=tYc0$M*)7ylb5G=F)upR0USX7Ef!d)YnRJ>AbLHf<;OOhE3I_r}WQ95@3QYO!RdXU*3uFfXl8B1V{7 zx_jpbd?7#+_5*g5V1LztQTHa&mg2e3UtF_h`vHW~{t+L}yzCWbXZh3ta;oZ?$qt_i ze-$m6_@c4?TO`k}$%e;n;TO}|cdAEkeMOzMhK{}YXWPF#yf|w1e$vJ%y_nUMygja! z_6IxUeV>kWv3x)4`&4LZ4s&M|k)e{h6YuEd{X5)1xqK_QBgn>@K`Kn15Yf(#_>z-< z!W&(rW$-J5wnKFiz6X|0qDiAwM9d0*(`fLqAK7{fdG*H`J9d|4LpB3LvES^3O91cW1wa z`QCv;c(^qc>OE(NA%fw3n1L`$@%_DVZZ^5IfLp~lmi$UkCIdb{zh6ZcGz8AExduz5 zMPhkfD=w<67sZGFDd83NzmxE4`flQ15?(ETrzz~M{hWdGCNlcm{pzbPrYb}w%jL%) z%lpT@u|*o8SNr%r^vMRdE*6gk}1l zx;v~M8K8!51^*nPcFnl*D*|F>zrZ#dA?9gUB|i8w>6@M^jnM^b%O>D88W*Ir!=YU_ z>%dJwfC$&yk-kMYqBVGzWtk*u{~r!{2&JbAtzb!^=kA=T`$oBytQU@3V``67F8HSM z8#b2CFKBbUdGi-=OfA1Qb@8{s_DqKty0n{trJ}@0#qcmDSBCILW=Ax12Tt<#wD*|qgGZ9IQ zfbP!u0ofmJ-Jl1w+G@H)Jp=(w|EUO>47t;&#dBuh*R$hT*NN`akBxO>-fIFy!s8k3fQr=+!d2k-(pR4i&*U)>nfHgWY#cVxgYR+jjC zoxOdtk@HY%%816irg>$4{~`zB0fxWu1z2dCmSp}>usR{)A#6ZPy8$}b)Rsy;@pPw& z8w@jZa(UCj$rTq%{G;se+u?6ZF8Mx5nSLGi+8IZJ{nyOdquK1=@bu^BinS;=RXo(G zh<%LD6xO)Ljv{!g`DNVpbfd&apXP}$S%%&%w{3ztdTXixal5*~a>z7%;d^r8?D^f4 z=?4Vb!+Xqw>uowUL4}uLFQb*u2#D_E7LI)N8<`}QPgJ;Z`15XE$q^1leF?--4ufaz zoYy*iDSse9c-kdTS3Uwn>VmUo_+mY4-tFO>h*Rf)qa<~6Ni9yZAEylrueuKZQih6I zWs-laR1?q#Y=kqTT}mAlfB9Rh>2BM@O)D>5xTg%^RKQn45;aD<5-f0HAlCWnKPj1S z**K}o=@-ydX2H)|UyJs$dwjG2iHCny3~rl0M1E;`;nOfrLU7=>dkhTn$*kLRoD*b2EG#6} z)U_r+v&}tog%DWmJ;H1*vSpU8W>R@E`A()Au$$W%S?1C-MoE{1A7ng`)mau=xcBkq zjjysWs#4VEu|0y;XTGi`kXF#>ElC9v8RT`9dpEtJqIEk{r3G@ z-;WebJwVonKDrl(v{%XTg(vRebF=OadO;!!i8oduXBVNSfnik9_E}W<9>SkKfT~|_ z#(0%Dr&3oVcPtPumex_EqrR>bHs{p52c+CJ488V{sIbJ-;G+*-j;90NB_xB!Z^@xQ ze?my;o`7&m^D+61gHbpXu6(7p7k3Udszu}SPR6n+U=AoJXB6}{g?9H0 z1vsVeVeskab56-|I-63SAcXs(P9Ej5%mv_HnbS+QEek~uorfQ5is6`Q*#bgmYrKXe&Ia66fScAFVe#myAg%(R zwLQ1KI-A_pa}zkj0t}Xn=f|+%Z)_|=8G1eVN#n>j>hxzaqtrl96=#-Z4Dh7P^xW*2 zYCSinn6vZ!Ks`rnSf%BR1HSLi$8=Zo-#G4t1lNRjm+0xg&VBp?NjHUA0eQOrBFX)J z7(b*<>)oT^&*AUQE!FNTagzlSL__}e=q@g)x`B?!tBjQ6N>UAuk0Og6Q|B&9Eb)nZ z!0m~Lkr?tCvWc^yof_PuF%~)x{@M6Ly<4tA?(rggz-FX>^ew`A_q0S8i$8I~JaR5H z+W5?e*wpUVH#WV{XGB*_7IgX@rz27I;tQe_W}`8N0jnW!i?C+55SoSQaw`&C)vYQo zlxzf83$rB?_6~TsaF*!vKpw_rNTRRZVKb9z_V$GDXlz5lklqnz#WLC{8zUkjQtO?G zh7Y2>gsL#Bt2$ATdt^ds(-<^qg?Hv=a90Ep#8KsSUPUxT^i&O|*42%%3J&IMN-I*U zCM{Vmdq&v8RCRmV1)}>N?6;ZiJz)`TV@dYu|KjaEqnZkvcwZC&0Ra^O=?c<&?*!=` z1O@2`NbkKSC<1~M>79V|j`SXtD!oc4QbRAHCZyc>zGtm-&OP_ukM~_xQ%6K8$TFiJ9%r(Fii2 z`N|W~(9%PV-ykjoSXVAG>JB|wr7i9Ru)FUNQ}cm!RTZU}i%+%?dx`o&m5k9DTY^Z# zAKA)NOGLZ(UWYa$^+7G*i;`Udgut>v!~WliS5wyj&}j;I<$HFI%LfcvN=hJ!1aXp9 zWiPl^D~jhi1vArQwjQe_e$YHPN%tcxp%>enI3?rqMqH_g3(=jmJK6jdmQv)&z%bh3 z!{2;US|+v8%E9O`5H{5V(K~5vfX6|f%V+muYx-&|G5VYHvl1S5$EW;~{$=&6M*E<0HpvgDj!FzRGfTq-E%{CN#Ta6|ZjY85N4qJi?KtPZjAJ0-@s zoM6u{>Dtd(E2!pFWOk9mCXvN^qJb@v#SRwFvU>q|tFBw)z|TD`;?vMH==W=g{MKIB z{H&Td&zO;X#HW2LLl9D(Th*@`q;@~N6!_3R7FlG2JfQronJ~@kVmKLR#R`eO9xtfs z{6t_2V2fM7DO$J6cvuJV%%~HB)d^kJX$%Fu>G1%a9zU4o9s7G=w9R1v60O7LFydbm zb;EVAmqol!JzFp6AD8nlY0n$;-)sdVpFfJa@u2=VH?b3Ib%1o%MoVbc!&kW-ue6W8 zP9>Jd%3duFoF%z2-1=BF?cH)R8sLwdLuFp(^la{la@U*JP}|&f8RQVh zE&+XDfUjY{GQk6jkc^Q06SY(y3FelJ^Um^5)L~_ltm+YglI^>Myws)mUP<9)d@UF} zzHlu`Kw3g$2~>&0goA&b>9q>}gvz+&xaag4BURs|Sl9z1rfWd4OPxDL#!j~b_r6yY ziNue@*Z)4^MeUG=_4;{XT$}yNG33E(;Go8!ROMK}jD+ojcJ!PYrb#M9I5H?FSlsn~ zhl*pu4P(Dt)_Fpj)QRhQlWF-kDHK$5Wq+GO45)*qu8DD^R8b~v{)>D>3CVm?mGVoE zimXDx6q@8)J!(51#m~Di8(AHpyR;^ec5y&kb%OAW5;+$4)npo9$~b|`Y;6afJk02k zt`=BYa~RQpsWg}08C%EQ-iPZK&CP{NK~X6Q*iz{h);$rmhJi}?h9IX}I4#?2tb`)g zz8o^mZBjK z9!UJc4!;~Gst0E)jat6<82kMK%sk$#Q-s(Lk_&5hc+rUv^y|J3S1o`6Uf)gv2U%*X zL$jF4)%}TQMa2Asuicq+b9(E10#U}?h1AHiTlE}mc+|Qw1My1Lw82-Ux;Ac1k1xAJ zC?9ft1Y~%m#EBrD!jvywSj^{;LbB8=1njwBEy?d0=q@vmwtkM96TkQB^j`3+KOh}o za@b8Td=b3#ccnd@B3S1I&mP1?ggY_g1A$iQX{dpeN`OIWIBn8$02E>h}Mpt$#2KYX#3qd|sd=31Y`Q z3DI;bUiD!6<&!jH#phsQLayv#=N_y#et0xSG-nzAD2|~kx9=q5e0gIo8Pk3Aele(r zWHMxY0*g?DQ%sbV|9Km#I$WlrxzB}s1Jie8dTAQ^r2OJ?V}3?W0vNt63wY0aZ#T<% z6l)Y~qxRL_jjA4n#57M%)TN_yAQ*K!I}e-8Z6XpQxxwTC3+wFN{<;8+=%vg~${duu ziTxXyIpR#%`2EzLUT6KW3?fmmAPY=A5(ND9c8R)s$V01@`yM4Nz?pb;*m7IULvNOP zaTFN*jA}VJc~b^9hD+pX+ewgngblR{yqXJ9SY_?20*6$y78%-vGfTCDh{8ZtAdhSM ztcT^Wud>kR5dF2#_;w10oJRBmppJhW5J_`!@M8VX8o8KZ+ z++9|862^bL3TF))^k<`MJCxP@b2zbh4N>#9d##4e3_-^xLoeBNucR!?Lh-aR;@*c& zPrSh9b8GsCsxO6H7U?x@%-|lx&U+ytG53Cj5pt);x&u6Q6x-;RQ(7(&Z=et+)mlIe(xW<52LLkN zzRt6XM@A=rYHkOYuyV<p09mmWx0=V^DI>Ez59 z#9Ix1eRv3Fz7z&9=$~A|YO8Yn=+pG7p7azQyHOKdP5QB=7JZIDGsD1SQ zjw5kCv)Az8WsC>GwnJdiA>`+5k~}N==-!qlIznR1$y zdFQ517TI@8BV6snXth0If0?iy8uWX({?*A>-VxglYGIycIR^>>yUXJMPB)Rv_eD?0 zSV}orYz%h;u3z~dzt!y_J){`7551=!_PH@%vcoUm02KP=k#FO#0B9Xy!N#r9lh7o+ zpEOp6^aa=E%L&n$X9Z~^C1!|cAf7UfcfT?N)RVS@&-T*v5%O@Z+yOninpvz~>!uoPK1I%t)YYPMx-jZ-&wttv*tOVb>BlH4 z3jn*%%POq6Mq>3|jlAcMJ>RxHM>H6CnGZR_IN1E|<*i0mM!gPa=;5tmuRKtHyxrD$ z$)G-{MXp(^q*VDRw3}!c^!m%b5QlKna^mz5{?er1q`v$vYYa7ChAR84)Py>GA)(ko z_LpXaTyz}bMALbNO;@_AO`E=h9BI6Ez!r0XGVc748In1xCVhthi+G-=I){BYKa+7o z>qLQ#BN?O}Z!2uBk(j`mndM^N3~M}-?%~ve7GSG#WWuvy$01Jldm!KLMs;P18dGzLi?-IYsJ18d zi%Xi_^$AXc9xosTVVL41rB~)gaSWOw3yl-?AhI}fkm)6J)5v@-Y~p?}hV3pC@WS-v zT)=BH=`-(-k77`2Bh1NK@s zUjmxbD+!WKONY;^IPdQO%&#IEtRF#k{UQyuwy7Z!>8Gbji~B{s#MBUFvbk}O_DN|W zYt$)6Lj0}REf^_*U8{D^&cx~;M)LqB@7)rB*3H|Amvhw`%TX(K@X;mxpVWSzil3~2$hnhW@uSS<96#>`*MHa;Ll&)+>R>q@)+E#CqElx zrJ7`y^9#0#7n9l2nk10Rm?Bn4(T_WM$QPoyEI;rDE@V#gQO{n>KkyLsax?S!?#dd% z6X4b2FBU?fvmLOUVR-My{prW9=Dg$VFmrN;)h~;fsprEd`#%HUd!)Nqox?sZrq0&x zGzv6uwLejd2DRKh(GP6MF0WMzjc$oQiP;{kLo5gFooLOSFPf$QUTZL%y%wv4^&DHY znI`uRZ=Q2i29n(jn(T69dJaTpRdWbKULcf^(M!K;4S_@E}XJ}2DiG% zvx9e|Ao+vw>YeJ&HPE-L`kVRjx|g>SUg)HS@sG6F=ym~FE&EM-lPMJepy&iR0eEDi zu_HY}wO{V}et6Ix-deA_$RG>gTRyQ_m^irE|NCV+Apv1m;&JhtvHyJWqC3wa-~YR7 z?3X=a*kWSY(;v3a&VK=Xs%!_qIs|XJ%EH`{=%Wc<`JP>m;jrZ#8kje^b4#5@ti_#GyZID zK_7A7TCXEwu>YdC^8>eT*bDU286GR}jZrM>_=T4aF;zZwADf0pu<9mhR6b~Oye=J+ z&`gA~8&^auWHBfA7#qEx+(go!JFLA8F|M$^o5=>|(DWqQV^sO^6? z5-p|ckQap)m4O+ck7Y|-19$NDaC6dI+H~JZYHyQ%SnkF+T43cxH|AwPQIqv`epo?o z&?GOohSK6FZ+HLb^6By`c7_AB{8dG?~VuNKoh9)@V{^us3w29VFqz^+|cs!6OH5CVF1th>TyvU+IVFTg!V46KD2NJr^ z(C1Fm=ILwyng`1oSyheO0o(b%yo^2i(B2(}wET#m$Uy&)4M*=Ob0Wj1o8cKBjMz=p zB;bQzRZ))-xf*$6R-JLS*fo-Gx8#F1hKvTM0sB`@i6O40nD^OsfKWuC#ua2^^n6*0 zel;=yEKe3BIu#t-OCz=e#ya`3jx-9zb>9)(W+DP9%k5Q zuVryoUs6l*4R}Up(o1o+^1~u-Px5Q*QmDyN{(Z`oMTAB^eW3ah@{*mzvEuL!tin(f zm<#h=zJyeli_Qr84_VfJ{VUkHcCn3rW0fTxMrV(+6b0?LMD6+Z}sp^T>JG>U7 z2L0)m)l=6Lw9xZH%Dhp4cd4Vq49yL%b6An>8(ERZnx4(nfTF!O{+C1 z@mtlu%P15^U&h3>wr(_R+Ll5Ljs;v_1G_0>b`5dyt)te8KB*UKhzpk3XR@8R{bt)$ zpGTCc`y7TAtZM^CWC(QaT7aVVA(n{jJru3#Jm~Z`y3gc_Du2Crlk?V}+n>JsKUM_Q zOv94sg%7lS9hvt9KE70=h`%Ar1IURUDv7KC{v5yH4-@m!Dki+y|28%a-NQB1FQJH9 zL(ErU-@Oz7&>`eD%JH>GTw2EqY)+nxZ^;f{+~Jd4SYUo9PiKsqbVff6Ub`)1lDNI3 zQGFm*YDyyR13r@J$?f@^9fgxhAg5V+=sNPPGdl8nGOE64wkf=*3B@%eHY_%0s6g+A z`&jHFuBTt$en3bGO)>Es1*As*c9<-5`P)+x{4@buPb%S+N#;*^J$-?qXRSw{ZkPSO zqS*4R{u1gwpZk}2_H-;;Fkpft>XvRY%F)csw6kjA6)ap>11r* zE4_xR03{7^T-VE|b*>)%8THT5Zr*u#ev+j0=0V%QtkGd9!Td6 z|8jZ;cU}jrkn_$JzR;i!a!0+5-Yl{xsd-Du@ja2Xny()tI&Xw`S@1eTM7nqt{JoD<#L1VP*`I@pK+ApFu5*3z!CehNk;O@1&gk=A+HVU?W~W)mXKpKO zyk9}ZeI*bzIFByfcqP-_V{9!mQyCq5fW_q5iEo<7^))y-JxK{H#?h|*AWW4z>dW44 zRZ#Fw^aVPv>8sMu1jF1r(rj#}e>blusmeL!5}d7#97TnD%%X<)yHMIJd87GAf@$tv ztnJ>X3D7kQZZ z))e}{ zxa?OOdSDxt@N9AU?q}Xj_>P3OummicRtF(ogqLSa_;`0ig zxAg!~V_LhI=5zWEG`$7xmeN-{N_?0jnmK#B&9~-p*Zr?>Gt;(>Cl&5LA3chFbI09Z zo9`^0TTECXV?EozGC6uM9=kf&_5F%+ZK0AOYGpKyFB6N)0=EYcI;781%y_Z%KXxDGwTCk`z#1fZ?9Kl{%LguJ&Gpjl6fgqe6h8NB8gvj-bExGM`|VJZ~qo<><~rr_Vh^LBS`{!Iywf z2NPN;#{v>~V=awCj0ZvW0-=rXSOLmhJ5)ONZb$*SXPyB|4Bxi$<6g-y{dMozT(M+D zf;JQ*W5$cD(l6W?W3od8yxQ8@^d2eeU!bC$nUB@a2N-@c{$QLM4tnDwS^AU(i_8Bq zZ~vKiUy*2uvU+8~7~@th3oEPPI2sJ-4MoT>0Bt`Xm&_!YGf6@6L%NK+wFBYM*SD(Y zJ_31~-Wt&Mbf!w2?!%VZ)IBiyc#4W)0-0huTm8DNFs&lZ_Z*E9q}u7+v#TxYFwYif zP9gSWbU=arc|(aQXHx;MXM|73{GoS9xIcWly{n5S*LwP(Z(tS>7@h@5-p?f_CT~W)gzrQ8BRI75i8T!eH$P?C=?kYvMg>HS8-w0pIT9y%itd|>Vc53UzyquZDOkR5 z=KC=EF`o>@1)_EE`bGMAZW_(dRDzYBl>ksct)dOj>ra0}-6LPYOS}k7gzYRy@B&U> z85Tot4C=bDUyEAZ+D0cC6LMZhC-|d~Pp1Qn4YfqQyePMAiFkBAeXvGkO?2p3ye(Lf zf1@4r@;UTP6Z^Wc8R9)D0=X-l*4Hv8sSD#w==8eTY1d7X7e-Ql2<)csae`g7HE~R4hRaVM-XW$qVdW zS?X)WgW~mE^Yi=B#&W~IA7G{W#V*MjT5fVLK8WQq$$%1N6z7bdkmtmepB5&WZ21=i+j6 zX?h%w$KF)Be9LT7mN$9?wghVBPTzGE=;rCaHZa%(dKte~^mR?0rMw&h8NN$k$^P;> zRnxos=A{fIxEwlBd~nU6wpBZWx%A)_U{m{07Ke{55uARFC9DN>BkR=4VH5fYv3+np z_N!oU*uCEHo<;`202|b1fY83NTvqB9AWnjJ`}U1h)Y9_gQm8~2Gx=#J+f%>?r0p(p zUf~248M}tYZ#tnUOxM%HbrPa4$38SgMZqZ_7)$-8ps>CWQChsU(ffm1?mk3AEn=994 ziG;u98@HxSz<3rxtP~*8-U~EO7fVwS9W(GQ0snK~ibgxY9O2OsX4^MaD)u9<>Ga@+ zlKs{x1@YdL;kcLHi(ubmH8-%Jxq^UZ+o`Kk?q=s1yyn5->j!z*T|@40N3;2GilQ{I zmQP!WJd^d^o0_21a(Q0AW=)^H{;WGo4;@aFjYEiBr@QCDc*u!~&}ehDG})k=RprhJ zufQ>XRnR_YCBE>h9GJPd0j-{{lSCbEA~`zV-@E9V!NJUrun{6?mJ22ALv>g^N$5fx z&LJ{))Q_g@~u+ zMd$ThS+Ov8$|_78>N`3ETN>m*tmK9ydh&c$%oVS4<=ZkD5VrmC0}_MHD#sOj7WY_w z8epeJEq?V-x)tBb0KC1i@&h9RBLWlY$JiQIcb_+da`-3??L z%@|V@o6NVYkpVD@rUU1L&x>+_oZzp1eNDo*Sj^M3OSJo8^%5azvs zM1SDr{R^PK^_;Ho);N3(t_24_vIvS=VGHUqFA~JH`(>R68{r;~v*!-wD7s6%36Q$z z2J-&rJLn8d)hFj~>Y?@wE>;LC$qB^oUW1+q3ZLS~74w*~0lJtjT)um7@)8%PBS@*b zZ;2eC%!+*A{GJ_z1g<8k>4t1uEh5V$!FymPVe2LS)4Y7ehHW~BSpUW!e|O(@BP(bi zrJy2&Plk5^@9Aw}hV><2_JBgM6JqXxsX$LiV-kZMiZoC(ri-<^{02`_XTdX-egu9* zabaH0;rUqoBMFJZ0gnUqkypE zgM6b{S=AbBCs%X-G4_opkk+$tu!5({!+e}X;;%S6m+f;}aT*uuE}ieDocC#ypgS)Y zpDsO7oP!iLWhz3(yYa^#h3qMkgWo_+$*kU~2>_0nmf-Yx5FCum!JERhRmO=a1ZKd; z8q6Y1v7OOd#kzf2<4H1Ty{M3RVt3vR6!E=Q!f!(Vv>@(Ek15HMLMz@0$QFI7#MR%r zTPoZB>x8`0v*n)k(y9>^eajGybzv?FK#ozewZ%Mw={;)`dl-+a^Z(!a1bk4i#)~H? z|G&#VJ}CTE5&b{=Eq}Q4?_Ua(3#I8^t){@_Qm$p0bGLE;v??>v$6 z`mI{+pEsVD%OfAQDNokH&OK%PnX=&+MkhHTG)qD{aqJNj<-D#1T%<523R}NmynrZ6 zhauD=O}SHU1e!GCH%<2lnw4{Q60pJBfbcMY;+P(8{P)KEP~EG?st$rI>m(}wQPDj4 zG#Wqb;WBgIrlN2M#9yhR^CGhCbN;NkUpWDp9DSgzJRgBzQKK{HtEw*jYz~$=<$mtR4MyOe^y_p~9 zvAg^7oH9!|0y@sDqc{gc&H1VD^&GV?jzCw=#9Gl{X%@(TuJS##kUN!ojT%Ai%txo5 z1Z|DY#MkR-q2l}2Z@1Dvnjarjo)YPYrBZbA8XP@P^jRii5wHH{(UJD&N4riDSFmN+ zr%#va{BplpAro}XoRVXVShAM7t*9+EH7MtQbtCt_Fq;i=I2RJqE_Two8K3wWHU-`# zmCw@jUsFE}XAO|ea&fl)q1ZBptJgpF6rR6eby+q~?&gu==6k}o{ha{(atl3bp8Z=e zB#zhfRq8nr^P33>nj|@kt+B)v%NC*c6(lB%yE*xLch)Fn6bUyuK(tIARxZ?^k zM}m~a8`a{Ai}rAl&1c7%>|p_`?bh{<{5b2p{-{>wfxD^9*%QTVYz+k%jAZpM%NPxpy`LCqt3)nM?GTCTqw^|#w5L?Q!36gT~A%T z4(-%;mSY)PDI#{dH3k%TdQ{@OCjeRBwOU1_et+uZ%o(KKLR>*zMR!o*gkx}r>SrFl zp?Ki+I>^t-xCy-05d?&b*c7neE_F_Sh+en_lJz}!H$Khr)Q%JmtmeR}to|vgvU^c7 zb{DLbEQw()UZHmMgBWufH>A8~^z08f>RNZQ^dwL^o`l!<0N-4yC5d7=u@)L9zC}=9 zccu6FYWZk+RB10M*TN^<$GPxhx{L8tqaned6$xDY@xAVw5ko33?2ZV(`IYDK5Adx0 z$8Rmr6$FJHSa65qYgor#@G9 zB{vw;Ts1gzUiYX%ox1C=o2 ziNLg37wrd*czf452N_-7Po97Ah`BAhUfl3BT7O0A!I5lfv!TFa-yd`#kL_~Jl8Jh* z6a`f#lf%tX??yfE=NQM5!FEPZ93-{UPWs_tljr!`-j|u}qA4$1o+2>EVE|xEP*~jW z|A^iMKjM5u?8ki%guPN2{=(dzmDh)-OKkYE3d*A9lI8-~K`jvMuGdPMy|UHD_@ASF ztm6|L(#m#cKCZr%0ntii)zQqBt6UcAmd@+*94A75`6=+t{(6hTE7oC0Yy+EQ;nXTK ziB+GhxrWx)4XbuVE!rhQ5fuHvnRDAw;OPy064c)2B-zBye*9YjL&3+7qqvv+b~;{Y zA*NRP!?2Io@axp16fWH2kp4-vn|a=HUS6Y_pV2-Qhq8J90P`{D0P#> z_8&S`T0Z8gD9g+d{0@u`V)fy8B3$~?BlfQ&qLt%Ga#~MP>Wz{C`2fRv)2?4&>Yez} zJkQTg6@$O&42Lp1X++#+xf-HQSQfYB9H0G`d%t`Ko{=0J+b&1rvZZInOqiVedUpgm zq)T>AnE-dd2`A=TB(fwF_=w3u6rY=TFE-rGHSR_^?gxx!T$PnQR1uBYTietXswvuN z6D&vr%b2ND1pL;1F^=n+CU9|7Asv=V^6j&mGMYT?r9Y3ps@HcSo9ehX%mr;A-JB*$ zqK7#b4+Yci(d%O#CFXkbjZX^iHk_fbtw_onac=}||flV?Pk%ZQ2U({J^ zkqGLCLCt!wBRoIhL=P!7Ui{^^92AAXz!Dgwn_2p-`Z4Rf#}E+oAcTO{XaBq`!zyk| zjRUd-GtS96@K4E*qYD2Hf$CbW<&4JNQ$<_(Z+DM%y*PqX3@yDlVrHZW5A*%IDSA*x zP0Lff*@#uQT=Q>mNLWw14oJzkRs*eb|)3menRFV2w@355Z+&dZ|h(ZYWL z_V<1MAgq{8iaO?&B?805*nq5;N+J*(TP?g{89cqU=wzd(jSs1>F?j~Xr#UR*W+zN3 zi<2Y8P*lYddxAg-8aY~L)`hnP%J|+9mxlkOpMW4yIz#O6V$))-NyS3*U#6v35oQjO zm9s+q1;AN3-?uq0qnlHlB-R$bgfjsdZ58W5z}XR0!3UDBu!V~r!N9o1`9#R``R|*l{P_(YUN&q_ zzMGaW(gH!+ohx+lnAYbp*8+BLVbVRr;IVzi5d=Ir?OoB@&*eXBEt}8nWgWM@_l)F+ zpu%H#_KQU0;__w=N0WsT40Ckk=1Kx@)9?~M%P&* zuzU2UZP`Cmy3Cg2`+A8s*#2(io8swu*nPt)BxC&H`*Ikw;gd(-xh^_yIb{NPIiLhr zL=GaBw90~}IJuBcNNsNJM9a*p;;R!44U9~#@TGm`3f{`|cT$wcZvA@^BWzec+(C88 z10K1VQqGA4VlFOZUhq2n3VW5Cc21L#saVYdSm(k%ee7zlZO_wkZyPgNaf5kCV6|m< z+CM)_C|MVbn3}CiecxYJzAa4EkAQzigql=H^4s~sDW@VYZd|7~GtNgoGm*R`w@QCQ zIp_Bx#(QNon7nwCjfhR!(EL*(@Wo(GL08-*IZftO)0&~OAMI9em>rT+9$O&NvCZ#F&iB{~Z-p6F zr@fr$QH@&3m-iXB^_7U|?0TRUANj7ri=?-(2xj$5bNCsl82mm-V-0}Pp^`ohzbFG7 zS3;(yTU;4}Asn$nYS}r|JqxjsW&iO6`{^R!iljlf_$IX5r=*aXERfyy-m2|S3t*g$ z!-EJy4KlTO)<7UG5j2eOGYa})^BymzZ!kOD|E|+ z)BsJ~i^y<9B4&EuqDhXiS;nOV$FzH$AV({!!ak2;;4aMg7DXQ`z)rZgTtn;=C%e)k z^cH7YepxRDjb5GpF)*U4TKhnC(kJ#_EHGTX@t2-{yDs|4KNms)S19-<^62HE9>?^? z7ESKrxVTvyeV7mE!MncB z+Bm1S_m~$LLsyvx^)B?Y`Ej$Z$3TDWas{~b2&J-aiXl)TV9I!Xk%7PCMIBh*%1-;U$h@0FBJ{hurZT~u@8S#%(l?>Hdkl7 zongF#rV(AFlnR}TIBSqCabcj*Y79CVbsjeww_nY$@@Zc4{k)6FXulEz@n`C2968J1 zvg9OddHLSJ!o|4oU{XFn8c>xaMOqnWwZ&+bGhW4=wg%VdBQ4s`VJptRv9Mv3`n?Ho zK9JaAr8M^#9Zt z@EcIc0-6DqrGHi;W^aj7g0c7WLpLV6vPJtj0-j7b%v}5D2QBqCaPgON$Pg0n!tIzs*B&+FE_{CehkE1G>BYPu@Q{q?k@-timX%m#t*TG@F zk~SS9LbN|?P|$J^XjL&^;|$6CvSIaJzHN0z2nKNW=MlFYJFiCUnnu3umh2fr)=a*Q zNfLd%wN@c;E8NE_Y@$rgJK|(_2$}y1=S*aYei?Pr`(7&P$UMVd0E6T=@aYNh`B0}A zG5#cb>k5IV5UC0P3^f|GSUJ)wRCQl)p@~MoW3j7DiL2~lEtxjkkfXB~Lp}`1U>Nm1 zQ!3xMEvQdit_F5|g$B%07K0$mW$s2r`2)WUSN&j6y1QE6muhI~&d$zcz<2Zmjjx*r zr>Qg9<=_#}PjpQpP6sKqaajPqT$Z?dGHU8QSGGZB1m?QRHGaajZ!xJcU z9<(!#=JTM6+CPGEJ9ln}@Hh@Z&=16PXCqobMY$D{u& zZRZZoRu!j+Qftw#mga_)4;;}nv|>LuGKOH<`>vR!_YAk!Mh{m5B&l=uzkY-mww}n$ z>4LJ;L0RmJ6js3dj?h5V5~BNT>q*9k5}M7sVVNF+4$i$&#-Pg74(`v$eiu73K%WnO zfKchC0=M(|`@JX9%Dri(+Y}!byV@&A51vpyn>Ui7@{UR8!&{%&IhSXhStC*C_QAGc&gJLPW z8BWs!pKsIEH?IuCI`cQdeHtI~0wM{f&CA#L4hm8}-4hky{3kbNb}{(iTa@jE<=qcC zHj2vg5Te97Jh0&wXYcw0!2l2Z2Rmge+h!|6GTy%?K=r7atp2Y!m}3)7#EUlRu%O%N<_Y1aBvQt0=LzR0Y!~M=Pm3;j+CUC(7&LkKq=TAyUlg75Yw>QTcNzOFx@6#>iXQn26Z1M9L6N^Vk$p3sC16nbOP zmUl<|_RId0PZ5ryGvp)4X`i@aw9>Uw*6D>tnTI(&vLdt4%QJmeRCcnx|LrmVLk%7% zXXE7)E*ctVK(}$TM z(mjNPs`c&qh@SN=8BWADg<9iu_D+Du4=PTFxSfUnnSM1IE>D+R+F}xAlP%F_ga{2MAbAyTXyl8JpRXwDi*itT1Jj)wj z!;nrhs(=yZu*iX9>EnH{G`(J?FU)gt&u69LArXy8)FES+zw-$_qsr^Yt0 z{;RC?4@D!Lev8_hht$@Yem*mt*dX5Dxhgx!IZlOHIWc$$r`JIGmrew4`X0(m#+Fom zl-mYaCj{NkA>bZKtVrx(GZDFdV{{CN>RnH!-ivEa7Ik%x7^pw>Vw|v2c!FW&ND^wN z5N`~4H!Yl-b|;6mxxMyG;==)zl@4)Lta&(bN~NLVUIJ7&;3r|i&B@gxZ6NyKKWpi( z;!AJH8c>}<*T6njDm#fPteNZGkTY+8i#7H{tL<&CXxB+R>2zgBhtJ--WM;p8d8Qvg zyL73O5}j2x#VVvfugLgu0FY!k&Jb)@(HH2bU1j~h0`PmS9)g$xM0ZU2qQdvyh<+Pl zl%EyRN$^V}pYVZ&Wn9CKNBZ5ldHoSV=lUdd+gq=I#uV(T__<|&iqy&R{s)^*yZ!iT zaLz^HeUC?AbJG~CPb|`$0)TxSb>WMah+=ATd*{0g$#^0?V6n5X{`2qx>7VDJJYgn> z4v-AH!}6{3=Bg>)y)M&7Ja?N$G{0Y)zRL8lQiaEq8}n&oHaNBWDNkE484Jr{Y}i<& z?1MiR1BG(83yluUA+c3)0zV|IpD)Ax8(sG9L-|h*gGz_|6$r$be%SrGp4GG(y6tRf zd}ql@{k%eI=k}p^z?t)(YLh`EAEwu&yY)WSOhpNc?|Nrv<-&XlX#eySDoQs%BM6|b z^7z1Ua$Zr1a>PBLrUWtJh`C+`AU@cNF}BLn_Lp<~od7De+&6)|XMH(^mF80-Q_t9E zbgta3!#+E(Uk@HHu#?>ZxjtY`XZ#sYY?ka?nXuFM1K~oQeDc%&ZonBK`)^EZDif3}?^>TBb1*DGo4|MSH-|NVYJV{~s$CUb;Mxr}} zDNx@3#!wP+WJ~#}%ExafBEr^l$mkKzHHGRNS$E+4b3#keJ^7{;=3*AHV%8A@Nkpme^50#ykFOG+ve6E7bq+JkfRY zhV$C2nV9Ti0~@=)ukNbkK$&!ZA$S@XDlwV?>HYrF31%tH_T!yDB0{{W(! zj}H3lGN3ygVfmuQR+R+L5@rvn>>LDMu>QD9aYCKG9uxmlUxpdaBcom-FO zJTyD#sofp()ZXVDjcfV1&QRl_9AYV!jC2{Z3V!HdBWiQe{w)o?blr?n0630?q(h6`le_X#m%pf>nFs>qN<)#5q$@%8id<~u%o}qD9)PBh6&8KG%Z}D1M;6^`3CEx zxh0Xv$iYN|+jEW*Cpsqi;ls5fDmmlcH<-22z;FmYKPM2 zVF6;z%9Jz`ujKvfr)NnP6-}FtG)<6F`OZJ6Wc3jV-!C9=zsK$N{BfJUl2Ou&xGzHmoY?nK57Zvim z#UbR~uZSW+iUpOVUi?x^?evqn6Toux+mvXy4Qsp!9K8sypTKm?VSi4S2ndQ>CTB>O zNPQO(uYMM?%KTg1K)kgA4H+A?6A9ErC}*wxG8mQ%M?V)I^69nzSHw9FDlgwOgsCyH zyBzm2%$-+AN-&VJk-y7t?SlW(?NN!{g3FBD@sWs%?*Q0B>9JOF0Dd z1S1ir^+Q<-dMGfJ5pDh-NAJ||Ws%V3onzg&J2t!dXR*+(Z;({_IezWnFB|*HNaj)8 zo!@?OLi*li?OWH6Ow3|Ni%<4iGG+=}3T-j z>MF&T&X{4NACGe5j|Y{Ae1f(dsjmZS3InHX($XYHz3`GUWw@@Rd9XUI9&wUOO@wVJ z)Idh1i+`q+2i+O8PubaT%uF(pZyvO54N$TK`~>rXHzyBmX20^0rZ)_}ViOp*?mzT@ zb@7M!?R&f7PP2T)t5D$A;VV`XaTQZMhjl?28VZL-3wK_=fAkkt^B`oyCtU|2;)67i zy4~{zn9qe9B8ENkEjRYj^coiOAgkA-T6Qo&UtFk5$ zECdLV)02#(-j;~SS^uzPDZT3S7R+=al^k}!QSZ~r>iM{;m?HmHM8ser3^IbS(5+mC zgf8tKSjhoCLc75_n6u4Xj6IJB6Kbgr<`Ou}tmgVc;f2sk>H3Z_@>Y5e3R$Nv z=-9DxD?=OaC&VW?SC0@u5(G=&QIxbdg_AV%OLbPnt%9CVk03k#l}>cR`vKWGwQD4oeghUI9e>7yJrz)wnK+{3hM-nT-nO;$F2oOu)zbT-;A`J z>9A$;oh`7AES|?;l*?VI9s5s?t6O5%pHs{ z5izEPT!eDJl>%r_a8!Bln|EG>*H{&+^J6P>Szp_*JHhX!_aGk{92mP0_rs`8J8aQymf=x?styN&&=;VC+DFkoW=BNVUY9BBsLym(uz zTJ?@1#qR7cuc_J&9V>^zGO)myS1cH&N70QeiE$Ad5zjE#3loUrbpRD2k@G!0it)@% z`#3v_x904rNU zfLPOdk|0ed#E;GRsl*Tr3jOD@*9%FWgU2)F$P4Gf#JJyQW29!{YiHL4D=S zJ8)^%GU2fPnUlOL3Ih86GsOP2 z8c4jmhxGRTbKY$F;!)H&>qAkZq(8T`qNAE)m_&sA1?cqZ8EL}Gx?SxnX0C^v>e-q` zs&(P<4R87nLV0lGDlbQ@QU67#imb9Yn)=gC8wW#$UHSj;2GW1OGQ4?&KvxKV1paQ+ z5XEm|scnq^JY$v_Fr+>){?JJ%5||ewJV0%Jh zdqIl7 zDD&Yka7{k6h4DOV6&lM5;gCvm-W${N>4P@(TW@IBgo3~|tJ@sL(+n67HsJoY2X~DQ z>*o&t)L55wQ)w9-G3LYt+jAcYMN5IC+0p-CaEty?mw$d^z9Jq@2s&xRN7UvY+n8TB z7eeqcCwVB9wo7^{Rs_~s&0YQK3xV{?E^5^gJ2rM?`ESa?q*AAlAJWyp@>oqq*8I+~ ztJ|-zKsIo^^i%5gl4lvW9o(opubH=d`MezJn!pDhcaG*W^m|dovD)mZs)o*bzhy*EP2Q@s@ z`$FuIho9S;?8GizHct=waP61D&@=e#UOaDo^iVkZqPo4Z9{K1y|t=CnNnEzhHrf7=?2h~dmrRP2^0CMej8=3QM zt$CW{p24I(^4T?O^uWieU&S2m{uW0(x7@Pj1QXtSj!d|#e^xrYb$ppI& zB+2Az=grp>p71B+J@_4J_MKH(*yyW-wB?!ny>szH`+^eM(A7_(>=4@wcL(oe;(%A; ziF`wbUm~7C0N%Fyi4+J~3C+QWmnRdKZC=!FHcNN06lOXjVDT{!=E1{hG+U^s83LD# z{Y(AQCleGM2ULEu^?gD-0p~<7fDgXuK-KoX(!I^ct`RR?FzS`P`mpUB7S1y$4u5w$ zb(u32)rEI8hasK{N}Is z6fkm>h8sJl^X*t3R^f`+7I=4YJ{G!*aN*A#$1z;t;Z;2MVaE583>=Wmnm(}lyac^EiU5zk1|Ugzx}^>d+V?$+r4dDL_nlOQc|Qu8cB&k zkdl;;Zs`V5ScZs|}`xx>FiPx@(4JnE5XBzSp|fdhTbv&--lO_Wmn_y3KW+ zGuL_Uzx_Da{nLzn6vfgT_qYhH$mptg>^=59`X<%yv^);kB^TP=LOxlQ9Zo-<|9%aA5|~gG@ze>pwdZ<5TVwydfi>_eyyv8QmZutxcJ6umz*&BJf~~*k1yG| zZcEp{e2eq(V*p;@)(YBVW6$7Tc>PG|y5j8AW3>qkM&Ml7`kQZU#qJ)`V)kW|Q3mfT zhSz+J0eUVFBzZBW?Pv0iMVxyMeBIn9nJZB>50bzJ%r_LD5E7;9$>eVIGy>NA1Hh@J zH$Sdg6nce9ifUA}j7k&<@pFB9>lU9?RAODEK>Jar$E;)N2`=jTG8-eS2JqIC7qVgG z@MYBF&dTW=wYj~tl<35}=*3{iZ5@+!)Mkl(17UzBItLfx=6byLkg%~tKYat3?z@x< zsATXInC}XVZcr-(ftaQ!-C}JHNSI9zWmi>%drr>>teS7i5=yi?MO%(-^)^+okn*ue za+`tBL{3a1-#z}c+E?Lrw17lvK!%R8ey)MBvv~lE>)>-IlE1hG^@6UN7N$VV~!X7`> z%Q%m}m#(^ORQqH=gQpT{H%>3!2Q2u7+oS3cF#eXYP*_Pp$lbpp{p%*yjWP3UbGR55nIdH(S6Q%hR*Idmsf%qijr7YZ%B`eeR=x{ceqSQcCFJRWlI3YdEKHUT`? zDOw;und7hn4e?~w0rMZNARG4Litd@K_?|I{t>6VjA)g&@)i~(($Vy?ZXh-oNl;5oE zSWfJ9%8S10$u)#j-i@qM7@__JaNoLiq2kuo$g&}fz>3IKo({tNsO8D(ABw6ZM#x{yS~FdYqa^hL|{63R)jg z?$+rFH#C7b3obFf-IPu_Y8x&>#GWtdhh`*`HC=!Ou93m$zx)jGxz%)gLE**M2KpMkJr;m8)ePG7N!@D%&ZW0!iZGUje-NC4zGi) z4Pe_9$cx4-OCPX2+AR_;{xAVG0>9pYEg#95;o}NEVyPh0_k%KJ!L@tJDAK=t>eVD& z>$T`!Q}jnPZJtfAgPKzhluPJo?|cF(M1_4lL<&IS!Iu;#cNSuv9dS$Xa@(4FF90tr z1bJ0jD?d#>HV_d>cgW3@-+{$MBi)59Hv4(%Flwd0yRyvA1drmxE28wXcuYNf!H31% z;+KTDy@}4oq*g1)cIKSh1zoDZ?x_KF{r11$+ZHYfcB-y7#)e7@#`W$CJusrOlcdE` z%hrF;+QzmjTXII((1mvQY{m}D#*SJhJQmNF3e3E(=ufCW<*@f9ct^eb8s*)bSVol8 zA?BGa3+p1aO62Eb9`DJpGG>%^+)EQ#In8mhkH7$NDckH>wir4~0 zeSO11SN;_bevuteW|durJTjG(3R|Xsbo?Z-VMOlE#)=#fFld|(azM-Oa_gNNU7vs@ zrI-s}bMt{LzcQg6BfwKLY9PRmRoz2ba{O8@Xa8Fj{QpQ>wD-MG7JlROj45kH33M=%nLLA=h{W+z0#L(oojS+IMMg@=&+bN!1Y3)_Bi`9=uO*OQ2!-K?m- z0)^lRif8vNolB1RvOCubn3LLAnWM8N?-XKxqrLw3@O3ld-jw6@LEiCRM#VIbt($Rl zB%hdM_V@>RUDG_muh42?7lBS`wi<}9y-syE@t7v&xVD*86@CR^?fwd2b?Cq4{0)H3 zr+6Hpz8aM4?f!s0pFw>%Ve=s>K|C4#vjW;v0vv%MGIK!zOd@EJ7*uK^e11lBBE3Pt7H4>`^`_^HL`Bd!Tdv9*92zFi!SRUviCAo6q$T zg4rtfj_I(w!|Io!IV6FTwRrN=A6)74m;D|-z&6sk!n~IENBNoVH@8@5sD26g!BRI# z3i}y(5lrpf;b5+Uo2i$OjY{8vj<1`U%4+;pIc3%)UBb*v?jCaj+Ifno4|6hI<^30; z2Zk4!l?8D@k7PxXJ7rcEs<||f zYpmZU(6)`^PO9*9)1VknZB_G`UU?+zaP;*YG^;|T|N2h>`Vt%LHweBG`Rs;J$_9{z zu`8ZBy^o^(1P^>$4QYfc@;8FzU7@^5X^)E^pzsL*JWF-Ns>$X3rIZ!f1oT;W-Tn-x zzq+Nxt?kBpj8A*$3sL0cuS{EV&i|yae3F++O3xUMr5N_^ZVPbo#)&9WRA`o2h}$7& zYpWaDvc5u0E>Vm=ON9*Ms6Lx>pm@DhqYiRPWiz&5{+-%y2iaU>7n~oi1a5*G-}qK>ao^bVJlO8H1_&+9KAEW-sJQLW(Yb)FJ=2zKMg$$8qv*}ACD!3Eqd z+1$^_JK^Dl>K7Ajr2hTDgaKVd|8|FNWjIjNt>mleOnQbVT;3}QmXg{-+MG@_LD#nw zZil`BEcE+hop&t3mTj`nw|ei?_58jqRg<^d zQMQbaz$@|Bw(mm!A}nXV90!DDgS<;?!m#rYXfy`eD9IMY17c;FZf)NThw~utAHO1) ztaZ8c34b*tb+^;f zHq78iE@D3(>Oy%y|FHiql$dJGSPLSx2&i(#-}5|#w~qE6!#<|feBM+v7=&xb(PsNS z_!>14(SEo!ozx>c7zglF>3~O1%fzcQhzSHF!?w(;IrO_ifRT|t{my+82G2w3&DNyw z`dKHJXDd9LTT+?GwK66*@MShf5ZDWhk%0QRGOQl`^{%ynB3VbUI#w5gV|94JJ zOiP%S>!G+hck8>&uY6QmP06=Uh{-RC2XU43hbHX|0;yB!Y0=+KC}@2l$gL9g6H1ll z=tD|e^LkUv9_W;u4g}2q@Yf|28Fo+#n=Lc4?MmWLhD#z;t6va>oH(zTT^hF>(PziI zJ!+g++b&N$#8f94gCuO@v`f!fSWgHk(^;m;Mzl#9;=R84pB&*EHS}qxPPc3Y)wcId z%5;(rk6@yF1Ga=il-|^%8G#QOMgcX4J^@LQwVz|<-i+AJqbi}TI+7cx#Vh?fmD zNKMZppTB|NC<$Mu3mAXh)_eTDrgvtqpLB{aFQWr9LFsfpc!UCuD&DbApztC7j6Ft! z@U>2@_YklfFEqdWbO$Qkpfw47D0B#FCO1)08YJ6szk`WNehL?#RQky^-^?_H`oz~S zkHpo2DZ0fCh8TgR+cjiWR^9sMGy-t&F!`3-a~mih82>yU6;{f*x0eI3R}B8W3p=f| z=fGBj=iahNW$H;sm);#CaDRM?q zQH@HkRWtp9SdVA+)tCFSI#kH$(gP2qt{dqc2bfke-&K1X5uF}=$2TeFzKmr69 z)0eA*vLVkEkzzb3J{ot?8i&rA z7D`I@-q4IzJRhh!RO|1~cQ6KlcMucEtihO7*JoAN+M<#g{kFG1yu6`v@8{fiKCv=h zN?X=zKOH2_Ixtry`h3vJ5lJG74gEYFU+V&ddN{2*Oe!1A z(|fi9Tik@6z2clt){BcQJr;KhZ`*!e1D@@?*4vxOJ_Bi`#Z^HKRgGY--Z8GbhhUE6Cg?+GJydf|8oMTQPNnXD^h1z02rCjxRd4-_#cE z^ytwPeww;O_j8&TI?w8GNn6O|yg)?{>c zxEb*zMW7aA=2{)c6njEE;l5xy;l}0b@XgCAVWDQ{3t4j>2*8F95ymo}#Mp4gQTsL3 zPU!BXj2!Gi&RxJGja&MZ(1&D(RrUQ#?Gz}z0W{=VD)ob77t)ESX6 zoN#{4owef{@2f$Nb|<4@YIj zUYF-@4Csas#gpr@|1DhgKiG&@{UT26>Ru{}$*(^4jVoIC8632v{XAtJdi$$?4H!9n z?seeZZ93B;Wm_-7cA?jwg3=(knE0N6Hd$X2;=kY%0(8 zqCq>*r(C`8YvQ?>rbAHKvm@ZhIM13r`|#6By*#2;4L^Tj`@sIz!$y?$qt6JLTX3sW zfsZ&Puya&${0ATBec?l-y9l&b;q^tlDiD8EuqL-(e^Sv60;i0^>{t5zjW3RT2vpDf zCt!^@Lh94^Wvc&ySxFxf*)4w8_>8z)0&NPvpG#fAX#|#tNA#y$MRtHkc`!B13ng-$&$Gr<<)hi#t;Ff^c4;*}W2M#G1r+*6gTg$gJ?O72=x#fGFkpVP~Vq zPRqcNn-l)Ts(GyW_m_S>Bfet=w(+XpK-MrAe!KQ5TXx(vEmDXptv3hWjq6VsPjin! zTc@DS)G(F1>6;wxc!~Gx(~fUM$n4(XJbfe%8^eIIqr?5r+RxrEzjKf}s0(gZsuo7y*eF-V|p^3hQp&rvw(Y{Rc8b09(<=MUGG;dh*Rf{{Jy zw?k`18um2}k-|CCJ>b@ZD+J)ZMDR<8WW{p#e9fAWFDal>lTO?pE`BpazyAim{d@l} z^3^%-&phSS+&gR?kNUVq&$?R{ZctS4bF(HMvzK+g74*YL)sW|R*1Flb3=Jm<>5Mo_ zaq72aD=88Jv}svMDMFQV5D{^!O7rSIjic(U8o{#-5(IqGqaKLc)XANDPad+J3(G@+lbW^H8<91cE*>VrSbn*zSkAuhb7G zBlYz$u%NHG7b4=@v;5*zA`Yncy&^#J{qhdE%F1Vf4NV0lz0V&!E7%IwD^$!o_j+#& z()4|TaLpVX3_HH64!)w%)>Qw$$F0AuIwY?5`d)MQoKM0x340XIFZVo1 zw&Xl9sxf)^&5@CiObBb~PZCdo=gm=~X?+3$Jis{O>d9v@ci}`kP4@o3v1Mxov@;!S z!33uBU9$^@&f6-c_4=HovxKkK^|}z<&xHvIE$2ky^$J6BPy~e_&P*Xb?^A!BTBRL< zf4Hvgd-6C>q5ZQ9(tf?kcXuw5y&%pVTyq1S%o)iDH9;b~JhkaSPOXmEdX;Xk5o&0kqRy}iYm!m& zZTQR#&06l0T>;l|8We^+<&*IgT&9`j_>cdvXOB85Yny&u1mIe{8>U%>F=Wy|C-dB{ z2wP&D5k6k~W<7fH{Baicr!}a%pP+B&sEwvcogV$qp0Y5XN${)7@s9yqRlZdasY;k5 z%#!X|#PW6$W{L(LS*1aJa9Zj^VU+sPyzJ3`7h^tq+-SXWGRyK|XMV=zx|UVbes}8v z^s8_x06r~Z>oI0yMSGluRel!2K?7<0Es(%Fs$?pGFFWhwdayez`z;d0u~oD20$V@K z*fXC^Q6$)CQJ>+C{-&GOpUH1JQVgUina<~=5l~AJeEAA#-Bi7WJ}&_-(obG+Aeb4rqfXHywrA`@=Gq3EiM?97# zqX&uBrgMgUjvCUMX5EOtQkX6cBk1#et)b?`+Ao^=h;W$dZ)_$eJx=r%BFgPwm=F;| zvB#<5U7q>^;;Lt>^ZoD#UY8F`NtcJ%i-V!usojZH^H(s`ZDxYW8tgp+hLPSsW766d`Oy1q+E*IfMeSYB zC5i9lo#f^8r30SHH8{GCbw(`8gL_X$b_bc5o5YEm$!h!u2~`%}&S23Zx;LG0^hk!W zi;*6Q1?A(v^Rze6sf+FhI_gAbjGMI{=eHH{_44d>_S~o{_5ok$Ha1!McqIVhd2Lw!=*|Xmkm77}pTP`rB%E5}+aHc3 zChdj}`JW3F!rI_+zf;9mPgrtC3V8jZ{NqRas}iz1x4h*n{~7_FYNEUi{QGWB-e)BU zpX^QXB*1_L|IlX(rhSrBrR9&b+oUc8E!=YkvqYyoj{7+B&i-V@U1U)8ZcFQ=kWZ&&o4qv|~f?;VFaO-PsZ`1szkNv}F^7gvF7L}yaUtv#ex=e45pInSJ zw`GZJeYn4~q^1Ml*<((!{KM=eC8qHjC z7A`iakz1TZNUX4_#!%_Yw3M%T_(GJMqsXwf))3!j-A1TSQ2li0p^Ep&okc+w{di7l zJjVorVT#QfDgEYdE3#c#@sp*Mpil4!O1`fhCq9Sb+V^v#8ymsKexDI;@5S2>@D&N1 z!IeFG+1*EqYsic><8f~EM~0Xe*Gy9D{C@Zs3cGfewiZKtKe&RAC)V3pe}5}DZ)F0x z`XwpK8iKJHc)Ooz1!{dk^Vb<)FY@Nmzb2v`w;VFvc{v^ClzW?>7OL`;VG;z|v;Yfd z%x?`E>iTc!oX9Xzt5+TD-8g#CD2Siyd-Ocq_jXrjX4}+#8(N2z;-@Pp=M`w(jva{@ zv{M8$27?4P0jExr6e*l)G~{2=}2J4!rh> z110|u{e)OyW^a{kl;)FMVYt=Qm78%&T4j*)McDZKBE+XDmO9rANY37RBC4&rstP@i!--j{l@2M!z&^w$-%El@RlBq9Fa$)q~ppAI3M zG@)NtO6J=Wr-ko)8z=!uEV|q&QafmLO*s39H`>0-1N@0kIP@1um1CT)WXWHX+|C7% ztv7qP-J5{yk`CZJY)nWE@?E+Vxm;Q!ITd-Ua!-neqAp9QWb5^wOu@T43WZNpb%AMj zFEVWUVziSGNAoe?RL-9R(2mtDUT8b9B%5fzkA0N#Wk{6ws;BoZbQw_+SbaI@{As*% z+1bPUo>2=UEVAmzf*+1h>bUu>)2|*$**-vtO%SYY7Z@G@;dv5=SHqkZdV}3DH-tUM zOAFR@(+O-|gzt4Mz~>`Q->=iB6$J$=;Nno2x?kj3Ih{o%|(M!H__b8(yONxhuv zgP6>Pf6J9_{GaAZuhx`2F^7wS>5f$dgx$wZsPL!IubcnrZ3+d{5g`z7V%BB^qXZ;< zhg4%~tBdM%s-qg?>V@^|lNtka;PpGbY}fM)`{v7)j=v4KeR%xPAaMj{k%%lJH@RVh zE69a{t`v%;0rAdX8{A7Hdur!HwckwsjfZJv*9dkI6j^f>-ZJVtjv&0!OVWXl;Q-;m zL`40me!FL$n2hO;*?=ZyCEqeE5**VDjT3KIx&MujNk*bl8aRI9CWWUNn=ic~?>hzc z`7TV!9_2jxp1pYn7ZH~!WnR$(rw@L6R3NgIraG`tQad@W^2I~=oge!E_>K4hx zaZdKq?HMf;NlZkA{dX?&u)~LoF?STy?QzHDj~G5Lh{z6*3`U9Uuzez{!@v`)`@U_+ z7t#l$F_7~c{3!G2mjdZ}zVoqP<+vK{q4m9{ebBi*g~Xvt76e|krjrdX2~4{bz}qx` z$N~r)x|Q!H@R;k;B&=7g@D<*~Fr^>v_4yvKxdtC$hYG#RKv|^7u_4+<8%1Nue%#)$ zQ%dc5yUXIdi&$|Vp}X>{>2`{w9iL4Mn)!aEp6&E-pT>UXyAz<14X=wR-40so>hlSw zIF84B5$$t+$3j2NOmCHgrRcFAb?GD+OMv<`YYcPM5kD3vxY%>VFd$uf_{}1DF)`ul z)RF8TDrq|ZG4gaVq$N7E1#SnpPy_=JX=t$*j%@7?<$UWk)ZM)^0~cH5aHU|sMm( z3|NvX9+syN^fW$xzv@e_tu?BIUZmZ^WTRc!lRuRnu+kj*Qrv5V{x;zF$n*&?q^>Yr zM3HeU7XS8BPnvJqW7O)!l2~r9%5&X`nOum~8mp({PX?Q`|_ zH^Q7%mE%;0bDYH*Y{rv_T+y26Dp_F4gK*aiYpMmb9*6{L(hp;l5*)3#U+`?WnS?Ss z)83-=t?L!43UPn=0osHU!QK3u&OIA_wJrSWx)949b-6CLZ`TLR3)Kg{m<6|3Mszwx zbXvYy;?V0PDPhm?8dX8fG><;Ef*8eRnOq;D3zs-1yT7vdWJk`;ddwIZ zhkyESvA|LP9t#|p&pge4Wf;(1gmslT+&^KGQ#brFr}je_JrR+VlIgQl7Ri54Qo1ZR zl%}rpVCc#-o>&QhvI*=I)!C5OHsMIo_Gvi2OaewSI0(q0hWW4t#<5Rv*oP zp5((9EUtI%#$1>@@}@9)*s6QCRD_%94&Mu&MPU)Q@%Dt8@P!sB_lgz9OtS;Z6)M<> z_#xJIN2MM_+FavkG6VE;FA<^9ErNEgWChSYfhU)N-C#AbF~fj2zN5>g%QlDd_+wRS zff)y?S@Dko>2x3R(!J6*B;$7n7BD&-dz77WaF3Q77C}G}9tVV)Qm>%{)GOWr3T#OG zo!XOd!uhE9|7aH$MBqQA)h_vZQuQU@E^0MT4F?u;E2g4#u&}xnbPL;arXzK1g^NQEI!pGZmSy*v|_KY^n>< zuCVNXJnj^gW6JZsJ=lGmY7bG6kIaKHw48;`0?B@Jtr-#+0jGhOF}QpBa?NW6MrYD_ z#sN21AwYW8)hyo#@ljw8I_W+&IF``M_rohN|02onlZ#q{A$$Gc*|Id8i|<0zf^g|r zGo#_BZ=w6GcZu9{`x&0?ZctP$VeGDo4s;t*Rvw|-KHMTnm4k9@%sjp$aALIR?BbGs z|6|5gd7;E?)M}VWwCG#WFL8+cRc9sM_efw1F41%O!a)kN@f7;y+v7VkLsL(gu2-j3 z(!&T4D|^oNYSVS`Dsrx#%Sf-?#Nt^X%fT4ug1Ihh&p?p~Dxw>S0L&qbOr^qk%Z9?;*em>c zsw8aZj9HBVFS~**#U&A$eh-^d_=5!DXTc4L#2IOy@gADxb~*w*|x63uf#yps5HkBknIwGZQ6Gp9c& zI6XH=l}BH(7>Rh4?`Qjd{a6ahQP9Q689qYdBo%z&poclDfVUwe zvvjj`KbFEAl}wbZoK(~Tiz&`r_d>e1I@i^&eq!sr-!~eKHa-dY9wlVFn`*-&@jKa6 zMLI0w$ogV}bqua(zcLy_rskdk^`*#LY$vA1y{!-`!-@Cd3JmE<sL z^oK*&do&t6WjG+@{RzHEE@N&zw8egi$fQmGePY#8Gzh9f>vp1_@7ePQp{3Yo$mV2% z{i4s^^s0(8cAJR+r|T*r8(N1e0M?h&dsDPv%Tq@u=(pJ|{&HI)AM zeEymS8fJ%G$oe6HTqVEwE;24Jr(N=KWggz9F{o+vs6_Pv3eXBY*iSAa`~A4b=)E=- zK03+SBrcwZ{Lw)xchy1bI$uDO$En???=5}P4M_kWrIeCD`z6Q8Z(ZV3S!P?JJAEFV zgFL(=vE;5&67wREUq_O)=OJNZlYFk7eP&@%Dlq{Gzd{vv8I{3Yf0m~@I(;AgH-tfK z2l_xC1=COX7=~O8B5ms3`R*MD1T=Ey43)S!P3NCr#&a$2C)Nj6H=JV&(adii;5p)A zi$C(e@hE{~Zas!nwXnNA?d#y(U0RQsN577tTec^=BTKoivHX)YO#gv0_=9T0_3xU$ zhObh{28;txYUz)JM~&=n|8%}CHhvMN7-gS|Gd3e1A^SOXnO|X{zrMgIezS~UO4#pj zG~nR^dr0T)v)|i+-xvD#GshnxqyKo>uV12+ymHVUUtt_kyN3$4@9uGYMBe)IK>6w= zwOZE1Q!KWhy>jV+qF6DsuuH`2Wm`imZD=Enj>G{S>g%fare8PaIxK3OWR!c+Ix%B% zm)B)yj2T3dWPM5$;`<>LV(Xa((ag){1MaedG2!AkBQ?d!-{rB%y-o4g&Kk|FRh5Ds zUf{Y^ZaaUlgBcMfqu&qT4VABz8vZ1m@&XTw!L4Ae<}ZPt6ZzRfpnhUVFS&nR{cF|f z`KhpK_cu!;KYoU+@&}^zgY+AbpF8ODQLjH=-F3Si*#(4EPo-4Bm_bU3Elz6@ET1>s zP@CVrkPC?lO+(z=GJ7fV(bPpHa&9wDj*dsCST%w|-%x-J2D}MFv)0^_0=|N5fQv#) zSA5OAT5v(4A$m}j7C&TGJ+jx=kPLM#KLTzVFO#48#M<#fvMoUCP`PG=O1Q>`UuLi% zBC?dOJDb&W`9wF994ohO3HoD)-8upGt6uWN`p3I#tnLWY&GXVT`pBxFGh9}x#(bxL z)x(y5_+iNHdhkt*HUD-B;lD)3qUFL$waVB|av$udlSghgEUnwT3CihD!`q4{oi%dEPG6ZSou{w82tLraiCL-R2(xgcDRHgP^ zJka3ezvo1_3AEq+_OJX5!QP$!f;?F59ulNE{GoScrmgN1Nq)aszN&O@iUq{PZn!;| zI9T2Y%8RgnkyPY^jr#+d1Mav5m+f5YqE)es)YezNyf;gFB-j47P`OW4(C$+en{@|0 zKNNnnBQesjC-dYIhUCwa&hUV~*wbc+*Y`v=5Y*qb9xe_MB3eW_t)n1#6F|qk^HzpP zA5>Zv^yMLZ(h3+8s&?5Pd_A1Am-$MbfMXD{cf;X4Ja;s&*|kcdInJE=tn_mIyoi{< z(DuR>{oWcn*VHc-OV>RmfFqns{?NMa4Vk#8mNPQDW3K4`B?ckpXSGtz;c?O!3?O(? zbF-fqnpw;0HebfKmdg39F)aBnWxh_sNgoBDKdn^5E2if?2vI0|%!cH5mj0U7p!-~m zKIJdsR&^h3D-fyEdM-VFVeckfu%GwgA<)&^+$S zm)_N6vdq1SmV=)M31!(#ey_>rI2~t!##KWS;uADA_^P)0dRW?5bO<3%$Ea(k{XpU2 zE>L@V#t$~&k1ElACXQ)-{LtG@h2;$CT!dB8!)Q2sb*t;< z68b=;R-0~xQ{)9P9 zotQiy^T^v9@uW)I{01WqH|xR03bNXxDhuM|t@|de@&(A#qu@4C zzet4$X_8zdIX%|HKXfsAlPfrZhvAh&1vvI!CW*6j^|3ghO%TpQM1ci*wFGqM?o=|R z<=Hzwt--P^7m5THz@SM5DPIDuYDYDgKz%Q!Hn^crOZV0JC|BWy3W^cmdNsG*H7%Xz zQ?(2?d}gHR;b#ob3gV14y=Bevnu$F{wIe!sn6=u*9$UDTjxGMrjxsdSORgA@Y!4$n z_LMmfan@RdSkiZz46EpGC+a5X&IitV3On;U=yLFx9DZWu^=n&wWQBAu+oMDSC}2NE zOCVf(unWjE5a{J$=Zp(czVmiBi`x$hY~Wz=OtTa$Q9@k{&<@HjkmNEY7`kC| zHNo$i&g!PTkv~(mVMrr06+V1#WA~KCu12H!nQL}LZ z3E{7e`O6u!sL?9I5hHf3&ePiTE0Z|ye8irma7K?0zu0}Ixl5#tN}g#FY(aRZAfzuZ z-PgT|w8MQ{rmnY}G62)AVivH)wr3;j;kHqx4aNb6yHs(@$1Hzqk}>td6N*3dJ#!eG zYQ@uSyr6wHgKs(YK*m3iE%@Uk>G_;*Y^vy|n7!*4{uOuW0i}AekTu*fHFu02W_Dw) zaDVQk03+|OnVIY26Mvfv`m)Z*$7^Mj@r$zE7cWAVGFNtyGkq72ZG1)JuoJ%VkY6<< z;-P2%%ns#jKpnvg?9eR0vN4x0P2^21n!Ka=<@RuhF)+oxsohh)s4?c67`*6nHtEw; zs7XV?H+`m{K>NhX-E=5GUHmMpZNgiA^BWnZ8$CADm^>pjk2!s8H@h!Wl+&_*g;Mm@ zhv~N6OUmst^F9c7G>3pI5i4LpjV7>`Jk8sI{lopL+x?Z)xg4Nr=*#^F1*uK^gM$2> z8RcX@ZWjuyjA*%V%{$U3E>KgOZ`zJbO+VMqaCU$aU~LiA)9%?7cv)~1uip8!!3MrC zAZEF4Ex~=cPf-HxWj%w&x3ck7A`GkvoFx;3<3$;Ptp=i~)aO<#gl#$S6~i1bEd!wsY~={0Q$vRA^KWIKBYNq$QB~$1z=-G*-)@U122C}u)jo4VEj`O zvnu@`;+)^$hTJN~jVrKXx7{ASetX6J$fN=8e^ga+=GJ2W%vKvQMKKj?5S-Zx(tqdv zKulLzbAq8sdZy!~4Zbvi+-W#G0l>>PXYWg=DYomJHgAkixC}VEO;--iVl@X?*D?)L zzFD#!IO4bG8cLW~B2l-U(hNc~fy~d}>7LNoT)rRwV@K@Aj>8X~!$mm+a$|jh>(k3( zgu&JTH0^hk9NoW@wg-I01Rcl|69;*1BJh+Bm?8wp%`=gz z-oX|!j?I3YSePh;PF*%>O?OWQ%#n%PNp!D7zv~g({N&-`7TXM*bd=AE*X9TD?A!KZ z_B_vIb=KS7ME=Y4Cx3cUUV}FAPB*&Wka&cb84c`_IMIF{G5;R@3X-{q7f=mJ%sBfo z&TUjNr24|>9(}S%2$o$|S{1O&iWeiMD$a_J1-_^xtRr4Bk|5kXj_KyD50qVd zns@BqUfi@}>A&wbtx?D}PF-rC`rMN&!CXFr`cr~yPj7!)n{<9QZ7rnv>mLQ4qaDw( z?&dvyGN50eTV;#IZ7DH0TL)b!l43;VM!yt#cX6{9xl8mSI@AF4?JVA<5m2hv5=EC3 zSU8`@iW;o140^`$sfx|jOY1%-h-&K4WIU+<*A&mAD(Zj)XcB>s`X-PZh21mSlFU3 z1%d3?zhEbzB2xoj&|Bs5W&H@V1Fm|Nu_-V*WIc!6 zSyX#+m#}k;4D5Hwr-v%TAr2NoskcA|FeojgmRjna8<)Vs$}JG@-YMzn@|3 zoB~ZRsyNbNUqAWv&strCbLVn@$ysn>EN-g&SQ1d2tHK#MJbL2#`Z+Ge$E-Lf;WMw` z*btm5`u@+)AqU!gKVga*J2^Pa$)-ICEPi+KY132~)yg&7W=fa;$$Av1 zzRdL87P=3u4w{XjQFtBnMp|PDX$<;{PS&2r=eo?DKT;hj5CHC*L#1%;^zXUW?5}J* z&JYhGvJ#|RHTakG&5X?OHwU`IlJgfTMg&#=`_@W3O~z%}KkF%xt10|`7dJzE&q=5X zmudKRUE2f2(5BH7ShQ$?;)p3AUzuCQJDAsrw$=Z`@-Wfe@e|ev=ERCFgZur@*L%bR zNJ^Q+Wxr24PQHaZ9TSgtI%O`_fB2a4v}0LfvTy#wyB_Bk*!GUMg5HOc^(lq70Jp?P z$$}suZLlJH-u-~dcP}`!$hO(g7;b&iKp~|rSjqR0z_fo>Tel8PNf@Z8m&G>zY^1af z2`)VEa$bO3N5~%9T8^_cHZ3I`|tr9sD(UI>h^t7Kt{kA~QxYsPb8b423Jlep?V#!1E zOc4bKe(N17c1jWp6$_&adiRZd^EN*!=+Jd_h*6Qb!{4!>z;AT`$OVQCn|NU@oi#44 zT$C+*FH;vOv0XyK)c!Qju0!U=TSWP~|0n91*p+&=m^7`)!ylmxjPkMCNM3p7i`|dx36+CGA$t zgFpsjn~_JoJS|9~Kh?4?D77ia=~98X4Ub zdE)M1)!J~eMTE!PwDqx@G{ez4%7;jhq&7r|M}Z6Wsr;G%5IaI5V$Dzz8s4et`CiKn zlRwLh1L#LDgcZGrSbR8}P^xF%Y}if=1k5Ok9RP8>Le-M7(XwmWL|f8gkLo~gIt6WR z!p+So%eHSiDosWswY}wfp#a`{!M1n#`4`?x0(MutCy}J|S($BN9r8%M_p#8yF3#fX zqvH6RBqkpr!nJdI=y_kE@~a)u3|)V9_J6E|1piS9nSu;b)kmuu-?K`!fa(TG7+1+)6x+)i;*2GdJ5SAg`1~fZ9 z9lm3ImjUhY4C9T3}B9vsm#b##L!hDhY_7s-#(~fe?wY~HUnO{ zEjF|Uql3lh47j~8GBgqeivvdzjWpSd*V}X{dYfd2TE;N(&xyjHqg#f0o$`*E9StrI zMv^_Lfp!d_;Q|+7&^vvwWiAghROTFRYgdkqpe^Jl#`asWlGqY_ZTimjLX&spLorhJ z(R)w0f!7rL`{SHb)+}g6&N#j0X8TjaRCx~72|Xz-I^9Rfg*hQQ=WKZGLLS(!XS5jvO7iXsTf)#IPtFnO$jO z43cgZF5oXIH*jLV$abMM~!0Xnw|AZ+M!x0_#0 z>CgnQ<}qMCagHvz@jaK+e5Nr0V9goyQcCyaGnv!dbi$=!f#H^XdG4I;C3(3)vZmqJ zZ??~Bcs6A(!p_e{-LJ1p*017kA5$vqMPRl&F@(zi4`?jmv;dpw|{`c368ePTQL~1`AXxObD>xhiDjEqro(F|A? zG@LqjYxh3L+v;74P=JH*aWgp}xb?|=t|eR%<%s7xs0n7E#qkZ$;@DlwE5hNy6o?fO z`UPj z>`**jo2TyB@Kub$j@-H^F*F{85Y^d>sL31d$yw-&a8N$(E%oILog#V<_VFL(cAGno z2z+o~8bd0m^uZubNE3RRvJmo`T$FGoh~}FCSAEZ5*S3ju5fH&&IA3*Wmc@PV%=>;) zf=>H`HxtB!aRJX@^tBIW;`@8$n4(TD+R2rbLgVCX{J+!~nb&c|Pxd6$M3}gHHo?Ts z38p6`XHaVmNciL6ZLYrZ*=<+&Trrtgz3#b{PJI(E4gLQ|+k3_}6>V$3Dgq(`3W)U3 ztAL7Bfq?YhL3;09q(dTt^xk`gLXsQzKIiUz-glq-?S6va%36?Q ztvTi#^ZAcw(DsDmCF1>1xS3SbZV7nSxfAsQ_H!}Z00oLE$T$`APnJG64f=IAQ(qbD z8F0!ud;(@}Xrvq^lP4pI9xE~dr!j^m15z}$eNOQ_sw*d5opw_`4O4K?peT_HnUDX2UY3$0D^{DY=$8Ft`E@KO;yfZ@rsOU0fq$FUf$@ zoskJ#=Xn%Vsxw8tJ*w1W>LcnySalsRhd_C*Hi*PM>O`uiqD!0YX7V#HL2FN*z$ztv zo?-nOETwi+0H-{6(NN@@JOLX!Z|nkV1ONG~-$^!@T-^e$hFC~$Vn5Xy&94=((aC#F zS7|a|Au^jDHRT{puNwHf;4X&}i1j){Jf?+wuDu3r_d@Y?+aHBfHI+R-N0ncOi*{9q zrux3%d{Il?)!z`%5-(NPBL4MVXFbtz$V{72fT@qejI-dHvYNV=8dv<}nQB7-6Y>p>qqD=1GZvd}@TiWZ&C_Natg|uXE%Tm7Czw%?Z#T2QAgxdqNXOl50cS1cw=v z;gvw-LINFvNZj$0u0nFA|6X6QePg}hvyQ{}_y{PQn1E=_;5a}w>QJr*((+dqv{lCW z(~aPXC)FFT4_D0}4Z;oeM*S_VQ=H`7DaR& zxHx^eLU&7}3=}J54JKVW%EVSa?kz3Qw|ar|c;4Nbqt&+n;n-YqKhKb-X!gxKj`+PE z^c~R2$Ke8qj*ZksLEw&9!l?avBHUDzY?WHwD9zMGQ`)er!69rDm15uvJo-fZ>(Q64!vw=pQZzegNa5>KNV5e8BFd&gz>G`PsQ1DIqp|8oq)?>)ZT|R$U)u0Uf|#41 z_Nz^j=^)r`_a8etzR{+eq!)8yUrMhD)5U+t^(E|oc66k|Mq2(T$EBy> z-D`)_zfWlSQAluJ*TJl$cv6hw8ba;~8hb>Y{MM9tL4e@OGs!Iu$kNZFI|1wqqExQ* z0`ynV4$sl^)2Cgk{w@^9vgljTr^^{4%&+LyXAF)3Vc~Vem?|CpU@FmeBj2O#zLJ4- zvXYcl^4bve@k(@o-{6PSTxo~Jj`+r@6+jufYrcb}mP+L&F8-iKoI$juoS|@l*jy=K zuA4vbcpY>!u3$aZWor8?oSK>yw_dDG+O@j=C^Qb#>4=?_E}S*Db>xT&LY-#q2YlxWA*GO z;tq$n@A<7?3-&3n{yHkcBNZ*=#<+A=M}xL%ynbOiHNGl8Mn_keNNnD&%Z`>{uRgEf zc;xz#6~NlI_D5**c><(8Xl6n=-?6;<+v^Z3XLI?ZaF%0V*vUJ0dA9(C*;bO)YI{Pv zDitxgr7lf(+Pshcx`aFvR^2wA`Ev5=Zl*}Si(JyWfm`?H+`MlL{kwN7cD7jk$nSO` z{#&dKyRW>tUVUO?eKDZU4mQr_OJ#qpfPL>pYyH&$R@qR-@Lt*@;ror_A8(;Iugqk# z6>MDJvbH;gpJ4KL4*IBSEJi)A`CPIFAN?M5+U@3OTk-E5k+zB9170!d*4hvxRX9}} zvI}0R2fd?>?7z%&v|%tXYR_{RaP5yCWj;F~Bm*a`y9zU9!Zrt{dOn2<3j}{Uk(yiJ zIk!KX$T4tZ>n-~y$QpUCHXN02 zK0Y!tsPt&Y(ZPN4(uA=+)N7)!p)@#39y0ai_l!FpVV$UQSJflO+em-KBWf~U!cb3_qje>%#a zeh1g5p!IKbHQ^oV59&^3B-}0SZ))j-wRdU;_|sJ#6PFssBzC(x3jGqmuyrrhNuNKY zzA-mEx(m3C{zsx>C;Yj;ZQti9mzy|2=&rohF6fC0f;FnFfi`pRv5yz5rz&lj2VU^g z$J=*;Z4$aqcg1$^m<4QZ(AwoJboR({8g$D1sRU=cjR5;6qQwZB?_w9pdA)0wS;VrT z7GNhGhPoz0*ZXAn?w`M_b*^ErsD1YAls!3NJwfc_k?YW7I8IU{=N~VZq?AHm=z$EO?2zAbRw8HnV?P%i!o4B8DPv~Vy^Fhx) zJpQ;3&>p+t+;QvAeC615+fWZue$d|lSi2r&vW)FU9cYWZt;3QX7|YKS7xoxA(2h!5 z4zx(zRj)EpZ^L_Qv$d6#S{zT|7ZQcJ$!$Jw-A=|Ay~?(OP&0#3XrB3~iCrH$3z$+) zgqMbvBR&1K?5WQk^37ZBbY8ovPaFs;^$V51vB$9jvTxbmSuX@;=4w70)M)KsK(a+g zISG~8G?umUr znBpr{(EyX3{x|iwQYIt(=l@UtEUa<1q{Q z7(y)V08#YSLH;4IlOrcX2=6XRiO(9%7{M@*;CQ^(fP`OTAc4vhR6P{TG+iwaZx0Lq zQpT#cUQ4A!g1N8)VvVHr8=|Jf`ovJcYlwmo>sn6jPxw}y$igJ?zfnLuOTFz6n3_pN zM@kC;>5mqx*kg2@K(_`|lH@=!QT$reBezWjV+m}P(Y*;gv8 z7*%f}nifZX|88_BV1?q&x2I;!#`;S~yyUrKh%1nhWH$fB-3o9B6#8{*@h8g)u+@*d zE!*T3>dgG{=K?S&jEJ_@)gFP90G+Emg&D85!EA6;50nL6hd@cAFq7(CbkyeHEp5Bl zO-E`1kdRKHUP!t);2vj+s=2~lB@^PrUZEbWblyTxqgs16!?<{BKX(&Fd=^@qr4w+E zq50zE+)~4_nikA!@MRCU!arg4vq^$`>J{zms>MwdO0>@XMU?qHi)0bZcsADpy5~?`^qRhiz8wKw>LT4n=K71V z$=Es79;__%3?hr?(9sy_YC*LWxqetWg`TXcyt?~<0Qaj4p>(reBGT7)HkG(rgNR5D z+3})T#@Sb1-l?J*V^?0SF>#VuiTBfdDkRhWyq`f^ z5J-V@7`i5LQ)lrwC0Vm-5@OI)PM;Y~#pyJ=~=*=0x+nx-$JG zXd((~TKzMj69A(accsD_$n=jOFJ!+ucDUFV0!c=)XavzaPiknmRPJWBT?{R?M^y6Y z%hPlOKGdU~YKbdOY*u&kW*2%VptkJ8#5ur8%uw{|Jp&2F#}#!?N0UBd+}>3ngq>b| zOo9UgRWt=yOTs)Y_AR~w&^cJ*+fX8nKXb;9+u*fVx|H>Db}=; z>FbO#7hU4=m%|)(*6-VpQB1K%5(>+bW&DC42h))2OwvYM1#KCMpNek6z#D6*1i1-N zG=5lP&^}fnzS^JN*nOe)-vGBZIB^F9tjk1Q&ohLVd(V=pQxm<4jp#`INc<@FWX!V3 zayn=&{J}VBs)p&efXcFrA&aw)1RGB|Ud0U-Wy_mAoTheg;8YFK^4Z)Ell||1;*CBI zTRmrtti`PRyixQTj%MeByc44-uZ2aS7tUAJ?^`z0p;4?RH?9;1e25aD#&7QyT0kL_lbB)t>fC?Q5xUnRly&tq6s@Y-9r$Mt zQ81xLROJ^l3x0b@)ritZ0&USA8=KOM?G8Inz7_8?NFxZVoV@6nwaqS7C{9s!gS z+r@Y>SNI8Ut3!&5?;0QoWgo9Z|Iv+6Mqwd9=!y1xy}7r%sPamaprT%{VRLied2?va zq3GOM-D@eY2N#_~OqSgAupTe+c5sGj-MqQq)r9!F?hu)$CqMd6Dp*AhbT$}-gJ#%~ z(@SV$-^|>86eI5AY^~||b*zA5Tl0gVtg=wSEWVh80gHVpQRc5e@4nx;Kn*n1_`!5I{`P5A3rB23Gqooms}Imnk@x6x71O|Sqgs~o$&w+5 z;m9IE#8JSr!0!4&W$q=l%>+)12ZB@f>i4}gN#3AHqi!1t{dQpYk%{W6|FQbuk z7>GbdZ;tpQ5xD0o_vnqc4PCKoWoS`8; zNxj^~V2R51(1ck2*O-67bk`J2NjJPqW3Q@aj>~Xr`sHq-FY9*Yv%N|H1CqCBp*?Vl z=K0y0#A*gH$J%jNMC$rw6#T^_QN%YIlXCdV!pTki68?7eg&2!f`KJc^Ib1<)|1_t} zhBrpePzR2`Q2>1K6$cVCnXV$PJSE2B&pvduL1lww$lQ8;JMcthrPraaKOyWMB74r1 zFcI`JR&a#E#wIV%?332RM(&Ra1DF{c`}k1cRS{#O!r)~S*u~;oAj)E~9mn?uV*GF6 zfCvNu&{7u*?w`mT9%-x4marPeEAf2-+xE&&~x9O!p_Gk5-* zWVKJdJ#E!{_<90U>{`EtTZDj{kC6 z0?ijat@1fbwR1v(?DYM6iUyvYy!>r&DmNG3`y^&#H;>?`YV4Qm>f37(FH(4HF1W~L zO((ZCgHo78>?f~To%6LIH!%EZ zxM+x`UW0CmCu8qJ8fS14YbYQoh92t?)-tDTXVc;Hp;-4UZlJVw+vO9scSx=m&DU1? zg5nHAQ~U?R_yjD9*3+WY+zZ+q<72yH%55LK$RtsA4HM)Ze8rSvjYqfWWdbFP7>R0l z=)srsdX+#99@J1tV-f^kaYdi09STagm0Vx6)IIV?E)$|Qc@x9OTFCtUMWTVv&~eKYJjP*Lhihj>Ggu}9h2MJqZj_Q zv0Fk0K3*nx%-6o%PHrOC-CEFi63Q#)gOVGOSusRZ4<-|4M^v4qT~0_=;wnE~4qYef zgkb@wHMJJ#R<~BfuKi`Qe62$(z!G^cpgLQYSLIKXC+m;0WMroeZ#$X%?B}& zLQhHdfF&1Hi3pIB5fia>@4^&@=p47GnKr`cvdEnI%RRm-mkxT1@L^()2Va7Bm1$>M>mTk|u zcw85a7T6f>*1fg9TzS|$cXi;`c&>oAi&vQMB@A03Wf$N%;13Mi?D$h|+1Vbtb8s_} zEfw6-q&6d&)1M=AvyK|T5EF~&9zsJYGk!s(RmqD@m#FzEXz=ZFk(=y$Ha_MEshL}l z)TbYX<|_jPyYsZ2#ugj%jR?x|Ih-I)63+l_nd#$t?pci9SliPM_ku0EuTorny%IEnR{ z9>^HW5(JDN&qF0z?0P@&xE*Z0@hJQ@d5%d#D+KgWCiq{fT$tLGXQ1`)SUPg}v!yFy zZEjBXsikQ%?RLis^DWWeS;Bwb)#oJ2;G7Dkjl71x?%kVwH=ihG|0JJupoaodif^~c zK`)77W#-s6A~yaxh#a9aIu0bQ;$HvoylNeyJjb07P49Gz3n zLQ>#d#D-Zq7Y}WfkKipBz6W0&&{62BNs@0PUVkXfi{4z z01MC#5t{so?UMEnmR;zP_uVwXc+G?=DaBQ+GXmVdCfhq7UVUQZQC%3MOU?Y{i+K4Z7c4XK!dy_=693#8~sa`fCLn~BRyKvw3&7I zd~;~*ao+>UcO*Dk!UZNfI5LX(k*CmrFsBxxs`5t4pHEZsbaq&r{Mb{&=wRqe4gB0| zQt55ou!sm-g$3JA(|}AH@gL@6^M~>;Wx80uZhi<%{6L7B$D`)tTXo^?^(YJv<7xp);#+yP1tDh(6)|-^5L2=>nD>B(Y3dJGUGI1R|P2WLJ%B@R5G>QYw<*MtXNz;1KI`IuV>=CSQp+s~{n)fDO{3igO1 z0AGX7PAR9WN)pv^JO`}5DE5IFC7hwlAAx8o>?yD#5uw%bE$yct9Q5v05GfAj=t`S> zLM&=T0;TZu$}*;iy)X1S(y;oHY5Ym@ct6nlaBAz;_veQ+M)ZCY*ny+)M$rSEX+dyz z47EhyoB-jkrsW>eM|TYA0)iFQ@@2B zJj6)QQx6?*x*J?tlQ}>qUnH|QL;kdCLFa>hN_&xf4Z`;$Re2~i0s0C5onjd~k-Pd} zmAJxCmoL>Kg8c}x$Z|1MA5!=7YU%<_WpDq!Dmq71j@tB4wt+q1l?gol4Ma%FYvy8* zpH}#W-^=^NH$5dB%{OUM9i2quuzy&?QhIi~&Odq3az-jHK^DWyk_Yh1c_pMyRqgh; zAyn5K3NlpxdG-C1gsi6Q{%^##8OK<|)Qq8Ow5C2!T``_3waqXjHt~9QvmoG{k+1d! z{d27b@`VG_6`%uOoQFdMEB+aQiAZNFP|jhW+29_7+_-O8kKRz(b_K^L{G z%!weO4KfAEF8UciiP|0x#OG3F7`oYgg+?*2^BOfTJ<2y$cptAg1m$_QzZ!2Z7F@9(lz!{5*My-hixx7ep8mht-*5O%ke^k~a1@0{4I zDmH=I92-6@>Pvjn8%$rmo4X4!Mu^5cUb& z*m^Xa{Kx5!+!)uqyrLm1Sq|;mdx0A@!5*2u@wp;mnlF7M=z%((4A<+ix61Ees6Elh zMsB{OZ08RR2;U8(U14?jv*{MR-jRSm+z6`(tC%}~sNj2jl39=x@i9+1?nr>6A!GSc z+wMec&2=nMJlQedeG}UL6C875_VdNWE2`?sz#`;?Sbo7{;l9}4TN#+d@5(@>2v)&f zp$DaNh@4OWy2>wQR{%fS8C9chohqD=Pd>lU>9J~ z077NcDgJuxUE0*^Y|Nf>bQcjE*1`O=<1@-)549kE3dfFIzrd=65Ovk7R$^*{1t!t- zf@lJal^7u_9uc8M_h$YQ(h)d+cd>Sa0=D7lJ}LT}4%ovhZJ@Sym~23z1&!;6mUudm zdiYu9&6SvQWaK@DM$Thwh=(+ok#%ld6&$&dAs9lt*e|(TkEsDjs`SCP39N!Y$8Y$U zabE+O54PUx9Pw}1aT>Q%daj%21oTF(y%7~-CBc>|eCuJPjd6Sjj;BYJYXuYi4#ZmV z-m_&1@?Frli}1~`CEa2BtTrl|ylcRL*&pa|XZ=iAt4VbC`U@nwSVZgPYNr>U+mp4k z)4z}lQNgEg8*9l~Fma>mWLHU6&3D{`Bi?h3XB84#YZQwWX~O6s8?6Vw>(@aYQ95Au z^4}?!?|}H7;3U=XgV4ft9XqZzHePX?JagaacSY~`_m>VMA#l~PmCpKVd!MsEE04Ug zxBq06E8UJZtX}2D8JW<2`>`UZGoHl%SucaK=WEZBWAY0C_g~<|BcP3{_s&d?+zO_+ zSbkxVLFD0+lpWiB-ofp5P*98C(yP=TJ!IC!h#^)iNktzOgMZxlMAgdc|7BeSZJ4j( zdGv%XTwao!7jD#O;~-~TAW{PF-xqWU-@>@d+zsiRTP?vSZDv{P4WxGWnlS9i)z#fi z+(-)6*V!wOR(*2Mm)x2sD;QU0r1;)|fFSbCLOI$yjNuI_T~ZiXmZ(iH*y+i9hj1iK z=&=-`5qGN5wvDCdtG5DTfGUquzoc|xpUc-Ul-%RZ%RsBGVW5toORIyS!B%`mjxwD& z7XdJ%Nnz1FujbN!7n4k_^pL`=U@+M9MMu7}am`9VN{>Um-!`qWPjN7B#rS%ifhe3{ zX+eAf6|C#|aS_G)yFTaqW(KUD_d(OJvi;d(G2uRn_m~8Jch}|D+6Fpd z;)X85UV-0*SsL|P=mYxl=+NvtDhKKKvI6I#l5%(?XsGsJ!i}`X^+Mi04k5htC1BfaQ8}E7SzGr}gB;4~U4g!fHg1bZSIIPtL@=W17fxfC5ePVa z1vtJv_YsY1heRdW4WU0hXgGWq&SAs3G{^kR0SU z+iv9V7g$#>P=0uP!Ow1PE$7=^c@`(&g9ZfwCbTN8DYIGB|=+>{1>3>vfc z@VN)>95EgZ`qPRm!?WWfEt4x`iYjQbD{lCOPl-2{krHFmp7ZjKcF5u3E%e~F22dR_ zfI}cY&Wlj<`l#L0TqLt`sEV#*8bo0|rCLj#{@8b+%Oj@UQ@0&)YxF{Y5iN6O_ZVjb zN+$GI!ZBjDRDzGT41M{_a5xh>&Q~a@hJV{hSZ^}L~2Wm6Tg z30I7X-1yZ!okcm`3bS3UB$< zzhC_S!YTh?RB$F2|C7A{trUhu`FE1#@5xW-5=tHf5}w&94vl9?x9Zc`K9lnQAI!@t z+g@e5{h`Dl#>7ubTcZt$e{hZ7GFiW1H3S^(zNc$~z#Euu@+H$$?Y^VK;iAAFD)!&Z zI;1Z-FAYUKvN)OTOO#fD(^aYA@MCBx^KxxHdI1xK3!y=f+x0ii02*ONv03hVoom^hfChMU{$B^Z|*sN|DM za@}=i!yj|7O)PQW zNxZ##+PtyzW->PsZ{hcxzZgn9a*zvqrLnl7n^t^GUF_s4;=uBrz5(!Q_3Owkb{*mS zHUi4u_Sik}@DAghE*T+hSPS2!1MQs97*6~#<-m=YxeC{>3Ri83&x!9~g8P0nu$6cz?70RV4YT%u--{*}Ij?-d5{? z3%{3?Gm+KV;f@}#2>nb9zE-eaAq>-`$FE1Jz~B8RCPi^gRpzJISpOA~`TZ>1)K>vb zy9?tOx*m)BNIEkun;z}@>|M$zwx;~gA)+M?T*SxJpC23I0n3)i3P!H$Rmzm6aArK~ z;reKLqg}qdDKEt(LYcx!-K<6*@~T_q=@5f6XZs@`ThIcd#;xjGS5 zIfnljA6T|37pFP=!9R!nuQBOCxYHX%z0jV>ZNn$ka~>$-1W%YK=l#SPYWo0wFEzGp zU|@~qEw!>-ZOK*XF-ZZc!cS}~FiDML{%E&M|NA%O@=N$t+173MJr~CNlNZqRfI}92Y46eFDY@F`D-WbSxZ&2*$%_%%|ivAyj z2(|#}b5;_)))JFVsqYeR4;v1pfvH!{g#&%xIIEg8&Z#E9s7LHmSi%SaTL8UJa=tB0R`@U0U~c{i(5HFb7+ zpW9jWYK}OE?H2F06pk848*sIzhnWo4{?-|dINXDwE`It{%(7~D~v==%ByxnB6qMhnc|b$U@z z5r5F#@$d0r*vq)*3ZVb(igFFQ>v#d0@X2fBTapV1C(Lf<_qQeXy=Km+1PIT9Ctf7l z{Ba8DpG_&CxCA)$UF{nPUYCB=C%*uE-lAX<0R~^ouIJf~yCpw;iQOdP%@LX7o@8Ud zjVdoUN&I|PzSBJf_%2c?Sm%0=pZe}6yz#!zVT~Vbrl1(897ysl;mc*QysF7?#zx2+ z=Tv-i92^wxx{-==bHRYSCC2&E`t=bvNn=dh)nFp#iXmP^*5~9!t-6HFWIHAzj;*GW z;=wH6h!+D#%u7d9gE>=vdT-SefH%MVn1a7Qa5|7akK61&AR4-k?{X!^rNNMV#e>w~ zILkS<@ZJK=ml4_XuH6`DtcdJQ)s$^Sr|nW~I2RM|wkUBvk;3aV@1&)v$A0>0P>ZSA zpivcJm7U)AEbH}AOPi|kLM*Wl6N@KZiQz-d$X=e;`=pU@u9+~1X8^g%d;eSk(55ec zjH+TSkjsz6$6(#^>{T6;pt(8zP|`}u{%-R@pKJ{%wrv`gB-Q^1G~3SWkJoz(QlFQt4$X z4cJjf9Hb-p$cMz|H}ao}@zy;%817SHbNWM(v!T=j>j{UZL%`+LjARX%;wJzT#t!{Y zV@J;dC@-m6J2Eyq;!(L2CRhv5IB+hBkEly=0b{wHiKD}tEgRE*+8>MzubM`dlFxW7 zpKtEMP)swxmwnM+TV#4E;;4=we-{+DefjZ9NFt7eU3crc4XuCB7OCT(wCqeHy5MGB zlL1bYYYXGw4oNL|9{AoqiNbr2ZaSN|NL2Z9IX@bI`5hh6quH(=nSsGAa{d?G;sR{^ zpK%K43sra8a8a$Jrh4v8x>u(&haI4j1#)wQu{NyGdG$oig`0z6U!bIHz*ad>X}5dqFc3a|Mks; zO~iD#cTD?16wFoJBS*O$o6trjXhkXhBkSG?ZA(Onm)F*1pmqY%GhB&g<|!m@ zJp0k%3qg?YRm(ty`GKgJ*5FxWgd&s1Gf0XZTFTtXTFIKT{=+uxSIHeh;&J=3VwWyd zWB0#?TJlRyF=?9A?=ROmQ`bfoxSA_|sQAD4jVI1lR=DHg;{lp@B0nKU%j;$P}y4YDj-gLV`BcX6+2Pnyd&b# zNyZ&Drv|D0C^EcZc9>CWtT!rc%-n}n^mO$8#9*-;Cu5Fx_*)@}m`hjBsufOZO;)u& zeu=#Lw+6J{B~SbaQJ^h--FaiUz5 zB&HD{DR>qVC*3Xqygt=5JsT?{lEa_U!qBxXB2y*$8UV+{4vsg__}054q1#{(IItF38C$W>zX2BJ6^4z z2jxyLBoU~`{a{9d5IPb?Ezq`MUVVeH2wxEc%{PB1N*(*XO+mdMFX5CWB=IFJ$C0+Pqw{%cm1pOX*~ zZF(hlp&}g`v)HaecfwTMK*-RJkB;Yn#Tx{8C-dH6)BB4}OpOhnt%85?OO_%VuIu9_ z`|#kLJ7F_IuHx@c9Px-YZ)g@p;+P|*?!#c2gO|Ktj#A~cQdJDuz_DxEK3cQeKM}uP zq8dG(OIP3JwD`IeGNsN9q^fDu1+S`}3wrQ{G_Fv7szoD==d*`$yD>+5psu-!Pu#5k zH|F7`>Jd%fS4?|a(L_nKzb?kyx|KhX?FV$Oc&#)5S52OpRXj| zxyJDBp5IOkyQ_IbbT?aNmE4ab?$q8^)NAr#X|i!=LYQ!DGCun|ut=JAui3coz@-K7 z=#2%9W2i#^D%fm_SM{MGNkx-knO^tF`6tg*$VQ$%TmEyv7~EroDSeYVwWN4Do;y`} z7kD`PHHhBT{{Yl3g=q{cA0(6T*7jwr*tvjl6l6a+^*N8(4AjE=?lmr^&?t?>FUF{4 z_Z%XoUmG41%V_M@s~=4m`EcX3&l)Ec$yWH4Fe@!gMJ-z8tu(K)N_W``TY0X&_8oiN z#KBl$qmqtHE1VVvGw=bgY0#=(E&>$aN8w?ts|{#jn5ZQC{bT0OUQQX-rr3A{X6-P6 z66K6E{EThDK){Q8peSTV1iaD1<+*r0cQ*2TcF z%QD8sdy&V+fF|(e25;mox!q2$!rW-McOg>ztVS<9Je;MUh1ozU{(Lvh)_j|fur1#m zpM&bsC!KA{3&7|F@2K8ef+ntv-oj&Jjs1gK+NHeyL#X&g1!m|WQo)E{Y^Wq70BXnqIKqm8-{`(VQSAfZXLHRc9He_0 zYXDsHWd`EAdD|h&(;0x>(BY$m9N$P0pSKOfc9u83WZv^Z>c34YW`O@lXyaaIDb@Mk zKJ;=+;$ab3Z`|EYWEC_x$I?e{!b-v1dioAC?s5*!DqROg?(R4pdZ|N?`rM#-_t)XH z50+fmk*KEFw1JIpdsqq!sF&FXwt1S3sK}@c@&6r0xX3>!;2DeTP;xlDQJmSJ;uno^ zwZVgO$PRN%CYq>zj2!8jh76%VX)d+a_M3dV;F2U^4m`w_qGgQGU}Dcj+M%-?p!~ z{3)B*SL|v1?>USYpR?oqtY44w67zv5H1m1X;u_MD0oE6KRstFWw=s9~)@1lPFD<@q z4ElF_LkVceqOk=${rJwjWk4kdnG8RN5fcJI*HgdR-en*OcW(wi26vu!=zH% zua`cv=+a`4_LeJ*IW1amoy#i>i?N@_|7lWqi$0M1Wt|+RR+h5&EkV0*<<_?7TjnQ|~Pn+pO#8 zwGm(ry3wscy7=7Ht;d1qfNF-${&-ISgk0Od)h)>R-0)hCoRwbZ`xw>DE1u=%lfDQT zmnc5vG1i}vIvi#L;onCCPx%vIopz3<@6;>_Oq3VKmP^a%pI7#PVmnmUZuxwg0SksmW=(bB&p_vu z(S_o}K<8f3w3BxPt=Qk+fwN|8L}cl)anEmsC(9aizS&)0+_u^Zo}$=Jb!bUDEH=`% zqhdoI#|8{Eu|%~J)VKFuIdq6Cdo885-=us9U5+xim|)I^;Rko2We zF0NoTQi*%Zs-8eegPqps(EUcI%sa}P*EF0(8Ak3wW0tOq*0Q#_y^hu&D0Vb%O0uy* z=Y(UN5~9BbB9td{w%w^;tn=|N$#7Ky}` zD`(1qf~OF;oBHe?KfabwY>6T?u1xQeq4b6(zigD=X_~^0SX z=X}5;vCuVi{`T4u-VdYF|1K$xE}nwsC_209>EtCMFT#8)46%P)`xfge4iKvtY7buhsp2vFo>PG=noQ+B zj#5G1#L2~eSEPO?l0ZYd663B+?o+A@#wwnWl=J2}P3Qi-M(QwLZ;8NGwxOtDE#Ysm zUx>esh;HUQRA*!_a|VHOM2`-F1Q1^LV+ZV#9uu>JNdz@ZbEdocvI9 zTTgU?bou%Bf_Z{8CGQRojg)iHx(+|Lb2kf9-9Rfam`gvUCxh?M+pp&IlgSR8bW-wx+K#FbNnA)*cl+xR$GGY z%zwe_9^-kL@&=ZAGtO8cGDniVK5nA+Z&3F1XoGSv`5Dg!;YL2zlcYzzonOmFRut9` z31;B9`geEWZ{Dng(S&^uXPZffR>jZjr~ffMP43|R|1NU_W;xzY{%4uHI$A;WUo!Wo zdX7uUtqB&Ac|~riDy3b_p_(%G)CsFRgGzCK$RIMQZ(2V8qI@Ig>bE7g&d^oweLYkKx$CRoX^ zVg!LVoOq#yXSi)b5p7)Z6POYV3czdmAQL_@IGnGQ6Uuh@ra3e!nNZUN>pJ@U9ZL+1 zN)hmG(4zm{3)jGrtL#SPb<<_w6>>hpne%^%KuxKP8^8k%MNSXWfVe%-|d`8y}TkEw!iln zR#i<>bpz^kS(d-iRXWw{^(e_by5#$iD%?&)M$&i;sS@D~Ei0q0zD}k>+uTeRlj;Vt zgZK^R+ax@%GaY^MfGn#?&v&qVNRykoW+4>k7gtDD9AdkVn=knjMiU?tDY$L$h3z{N zOppwbpGs(*u z(5|1DLA|ybHltR3Uz$cUZ{BhiT@5@DJeEl~UWOxE%}XX*K)!odJT$``B{-vJGldAx zH4|?UokNt1KNx$rL#Y#$OJfr71a6ZpeceA-Hs})@9Z8_9mneA7tkQrtW3%~gJAOrCiXcK|^0O5z&twD7sOt62PKBz8h{9iFD_ zp9!V2(Qy=(9R9G+KSsNaTRIjp_&*||#;Dh_ycDx7DI2;eCACuj$>6~H$&;zI4+^U5 z5sQwPQAEZ&Jzo5Js<-!2Vjb9(I%c9#B-H!;btbRQ&(bpe^{lRlrR{GR)Ao2P%b^yk zocEpqKA(R$Z+;NcT)t;xXaD2{p-qjpN=k}tS9c(@OkP_16m3_t;=VHPvW+Hm|AGqaJDtwL^8i{#3HGS)dW!niK-r+i{?A;k_%8lQVFSL)&7=RBWL%T;oiujrcy+TaG6J3Vd z;}uql@oR}o|Lv?`k{6CCvNr1k{oL!b8Dl6!Pv2-_>Phb zH;=T_!Xfcp5ibDZ!yrD>ml(o4vU2@uZih4L{9d#DuI?{ay0Hh9y`V>u$GE099SH`8 z1lEyWSge`8V@Mr|l@2q4;!tDs zbZ>mmFp*-(dFzW1;U(Sg?dZDGN>e0m`QKs0NPb?~tWT?V+ONHqw2y`)#^-v2Rxq1^ zS~t)<$Lpoi=My(YgF(mt+yX58gXugyw+WtQ&HO9kO?m2hCFXr*T9Y48NuE7**{*G9{Y}8I7YT~zQ1$~xWed6FJ4kpC_~lm5vgqn2GpU^0cz5lree9Yi=&yYO zW@q$KOo}|F*k9l^MmCkN5&Do=MO$^FIl{PsP_%j}NxVa1gR>_$d(8h{#l`wef|2oE zP{Eo~$g0?9?t_cYzKbURlY>&O%BJz~p1(EozbIdAoHg}kbXo5Abl%!BC=+^)`Bs0G z8F=ihAHrodk`Q>C*?7vK|9g$C^55SC;XefC2VEZG@k$<${5*f$cjLy0Z9$CL+SuUJ zHw`Ztx)Rkt3b73%NhnrSzYpU*9Fw@@`G<`GXg|#I$A9@5{Obp~xCIu+f7=}V>#+CJ zA+7)G=&R3v?GA){i@BKJxs#pQ2Y!=&dWO-v|D{B`=6~z3{_AWoBTM{DTmI^r=lcpe z5$rPoaSiwh!4KR59Y7OSV+qZ~3Ug7c2RC=$g-ZfMkYrPplkQiuZWT!wH+na;+<-C5 zK?ArFWAL_&GAX@nNC6RnHvC5RK%f2}+TJ=YsfNT}Mx+#wt=JwF+vGp&CG#QLN^cn8LCIXYv{n@G*6E_Ev7%{5U5dgVDh#+=c8#m9jr#ze-t*?}f}rmk?WA0h^8<8~+PbGsTSl$UZX9V5 zpkY!6$rjFo?cyJ(a*i<(o{brAUwxdMMEAGqH?Rwdm1&-l#-jH4pe@+yVMGAyHa%?S zu#ndShz|tXkWZaQjS&foPipD3lwT~Z$?(fu>xjXtudUuECGSc0E%x}oJX6OL>C1_- zH^ZH|S`9+(t(Jb{EzR&0sIVze>;ah1HU5N5*@tH$bZ*?Mj*p1i8*sL>I)%GG5jb+q zY;@KX4>tmbeBC0=9tCpltbl4%;>T_&t@0L9DRq zE~(4r1$*w5t1N+_nlZnpRrFOmXQKBUp%d|~=1;1t_(SiD``=Jy(>L7^4$j^m`??la zS8cHHzfh9Tj$colqbY!=_(+c5f1t*(Ja<%KP#X5J#)WyPIC$xgE#d;9@{}~UJ_nA2 zx(<#m2;B*bdl{3^*&|zX7;)u_r%SZp#mC}l-yJsHS8+9zE}lHb#_QbLNQ^1QfI$4M zS!Z99kE+M8aXguN3yz=wjUc%ab70gt(&+aN!m;#mx_N(l z^Vf)C$Vp_{V(wRKw+O{ExpnR>#hj{y8a+-lPBzB7ze`3dQbm-vYVY%<&v`?A%uJzu zVF1Htf||K72A1bVvX1c`0lWB!*N%ReoNyvraeZfes^+ZOz1+HTi7GA^3EqQd??X;Va@rnGAy~ai(%@m#0f{E%f`rNPzAC*X@g0 z68F#yo-SoUAhh>*DWBeBP(IcAKeqp*Csg3?$1yA8t;o}MzuIjv?zjrn$isjc#F3W{~$D=#m)iO(%?Pl%D}JTBa-ys_^;g z+ul&0o!zTaRT6DP6^jY@RgcgYR4Xv^d3d|3BzW!+glRsL+&yRAy5hF(&;(; zmzF#BMX~=Nef+x!*8Yt-C`U)&G-8>&*ZZC0tw0p)45D`BK^oEe%$`34M64%?ZgZ?A5g?I`1YS(3RKYfhEvnsfED-EQvY!7b)tjba0*E~yL02xt zEJ-awF!0Ncvp;Xj>gl%PZJzjG)nTG|=@*wK9(RT~qXdy6AmFyOt>W%N;|}f7cI|&5 z_3+msXaCZrT4X8-mpMLhjY_+~(*g6!WOudym_m^DoNz@p>dE<0JH0q5M+m0o!f$NL zUyB?y;k^4cRpVwOidW78rn(|XQyE7e=SLahB0~H=ff6A5?V2Cj?6>I14|})ufr0Vc zw$_1Dt2~5#2oV-4JMULeUcU(=|r22M$yEu_-TONTEnCq2^%RvAY z;D=-*I$4|wd3wvxZ)YwUyMVJF+Yz=%2*dJOST-&|W`0l5_m}*cIE` zCT&KpX+iB;ZMh4wi6nP*;fL*275}NUDSL2etAUa4IqQWFUHk{oieDp%eUfmF%>4Td z`l%DyQg4qtfQ}j@vR&C*_+T-D+Og|vQk35&=j4fQX;Uh~<7EXXC1Gr4ZSOXyypX|C zm#OLJ^_&|bGC{m(Agsr#19z7WtpKK6e%O(lw~86t;kjPDw{GdT+q5$?WeIv8xV3Q+ zaZpz1R?C&b-w={A^ab-|w;t{2LpB^QLk+JgKhy4P&+?pvZ`PSK%aMyQO{+C-OrQMO zzF5!VvlP~6ua#wxTqCqQ#_QiXTsPD9_|yyMd@&D-ScGM(LIAlsXAw&@fDn>bD@=-W zWS)4AdH_N4KP9Djn;f&Hd`p>CD)_Z)Q>1NXXFoLfc1*jm_7*1KqN|K;$w4^&^J9=2 z?$ek>PeOHBHkUo&RBtg_7Mc?Z$}Uaj9yZB>prw+Yp)yjD^v?M-H_2k&dxKK_K{NDm zt`?_*Qf2XyY>K4CVQwoFqibFl4G+*A<6mhFI`mpFWKoLHV53F=K6ScaGWzjeHmCmT zbgAUcZ2`(Wm!)#yXk5zO=5a@TTF`7>G76W$umeaI5$rq|U*vVEn zs=}VC9y|Vtj4r&x_H~5^T+{HMD$h9itv<+)eVo0-8FxPWSU)Ky$aeNT_Rr;L*k+cesfGyd@uYqgKV zi_K#1#0)}pmorVc3UgZ2PeOhKZE{qoyc0rKMGqx_%JR`JU$17Rq!Wl91nvW;M)T|b zDViGii85WxPlVD@)D`hJ`9~E{tocNBAoIFRGvo5$V_Thv;hN&*4 z9)hKnXE3F26+|~AFhTQpH_kri;rkCrsl=w{sRNOF;QX)%;ib#%3E8#Oxy;&M zh~lUnt`J?xDv%wb_~r`Jd83K^8NS5m_cGq=Zm1iJ&e3W>)YrOs>qg=2BMOUP%8?`c zcDgTWg}(ZMNNW`yjx>zXu^6RIVm@${Mcta1E-b#YuBaD=_byl#<4ogtk0&t-<|*lq zLPpFF4A=ON$+s)OL%pPUdM$C{ZT;9c#O_A3(NfTLBt>?#J2kiDZ)$FMy5;l#R&y60 zro*V$56ljJKIsj$KvO1HBPFDBFi&Ae(An1rYF(--s{vn3MM)wJJhszB2wyu;&WrW z@9|;({Tfl&*Xa7_RfdnzhvyOmk1T6s53fw-K|oJww);{hM}yz%Q$2StUNnL2{K-iV zRtm!vaxo(Pb^;VnUtG1#lf}W6t9MpX$KwYr>NE0RskI$Jvh_yy-K&Z5LClNw8`{gA zB4=BI<7AxKM`#+hb?*bu)pTEC*43?8Y0uuAw#4NUi<(sd=>w=DMC|(06XBB;rZM2; zakTRCvvdU6yn1U*Z)Ex7)3vGS`4xvBr>5l%5i#iDlTy|V8#_#~3St!c5TD?F7F2f! zH)1T$r>cAH3*j%YoN8h6sf0dqZ$CeM{nV_KP<^9h6VymDX#evTTls91?fc$ojn>v| zy!kRxFuB-V9vzcX%#;D;Lff*#w__1Uep{QJj-M63t%jX>h4Mv?%jIL^C0MmhO$Y`7 z?eL*?*<`T{DRsT4 z{7@$t5IFm(IwIYuAbUyZpbXYM<*1WheN@k-irdu6l?lz!0U-5-0K=S)B84jE%c44~ ztzy=EL*Cr|=U))5HBrbn#7TuvkSiv}!G@qTx;wrn{(|QXiDp5dJ_7xn9Y%nArACJI ze_5`PF{Ob$UCR1EzR6KDh-8CGe%@?A2@1>t^eDwVUy7LHJUQF;_)cJtp2L;2q2&ta z&K+|5BKY|E+7XZpDY2NJ4oI%0`KlF(SetEi3)k<=xWZrV0xVmtoDyto4frc_=$U9A z!cyR_+OILco>M`LWUkLa*~6yM<0em`kEAO~cR&J1fJmY~cxjgRYuYu%vbB3oZ&y;Q z?_4#WBs+?krf0W}_4Db0uyXX&2W{EwJeDv8LUdF1H}WXsZ~2W+db4@o-CRg{?Y^|3 zCzo=2uU&Lio5G*0NSiCKiv@5w($=?SqnqYkGx5#+=PdVBQlEa4nGN%u?oSPW*H@;> z@#Y(zl{Y%WaMNx`J-%n6A8ieLuU)N2ei&s{>9du$t*nPIp4gdJ(v4ltwTnk1Wu-S> zBl(A+wg_jdcb|!Vw1cGfviPTwHeEf|)|m!$pi^=Jd2dLwJxOE)=-A^?T~Ovd;H?9m7{F z;|ui9hn!7avic#;BCAMEOSx<|Hj+B;6L?3Nt!}*MJ0ntJ!3L8h2-QK=q+0LR69sQg z^j6#jY3%2Wd-B{EFYatnftpc#{DBTn>?CU)v?sK_(B%988zlEr&H2a`4!<8l*yiP< zb#Qv{zp?*VOtO%3+Tyh>*2_tIHZMIy2G|tm=jK_&?hx4EXQ%O2WX4?@*Vjco7Q9V0 z&nhi!=(DM885D3OEqN%^kut=4ef;+Jva_ycUN3!Xb(oLDc-f1E^dnUWTGzt+)%_46 z0qBOe=Kc@tu5U@!Ep>pk3#h2sp5ia}eb3(8i^&A6ZB?qAnwwI$2RocA>igaDwR>nB_ z6}EC#ImBcIbXIH0!JEnk;$3nJ@G6yQnXk{DM37`342oqN;}i4t-Xbqxlc{PJzh-j1PV5I9ZAVGXwbnv{jnR0_-}ny`b1{#^5M)bTu`Hdl_;kglIo6TVi)fq zURUI$Pb0(i;sl9cy^5xS%@m{55+wdFMU+C_&!s!{Zlz#}8-@^kQ;dfzWMdXnvRzFFCnC8`0{rxGlV#z-ECLhgdneB& zCv0@RGB-o7uS|v^?VB%g$*kWeFdGC3-VL}~qlO#pc+cbFAq(57&OYJa4S|cw6nsmA z<8}ZRTRs2)KWJ^ZrAMuMf;)K6@Qe=EW}O`+>sk!aKkOTSWiv3B0%ZP{2+#Tax~@0& z@RFf?9Q46_=V!sJ*$p^_?UiQ!Ba&7W)as+*5vhk~CE1raXY3=?{qjiZ37)h=HA=Ud zy5LP2BqFm-Q$2r1kKfY@7hQNp;Wez$g7{!VUETN7CURg{j`=o6=kw9A9 z-mb<{Pl(-kMpa(29Hl)K@u$!_*3z5!JT9lxZrP4gbKOYtzc}&|WAOZvzRW!@>^OvT zup(8q_B4eFtBut2C&YK&+{`TjZkXcwkYSee=!Yf^(H0)M{0Og}-bAor%L_W3v|`q+ zG@l#tpBSX*sJly467rk1@8{im;Paks+>N$0qeu?kh^k%S>3I{+fciLp7nWy57x+NP z^i_3f0LzW8l5%qg&4BYiATnog6`X09xmBW@p9Yf)5Sju^zzzzOB z5O{^i$cUge{zyMWHnabpCI55C>I}A$``#w=+4&Rfy>GkGFVN>9XZtmb|6erTC3yW! zvu8}TWXu`3J+qPN*TAANHf<<}<7)oWRZ6_Bj#%VEzzi+}81(MSX6kY30zE}2r)fiX zV28~7@r5h-gxAG#A^maUA@R$@3rG=YbRUqsr__9eqfCqETU~(wZ(%H~9iyo?P&^b_ z@85TeSv9u8az?@E!l=4@W1nnVJM|*o%)p>n_~j20>@S2WK58FgHydfjdzxA)8>V08 zrNw&s)AqLyb?bG6qQ5p)B`}*fcRwQ0{oyfnFFaD`_4);GL_@yUU^y_5%M#7JYR){& z-v~DhT0nfTvFAu&h&p5$nO@@~nWR@Z2W`Wu^vtq|M0qw z*jfNmoJ9BFSX9wE>`wvgj4_VMjOQ=@+nOQB$g@B6Rp0eu>H1|SE&-7R0U&L;3$$<^ zDK7l(-Gr();)%q68E}(Y{%*jPlX_?K{a}qY&H0t{>fa5xh#{zoIasnww-DyBbqVcZ zkCU_suR3?y*&R)}mJUke^bUShCcn@gzKhSS1M#kDq$eWigg*;jB+>ewxUZTH1@9}> zLX<=A-;)+B_Inv=k?jJ__2OCvB1-)O%B>B>bu$@hYU>h!6I*TrEwLonBF&vU6PY0n z@Y&iJtc=A)nK=HSH1zIcY+^*hfT{@nZ@jwZJ_cfXNEnEv+BYj)ac|I0g4s}<$ah=_ z-sEysTz)T$T))?HX41au7|h|n6nmY#L&8tVtsw`=wAie z*Ow2{ze!2|jQ%1|q(o(z4}~L;YANbSh+6UaQ7TEmRI1hB(yyK(Iwh%Z2XSO&S||O! zZj%KE6=Zqb;EnGiB$Tf^sqAm*G3jHm_pf6F#fmk&gfIx8fujax?;-C^rWLB`wK{{kift zm~TY=0BWC^z-9;zM>DJoD zD8<$=n$PSvk>yjSab+7R1JlSx140%`E}I&(=pN~rYA}U&IO(gz+OOe~*S{9Z)#+6? z+<<6-anPL|_cYyUMv1lkJpSJ4wXm*%hwai)I;Y^rv74eI{?*6U7=th*AGioSE;v!YrXINloKg0kDgj24!dx&I40w+G{nvV#O9M=v2 z>_U0h*CIL$i{A_Go6o#^CC_kY+Wu3aza1UXVykkwWe2F|z9@l~=^NA}uE|T%Sss^H znDd+-SwlP&C2e%;9?!%^6r=Vg!vJ^I{19MU{lnX;j2U;VNzYjoM-VMxo*A4E_m|J4 zWOdnlnL48?-S1zQMe`(45RD_ifRjeH`ZZvNeEsNs>v!G_O6N5t9ezMHOa#6u{qz#g z;;Is#63=t|IFx@=$16Sy7X6@`szF=v+t3C7CgrzFoRxOty6HPaYa{O0|9}9^Gsx2JC`dTx%d zE~fapvMxVIwg!hzMb{kh5T{*yRx;`H&`IMG$HX5`<38lzw23@39WqWZJ(5iPtuigD z94~_X+((*NwFOaGY(@MKnw(9Y4Z_gKL5*{cIj%h(&W+;D2g+$`KWyj@A-_IeI98ky zEFDeNlph6@Exyd3GZhA}G=L2kZZv!P=Gr@_2)dwM;E6L^a#dXbFtOX?N1k<{$!U$> zT))YfC(_I#lg8f>QSzB>-;;8*F!P(O%*Ly)eU+LWnG&3g#5x_%UE9pj0sFkV>HUu{ zYu!RhBRI+R3j3bqehAQERM{k`J(oVYm<2I`* zvNkMr*8c+be?aCTPDPk@EHf#3&hv3)Xr|^+@f?T8ZnabAH2>5cnoCF<7lN+UkV=L5 zot-N%%$R`21c^<@?F+U#q=zts#sH};GvY`_^m%>n8%mCEcn|T%Nb2?Yn7#xxH@OF7 zK~Iq+%hTGT(+F$b_@WKdf&7J6hlFGvZr~)=W{&j^Q}J*Y#e_4`SFd;o9n>YX%VQ(} zKyj1F&2#V13&41K``3qllexh)zL}R}OJ@YlMywbZpt$>{#B>#lxzj|_JNNvix>j{} zh-yPY#?U4vdr|)8C=f%t;bPMHLrI0=+K@#mx?S%NubRX9v!$X=zIp7Ag+fw!)%cl+ zB_q@B=L!?2;XO08jNNo3ML4N4F@nKg7gWQ$*DE9p>lT!|0q!_QiW25%Xv~(CLWb&5 z^4F%v0*v)fVy=B{8iQ8u;q78?{&g+Cc!UjH`+!3pO^3v}sGR%%iT zk*}>N3=bebwi2m;7hGJGwF{&&)o(&ROzjsgV8fbDfDx|pp)HfS8yT;Eb?y!(;2IR- z8Qm-*tR{&JiLr%ag{G>v_9cU|Ynda~>$>a`i^<7pi&OOGDt2d7Z)q%Xtuv-^d>LrQ zzrv4>aJ4!JdZuqLoSLpXRM{?+I+c^eCYvxr zLO~RC-n2tTMWz+>Qx!}Y-@UyCn-uUircoPugm%~9YV%ao(~Fqb&kPVLr?KwX2XnoB zwj|lTUZ@iMnZ_u)BqX*i%9W|7>pVurjV&1yV)^B#RLbYJf`aVWwxr%yD(CyaPYmrX zzbhio`rrUCs5^9JeWcM6`xYi8V~BM#;>0f_YYyYYcD|i?IWDPh3r92>Jq#x|A66swUbAg@2^yojFs2-Pi2mJsMxYva3IDl40!MpDmG4<`EI`!Dn{a!l zlZr|6KuORtJx@A!lPcaw_N4u%l~Iz3+&TWLv~sU&;he#NwPI~5JI#ajV4PBSG29*b z{inuDVVm89K0^eY%URpvq8FnCQ*({dc~7^MM!+#}0tu(sest zylxy=)h*hZi@(x`^M@(0Ms!!6gD0OeGmiB zNd*&GXsc^GYd_+(4i1W1N_5Mb88s81fcZAshyAJ@!Em+cBlcI8AI5W0R$O|2O3KP< zc*F?RAM+^XFi!A(p-=0`n0QBBS^x3T3RVAxatFIpl0G!oJMfsggcXa=3Q27f)6!nv zL#`~<xxwlHr`xn)rn9-D^QeDw8JKRd4$ahjKHjfbm zILw_`=!TwCxnFuH*gF2Oyg01o&o}zZ`w}S99y3HstrO6GpslmE)55~`5%3Pbo*!s; z(owZO7cTbGXcKyes#j4pK_XeE>n>JGr2VnD0)VjN?kyR$AT<>LJn&Mt5OKrSci^vBPwF{IP z(V`M0LaPZev$<$JZxcUWLo<TcdtGqH*A7_E}6`TZi=U7LqeL|77XS7IsrM_q}Iu6)qFft<>3T~lR`iT?KV+;1|YR20H%Yz}fxB&YNjbR!Jj zWqnn4K;z63{E42>beyWHj@cBYBi5DKYyomIJOW~4Z;`(0tWnO+2zvV95k+eTW|e)p zip}!7hsWdB=)hD;PZWkW&CM@a`gpF7_nMC$)}a=bg#nE$K;=~{i|N-#(p0Y~#$Flg z0R~v$lkqP%;K=bA1#j-{#B+5Q?6)ZmsPE+lRdqb|XJu);wrBa3*KCWow#krR6O z8r#ynv0Wp)wa*pbrtaiVQv7{=AN_kixs(SO78RQ_-nqEHXhh5TlP-H5lrIZ?DLgOG z(6O*5U74|ZBd0STQpmG&iHAWXChUy1K0sLZ(qdmIYz9XT0)V*8DPX^=>&8!kZ2VpL zbEsnGC#CY095D`JAL*^yiQ4DB*IuFmU30GY-Iuat{ayQaS-Z;ZKfEc)RbOQ0t(6{b zS`g0wMwacsg}B>MaaRwIFz!w-G-$Og|F#1`v}Q#C9#bu{Jf$MItbK@-tr(OVYdB}X z%JGu7N9p6viZjDc_k_Q_!wAstMt+kddRMr_3vkgm|Mm+%=|27g81?tn_;7gspI}g! z|M=N|p7cFW$_KLXSPJ}hj2O=55F|*yc~5F>rXSB&57&Cn4{;nyyZa^-yXsbED!Trm zOC%?K`#kgp^#f6rzsAiAtnD1&G9vxHA6|mm6t5>Mr!Ex>0!C|mWJTFrKA>0oNWQ=z z3LKz^?UzKYIFONPkA3!RGiFL}n9U7}-z7rqTHhtR{aIrzncSsAZDruSEMru3=3S3< z?TZ;aJ4;Ohh~ka!`w4aHt}nyssoWpB;@u{qrV>j)(IQxH+c?N=8iq3WKAVhwGB)C8 zLHd|Q6<2Q1!Ip)rmbTG>GsMiKq)o;gX~IVNR*&^2KL%+2+;`Pe@^IO|t0VB4eL5&P z*Xa#A9&i6@Ul*lZ4$fXY2cE~U2hrmc_+}HAP^2kcEEG7Zh~+MDEb!-D`4uY2mZz0hn3_(nHVFsGJd9U4Dpipw-DCb2{j$KG7k&KdES zNt-~cKeQ_Ngm&aiI;_fT?6(q*pnlwXWLHP}gZv%~hX2pPGA?~RlcQd$SHG)-n|!0k z6yw+-Gg)_kHe@2PBgl>ITwC!a2S7X)4PRak8=45P;eKu`6+2hq$66&PQrHO@&;=7c zy(GcD>-GL}p<9?9@0-I})8`!PKnM3pE<8Fm8-M^eR~M(@H#=14bE&8%U+owZcQ$k6 zt5u?)%5_nG0FFAJY9u0+B2hR^p?i~e=$Gn^Ui_}7c;BLM!8+CB@>HX%^v@^OuXaD3 z6-Ds%w$F&E{el|`bJsgu4J+ZQFTMt=Q84ix(*`tO;w>5}2x6Nwuk-ev7lF#^)INAn zFzO6NWj#_ikmMBn8s1;EF{uz zqb#da^kV_c!y&jC=rBO)6H1=-@;!lsxZ4IaXm-~S>5ScG(_CL3E`zv-6g2LEn zYQfBPc9Vks3^8&*#^*QednkCNo5A;~2L|34&WMHp?GRonnaHF*=$Pl`+`G5Qo60U< zYzn8ZoD|h&emaytw$GdXYi_6lm$7z&RnY@W%{rDADu<@H z)A(_RK^5jUJXq-b11UX<_z$NJWd>_u<)$lHdJhvcCR=#SN-J;NCUKi_b=2$9!>#F> z$UDnld9Qh8%}6A#gv-C0I)@pcr(=4cV|Y zna5#tc4^w-6jOP-KUY_`{b6<{UqBC&I8%on-=9m>9%@>VRj)9^>L__+CDAzv9}i_h zIv{WvAK2rN|LN3q!XQ?qUeGBX-8DlQTXPNK=v?guJetl}N9^ zCB1$@pr13je*gRItKQ~UL+)Z$CbFS%oR3*qk1GP~rT{k^lFp4#(4(`|m^_;V+G5Eg z57xW6YnWup$BHHM(XnhYLuoYT`{p3>fKD=*f{A_CdYs_qKYO#6WJk_Zaa>;1PMja! z?(`%Ny`aZfa-n0NEZLkXQ&g{1zcy<}Y#7qReQyH!MO>&h{7t9JkEF{h5aAu>hG-}?2xthyzS*E*ex)K%~Op2Suqpz;gX9DQp6 zP~K<&joU%4T1DLgDU|B~0Ch1n=uxAMsaz7)j|mIkSDFFe_xX-b$2lg;9g0+7UoS08 z6&@85*vUdu6(L*RiBBNrRJbL-a%16^6Y;BHIFZT-c*mvW1m;qdd#%h_LbU`#4cym-k-q`Ma0H^jB~6 z(lP5tn^IE@xeJ>y+2p@C6CRCdx4gd%{l?gTWY~C(I!GX`AVtm1d;qQ}1z3M1luYWK zA$YlDgC7wzk3^le|WS{pnJ_r&kFYf=ic?Ssty1U0?7$f9*)dsd38`{9#b5P?9jgK3+Ncz+oGgnj=n2Sp}LYCY85L9s>QvH`WmX^qK4G9@a9V#O?T2o z>5=k$Bf?J|1g@;S88J0oj7DrPZZ0j2WWK~=3ET9B$mmJb`i&YZ_HeWN_cMfw|BB~x zAkx1Bc#?w&%iQ=*K5MSAxG>J7`oO05zJ=xKv;Z*+lAD2d);9if?`@^_<}#@dJ&8CB3zN)wr}6TcXE6(2dyJSw=+&)h|lL zvJq_>hWIF6E`pIGZ)zsaCYGTyQm0!;*>>=wb7`+Ade}N$vheS2;|X0X8n&)+`S4v2 zl5hKp&pi~w9`%Tmnh`F*fcy-h88sOO&Z|OaF;T7HinKgC7yI4hbVG8q5R+kd<4^yo zH$PPi%>homS$gwC+ZQCrdaam-9ZJ=HW!t+G9X8_l;SEaZRCx3ALA!u{^p_en9H{y4 z`J&cDx7Mi6vj;07)iYlEBN+z)X`wp0gLH18M$p(Kvg8RLIU%vmxNaee3 zWa~v*bHRX z-QihyP_H44XbQ!k099 zw|z)=kg25OoEJJj{U1@Q;Qrr~tOHx+*-37@Jz zyRbU{|DBlZ3%!()AX~1IpP%d*$d1>RM{UtWHh^0D$(a(pQ2TaU$di6KB8)?_I+jI4sbw z87X5S;i=Dz-@S}&(y`C*m7uF;C0q0_q)rZGJDyls68H4GMH`8+ zCJ^%YSX!b|MMD4Z7CmHg^3U~eBmRHM=Leq~{U7kJkFa(76fxrcDY3<{W$H4!ym-_CJxdxcho(=-&Mf3zoW7f?|D`pP23==S$60QemcX#K>pC zs4XOniRHPI0(g&}o)lS7++(1Xp)7Y(1VMuPHxyLnBOVX{dfku2F^lxa);EPO@$m*D zP!D3y)NRX!Y5yYK(UKp_UM$M4%@EOd?~8Qi=ok_I7+X(O&*~;~Dt(ZiKccnqyARFVFh_Nr9&2jA6k0W)!GuIbOMsFDNVF8~P}K1=oC&(MnK9GjMTF`T54Y9qed zaf53G;LsKa5eFxoo@N)(*if&! z)V(&*Te_cDpEB#2br!c--3ec&Blcq``PP? z=r7ScWnY797!1!Z6^*|1khQGQu&4O@pt{@a(6HvFuGFDI$=+nW8D=R9FzPMu&kvAN z3cn`<1nFk@^obKYr1aqu^Ww`)`4S zRf2d~M*Y5R=BUr-nMQ{XWfC8L#eetgBVZ9r@NgBAAyE?<9DD{$QW@#>%xE*G6!&r%)t`}uJkcsrOtDn{{Pl(P zJyRarc%Ei#=}!ieC`cQ=PeY4iML!!-nh3vTdTRAa3*~T2+1$*NjMBKNea-C&rMr;_ z4#qsk6^}}m_;HtR!oVZV`;4A-25Z-XxLrb3F#iaf_==-$SH2r_I{b(*Sr3cELv*1H zc)O;>I!3LDfoQ);S^BpP(IbOdIV(!4j+^rzmQz$-syG5tJ8VVbEE^D&8-gEE+^vGe zynfAA1ih8+_McA)NdH>&%rfHlDB)D!1iRCJaiM~&^tVoiH!%~5%w$$r_^%rghyNyI za{3g|>h|^yu=VgI3k6ud(uCZ8exhv<6fO2q=TA#lM#SR7S%mi=wk!?71AXWW7V1KaidZC7{%EUO%JbV1yp&%P= zkw`(w8wknTKy)8j1^%dQ(CZS&zqh5=X7&GDUz0uTx39_h&ez0r z=WBBRf9Y#NLlpJhKh`y1GL70eA!($nuyv(a_UqCs%MZc!l7*#`C{uZx>)aY^XhL*P zR|$T4BVU}AtX~rJOMzy%@zIm=71k+{(V{mWVyjz?(HIs1sz}n zp}n1ln+e?jt|+Nx-G9o!oSKpfHz0Z%Ph>pBiV4~1GNn}f{QP5-mV@OQ#nV}5a`LR` z0>WmyC=#vK1?=O&mYiEPj?f2mab<$`M*RAxSI^ViGRl@ZZAvMLhq^_Sy=&$O*dSzW zXKMqLA#%~BJ}yk_k!4tkO41oT?=arjwWCshr~AQiAWLPeyD5NOe;IDxA!Evjmju@=-q?IkDK8ZyZqVsw4Ale zu}&!bdUG-Dv$o4qDmQltHZ7s|3a}N0NH=P{&QyiA#j1YbmZc_YJQ0TGh}XHx*Psy+ zA_8nFP|o?-Re^9*a?<&MfFxpo^T+=4;v7`1gx&@xaakgLd}3B5oV?KmeOa6dIF8wB z9qp*k(c#VLi3s3iCc>WFyV?BuMRa}=t8H>85nB3q%q3;i?Bl-x9KHSkIO5!2ag`#h zNI4pjv)=%$Lxh`^tAwiK9X575gMHTT9082uV;b(ST~o(Jdm*F9xAt=;P5j#EPGkoy zPHDzSmFD}GXJqBO6a`u;3KqQc6k=FsA2Gv=V{MB>L*p&J=jcQ|mhhYP!!NV%mNhkapd-jG z6e-~81K#6nOC9Ln^L;hme&*A7E@=w7ai7!}((tt1NHi_}Lvyrc_sd`QtQPkzPYlgF zukR%PP0Qg#>Eohlo^ilPRyZ}k4vmRGIwOIklSNP=sDr#R}`GH zVlKC_Z9D#0-bJv6gP3FefqPzh%d$;c*-Qh(mP<4Kxo=h=^LDdNS#07lI?KDlhWM;8 z_q=4#%dnDX2>`jhlz-brqMn(5uxO@@MbjlR_KcT}N}Am83~g_VnW7+0MUv~JVh$YS}UetVoH`mC-`yuv*@vy6ZVLOuPUeGUJA;opZYKO!{cMl zUouI^Kjhutd+#@PJ0~RzZckV?-SYTlA;aW1_+7?~hso&ui1jg??!67@NptpL*r8?% z%GS*O)~S2;vY%UGKskt`B&M(TdteFZzLw7$Q@D@c7P6zn*W8J&&e$>wnOBBFNKq2r z^l2gy436ebp)42zSm7ZF3b{ID63^J~!C1PUy-w0#)NNxzTm^C==ncot7wJ`rN$BDT zk*+CI*JlEgxs{{DjDyBhM>jNyWDInlzO_>WnM_=JO_mOs!qN*STX+}Vo766V&y?u! zvL~YAl@<1p`XeehWIc4&*83lbR*YZqh&&$MUdgFn3*O6|UqJ#s-**lL+c1y3MV-J& z^UeP3@ji`PvAlk}ra#0LzL(KF`;mw_{A*vYX5VPprF;|bGhI+ZN5Q77i2RG3in*WB z2>{b;=A=iPH|@a_+^BbkuRXrc7Cf5tD1<=vr&^O?DsX83CvrY+TAm!OIL$(UQq}XQ zqEbLpL1Xu|eY3-V+Ku5imydGzdr{Ej-($mAb)7X;PsJSM_ILWjm9!-7tdZEgsFiT6 zvVM+(V0}!78>D{ZuxP}<=X zC<@YuAR?)BBOqN$i69}}-3U_BjEIPIm&735-8F)Acf$a~&>;n^pFHdop?It-w;39iyHRr?cEa<3Y6lyt$e~yyn34r z@}p3(D8lEhGbrl7LtrjuyZPPPv|X!e*R`6yO{3Ik_fp55adU7e{GZVa@Lk?|u68>p1g!?}wlW zUB{Wi{{V5<3?fsA|9IqgN_)*Oy8rhiwtwd*n6IQsF<1Wg=lcEqU)c9CKPvcYc$kIP zmM6?1h=J`M`gafKzkl$$BD>wDq?pxQK=D3>p)4{>da7tOX@wo|i~0a0KJ4k@MgqIa zC(d^Nyfia@{$}Ze&6P%=`T^&`a?AVVbld5-X`caw$}Y5T{7?nS*9E!zfK~)p<1*9x ztg`a7k1*Svvayu80`MlmHv?uSH~JyD2WSh;bBZnw`SkII=UP}R<%P%Bb98!i!t`=Y zv(<`ka+O`vedPfx{CxwDJBNju{cIMV+``Au-T-H}AQ01;+3?t_@fo*{54;ciDEA1M zUMft=&V>v`VH#LqM!XO|$dUk32t?`;fUN@bgAKU;q5yWR9l^z8JWp?u%su*E2#kwr zg(9!Tq^JN)Y;Lml_hZgA5^>)jG68mwU-t4S#TKPV8$2at`yS)nt#AU$+z{+>GDWh6 zKazRI9856%^w`4#3EID;@IF7DR*7GIJc9k5*m+q!1HT=(=08iJSewX5gn~uE`ONnjZ>2>*8Escaw5A-6<3FDo>!`CYKs>9bw)+uyUQjLIxDY4Dq#G01i918hBq>s7eeW6b<|XPh#UdQBKk)-bho@+TZ#^NSg?M@jOB-q+9^4lQ8!xBAxg{VBC^C@PVTJqyYV5>=b~uIcl> z&9>QqKKtfe2t_LJ9cm|={pOvivDB@_W7Ik^9X<6Z^wUox4FU=eUoS~)y0Z0yp?7cs z>ng(0+gy-jnr4gS+3FCe##rMrdqpn@ zrVL~s@pz=;NbyjaV&(&u_)IbfSMr(O{z|0)tE#*7_il}tnWqb`bV)Tq1ER{Wgca9| zYR#+XtM;RqB(I(lL^?2jx~%=Oju+=2u-V5IIM%;$73mzL^>N6QrPc%fv6VL#pOoyi z-rT*e&9cQ~{N(UkH6SlH4Q}%5&au? zNyva5el3LaHt24|cAV9uWuuOHwU%X!Q2b@r>$x*!WuA5aiUt~;(zk(EH4MTLf(fu2 zB)>9lX(jn`lwFh>ce7ky3^-Gnh2QtQN$Ad75L^U(S);e_S`_lvzVV_^b^Lp#(wn8DY)r1*Hs}bmv=(6&TlAG=(~1@9Q;sry8v{u z&0c$B(Hv8(!Cp%x()$&uMqN#-LlCfTioEqI^UWmZ&m9j7M(9|UHeRQ?LH`5F*|W9U z!P?F> z!7H8Fm#<52Ik1gjKGhMrOTj%Sa`1tV2+2*mnihM zGENzj=e)jKfw5Un6WQB~Eb)!4k=dZP?*3GwQ+YM+1xe4UwUZ}a#gh%`Jv+QD3W+)0 z3|`XPSZ^6_J3Lsb56Wj;9{Wl7HZ<`>xtUPy!rc+gClB{ces%FUUFA+3Q>5qY+3ho5 z4({uhrT*N_F|fOMrpWzDbUUO12>aL?=r(vaxqHm6*$BMYQF)15a@-BM#vA(KkA6Pt z-_h^6r?6te1^zraBvJ@%iG41SWU;XXah&%v%q4aY6TUS=|IB{%Wlhc2=|&I-O|;&| zBqC1SRZ7<|S{pa%6zlgM)CPWQ)MhI7;oaIyb@-J&LS;1&%xwNXz_dCbbIY2Qul z2H%r{K5yJ^3<|WzbK6=84EM5z?9Hkq1vCf3GcNo9*b&AT1X`x)zv@yJ>Xc`>SJhlk zTm}sJN>@|rxDTShkCGu4cb)^xxPXjw~E-8*}!AlQjo{nAb z06>FR3m{bwCTQKP7wRxcTMsIkx>p+*6ixEy8{yS$sZYg#b+^5zJms1h1}M@M`yUn0 zR^Gn;bgC)6@x-?+T`9)Pb}FC*4d{n=apQ4f!RsNW>(o(LyGYU8orQC%zQTq(7q@#P z!ww1wm&Kw}9a%+@;%e52L_JNB?{Nx8YU)`e$!PJ#4wp9g6|a$~W{i|M`F*$cF842_ zeh|)zz_0ny@=XoU3!O}M_j;^2qpSBUUZnH*o-SvG=|iUv^e@oIPgZ>C ztWlN<&RT&#j$ccyJsnUDN8Y-mb()JoIBM0JNXh2il&!6Z%(OV$IGJly;jq&ncMQjFqpK$2^Ve2j}A9 zWu~O#d!}f_aVFh~V`}nzNJLGCPi$+T-kf?D`F=}D?Z^5>`l61{DJKxSoHQPfN%qkv z?MBXG4#xBen*2M~ypWOC^()c63c<8r!);H@cH7MiL9vmMVQuG*fK6I88|VFDG`YOZ zdf6}`Og^|BCP*>MHaVI1!z{h1a_cj~bo)%)h*u3h_v5)hrvdW}@8YXP_sY24o2zV{ zI|b6;DAImD+bt;;Ie&sn?BCto!Zy6i8!xWY(v^br-S=U4SO3-!)ZTJ2Ou%i^E*2xG znV4}?+<%~bWK~4}D(Cx)QT1s{)%5LnUOkDhK;PyA9PC~8YJ7R_y57QM3H3VU@!)7; zz`=cblq;kE(=>Ypk7y3!veoir-)>!W>o1KC5Hg)+j$vTJQgvuUTUwyCevfkg`p?Mb zJ?|Q0YDw4mqb*yqdpD;7Jcq87@(1izkrzb%Uj`+1&}UzQspF)x(WzRn7%KTwn5lr% zn5DBrW-m#0#KunIEfhPwIhIrLVAY`K0jmLj5TeHr$^5v<1{q%Z z9gl9G1hjpg2z1}sMGvv_VkU6Gk>Hcdfb4bfmy^<)v-~VV>9^f#4iVm5>(o*JA7-%k zHx^+}_AOlMsv~wS53y;X!51@riOQZ?9gS>0cwYB=ISbCajxlY zNqTv*&9|az>jBS^jmoGasP|8=8w0l}*xg7SG;AN>Vimj0n!KOngDA*^1=WL119&0Z zI(W(7)HiVJ%N{(Uz9Pq4sc=0xp0qK^w785z1+%Eq`Y5$z+v15@8h)BUk*1`|YkofAAqJ%ZG0xoz>U>aMO}(MDJ}KZvlO}7#2b)7(hX4L z2~8^70Bs?A#tlJo+qqx}g^Bx`7?zLCrwdupvlAa1x~d?a=sY|JdY`B20gUUu*(iw+ z>N9;%AUCgd`;T~LmzrwAH*ku(3vai~?1`{u^7qmx7w0)p-9fa+O$U{{jo3IUqoz|b zd%)eXgy+ZhI;{iHVGTGQz6}qP#IygQ!J#_#7J(;NWbo)0$GqD zJ&4OfPucAxm40G(z`-Fgr%ThI3b+7%u!T*cSKS`v&VMauFTR;7h$zf8URuq*-E~a5 zLt-pRz;u0IyoD9HsAXTSy#1uyN0cJhab#!#VW&xK9}byd4mN_Rwk6SX!LxkG&jj$) zQQ{n6Bt{pDh#r4+K|i$UT?&%JOL_b7BxO}o#G~p<|91#qs#Z!ODyo14q?74U7=TLI zwS&`5T)JFm^++rh2Gu(1y6s4VA(hXo34Qmqk96U6Ls|KK9`P5TiY9y$5iQ{m*7O%^-f;rhph0y*(=@r@-JWM zI}}EnawVkQ=rNPo@_Or+TBbWj+q2xPhoz*QNbi?i-u-lZTE9taEM1Pe0Hd=`%s{lT zLl;b~S61H`?g7uj7kTM#Gwx1hS(cFPn2UniL$;7PtSvrI%n?)b)%tT$F|x^!sw(v) zTGL@`*Q3{N6pEwns1E7QhBIrM(ST6yP}TRNi!ycge409Cp5;^}%qi;SqWboXMKOI2 z>5lHywp(_I=A@({s<? zhsdQLuGs*e80FCIsn)m#Pzx(g?E&bajrD+~=K_kQfwv<6dPfHX5cma;Uwi%fy6Y$f zxFmXP&_~yFb4s1@xHg2PUPeI~JTM|W`abD>OH)CD%XcFT%NV{B9gVJSji-l-+gApR zAwCwp!kw$UNGzsTR9nJc|2m&!l|2AncZ=X)S*d82IO?~vl2B( zSG#)(@s9X?3!_$p{E(Ua+=onVG;nvju{kR4%WYqLcb3zjk`VgioFKW(Y~}lu9+!}P zLXRC|*sij-U(H4i)&ZQ!pCzpp*K)G)4r94zqx5qAbE*2xph!~?f}Snfx9lOcCou!; zi9$(o&O}~263_~3Y`?&Cq5C5d!J7KG!#0APExq}xgW7)Rmy*IBal4My(}7l$8kOBj z=Z{A6LKU$?{NfXXz}N%7o)=R@J5qw$S-n}W(Rb8}LmqpVqX}^g2zG(FWDpsFy^`!) zBO^`WVC>D9uz2 z@Zn?dKk|nAO3LuP*G5xU`4}i+Sl=3O&10&(I&m?z2bMt|4|L#8JH~%1+qQ*c&s;@_ zs?dsIp)P|mlJLjnAkqwCuH@{pn~X<76?h^~(~W!J3n`rC(u8ZnoKqoQbID*HLWQ|H z$L+KF4p`n2^R4^VKhlbJ>cD1|xDIyjvBYRc8&~fogre+44)MFW_0!Z|bh0!YNIbX` zKol7x;CT6dIN5lTd{^ngfL_3DaWR#!@Th1+UFB5$$x6~WDGTj9rix6n0aRNe=`xmV zIR3MIhqfFONt2KRkeJt!1HU%Qb^vo8c=RZ4cY8}y6>)&pxn2T=pB$bX(<{~V!Dj#egDxcg7wFp02gN+RJ+166#uKo0Yx^f9V@7mG&iMzmPCX0OPK&GQ z&_M`<0N)4K{Xk7?I*7-Wu2l%bdt9(vv#7rk<6^wCcg+Ob?)6YT4woMg-j=3aXPA$u zyOM`$?ktH-_1=wv#x#~wuL02xJYLG@Uf94{TE>p~;~HHdP5Zk!fZ>|*w{Rx-Ooq4z z&b(rC&#jiA;XnYkk59UOY#y#6b00o4(sG-|%)1K;d~<`AcRq?xiDtY9dp!Tobi{WO z0H4J<_-HRj4Ig_eE19j9F)-U!zxfWvUAxg9(kk%;j$tgrUO!1Gb}t&(zk3(k4@5Lyo;%T2RQD-d~11c2)b$5J_8*-Flg%D3Ob^f&u} zwbjQg9u8mfLLzAB2S8Sz^%t@D*tx&HaQgGK3C8okqe%}9`pm`<9++0yQqBou6fOGT zxuw8S!Q3Q-^;n9$1YhW_@g5KbP4RM%dl8QsK-*le*^E*+eV^^qa%JuqB3TYpiLMbEPC7Z@F#q(ftm?Rk!%^)UYXB%Cz*ugUnhg!pjj@EiLSu`=Mg$76RBVDj4 zacwg%iyGdrxOC5kKuFH>f5I;C`WM|^KmlNRUft{~*!dq2gp1B*^R&-#o|{+7f2%er zadAW?9mQU{?f*kFpyKSNGbQ$F`(CW5geVWNXX;E}B0x|w%*w0<;geCPv^cUz7tMEoX>X8Pj5_669wrj}i@!8hR!i4r#m#loJPgYB zrov51i)h@cxoS$@9oJ`zf2Q{RT0s42>k>6x3jg89b#U{|;p+ z_4u5&tC_XX=vHeMx(1L#D>N8fbez7@)^Va)MjT8&tqk}i7mV$A!%~BvcN~d_3ctn^ojn(yYkm*vU2@Hr9~AC{f|V88EnfdYj3mJH znJ*RYQ@dpj5%Zd_VSewP{VC6t-2CG#D*k>*-BmB|T+_RneC>|pWlQ9udWR6|qB0%5 zq#lUbufbxMFE(+@Qm5&MDsF}Eo|-Hc=H)^kLlnndKU0UsCOhY?j{`-7*Fp0cHa{?l z@v_?&NgY%O%-skuoi`K2(xr7`&-!rdrnEumCg3P0)c5Fw-O99evZa{l7GM9Pkz zr;^*+b2okS%ZF{TMTM|&0KdB@-05#9^=T>i9%h`<-_P|IZlb@Q|0j1_RgO>l-{puu zwn>D{@4F)+6Q~^+N>k1;V7Q0h1^SN*c5vENra9~>%@1qH^~|b+w#NkNP`$N?PM0e5 z5#L<-xPs68}VcayY(tBToi&i>hAh_d=XBRGi8J6*G72 z?!dr2Xs^WIS^xb~#53%j<(@-_uzl01Ji0=uM}M!pbW4Zt3}#1lfYu8x^NIJ2$?>bN_@@!N+b8DdA=^z#z$tH7V^=B)R~?^t^Gg#rS$9wB`+u^Nibq##RcV^`-Zz zzs@k91-E~~g*6eT@+fG}@qQ6f=Hf1G#18$x7#+j)HF1Gd>(@=)FB7!5BQo3Sw3m?m zYb!)tc0WXHPL9Xq(p{OkoGts@h8Q%%5aC~r|^EMFFz1y)ZY zA&+`Q+tkDbx?)LpZ35(Wa}_Gq1^G2uPz-~gl@Pc^laV*A~g?cBx8F@%Qhx#FTd7XOJP#zR0b4~hi(peb3DmvkM8jd!yBCZ?#Il3v4_QB5n%F6$8=xqAN;eQYkX584KaGOin`iXj3Vy}e_G5Pac_SokrV=AcX`a%q}`PZLhq_CwY-jqkcyZ86N<`0!ud$r z`6BP_2ck$B;m1(|p9wQ%0rEfKgCFDH}^Unv74T2vFJ^ zCYxc-(zp)v7ME==&RTS@x2mit)zXUDYkj=?L|W(onGj92;?Eu96`+Xe1*Uhjit~8# zvz51H?Vn&+$FjAL6r%_fPI6H<}3XRO>>q*#R zMj2-2Lu^_@)S`#it5zg;($X3;J$?!&RsgcJ%O6*Lq1;lzAxSGXfGT^>;d=8`d@d$Q z4;z1xTmD&Cdf@FV+gLHCh|Q))UD?{m{7Z_r1!D})d2Sojk2RuiU#RUp5Sqk*$(V=i zye?7BM7%0lDvjY3Z9cfS2Re>SYmtKaI*jbd94zr<+2h!H16Z{}=E~L}o37P>PnS<7 zZva+~Lam6Gm^}-9+OAte>#A%+x(j@jA7aSA>%Z>^55>SA1Ef8*^(Yr>+L<;S39$? zr#a3O5uv10135Hv0U8VoJPmp;s!hd)oh&Wq^|;FK z`fa70!Pcl6@@weMi8G7jYUZ1(;uVTdmym{G6Rbp!uDO0k9{)t9NM{NoL)f1gNo8@@SMFoj7W#+vQ}b6s zyY1gZv}?X1Bpt62hK#!qFynx}+?@JToXDr&kFfETF}m%07hp2_(+03=H8N_*(rNi| zAo;8*_uZN_VIO|UiX@FwsBx1{NgzYm7aY;xH!-5`=#-(E(?$#L-a3?0U(B94^ZR-3 z54)Sfuxd>*6~D2+9!0p@6o3vmObNi3(wzpy!(Y8@cAi6G=|ws&to^TTb!>2uIh`f} z-|!vD?d@G1-T|*?0_mZ=dR%uG4`#IW9uwvjHnpn=J{k!hUQhLy(V~IHV&h6}7#Wjq zol_3b?wg`v+JH!=LMpphfxL@?^I%iZZPH7GJs61sL@=w zJC4ew+qr(C%yHt}(f|5aOmc?~8fR7N&#>duu`mXSa;U_Z2eJgk@=8M{>AW<$vtIV< zfq&Q*4F{v7T|}Dh-(bUHl=9K38cdbw=RYqcwhCtL5m+s3(W>mmE1TDB(t4NeH3*_W zk*YL;X1DI6a%~CMmyAP$*sFWI6F;8s>lzWg`K1TAmMknpWXP(aO|P7Eo*$lLN&~Ng zc+ttIG|m|@l?M;+v!D-Gp)0QE;ZAFV>$TiM87ju%H=Q_Te)u!-;^CMvRBi;R@ht1E zm$`v_L*ZAN2VxBg0xtt5+Fx_0I9#2~eKRO(mC=X1<}t>O#n>aIgEkkVqU0t6+cg2q zt1M|jKq*N#zOy&n-2 zpEDB`m`G$=(fxLAvV(qLsMg^|ZPEn;nu9Fb=O z!SrW|;ksSGW=i>HN0_n-gNAE2_0O4G^CfcXmtoVJ{cm&GbRq$#r})r@cjY%vuxW-{JHB6D7jpUHSezPd~7)_Z{z8! zt3U5d0kFi|%_^Oyfy@S!)im`c8t`TU>%opUzl#MfACM0ly_#(+WVh42QRupmLHghe zZ`B4O4NL}ogP4_9tt`_3$bDU8P)Vkm0I%Z{fjQt0;zugdmqVz`L!ia%VOe*DK>X#F zPO-cH!P6GbUry#0egQE3niA_h3=}{45YxlSn)( zm!9?JEOAz|0eu4XsmQnqSE!c>`Y)Q){0B`M`Crkb{sw^ll@1_`j3=LKgSWl#{f-$? zoNS*tUoj6mlKKsOV7b_?DjdN(HE}7K0|jdu`I-x-FovF7$34YlSmgFThwk|AKH#db zM{~;!t1#5S2u;}p?2pOtIZJ-<#j>9|NeCO1r!8JSr#{wp7J16o2RalTPmV7uk0>Jd|3S94lM8)EX6l30EPb0=&3DG1)gZg{kz6m~uJkQ}W{1)oNQcB3{hR;f&j&0N`=p#``A!55s$m zb~CsBqBs|_5smiXp!no7LzYxe5iY;94uqORwM!d}6+d&-*yLEn=i&iq@wguGFeAUA z{Cq@9kH+kg>d_GrQ%_=Jx=Lmfd9QGAY`fO0B@yYnaWA0kSbBHy;xu1KqTe^48|Af34GlVS$$}KMw!m71yW@UA`IhmS9B{ z)3cjem+^5}tAMa+V6diT!+74qe!E@q=9^xs3Nls7Ij-;AiJZc`;b}i6P5>WtPjmfQ z4>98&=}9Rt%%(mIBg3fpo}XkGmV|&Wq@91Na>1TCgt;sp1JFB<;DOgy@1GR<4F%}F z&jL*TXueId8&p6gkw`vTFK`r;*BbJrDH+1F2Zx9v_NM*Yo z=sOQ#U2k2&D?9d>p39Ao$PQy=cl7ppTI@Wr9d)QpE1Q5kDi>Lvr9tvMkV+U{2!6Jk zNo}cZUVcVOh!=Z3T+j6?yvuw+`HSyJzxcpA2M{m*zcHhle=#H2Ym&NBR8QHU!K>Ml zrPeqt2Eln$_vp+*o8YlMi?ak~HkZ-^I$hJ*z=N4^`o}9NqD|a&#r|VRR%=pF&kN|l zhbWS}L3`qOFaMZ2jL8smRNCQa{=9OEyKOB%sc~qJ99PE-!NDDwGnDd~L$hO-i$A(f z-bhp`G=B2jWQZg_pi;!H<le$N>%i#rOsYJC1K}hq9HLg$I;ch|3#4edPN1si>^o`+ijH!Y!8T3 z>FIk`OStUC+A*a87uI0?Z%sY~MVxUd`0we4L;%VyIq5vu73JnGJ#0cWZ?@{YEJ}`# z#|Y*5YTQ#TXgmL9Y%uot?)&zcKASUC z$BL72N$OUm{7?Hik|<@JElu^RFmCaDYvK&=Bk(LVhR;V&Q+pqEl8g9of9Lw17FdaN z5tBB^3}_XqnjSip3mW{ZeEEoc)xwYgcaV-6f4jjMl76qJB?k`+u$8V%O!vxI<#UGp zqkjP+>1z1@CxGbmTXw;%Zk59bRPUT#1IMAna4>85wbJ23I$s?hDLoX3=yHtw*@xrS zb1%b$836jjB8(jQ)KMh;%&-35M_e50CPPw`~>NJgpmi?#}`~HEx?Tp@M%dOuODl1Gk$e%lAAu&`M44__g$TT zcUpS>C#U6jI@33b>G|-z^FA8kk9H2t{zM?eHvKB1Hm0&Ngbdw}>xN9YnfN*I=$n&X z#jQjQckcM>7o!X&I6ukgSvCv_Y&VCOq6@gMTpSf@1=S|U5`;S@dfuc+Z4dWYcl{}( zRF3=>QWjx)4n?@A|S9;P%l*w&Us=SxOQpjmf@+I^kJHAY1UIa z0Md%GZLTw_X4x5_`EqWby%Ckf!CAdyd8=zex=4ba3+>g0toV+ViFXqFC`W0}DKPPI z1oB$QDT}}G_@5z70|wGe_IAf*4!Mh(6)RG{>vj^#XjvS_7~1kWrVeYyCo8unD)Dn@Hi=w+8&c2B>^JP-q2I&S$}|46_;d z=nw40*f0%N5L(3D5Q>Xz;aB|bG%N`XsC$M|rCwTZx65?BpN9@gtX#LU&%50&UC{?9 zVby^OcGSl`5cTddaV7Srs@_>J| zV{C~FVo*dck)5GP@fB(RuKh}voMnfUzL@*%?cdyS-F)l|H-VW$x>dP3k3$it@PaIN z@l~s^C4aBurd2=<(k?XWG|HuV?=#cfo@t@f1jhQuhP7Y{|ArMRvLd(Ptb;M9*iXk# z)7a2lR89gB-k&)?7R)rI=V29`Vh0v)Uf`RPs*!7dofYtWJcb`kjsx#}jXa!(C{z z{K;uB#osYn(wr%@rbY5=p+>(}n3qL9*Lg4!g`&Ef@z6b6f*AF|)yhW?X7C<5>nIN6bvYIo{oHN2Y!mdxH2!OFiOkO z9sAm?2bH*)-+6-{K)%i{i11zc#2Eup7+~A*s2$V4PO+DapMDRPcux{f3P{XznfsMq zc~vZbyYrpdBhl96*iEC73Fq9lU$n``qLnSG?`=u{zMtRs!0^@VKYFhJK_9MzVu*_V z8`+Rqlludv{O#5Jk*EAY@|$doGdvSWZ_8+AD!Kb9n*qW3R|@lw4{NP2UwO}cb-GXz zR*}T>Tet02-5VGwcihO{3p!7RGF6#mSW;du@+S05SrE+943s0aR7#~Jn%|RA(p$-xoL)b zu6x1PcxhJM!kQgtY?L!EU;J2RM}OJl|5_0A1>Iipus*@c;wR4d`>C9VbvYQSL3fW< zrg1c2cea@qyh@%PcyCdbpQM+|!fu)YwVHRt ze&{TMyX?mzGGxBJ$mSinxhQ8VGWqqZBjp>J}Ue&#_dmW12qmt1;r>zkSj zgyh)+gJ_{Ui_@1g&+di58DUULF#osUO5%1(%6Lv)a(n&cNK zD63KXIwq3?E*n@6*2Eo%2Q#XBP$vz5h-v+V-=g3TeXEvugO;uu;`e%$SUYu;?QSMkZY3Ok=li#X^y+yRWivtj0qBUxfDA31^^k; zv^ncJ#i=g}Nn9YLvFt__M$HqKhIIU@L}BHPvg~4nH?iutQ`@nU&t`1gn_&d|KEL## z3u`x^+(USGI-pNlfkYOY5-=5S4jc1i)~gJ8kPc(}+o{?9Uph6Yy9*lf=E)eg#KkLu zJ!~x}O*^kv6$m@CvX&f+2raqAc(Uuj2-dZU70Zh>Rc)0Sts^LVr2DdDbtR6ZH>t`h zhY1aRu=EOFQ`BHCecId>IYpnm%@Q2PL?Sv6Zco`y1xVD=e(3s_?IQXe+#7Fit#Tgw z?tsV?nhqK2r)rJbY|4!%Vac*G$;go~-N8_kMUAce3}#ykst5FX18pamt2D+iWuE0= zkV))2zh9=muSTf1`xDS{Va}u!X3c|^yfJe`-^oR$`7A9oI$|p;7BNfps*RCh^d1IV zC;t0#@q9WhEVhexw=O*P;LgA?*p0PmmpgLg*Wq0$=`^UArm1$XwZ+${b48ws!%i-` zu)5Q}G5^ZT2mV`RF1JghEhgJAiMkPJ54N@lO?7v^l74JY4;*?R%cnNa8^E(VR*_*I zA67KMwR&zice7zk-A@Ic(|(EBvBD$fYP@F++m5GK&iU=vQ41;OhQO3mWs?((ZiAFI z30Tq(J>2A`n{-q9!_m=itheGZQFc8EJmsgbY1>$m#`?_4$LS@|n&G*8Ww@G^lwFf+ z`MD7mLSp`6)n#FO8i4V1`Z!kSP6T}XQZz3gx_+=$D62&-G<~tQQHEz6ca(K;9CvC( zod#S0AC%TVmId{Nsm1(MfA@3o>Et8&z;mElfHX|_-oLUaq|5D?h#3_!R2r3%-^TVR2)UoF>x<;6(|s%^#@Nj{Ik~ z;SA3G1Vu+T98*`K%Iyo%Mwcl|B^J^~WzM2}*SP8}m-pu^cVq>DsK}xG*O}rGxqF;t zkCZa9!?WvdZKr6buPBbA{a$s&I!*dLcP+8Hf8#g%>!wj*vJVt0kPI&0*4UD^*;Ihy zA}ThqdE$rb!j9w0swOZkv$i69HjmL*L)-$pmS?WSXGK!hTqOAV$(x3=KX`& z;-eSZe)sCD>CZaFr%haNUZE#xb|HXIQ>d`+^z)r_1(lP*v&WFaBer~ClDdIwkb<+i zrpD6%RN3dTeJ0FMiJLMY{UvkT3@A1@pK+nQO{hS)+Gu-80kDZRgz0d&>Tg&bGZ_23 zf{>Hv$j(V{KB&n1AxZKoLBj>XK!0k#GU&^18>Uv{^?skpikJXkw)E_kfc!vO`sgqs zMSrg$Av11M5S!?f@K(FMh`>XpYin?lF}o?`K2nB^h{z46fX;nULieVYUtoul=yGpL zOE348a>DIK)H-JECb*kezRtOoDIxGZnho~mhPm02!p47k?0IeHE(k-7$J!MN5Pm;C z^(5>RrUXoxF-Z0tT2u4==9ov)c(l_?Rn!~(k-`>@i*_H7q?_BnlYZO*!}LrXyRYg!<;0oP&36MuMR?QuA(bv{ZlQk%9VePb$2Kf4NMc_&w1w?c_>h~hZ~j3^#9sgIvBEKw0Pl8d z=Z^s!4Q{)wJQWH+-4!-e!TqXp!{6Ak7Ly+#GL<^U3WU0DE$R6p();2zgA90PjxZWU zy}DOWO>dG>3l78GkNYJx`t9z-A-bper_$Om#jaL#-Fbpfo-WrM+BPZ=JP7D?K>wSl zLl+PY>`kI68{EkLOTkeBmeyRC(nOxGNKv_5oc-+he1%EThEmDmP7Jsut~kR~4Tk)> z(UCzb*-Ia(hP^GAc_l6sb@IxzIAKgY&w}K7?z@}|msg~EigQ-)N9MIRM{R7Zw1L>u z^#|euF$5)XL676`TFYa~l!hgaJWt%eOox1{*@fh6(e^Cn~Kn%KcYNDH~vhoJ+D}n;mwO3`D zo~G_$^4EKRF6FoX%9P&m;{FfxL4AdQ44oN?o>9<&ehzp~R=!D^ZSkO+{FbiytYvmN zV7rT^Tsd+O~M;F!bJu zAgMPhYmqTd0FCj1m*2~oMFU#%5%gEAD%u@?Y@LPat10MDbErSyilH>fKZgFDf1_G& z49tGL9K{{UbP;APp+W_c+S~1uP&>UrC|Ynu*`DgP1YkA8ajX1wsm|e4XBJv}CTT+( z%SoFY(HYwam-KhrL&F(xVngE0wT${8yD77RGQFY6&OJ^^%kmiJXGr-uk~c#VhqIyB zp=Ulm2bzQ2+InR|GtY0WyfqCG9JuqP?@~QTYkpnL z(liGfNbPMxG>RL;?mrz|TMZpGXe_@B%+bf>4Gtl8_7o3?3Td>F{m1{nIY^hwuPIcX zCmyZcpPKVW9Z(C_p^k<}Qow7|soa9aclixqs?Hs*UrIku^*kT4Cx8x)L|CxA_dozw zk`QcQCBH+zEnGQyv8KTCLWwBJ1iAo;?PP~_FJ#P8)q{w@NP~^^OE_3stha+6C27>Z zyXpp}$k+x7zOVQp3rn`gAz==2Ka4~N#V;wzt}Bg-5;8^qBK_)8Z&L!t7*+f!oVX{Y zIhp=})p%c@tcP)3*{{9GKH1afF>#}_PNZAt+m^CH;-ohufnwAK6;FSk?(ZJ1*{aYq zhM%~;U(oL;Zy-u*4BAunu!3V#OCQ>sF70j8Gb+(Gr=8v?8>!@3vYKWPSkAg*hBHrZB~)^s9BOvv=c z+bBTavCB4I)Q^v)-Q5zzQRYeaN#B{gmc#LheyQ`Z!rP#6XY_Rh#;2|iHyTBXBo-=8zB8x?u)eVSSC8wpBRPTpd#22HZd3sI*>uNy*cDyv+hafLdn`_R zvpxpymps|#oD>gnae}`aFG!E3MJcq0njKuFI=2uuHGFBO$en*Lm^OzWQQQHN7I=Eg z!QO){1N(H@ zW3PR#C7q=&!-m|*f7fg@%0#J$Fa3J2t|wlW1~i6tg!$xAzoVHKjsHnUM`r?!X8DF8 zBNx|%LFv&3{||F-9T#Q0_w9nHs0bJcC?zc_EggeON=xUcbhk94A_5}alG5EBGa{Ws zcXu}o!!R@Z!dvgP?zQgq?C0Ij`|iE}W`LQ`6?0za_jerMp?0EIzoHAiMyHPI`BJvJ zqu?;Xg!QqgKj{|CH#3t+eEbucM=0le^4P)NSsX_}U7P0LI`_pdX8`<<$Vx#rZ41mj#HmN+q8veCQR0Q}mYK$kP2auG%YF z*IXe+6d}S((qlE%!guqtlf-QtOc!4?rEo}1%oTwFjyLdB;qN25p(+zY3#k|K*qa zCwsD98zMcU&+hUc;(3wKP0=i$R5Li{e%pV;!EI7+`}e>LmxOU*Ij+#Fd$c052m3%C z{rFY(H|k#I9z%<1?R{Q!l-AyQTM>;*Dcm%wBk5oARR8?Fr+SAbk~9>c}Mni zk(Pl8ZepL}YqmVydkFtC&^UwqHPC>N|25FiH;WwJ?3sLsU5``{e#%y4Z(EA13S3v zL&K3!u6roq=J_>bKd0`sVbjPR8qSaHYl#UHBpB9Mgi=u3&duuzs6WY;LJ=>VDxT>2)_iedFe3tfPryN~*3)Zl2zuM* zD5;U&lkS_!V`7uKDXzB}D+fQkF>RgvE{5Ehl*9*v-2G@yi1fv%c?qu>n)iEG3t>=y z`&_De76mUaHHU36Huf#Y(;o(c5yq~R3oV8 z6*OB#fQyY)Jt1WA5713}FyNjg7RxSo1<@YRh|H$_L~8=`J&ZuKCN7GV!S z9mIZOt-dtpIb6hXvX*yz-g8i`ozsMZqJp*$lpFQfF^Z6%jt!rNE4BF3Ckp6Rk5>b%l=Q80`mFV#LrB zEQTb-v?JAkN-W@~Qwl$tA~=T;bCWBKnpR$a%XgitYHl~QJM&wiO!6ti?K^MMG3pc_ zuCkrpzGIvMC8Xf4UVwRJ#@s65rsF@;=dy+cT%7ds3*JyLid+=Qx%J*X<>KcIGEE4? zb4Y?o854V8Z=!z%54JmWKSPoGRd^3RWCv-pX>1woL{7jceZ_h?e`6kI|Acv5g~s_| zehJ5_qHq4KW{ieH>FS?b$iK;j@BV)aft;r*$xq)H^Pcm7sstCGK0WzsH-@uM$Zo;S zvGs847`I!;Kj3}|gW+-VJdVU{s68l32YS_)$4Q3V4-Q6qvgY zr!Xk3^L3&#Y0|)%yCD&MN=6K^yvhmSVSO&aTSJ6q5qT-xDeL8sSnxb^f7S(VUoI+k zux52eYy7Np&Lo+T_`i-+CM#g-W$WOClq>{0Xl|VlUxNs%Z`Jb197VN-eKjHVe8w3` ze9%kK=vTD8Ld;nLnc;ul)+=y`xOIb=_kUzAt0k0e#vz5781A_X*;w!vBnN){cx#yF zL(z@$`_g3-UR>C{g;qakNp!Q%PeYl2RGy=|A)A3(MasN-m}S|^<6^py7hDDq;c--;YvRkNu;bou58UK~&gE8yk;RPiE?@xHX&x2V6 zaK8|&nG_k=7<|{;6=^*}yblyi;mBm4+iIU%&)qivg`7-Y@Uf}}jv0RVAD0=79sqkT zi=T*d4SZS6TGo6|7jo@!TQ^-d2_p;=4*|it`WvjHf8NJtZ_~tPV|}T8GyBcpfECIi zF;4!a)kCa{!DVosJIR4hvpAKiu|*G4_FKxz3dPw$0_{`#W!j(g)XF6*vGWD}^R7fb zQ+>p>8Oo^5c@}OSBVOVia;cGpLI+?|JF=H-{Kz>}FfJ{B;fm0lKyE)EJNrKBhKZ_u zC%YpEzYNDxS5FLhu4lT91P)Bz(Os%P z1jiAE zO4~T(GX3u?B^mEsO)bZUsjzWuj^js2xgR9ic#_M!oPW`e-_%>(*RsN#e@L~yo%E^< z#BC$A_Q~df9#%Ma@^Vb@-azTc_&MYIK*HC17ECc2QO@Qy87B`;9TQDDI_QLcTmk&m zmL0l39!ize_P7GPN>}@=o3f49f-qUhC$bFr3>~Cwofh)_!LwIH+)Pl(!<7y@=HTWx z^cy5g&e!)3a!=_c;kpFx>>9N92fk>2X4>yBe7}3qINv4oP#n)K?R#H!imv|Y(cR{Q zoqs`Jdb+~75d&SytGgk{d!X>jzXB{sP}pigZ|j1wW}jtgn`G%oFs!-nq!{v9e0oHFBNx*7aY#81~U$L zeFCj1>S&K?Fe^GY9{IAy=x!m+Sqp40{WUltVRb+E77Zdg0~(A$n4Fo86Ayy!ov_VR zdP2rCc|<*?XwtcdOWdEuyC>WN8(VDKUhgrfAqLb|eX#qNp3h8Ut^e{yF zWMQ{hI9vW2EB!=fqGE2pLyzwj?smUE(sJI0-<5!8z{km@j{@D_^eNu0a-!rMQLsOC zPV6{gDbBEcMjtqtl>Bq>s?3wHZrvgRJRrxNP|dDRo5`KvB5)Q+PJgg0Rb955*PW3$VS;r#_E~LdSgvUTmI6BgxMFrnJ zuGN&qn;MX&s3TYDt^_C;kK!?p)tV48@^XMG{IW5Iq@T|3%%7Ioql-7*Tx4m)x6N1- zVOzZ%N)5tWJeL21+xg!XBQ1%gtD`)I;l!w0)9c{2hL=Y7@A$3BKOR9=6fddTzqnk# zX_OM+Mq5M`nS1(#(DwEc^WIOJ$Wy;7griV+NXa_oB~wHi6l`T zoc}@lM!KHAlHSE@Htsv4<&*V zC?KmXxot#Kd56^#jNVbinvVh3hqh@X@$?pIKs0}kb`FUF>_CB+dRqxwW82K+HUe<7 z3Pvy8!yw`w2=oRJc}7r197Uh_bSd{41Et*ip57m0J|yuKK>z1_zNs&s?^L0;` zJ4>V-jPgGgHr3IuqVDWujyhQ~n|wS?aStE0{-#?v-qKLxscYS}GTT>uW{$YmVTAk- zUO3a@zO@}j%bEzd5sK?taMHXRANN(ach_Go$ma{z-+@co!TID{tXdD)|bbt+K zWEUNINYS-&Vy4^Pkn@;m+}td~|DI0NVfDiRSVzN)nXT|Wbr5J%)};_8!TX&@D`es;Kn)4>K z{Pj#2wz{nVZekfNKi2i)?Yc>b;qd!~Cx64!1PzcVKoav@6-#R-iO4w^{}|HH1R4Gu zNDzT{;qmr1hdu#3ad4XgzMs6`Y*rv~oq8`X`DSOfMV(}n@`(?;Wm`C^C9)7l&Q zSo|+1e|7Lp+f)W)5EK)}CC1S2VMs+zhsb!&E#^`#UjrOU;Uy{kux67YTG*opHij$w2CowLA^Vv%bq6pzM87zrL@yU0WHI01(b!RY zXvHIbw##GRLbZepMa7IdFz^I2mN*iL(0!{`MoJjoq^Lj`hrhvHY_U-H(M|c=q)lhH zvrl~Yczoy~xTUWNtVd&Bt?Bf>h6$4N8d^Q)_ni{^Ru&1`R*cE<*uf0+?tQe!YhyoOChlF@}%>q{p!V)JVNof%iKoI+OFL- znk=@fwzF=NR9(hyE#k%nFXc*A+k&-3E>g)E=z_!nQQe14<;w^`LEl&SA8UYY>wUcR zl~&R8$(KIO<0V~JHvf^N`C0uD+eLc@54d@rv{rhN2u5NzsHlZWY*BT^vDX6dt~a(% z)dOSwQ=6SSKfc_YQ$->%2UDWVTlq;}j8T99U@e6sc7Y=PrfQ+RZ6 zfXS(-j+(aX@vyT<8rfUQL=!c^FvKBmQOwd8&1W`FZ0FIK2RTK!mrv7=KJHdG-F>%y zK$#c9M*J1K0ZU2gNRq#LhkPZxUy)h98&r`nqP~-!GX5Sq!@$dGn{-LtZj<58Qj%?% zwkz-MAKx0=g#T*FgE%iQciPyRcaeS_yl|J*lbLUZzftYS+Wgl`6+ZS$%g;G)3l}(L zt3kt$#}Qq`exDs}(b|fx_uQC7PF;Ffhkopw(p0`?CPkB%H}P#DU=ZNUWS%~(kAhT% z4Ad_{S^420vsvBu@WTS3XaAJ?Ijbr^Fd>na;=Qy_lZz1i?__^dm;NW&pSF4`g_t9P zVsI=F0E5Gc3_iwXgr62dT0X%^%jsiket}Th`L0<{y|)xMbrZT}4-$>%TL$gS)(c6ff>u=*yyMD|DOH_7)klxuK$K6&5pM2^dZxFyZm+EUY}ynt}7M(ilz z;y2If2bv`xoO~4wibvDrDN_R(GR_}efjqdk;J7^Bt9SU=83!;@Q=%#H^KiOVqjN4q zI@fqPe|~#}6_Ji>@kOCuKN1YQ!@;0H=VcF;6FaIV&Yor4g>*b8$8krh>ubY;OPN;HuQ2$g(;_Y)TA~>Izi}guBRdhr$Q<%iXWcPZC*QCYvwQ<%s0d+{;NM-AP8e zbu#aqf{c=#@bP9|#&fNeJxXh_Kt3(mxq~mymyGIF1&;GW^ljmEQuEnz3^%zcYZ@fz z#TUHptlSSl$B?4UnGti>OW4Eu=)y(iE)~>|wV4?wt!$isBB+`L4hGH%Dm3+gd^GOJ za8czO5{e+E1MSzGfN0f3l0l3$kjTdYCkEaWDiuqfFT4`SWIcW1T(wttuG+IR2_MV^Hb}nX#^5Q@FZf8NmgUpluL27*v z{%2Cl+);3-mR)lz+zc4wrrAOWL$%wwCVHTH6q@7POYTr(&pxwF@z5vFc>>2Q(AvQ^ z!HDPvzf$cU82fr|eI97-Q_^vHZw;)juLXk`hiR8hfGWufw+;kF&%Q?~8u7gHqvz%% zq5>>y4>kaOE##DMo%Ytkcudwy_IyZ=rL&7J$y`|;%k_8jHp{zJwvJ-n_0VqkPczMA zZI*$G^~asDAAjFfweFr2wcrqwtW zKT}H}81px|XXAx47+da-n^ZnvJ5ikfR8NEmHGE0aY0_uVscTZx9OIWPb1kJL_<)Dc z&kyo>kb}NAiP|pQwTbe5^wASl68q&HK0j)X=!>r7Z!LB2<}OEY@`{Invj9n860?yj zSQMJv>qRWvP3Xo1o#OHem+Z@3 zyRc$$C)$am6(cS|wR&r%*dn}ad7)q>!a{WWcdHS+5|Kn9SJv~?$pacL!W?rJpp zPd#7wVx+p6{CZcuMf=2|4%h9-Ikta9mDlb>NB*NaX?kU;i}5_JEFM%MUcGJdV#)ds zQQwAeayIN=(o*}c*7%k1;e@6#&NO(U;`Ti9v1U=oJ1We?S8xVH%#yVs{cfX>5o)1Ey6P<%8LNtFH-igkK6N(2XbQmwg`_viy(2SkUh<_CHAiAMUkQLf;~RIr3$x?Bda2o5p1xhjIgs ze~)8dO(R)IyOUO@#;S#*@uJ)u&v7Ptw^{&k+9`q(%0fMzS$@?eh5g|n{zZlr5W4i7 z_bX}BuML2Vj^aTjE-|55i5CG2s^*@k=Ye{d|cCJZcue-B$Mlb1#ox;#O7qieZyb$+q2^x zpb~0(>maZK^Y5NP9b*&QaT-}ieldP!YYI8jU>Y3jZlfK$M}3VN?dVd;9^Iio#|Kt+ zrIVyrNje+v+Eji?SVPv$9>*Umj4?lAaS{d$wZUEYdYjh5EQu=HVOvYL^&y_Om(+#a zfU75UTEAPM`D?IHbm1#02_7OOl2l$~|KCm(ujVHhn{9SvJDQ6Er_kZWQ^|#J* zU0&f6bT1eTI2H~Wdh`{xKevXapE z!*;suV&pL8aQ3<}L@HW)f#BVrg1`GuzlK|~gbx?VeWgPur>KGQQMs@D?ayQ(;D`d9 zWyA~_bc7IMEG(pokNx|O)Y&WgT?Ifjj3j;ufruVD6o=Q4DQ1*)vo7c}}d zKI0yhAl0Cn*C?0TG#Kl?2G+oijC9845^Ww$N73wlJoI8IAAU5=&f8I0*B&O)e_((P z6DG=DDmX?V&u#*jPJ;;iziOeHY>{Y5__N!HnJx}+@3 z`=4clWA6ZE-};OKZK@w(b&rv6w3YgEpnB+UW8z|>j89O&<`yoe>KA#clL+lH?fcnY zWi=YpPK7-ZYK{m=xY;m=2(v>?(a#<~Ki3o1TfX@w;N>w7L0xFjK;to8!QAlxUF9R9 zWu204{06eK{sAc#=zf=ON~z^M)4%YWsA{lc{M9K1B&xAY6qh>rWCJz`K78KYsef^~ zF^n`c8GrSeCHw8yWX>gn<@EJp_p8Fwy1y#cQ9FKuURU@+uWhpMeR9Pc(BAzsxdp$h2{*26i~Oz2 z?|bWI)!%RUcRDO~-}YA!{rlgZ-}1y}@#z3BqG<@g{pt7U-Ws~_RO!a=^!bk$?&{Gp z)LDpEoTgD^Bz~;l<$l9_v}mkC$Oo&L(-K{v#iY;eJaG+o?}f2D;ndKy^t0&O38yU# z``Ap$ois@ypB5Ju9k3^uBTWLeABOMlILi1hsV}Jk4=Yr9*oh@9QBh%fAtU|_2H0}@ zA3$<7{|3ovA6>ddOTTt=Jldu{P@c6qdFmrGe5KpywqGGO0yg?}Xr73s-nyl#rVEi6AG_@73cDl?F(A8Ie!f^U($q}@dC zNwS2iE7VTo2Ky$s<`Yyw{LxAe-dimB?ERw&W+lvr(`#23{OK+$$+gd3C~p%2KJQMI zC#xrGwL1FD=r16sD6r6kUo1V%OW2Pb(Dbrob8S|9bNR7^O8Z08cQ?m2wRvOK0gUrb z*4vlr+7IAH{rigdJ+2VgmjYEs?H_iQtvk1lY?9MNUmIw4pF8~&Se%{I1Sno33jSYYZ8j9!aM^YpZKRkNS>6r@o|#m3sUY z>aFY~Qmbr;RK(0)8=?@v=%y!rVRR0U1U5&Q`n1sOb2K~<&}|9=6;<(AyJ zQyFHM8VOWB;J*NB2tLmvjmtMU8M_zI8ot?u<{*D|ZiBR&^(mAq2M2G99ooeugQ=Zc zFI;*b1z|o+*ira{kuw}u0kMw1#0EXUq7-z_+zS`XJj$CPiHF`Y|F{7Dv-Yn>iW96U zH~7@3V%ajxyw%PEby1-{Ii1~vv?K|XW@)G2d->agIza`$Ye@3?-h5-No) zYk=Lm_*H<#2v_yb1h(y5^Aj=h>XlI?p&5qvLxLe?l_ilmQ5A?BMY`8JQ{x)mdEGXXG8s}a&9 zah`zA!7c9c)-ZDO0CiN2>m}{^k0aO+F+Np4U4HDb+0YKY)@aU0+ZXU3%BK-=-de8e zX;!fqRb`A`Awcs+ec@JyaDLLqzD-bR4Zek5Nb1`dCfj6bPoBi(2us5q`|{$+ElCS3 z<8OoD@iJ)U6!=L~WE!#GH;2?fxT5x&(BKrP!4zUV{kETQMyUqls$NaVL9>tvRGTz* zi#>R)_YFzISH)tXcUHw02bC=K6x~>f_Ph!QbS$G0)gRS@44o4WChzITgf|?eOrN#5 zvKa#Uz&N?e{b-lceY_PPR?~K&>%_5Ea}Mnj`TWc#)0wfUy|{y8{Hj%7hVWsy%??NZ z8jzZY1ca8N_aXw_om~2eR?L@j5=Fn}H)buCM6LF-o;l%3w2U>0{X_7B({G>D z$H3cni+hffG6u~V(!nIJTJ2Y%6gE}||S z_J?!e?tPwJS1jMj>zPb!St1B?GE(U|vmo2zi+ytBISG5}DtdAK51Fhr-k+)I_5ZV} z>64@Kvw^R?%rdZx)6CZntx0d^ZtxX6AL)@XheEdT#aZDnQ2PQxC zaBnA+p|kc#xZ|w#%VgHsyO~Ij?-F6Lyn7;HcX$O`1DiZJgU`@3ud0ohJS_peAoZU< zKzR%Xk+muKd1yiBf`Z8W2uC)tt}yh|S+L?8%v|Hg>a_l{4Gz8NsM}Uu&jugT=v{o> z*M8l7mcbp7_pRyjaw{pPn$}gDpA#(qf67Vq@zS;Th5R2KOlvb5O-oV8xNq}tO>yl6 z{?r1R;H=6w#unelZGp-Gh0FWKP2cc-4ip39-0cx=54bCxj3FHakJMt(`kQ#kt;vO% z;{}cJq6sIT%z-T&zP>A?*?|9mb)_C6F^nC@7e+@$|P(M%f5gmAK z`{q!-iNZ-ge$3IjaKD`LXaYL-Tpin4uoAW6krY6KrRfxpj#*&s7G@8&IX3C<$zWR`*Q_pE3|u4PVKeZb)X37qX+VC^l?=H z-7yJQ%jxCBXL@Y^&pNS4X3jgYNV5z3fr0VA?Zny;nkY%Y?6{z&_Y}dMAZ<*2>1t!{ zgUWX-X1A!ZEhEInS^%i4*ZS68GK;;2&wq=w<0!|9GH;@Fsl|hcI-#@hZQ(cFC{TYP zA0M2gWP6jVXOJ~@H`Pr!xQoHAyYW>(&8@45fYU`VEqSzmidgT1tOP!OaA3#xT^Ku5FNgh$H zu{H*4dp6WkVfg0NsROlhbbIBrZw5*js6rh zNi%=zwzMkcUW@G!BcLJTd`@I<+>nN_=){boXBN*2gx*K)=)h9$Pspq5Jp{*fNBC_oFko>_%XfIJtju2TwL_kXV4RaWcu zFG9wJljA^jBxV7L87V1T0)di1`siGv8Tj539x!%*u$hJXilKk%lN+`gc3$PYZgn_Z zV1Oj{yLBA>?$|n}Qu6t!MPxlM+4^78BBH;23O<#Muw^m230V{Id5&-4M=40;E#oA! zHe-6K#K}I0w{-xM11z*3AgAM)y{#D`#b4ZCV)vqCE{}>%VYOS~OS4?sdEdfN?rorx zaI&>2kv`k(acKIlYAw(pS@COk8(tPtG3z>GwKhgUpYxI}Z=efn9vLc?ZZLYEPSw8h zQY)qWMH_bQ{Cy)z`Lm&;Z&3kiWLXybh`Y;i6hT+I_G~I6unU-v*&T@U2p?$OLhXZh z$7fy%DM}at%aWZvASXU=DK4`hI(cE-m5Qi`{A?UDdxRhLdAJm-O< zptEazsvhGB5Xn#lmy1R<9g^vxH>|X6#U6~06acd*r(YMi#mY`Irj&O=U=C;t_m&PV?hQ{WS3}ksLfmX7%-}P;2AfbI#*!pqA07M&3 zQ;0bl@WQv(*`9fe`Z;n1DE+|=s?XPms5w2mSK!d6&o_2@COwdZ3V~zK!nNqjipK+x`)|6G^_R1z(L57X)6K3qGJKrsE^XM>3*=}uRy z9zkf5B7ztB!1xAyhe@1vlMh>38;nel72~{y)0cDD`$D&fEzim_J*{$+0N<|DqH#Y> zk=^Vp+*HfT9;a{0M#+SaiBCORQOD0(&CAaIUr{3s`kMvFlVk&i)DBR2E zeHjpDDfukMYQxV;)SU(;nW(I=)O5e`Un26DrUH$t-++)TeTvG@?G>(rVHPD zLMh+6yFBSTA@)2TWpkB_g%528 zutt(&t$1>v!bpp=V*m3P$5(};9dgwWXLVN>l)%@CBL&BA19NA&d3rlifCFIft|_{_ z_u&jhOKU8TJHK%!o7v~nG=IZ9(f3qT8BMRn2nmT0$K1Se2*j50#>?g>5LTf7>fp{A zCdX0_1N3mM0E!?qu-#fWZlebY##kT@S`|^+rbsviW*Ww2EOEL@^`&VEB$a&I$L7uKljq`Ww1MxduOx;C&ph!%{Nn6t-d> z7^Ht&KlD&u#9wotqj#3@ z4Lvn%IMhF~9~=b{N-UO5FUL{2j#Her2(&!0$H@^BEMjZ&u1PtPcr_z&M!Sj~h29Z05e(cimfyW)sDBMtNUVT1Ickczs*GeBM&EgqB$ypfR!rFU?qx zESZEnNe11V(dJ)>(sB*^ntQ`SS0=dV`daT1BGm(eynDM99lB`}wEqR`O;Dxapz@&J ztvedjd8DDYL}i68DP=Z0Yf$Nbf?`%EF;)6PSIVuqMbiYhkXYC-tc5k6cl+;wxQ;EJ z+>)`}yj~5FY`?H|jP%h!Dbx+ooH8XYjrqp$tA$A!`3b-M!DYC{#cQ?GZNId)cgd$B z>P&$iG;>|C$YMZyf1kIA1q*BI_6%*en(%EW*neVzenpy_m~=;iI>Vtdw(oJ|$cOH5 zzF|A750Ts&p2hh8qDr*vd@?T9iOAn^^UuKGh(+>_{~_RSzWZ32M!ZK1Jz4HO?N-P*iL)WCYTB9(&l6 z!A%-I_$>C2`%!0ABwjpLwzhj`eZO?+7>1pEmEuH{^XM#AvOo>?Q`9&Ih#JvJv00mt zzr=Q~dp0S?$oDBmU_D4V_JSwIbPOQ^)kOr80X7npC${1M8A1-AtYMJ$E2U-c4PK6O zls~bpJ~yRpyZ#qVSR7~4H$mB~Z%&l59*#;oWkXJ*!PDImmt{_wv2kqMPQmDHe$#D(>DKFk_}SV z!Z5F1c7r>b2Wf6W+M;FKk5>bBiRAO(qV^ z=;^}wfMT%H&_4x+rya-2MdBsF^GK~4YpsyPB*_u&BIC77y(L%G0dR2sui&8L5cmS? zOeJ*V&f8z*RI}r=ore9xG_N~Nj)GpS$L}=nniEC3+MiiptBC(@?hFN~Em^z#~TOt%I zo=WZ#W^WV3>IvJKc`Hhj@?n++r$aQOgeW=jvjH`iHeTeplyNq3<$pvc)(x7jS+tj* zHPF5jF6?b&qJTvEnV%b6ctt{v-<>4$!!4}{O8xS!~U6x$(yw{>^Bsb9{9v>k) zYFy+|Wqub$#K_*b$6l$e3QsSfTD$bYJ?`%st4d0@WiAkY0v2a~q&@dfpbG|HVPf}j zvL3WC$zD7aygmoUC8B_^YCXIF$Q=V-e>uUHB6eOY>yG^ZVFYliACR&8GKE?T;F0^^ zzfB0u;3Q`-mUa~9Zpm`(^7m(AI#n>ftQgP1NiRT)-|A}Avl_5$%tVb0@{isN^AGKN z;2#eDKQti*VqHZ^@T{-x^3;2YSiB>A}KnYE%734EF1Da=erNyO)Y{0R~B0v)4qI zstKfD5?s`O+VodiGXDeSYj)Iw4@q6GLfU(fR7nF+><0^E5kXl!EJ@wjp6s+Tow=92 zYt4MMPHd%>Fem(;=?UVqr%ytz+8tdM4OydGSfB4zID*a|`BA0|8~fnG6V!KTA~cb* zY{4P|<-iw81$nu-zCmy8=(Pfq>T@HhUcn&-h4cWm*^T_Kg~GGyIb1{`|DFlF12jp1cGbkFu|)1$2tRl5xg~ z@|R~1@$^HbqAX1|ZGAxRqF!R|A-=AsQFvIxg58mtIbEYJ{5J>(gyESh~z?XQ+(wO~3;8Rc2??t{pH-=&;Nxba?G z^el$5!g!`}Y)eJ!%=lroPIMS$%CK)m>LXXjv8Uu5K}m(WT@j;COOg{)eX#8%RLnyU z`FK173oFS5CtC>GU#rrz&2Di|%e-u1QY$jGbV00)*Bh%Ry{$>35WzYJ=g#^!QS0PO zMID%rxn){dOY}1jaWiT=?SBYloG`u@hKfItvybkg9iyB1*nPCg+GRXsO%G~oLpV=F z>u-!8R;=lS1U{|`=vM5PZ!85%5<3ZL*pspA zaogGj!}wJm9`ukvm$Vg*7}G`{&vJ-x8EAKb*yYte&b^sQ_}y})_gEbZX>#Mt`Q~X) zyuL@+F%pStuxML#5L?eCHemdV&fu{p6~tyjN(#&_y1t*iuwk*jZk|<8FlR|2Mq!d` zkyRinGv&In@g{tkKS`2Gzv%6Mz9onubLNR*3=|c+~979qr;Noh9oa) zKS?av@6Wgx?cW7`sTcJU(JL}m5MD+HpMl*ifLQD8ry>yyj)!C8I)RA_{ zw1<3(s^Ye+7j*G%7%Oer(2$azXH-RlF|`NnPE-|)5}vqTbKscmqn{d3P;le%us8?y zLoMBesfEg)y;8v0IRknUmW?IQhR)>@id_Bi2u{5~=}jJU-Ik_d&URZV_za?d_SGSV zJj_}goC5Cso=9B(3=R{Y*?JD^DMWe<55#M}m0?|{T{4ptvCP;C=gXQYBsG7XcZQP& zlHY%neF8yVmP*Q3x=LG;79yi&L4KUKpNE*=u|R2)_dDNB(r+4(+SK18AZ5o~Vl=_s zjChQ>6hOAJYpez5(X+C;;U0{-D6c{26Tm1GWH1)D^!>s%>=Dj5)UbO2Uh1-UaAv=w z^6{hruq%#B z+uJH88!T8Yc9cvC@ET`H;_9g6XnqZmax=eF?U17>TJCokVnJd4x`FAfm0qhXBA0P| z6{%sr^f_1j(e(h9H*43cy|OPoT+{7u9jnb7_}z-- zUaDaqh#@?Ym_>8+U{gz1b3rsVX94oM;rx$FMF}6dV;+M`kG9BMZN-B9Yidfxr;l*< zRNnXr>nQ34U%4#O6jn*)gbfkV83`5g{P@^00t-6HuRSqc@7zO{K0lTsWn0Szxnz22 zUw7G+n0{LZ{Hw9j71)E5YE=wy)0A1E_Q$<{9GbXMv7GVZvg3NDn&|Umr}e@q*!h^l zPm1k5>Am(rYzC)Dz(DSu%qX>_b-<(8j6Qe1)sjKBlo;ZdlPb`W7FIL54|HKe{;HGpyvv62`*9&QBU{V^jq7IWVIW_<9mGr5cAhe z&V-*TN?TcSDVn^AU-(PlCypov_-aCJFGRg7jo3oR1dEQhYIJ-1CG5+pD||X|Voncj z=r6mNO{m6AaJbGqSK}eMxiK^|f|mW`gc7@dBAOZsq#v=;n|0!63RKI7L?+6kLC>fQ z+zBi+AJm{5ZDJ9urUyRH0vQ5+4^202vZ#PF0FGBe>E z%;{Nwvf7Mjxy6me>JB4kQrf9?74=9qXvz)dfZ+*kgovH;jbTypg_ z9e3(X9h|hlq^}nCn&qydJ|@HcqfxCD>_L6^?#ZSIUpRat%Uf$fT3Va&IY8m9`!2S^ zuTrrvy_hxb$Mc@kTN9cUt23IXohxqjJ;^t*+wBY@)6XolaD7a!rJrs+THXu^?TYF& zxki{$ZcJYr=iE06jhbpEIGL*O2zr=z0@3NJQE^q}Lk#X%ySl2^pU9kg1}mbRsmgr6 zFc|4xW?A5Jo!^5M3!6b-SKoXSc1z|Z<({#3BhgsndUs^mr5M-UqrlCv(m)U_p;1NM z*NdsW7`N9c-gzl>E*Q4Q*sX^v&cq_A@s=uc7bvei>w=Z6n^N5HZ+-!9+ph^;3N3^m zEJ_{Sxbb|S9?wm(rNXm4P7(8=8GiQ2CaRjsU>yJO453tt1iKpVvAfuJN0;G-M!CCx zbV?s|Y_=WIQ*t=Gg-6mpcv_-(vg(c9tbny-W4NprQZqr`3<4M*Ma-vk*r~>~g!zT^ z)9U7~cQFw<&jpAwuovzw)RQ z>N%**ehn(%c(Z`*6-hZjx=Y=^u+ZRjgAauC+`tuHU9b)>e_c^CD26Oq)U&rVq0G{hoa*9R)hv^yh54D z&X{+$(P4$_Y@DO^#HCT#(CBSk4jKQ(f`Y`Dt)98PuDin3^R~e^ea;31S@xDbF3oMz zyr_^5^-{P?vZgC3^|_Ndn@ta^=jfy{OAw?!qNJCpYyXCg>-US?qo!&p)vQHH_O3J!fSlF2W@ny)w`!LaF8et5jo)Had=75wo%5tXnO2?o zuA4QAw>6sk^LhruI6bUp-X}t9Psjsz0_R`8W&t}%ggL?j#LsvvG6V~&AKJFc8O!N4 z9Fm&~>pk6CyJo%-SCssAij8BDBDwtqz?wJ87Y-lNvt+O0T&mlIdTL-@^# z2e@#?b+IQ2g)Geq7drm@H(8x7VU>Gfuw9u;`>PMrQKYycAK z)Kw-G{7n~)7ZD<{%~~28zL&Ezo1N{d%U8nP(Mg;++jx>_eY=iZ$>94u)@b*3s7}r5 z=DYU`150MBYhUCXdCHXVE0>Zwvud76F6T5k_QmBT7cKx7R;6BP-G@YI!%0=(j(k%( zA#m7l-n~1P+4nRkwtV>pS^Fr>WAzj{DoRj9L(kXde#g^OCbnGmTBEha4z=WJY5j-a z?F=3Ea~vg1#hA(#OG_VnJ2k88vraaS(bC60Qe41aCCk%f=H&m-yG;xY0#n0<)tk9H z(m$Xt?D0KDa3WTIuHCd*@)ZeYHADGdeHZ)Qlg@Vk{=4l=%pxVG&VqtM|0RISEcEXI zr+CzI{!%yJ%<@!s{}WsMAe0WL_jEcI#mY8Zw^@^imgAg-DKcQM$l{bmTFuIgVV3W8 zhw(3DL-D{v@G~4m5s~+!>-qg8r&1;%)$6k3SH6ca*x;n!zb|%Vd902$EGXXjzo>i5 zs5ZN{UAHY(Lt2V!OMz0XxLb?1NGYzNxNC7pkOIZstw?bQE=5v`Ln&4W?j9^auq0%s zeV*rg-*@eAt?`Yq#{RK?1qey*B=es4yw2k~&-qOnZFCN%uNRE_uLf0MN%N3HVAiut zVfv2Q>iB!_e<$|cl-&Bh!{w+3c$p^t?uC7y|GX-W)%xS-vsa*%EQx?^1+3)Gss53Z zE;`&tUrPJYcTS&ci3Z}PFJgn@0doO!-;-fwcK-N=(>qZtcwSD!A*202RD3a`#eUA;(7~Fa1o?=pQd#0&4m<%~p8%>|51zdYsB`}! z0i86;C#;_5?!yKixAD&?qVKQ%>~KUQu2Q2A76-A(f^lzvN3&0B{!xLBUdb_~`!F=I z65Yagfqq{Stz`FU%F+}&U#CfGc*?u-4Lcg@v+u0sZ4L_w8<;9X;5`n%c;&~r(Gcb4 zEnYzTC6@{{R_L}yp3ehis|tSXjK|C-`nFb;3C?bSmrrXQ_(O}2zXk52>iJV$y13QP z^m7Iy!bwQK-FO+wHu8J@-?Suk`!fTuEKqCq>Iyy<13s+L#fH>JKjy_{{MbKDX=eL|sm?rJi=X~BM3awUE9`c22A*{oP4d0FtA1 za-w8YUTpRD*sn;%Xegl%TDuMp`}8DBU1NPj!?!LxE4&lu2L6j@?>KRunZs_&^(p{pKZ}@V7-D=}i@L{sN&*}r zdV=R*21;4ic;%azXu0!H^;RJQn}8N$RMaY$q@V}GwBnasEiMds4&~xtO}@B&=z7N{ zBj)pIfu#n$C+FjUX>s4wFHsnaOc zT%J?lgvucUygn8vZ#>rG`zYH>BDT!I;J@oU*Q}}n#1#?w%BFu$vx+!bxb$DBRDz${aM2oSXd$W`$=?t88z?VNvZSrMc z--TcY6V)U8l{VWoW+zexzPLeZA@m6J;tS6&aAGeP)J7fzxvvbYg!WIcPA1v{ewJIn z?hy7bo2Hgidb0xc;qiky3TDtd4Y%+2<4GCfr}e>?AMvH00l(|Sq8JvvUnKn2xKKq` zSXaS6#mf=>qSBwhy9Dyh>d|-DEo2sD_R#D8vVKnY2hGc*o!O6V;*X5lNgUUGVVc0bd1Bnf)u71OjHk%#34517_vTCEq+9)w zlwRXn;jZYvy)@U8^yhy|vH!ZkADs?({m;?;>(4~LRoQ?2`q$d{K4St_k0w&O=k~1M zNIF5E@#yZ8j(?WTe_qIu>=dfpAo~DijvuV-@$>K^>kLg{I22~|c^{3g|C-o33gMIp z1in|*d9{TnD&_b#`#C;>{sDh!wFzwsZWo%IkGy_FM>xHeW_hpkrUrnRnp)CU?tDKz7x^p5?&y5z+ar=` zbW4qq{Vn&CwXgpFF6^?#f7WS^0fR}-As@M~oSb&I?qL?6K4VPm1Rm^~Sm<^uKg7up zo~cjVts-qt0%739Y$lGiArlG|HIQM0^V#8GFl@^X>4O?Y!(8f8)tv3tY%s@~0Ac{v z#^8uopIAC#`QD#7Iq-uE)i%W=>AAc~+AQEV_T&D9{V2MsBZAR)gMc+-jqDG>;C-A< znyDAS+H}U{A4LknSHCR`C#iEvCd6{*ZKdQbeb5a^&pvDiHjsQ;>TiCPvNyC9avA%e zQrPX%kgRcpyr%9F_eE|CpRvWMbPpbHgYR&KdkcE$WXf`Dfk`exotxF3pO8?)A1} zSrg0K>3nig(oD_H{F;@8T;Ew`=ZV!K|1hE^_)AyHNdjIkWRzF>9-reXjJ+Gpy%Kpn zmw9#h9pXu;w0DFM7wCLhT`r1C5hvhJt$vfP-c!aI!_hOni(mw@T zd>N}@;8JGR5q92VzN|Y^K*6q}*5CX6a4{_P1DNP{L=2yPpU-OqpT&lq5dcv)iIwT4 z*D{eJ1?10TZ3`JEaLC_qf9pN=&~xS@?X2~*RypKp?5`RgH@t@p5=N6lesqO zDya;;AIx4cwDH(Bpv>0$HlK6Y97H4Qu6OIr6xQ+%3R`3cIJ-ubHEPgizevMVJm{uQ2U z$pr$rEG;(Ab%Z3o*HE0EZp4T9^#e2(-3>?YouYhg8J>8w^=?dpo!>*uDRh`LG;%CY z2{d*<+e;$+$h6lbA;8O4B~ZpXp~ju-cRaf~GUiH;3zWAmeKtl!&?#$wNy`T>D!^p9 zl1*yF{xl-q`~71wU2pURJ7rJu9>*$It`;C{_H@cyN6%wx;H}~08ITJyu#PS` zUJMiQ3}W;i9noC!OTYNsaw6dy{Z$Yv3toha!_xA7?K$smu%KmdcD^f=w|M z0V;Bh?!B>^k9g9)iP8D5W@sH!*LM>KgYzcp-um|fyZdzfn4oBfZO0AK^EuXoPtc~L~{ zbI!t8KGONg*ZVboi-Nqz&&-+L6zdBEXk%;LpiHE$v+ zCCi`|LEu!<^LGY~&L655Y{W6)kkszy))t=^g{-x_OE{de*Ml20Y=`I#6_$k-7eh#XL8I1r-=JcFvLokTARlq0Cr-`R&FWye7fib%~ zW+i?HFsmOBZOqsScu8v1OR|tWG$b4!lQ{z6|mAJhoF%YoJ$; zxdnx?GR9gJNy?z4ms_7pir&>=v5rmH%`3iU$d1@xHB*7k>Ws{{ybak8Fx!kPKxz3k z7ALl{GLvi)?;{ANbx(0w-C+u`XtA!HFn+%6L*(X3hdn?KGDPwGqU1@`&KlZqUQ>su!daZ^_o;g+L8q2)*hc16StIPd?&(J_g%eo)3rXjRkZBW zeAvV0ch?LYVjQdkRW;z?r6)xyhEW1vi%}AMYxnDORZ)o1vL&U_=vdZ$vl5`_8RCk< z%N1kY6zgLd{xFQr2ua_kz}W0QN|}DO#9zctYVoa>fhX=w{f>BlA;Ti!ZW#Jgo)f3} zwt*U-b7Q2)i2t{pFc9&ckP0Z|9@MfWi!vcoMssULl6BW`McjGCDr)vc@~4z{F_6Q- zzL6Jt_#}@UEfw>R+nRpU9?|VxyS_e({Ry3)o{hJb8I~_@&Cu}H$jjZJeaS_sbGD-TdZ{r2?*F-Zpy^4kSk@!fwVaVEjXwwLID>U~|skHC08%B57+L z{8C($)|Pmq?yT;eDM*}pvXp5P^YGdwWv0*fCpK z*mStw4-e|gJ$wjb5K_VUQd7{tu1hgJPTG6Sr|eem3uYi!KO&P)G;S8>G65vT?pAcx z&Dsnid4K0%t+-f>dI5@D!3;FMsH+CT}6e>;TB7o+MhX z{Pm+dvqtsh#b~!tXBtQvIQbj3sRr9@8~IOc(@XJ zpKr7IhP{*t3GHytN>a4JG$ySzye};7E^Rq3C!n8CytH-o=rdj#%q0P;!Ll5J}O)m zZ(8JfMpaUzI&6^K#=N<}zkW`w6=Nu3^qP}|JaKBD=NE0C$+CTP(kQPs2#Q9&e#O?1 zO+t%)JA#321Ed z6mmK?0kzFNbDLECy6-Wg?M~LPl_3r7*n&T}?Z}L!s?Rw{!?ROAEtPgj7>rJ5S!TbGOCQ_qBgl_i6-h1xv< zp!hDY7W+oj>Y>hyoi|WeiuFnr>S3yNDKgYeCY)=C7_@Rx0jN6%V46;>wFUg6Acy;{ zeQ6!?er>-bJD6kGPGEW)!j>f+QAG8FwGGO#JB6-lf`jPu zCuY5*Ch*4c%B?}}3`(D{F`F!vEXUcNrG1rA!;nge*a^-X?{1Z}u!L!4ZfST~R<2|2 zS@=Dj?^9D-8l1K!t;F=Fo`S=3n|2}57LnJ{Um$)lJ?;7%uOR;1jplW&mOQO?Wz8kR zhu`Y1*`OGP%Ze)99|swDZJyuc>ujP7F^Fl^1` z-5)a=3#QNM(ZTLRI14{%Lt#;{5ca+IREQ-jxVx#L4^jxSwh;h+gamgk560ht0e$^= z47!D*nQBqDGpC!A!HPZv3U-9YdT_5E;%~@*QhNPV$)!7!poDvj#p|iwF$SH=8vQtp z$X2brpkq*CDY+KW#Xq%A)0G=je}g4I8G>imKg2$vtCQ9H6(k&s>+!u3NaU$7bi9z> zro$UrnOxOT4_mGV*fT>4iC(;qxY2L5mo4+QHBl$>=_QN+#`q$pwIDkeq!rd12gvFj zd_q(C&7>~r+j!NIvV0$YCmzjE7RumLtRN0wI3Es$gZ(_`BnJI@i=(v>Z7-h|{0Q-8 z4Y44Y0l`UBy5jjof<-M`fZoau_{G-(oon!pRL<3Tz5nX%dw3adybqI3G01)5t=ioY zy<=pnF>(iy%c(hu^XlQcMOQ^(pY9E@NkpUZ$GN%`NIcs>4r5ue~7CFdI8nH4G+qi1gU=_gzo$uQQ-qN{J*%{Z*jCrN+<|ep# zARv^xdC=tM{nll^>4S1p2ae};yTy{g`2#WT2QeLL8wN{C#kX*7-#y$Is*=BCju6gH z=mGT&n;trft*jM4EWHk_TDOCWO|x$spe(QoKVk3bLQkLX{+fZNUD4E(NMy2Ij(Z5H z6kFy@l@-96L_yP@*5&wt#5xkbR93sFIvopO_O#_0Dc(1g*UT_w-M_p~7&f%;5h70x z6YPOEVl(K@$hF#Tf}{d&2jP4MoRTgmZEtDxkrX8q(6;=VENunGyPTqiKDa;c$P!XF z(2#R09he+;$m8SzCxG(icqulKj04PJ{KIS4fh zY;D$DQUY?{zoSnOlLVDc=}>NfPOp1;aRU!V9RYXF(Oq)rDmy>s)4?rCU`{Fk+w{|G z?NqvZIjY^~{blsV0is<)QsQb+(g$4-)*-=QBKwZs%~YRl2Jx_5^4T(S(M*Y zBCIX|n;4~AD(sre=i%f*O1X%JfSfVpw#4hzRYGcJ)-d>Bh4c#0pFE1(6nJ4vmb_MQ&B>Hds zc-&O*+310cE@<+k)td$E6amxI?!N5q5*X>74ssC16;~ z`?E9p)DCVZZs5<2IACgAj*^nvVgw8V(`7Sn`r^$c0iL?U4m&^?^shU!cb;&u(4ct3 z1#Tj~>~)mA^^7F+O%1<*gFTR*A`XUN^c5|L-~dLT4~N(Lo6k>;eD=?MU+pjcW#spD zf%87I2Gbi!lZr2aOd}n=U+k6~T8>xkXnik?3{mWOI9EhfZQ4IY@JXg6vQb7c&xIHw zygsh(&f_-Uc7~e0LA)@$eub!i|787rgKTC;-x6g< zuFzq^Z1SIZz#R>5vbzt<`N`{E^V! ze(})x-l(of=#scM47rs+S)I=RevqDEM z#h)DZsIOp%sEm7jGbp+NW_7G2AlbY~7W8#|6|y0XABf3qgo`^ieb!d5_qF^w)aIl1nMmfp z{`Y)Kujc9hh;Pvrb|^CZJKxI7bk|zOiUvd14p0v8=VCAg19w9#1=XWx=;!`lhU!4r z9fN5hj&JVm#l&G~smp{9r5~T4dsZw#BZ)qcl2XUr;k?}A7&0-cN!Gb{?(Ff&tk9Tr z-$**(-7EbAlh8bY9?=$8GHb4c;(XBT(2JWQ3$p~ala9akDWtwu5sX=S8X99sxwsL z;)xH&%szef3MyE56L294^w}>DE5AYzjbIn1#;E%#82lv+I!Hx=A&AL&FU0iG`PCvD zU}@|eydc#kL$Gf&sGj3dWf-!&tQ&j`dnJI?y4k+ak$SR<0qt$_5n_ytajhGCH8>j_ zBknd3*vEWeUSI?wlCD0<0~3cn>lF8(|0#4~mLT)pw-kLo# zJ0dsE(dc>SJ?!>syGMao0^7N9^%cBx2`vEcuL@;?R^-hYhGMwQ1+6%mwNU6KJ zY)DK=2l2!yk{VRd934wBt3VojhS-LoCx*`8=ZE{}1nH7}eKOQLrDW?rt9gbuFb-;1 zgN&zhD%KsNF6bie*YKW+;`<|51j{YIpCJ=Q^En+KUw9XqOvfObv+;lK3Fc!ce$L>0 z0KQU2aG(EfhQk1%6@pC<2#(RL{R74O?*3((qgGe5Z9D+f!jYJWdUTws!6|)@)h_z_s~?{kv;V4oEsLdR?w#mr68YjJ z+4mHz`*a_Bq-1=msVE0V)A}fBXhJi8XUx63b|45QCI8^WXc|#dW7?r&EZrXW+&9cL zI6nR<5koj{w$Wv!(Tdb>{P)qQqG;Y`U7PL9&4hQ0hhJDj^p-sJkyBFokF+Zx*G;l> zN3*;7E%Q{eA5NcK))@jPwGPIhOEu`YG}MeuI?j~W0U%GLUi+xjm#Z*BP}I5!pUK9-I)A<>tW>-0L~u%TRQze64V-+| z?)>c{CtMpfpSRR8yWOWlqqg?@L^vG+@y%nd$7~i5vC&Ef6cuJn`#^! zh2tOlZdBCoz9kh(`q60r;%1lA*BD>Kjq8aAi+w|p4Dl7ZUSHK9IK0IbVq)oi5Q$3= zeEkgz7TRlANk!$M-U;uoLDIx87*O3>^6#R^5n^imvzoVAYI?tY8}MhDsJ3L{H}~9n z4>zArclRhY%V{2BaR16PGHl;%@}=J(KYf3{<>JvTmcF*GHh94uoS%SayrV!LG{Lvt z>kLuGm~HFjEY}D~F(TEvqV#jR^Y_pj4T8ZMs6at6ioj(C?vz>gcWkk}&5Dh!a@^NB z`4kLJ^|9nWXYN<2!5xcI@^i(N$sUZ)y(0_f&}hxRjy`xiwv64)Ucn`w2`Wqtp|q`sN4a02@~)sMe%>D~c@3xG}o-NRwW; zIy*OIlh^TrdC=G`r}qxaOXV9lx2cN64=XQ_i$Dxx0Punhzw>js6ThSoCH6EMV?m8* z!Dr4c_dZ5yn#NQ5HDoorloieTcJ3c~b= z#_SKK0KDvJIexAbfDMiqI0mplQMl2L=dcxX^O*emU(7MzYPcYat)`y-`8F_*Ln=!_ zDKVWb7SvgG2{KbEOYa>y&W0w9e?~deGw(CC3X%K;EotE)1qw}X2PpMAB2TM)l8{e@ zv>&}4-#db&h>TSxJ>q=#wC%>-8J}N5K}2D+ZhA1C_d4}UFnFW#=FedpaJbQ9g0xPWj=GPuWA?7eRLx$^daC>XlwGHz)690w z0q$mBv|x)t#Apn*kn7VSZok+`##lCE{$N(FNzhpP`(FpcG8xkOP!QrYI%UKN9d!wP zIR^n^;+!#lis_#@7-R=>bJhB9G*(wyGfm#q&PikKV`Yw-#qoaBXd(@4pZTs}F-{#> zkXVRYxBvMB8HfpaE;-Ayba^>$^$1p<8FXV?sQZb3%mG#9dXCW^>W4i0O1GL`XM!Hp zTc@KQqX9e`q+QpimxXfunwd-rc2Eh*TTEo0cqO8G2Unp~2>^>2-Z^&=mW-R{1cY8jLP?g7sJUIc@ue z7glx|ZNy3>w5RZEo>|G^OYCvEiD*vkUjxg`mhQoCes&;c9l5EqmsR1;lRv4^BE8J~ zf5Uavlm2ksu=(89@V$$~b%~6wV%xlLX4up!2mqf2qD|d8??-t0#?1N#e`iBoT%Gu*%&>ju{iu=dqYbY%W?l)hf%->droNx&`@`SqhV?I4`d8;E4@h_hc*6Ijf! z7g`N+>eeB^4nPjbLppyW!yTGWYFC9m@Aikh8|)?WZc-WU?HbWgO?hf{z`|od3)d^y z;)>=23O0!62tUtMTHQBm9`HsSFI%Hxt(3p;Wr)w8p zW!%jIX#;yZAd|hg=aTxlnS^WNJWc@%T<_Q^D za;CSX8H=p%bv9&rmrhUj^T!@#s@a}WrrIeQi|h1vrZ9M|uF3ap$s-{%JR}Sjy!G7J zmm={BO@5&67EbsP`1sCKmL4AA>KL`fI%>*=rwRVEUepX~2)riT-^j2exq5b(W5$zi zap<>Sj9m7q#&4ImGtS$m8m$@D6*B`r`Py|4RTxQ{nRzPphbc?=O_ePBStWO9xT6vliwC2#xI)WS_&sJGvChMm zI4;5-y%3uDzEco6y@cIO;hmoYMtkee*Zh}r>8MLiEd9!!d`jmXl_EuIAW-IJJ)Qn= z=MF*JlURC>c z`mp_-y$N<3O=ut<@lTp=oe_@p(-^xATQs&eV1A({KK~RVd?^qy+c66%{==TnnF0Bm z!)B*|G$O}@(s%8*O41tQuF$rnzNdqS-F14p0II%?SWI@oh<3@xD)qT@cT~FrMCXcY zb%NcW5Zf=1n3#=a(7%Mn4jAM$>%&dJxxGpKu=E3G_6 z{v9PI+#wNjPV3q*$f*h3PmNqxmF^Qe)f*A0r?TW6stuI5tf~QgSZO3~&KY2a{4%|3@Kufem zgy_d?^?*gf!XNL*pE6(JwNPeQ-Il;S^lu_Yi$XR}^wiu;XP6sG!jg)q5Y_38YKz-g z6lHyRQxQv?b>6`-$AqcjzxoqivS?MlpROCMTa1K&_wC**0+=L2PyLmUca9?`beo*+ zmrK^+u&fsFkx~3|s~3)Tk1)$Tjx2ixnI6Qdu>p+v2XTqT89&TF*pnF6*T7%tfdF{> zOL(Tdg&_79si!W2*fLe_AnSRG8s`&#}9)4!(@fweP z6I!=B@Z6Y^YYB7XCf4=!YARPl`Rd42dl?6c2%^YQ^Z)_wV zBfnFyTI;~5;$UkfOXTB;uZ^Zgbp7UGZ}_a9>%t2SAyhreG~y5Mr!1v`qR+;TVpTD} zqjs^KP14wj5erPMTznc+dY1@oJ^9Iprp9NG4T6$)AE?wu9*F zl_-2{5(3ORw8#4<#rTqwSDIz2AG->3J;*?LVCBhcqTJ8zAj-}%1Oc{xN{@d`Sz&{Gk$d(fr}pL# z-B_&@Sh5-z=!1Js{Dk9iaQ7zXBXWnluk0yoiO|*N=-)#PtOJyYx>RFoYz$~%aLl_Z z^F+gXbfDKNi=d~LBu;l8Gj>NY8#9l~fc-Myb}8;dW!A+wzIyTY<)4`F6$Ew>Qtih( zJ2a8GzP~vpW-`i2=wP-fZh^UsVe`rAi?Knu;yq2G5%Dw1R|fWvvfouC&rS|l+=3Io zHD+(mGTgC!m)*uQ4Z}*tRr!O9dE_@E(=xH#{f1bd)Z73o!P(oHhpO}4w3~#X|3UQ% zv0L(_Ql&|+#T3gBo zglLE33oOv|=SSO}|CM5hdkfn@_AinMRhA+C3nb>Hm$~L)r09%3d|Vpn51XL6bjF_& z06lTGgqQN&3C{b1C$3Ua1p55DTCohiDzXjs;4GrOO|5Quvr%(?*e=B~>?n zG7reu4{wxH+aBeDXTv93UlO?4;!el-qZ8clJkDQ07?6)kfJZ6(DO-%!$qfXvf06I$ zs+3`+291L5vr)rA-(su-%<`raNH|ps^mDb{(%QcN!*~Oxz{>JdJxfcDfBNC;nX5eh zlXW!({TrlX4{nIe({T=YS{)k?P&R7YK1Ek`zIGc{m7J-|(upigXAbF0Is=o&T#*?J zaF^mJrJm+TQ^`S?BQggGjRDIbg`%MKVAB|8hwQE&uJ3a)FoO;{TgVO7yaoHrneW&*18}Bjid5 ze=?&~K?~r~3RPD5&7SqqD)ZS%Yktv0ljb!(?digAV~M`}u4lp6a}44eDMo&E zP7EoegMkakuX@(GF|CEgfDXH{Ur)Vfnyaq_!+y?8`+6k%&pDV4b5LGPmXVI2lM`Q^ zd3!nlq}geqFMK99LS1py*0mZ|bR4(pg$-Ch$VqG?}q?o^gO#Xf11;GLxdELLocz%(cNz}`7Zva}y z`RMymq<;DGSVjY56;*}|P>1Mb)#7ebC`KD#jInN3E>SU)<%dd0uG_I)k8bZ{o|$|>ne8ed zxPm|`2Bo8kum>dl3&**6fidS{#-EFq-p!(49nTS*OnVDMw)&p6y#-3lUmjZgy&gR3 zlI3gSH|c9trX>bAO!tSp==qu-ek0dy z8&dLbhHh{WTRq6St^4p(nnX}s41Sr=v;8Q`>D0MPn~7G`w%&%fQx8UTntSQzdbShK zxQ&YTZ_2g317HnONJz#S(SNg>PTXJW2h%)MH~0o(Y;uktGr!Tivgv6PpLtFB)}Rh= z`lUA~iS0&sX^(iWrP)|}0=f*}r>K+-TYu;WkgHCSKc}59(^blCPN@i=S+IJ^#PM;A zjXCdGA!?2YpOu4AJx9>)52cA7Xiw{%)76kUiNh`GF|Yx@Lxh@3hR5 zskXL@ZQCKYd(?_5Lp;9oq;C#3`Ur(U{V@~lxj7wU7YG4KA8dOMB_R5YE?%>wX6IH?yxBMpQ!q1p%Jer+DTMvnm`H?; z{oy^tdTiw1V%qPl!ClI8|BK%|6@vinCEn1FybpB^=4{#!+Fs%my^cQndvPgc{g3Ke z*zMn~&AGxwaR~Y=bf!=xEOg&1rtp2t3g1?#w;LX7iob)hls{L&VunopS_Y9Az(H3I zQ47|hb{suDZ22u&VC@W&_Z-5sTa1ZJ+$E*5{c<3^?L{frDiJlY#k-3UPKE3>09=ZvGjwH0%E%hAkwF+&f`l(s$WB zZh3B>%V}zLa>wRX99ANn?HMHbV|DPal+5PTOkS_4l2;AA!d89VJ-P*5I|POux(b(p z_IEQQEJ9iei!DzQ)10p^TN9ROu^rvZ3?1&CW(wyY zJoRrIf4R}o)3(4kDJ57MB-f=@Z9b=BmM$ zqWbDXP2RB`tiS+BaJ^!1f%w24jNTw^z;^kAzo&tauEv~+Fq)2#jo6q%AG;v&mp{|6 zW4upi?s^zoJ<*$PO!Yhs`2e46<-3@)3{fls?-wvgg+IWya8o+T493?xSG1z*#|}VO z@QJBD6Vw$wgBlWCbMe&D5$HJhBLuTSZ@cjF=lln!d^n@H6(>({%F0T8^#ES%e_dAF`%k3E$k8F(Xv$hJHa%Q-#_At)bdb>B;Tc>5#_+eAIBN8VpR z>a*twpr{EcX3-0GJtehBzu#}f1jPhJ$Ex-mC)TiBiAaE=`uZ9qLzmPHQvqN!VoqTM zQgi($>NjvXEJ~iYf#T`)y}*>AubGcpm^V~!1@C=0fP7A&d^LjA(EOu|H=1Nuq)-oa z<_8eXRC@+L-M+}CKh^$Rd{}B2*1>|r?LFe}xCT~^81+YI5 z2K0IeDM@A@?@ST12cvd{L6hD(W){4x{EWeoM(s4}X1ai4lw@BrX4!8unudw>D9c7_ zLp)hisH18RpeDX2bpy_WQ(CbzccMnTaMAKz8cBHoa(q$Y#0Zp>>%(dZ8Wja&&e>ghi`q=2mgwD}&ZHP2bFJ?2H+}6)_hM8s=S=F4)LzZ|#FncjaFqLL zV0WP~KEV`xz*pM?>BIRp7S2z#Tl#nIS?6%(ghk%Rl?fNm zoOfEy{n(Z?+DNeH4tv)V%LK~N?t!9gP0#GN{Xoip7v{CWffPpG1h|E1HTt_VGZ39X?`p6in7qGL0e;LpE94Vr=0tQxt)->+Uj$Jtrs9p!!& z(DL{QvmVbpMA4?*^Dle;PL z8-2uqw+5$cEO-bMIR~A9CVJNG35*#`aE8fxTNjUbm3j{Xu`wmc{eqxM4HD~ zFPcV@kZ_r~n)6M)iQ)%jqcXk}Sgk4lvftI1+W`FTn9SG|kN!yIB>4s?zO$4iRx zyr*Ym;>kRro!6YSGa28IoV#{^4^UvUwdx7O*B8kzko1y`KTNUyci$%H1PC=knX#&G ze7dM~6`MO;y;HSe>mM-GCv*(`q~Js3{zMt4;r|>pX8iOWVG_nZB7dHnVck%H!s-ko z=g`Y(i|mMjH0>7@IB`f8Pzj2~1N$)J#j<669~wvB8p&x@X0yLqO*>M2%omhQ@xi(A zYsB-OvCqnPMNZ3M*2IE5yLo<_gxdWJrpyAIVQikEZeM2doZf%1yy@oaD!l|k1!0+o ze6}=CljzDJYC!q&P*KZgNn7@rYPq(141hyk?Sc!?1NHo?Mz;CChAde%W<5!uzt33a-$7A$oJ&WOp*grK z$yTv0F*5g+@tb3porOJ16t1PXfx{xo_mzb5xyQKsdq%}yZC|EtxB72GF9mW(d@@Lf zxJuCQa)n`O%<7sC zut8(}+4js)&JS7NK-YhkuBMmJ-|I5hKd#X< zVAuuD7q{2xu%zh`bA5TTH>8{FYPHoSq^*rrYhRGrsyH@JS!Z-5izDWDu%dS(_Mh#4 z+}>&V?tsSj_z7a~?03)9=ov~BOrW)|_V)=yUJc={*IDn%UL|kTeC@3<{AQ^9c=XC) zBnflU@MZdrS@jdij;{U_Gi+!WS%p{aZ_B$LPeGbZutJcytLG%j$0p+i3HtMg;j&8v zhgt@hU4fo%N4Qv=J082lgXswre41e+t4ITkl(Ck3y>DK4QD+O3 z;J&YsHul}=!34`d;}*1Tm50WSY5c}Ba8fQ5koDQ9(n`82wg70LsP^1lPs$AL0tQb4 zvp%f4ajTk_mkvr6N@_N)u>JyrjmwsGFzPxk>KuxfV629HI3IwV3TyS=}IThu!K ze~T3cZVdl1EEQHnc!*Y~k}2g9Q@F^gY7_d5df%u#PQeIOHt1{4bw!nX@4JfQpY@r^zNA*CC})G@XgCPuFkp>M>$X^9)4J{7 z#wOy~5v?~&H2ZWn>gRmr7ojPn6XVEHAbez#~lU3N#*>t_Ry%-eZZ{BXZ{x!YEjHy}Ipl2qM#6G9L z0G@7W^Xy9_X;1;fE^v`BTGiymsPpUgsD2;n4J%uzWZAzLpTAe!S|JusYEB-)#oW^- z#Ioexi{15ZJ`mv7(BeA96c9ZQyzb0ZoO5zE zA8==iVT%~!DYq^eWa*TZhBabNJSxm`TCR|5M#tM@6~!ecK?Vf`q6vNH<7Jqap|hNF$1a z(v5Ts42X0|OG}BgwB(31NP{#(4MPuI!!XZ@y7#sBb?y6!`+eW_toN^BF^gg1toePu z$MF#koal~*=&5hl#PD=ajX7>RV8ba?i5gp`vq8FY^GWxqr*_AyOW#*KP;gzhPUt87 z55&nY@Qh{%>4dJ?)_6+S+%o*RJCPWe4&4?{DS+4+Ph>%iSNSuH%Z9l)blVkDEYONF z_8Bi!jGb=TGl)0G+tsR}ou~9NmXm39ZPV4~ld59SzlCyoiavFPP#nqL1D$cSf)HW{ zx>Nqj`MJwe(UhhLc)rI_#r(uEo6KZmFjR8Ynmjh{QOrWH7|9b*R@gd1QN|ca^ky=x z!61iHoZ%uJFr%gs%#Dt~yc69o1Hycbaz$Ou*lgaAf*dV5lyZrs!RYYvIHQ% z*KY$Z_2xFXDSOH^qUWFMqQwixFqrB2rzhB>-mf|nFt1=r_*|;}hd1(x2ljS{ z9Qpvj$`>hYc$}<2ggXU?g%ZMnz&Tv^)`SHfe#)?~jZL1!ZD*D)vPZH%h{dp7w103x zMt+C8q+ePb1VwiJ5nsYIWik#*3|igt)Eqya(bNn#J7mM+_=>Am@8*bznHz7taN4un z@{vp=xY^;Y(&4-=>3{%`Jwqo3U|*PDL1{M~q&ail@%^wp3wi3I=M%!DmS?g9dtEVJ zKc#kjoG)*nofrq+bR_U%{g>{o{@8?6a<zi-U$2yLAxAwr3d}i{w zFYWm?LCb*vL*&cXmVd~`cj>%4TG}uzbV-N2N<>H4Epqh-k^(K?pSXHqgWH$p&Y%az z26rmY9m+nw=ekZQ`JL!HyY#I5UcR+k)h~qTV9%H(laUJpJjwx;ba95vAJEY`0397> zc@vbZBaJR-j7}Jt;+DA!5j_ewQs;#N3tWKxV|x#HM-yo%76(UesGgYa?|aYq{K_wQX$!Y}CFx_9)ODjJMWQmM$v#%kJrnLh zf^W*f7lN4Z?AA-arTM7zquykDryWSvF1WW>(|%~E3oSV1!aDa^!`;Lsqlmrc zlhm5*d#dRQ()sjrJ#9q5;M(&A7Xvem#0Vd&%_$GO8kVO$~3$hwe9@?^#-do6NQyboB?B^q< z-=q>J81N~1GdUdDqR{1MNE z@v-0{;fz#Fq|*lFge~taW;G&$ZjTD1pQT8dnd^sKwOu_gE1XX~O-5pi)uE?PYhHi8 z8z$?mtE}U4(|qcy?DV%!A>vYtY#{7C@~(_wdSH5AXY0MSu>IH1&TGR9xJ{NsvN`Gpdh58h zfypXUOtp1_-oWr!NEBKyakayiEw_jP?b}0#h-WXQ@xPR-A);3&g(@HER~L}zAW`Uq z5MOfK>#n3pPV-DV5UKQDPL;F7&t)`0 zFK2D7!iS=Jl_pAdb|Y9u`o~8m>G#oqX9mssbNe*oR*#@p)h|^LDb72j#SJ3Ae^a;z)*Wqr4VZ@7S$A_$+gj`Lgz%{)ewVmz&V6Bl+VVy)Yim~7v8N3=|VTbX|G3(&}4 z(vst&OF-CgxL0}R38*jsE1ss0X4-PlArtR1`^ZW=WQ@k`Kup=aUzk-9^}|!CYy8OOWj&H z+-H5;#f;bDI^D4;>|jHTjdg2g(B(Dpxgm|ZrUIb z$`QZ;JQEqD3oizBKm;iGR8qqpuYyEzS3zDWc}9%LNCxq3vsv!9T_KZm*D6AYYqV;z z@2_^&;6|}<1H3hRe7VV+O17sSN0BpFW-&VJCB0AVKF<%Rb1%bz`6}PZWZtj0x~=`5 zaH~HCqHAHAu&wwFJ&^$+RZT{S_~@ldhw?+zozqt3)7B~z)r|=(PT_C&Dbp&s^CD}i z2Gs7d4L=XWHy0Eh7r-ljw`(s63{t#r@UM@rj~xzPE6SUE*tcZBf(A@?bz+wV+s5?; zU~KkSuRepno3xKWqlHSp=+P9epvGE;PkS!dlGKou@!JL6dn1}gMEthLfK~H63|8P; z@dq&@csW+Ni<&%>lFI5caNO04(&cl*C!^aO@0GZ~ah{``cg+ zt-D04C;RIiKPr}XXw5jpRxGV^>4KGK7fw%>bxZW4b~`kgcz#nZFTc{Y36J~vF?%c@ z))HOgG*TWCfxh~Z*W35-_HjqpQ!ZI3L&WRoaGSypW#qwq?@F{1)zwQBF#=Lt9kSeQ zm&VJ)UP{T>9Yj=T)bG;lBX7}R^mtqI9xwWZ+bmz>H*)+g`JF~K`Oe%KUUt|0yHB-L zB}o%MrT5NTo=88;JFn|JLdX?1gokH)1F+1fK924~V^zG~x8$O@pQ>ul1ZX4^r} zJKA!VXcqro7nRipya7kAy%ug8k-G7o6%W^Cx%DVjIjJ|@d#b`jPHY3b>Ei=k3>^@)Oo;Zv*~Gou`)l2mrnohmRLLo2-;fzV%_EGDK|=eqCq_ zu>H+En4ag3fZzO3oz-6$73Gh3WcdbeyvnuMkq=}=Bb$AAwdveLM)PcaBhUor{{2?Z zw#C}WD6E??uP%s&9#HTEZw`B_yQyu5bFmA=4u z`|V904=^tfY9Z;V3@*HS)%wd)7qUG2`H=Zy+6gpw3y89Z1fek`Q|{&e0hAZ0(U`}6 z9@wo2Fer%#pTL+8(iW((j^R@koB0YY*Oj6<N59N|oG(Y{JF~azrlF_(Bvbd4=)v{- z;H!-W9c6}3`_T2`8FX-0z956=vaspyo9i0M7YvDf6PrP!#TRbZvOOW1;#Te7*vIDIM4+o)%6AxC z&i0?|-}QjfT?B^qpV89^un&-Hm1xB0*GJgYb&tc7??e!=$+Uh7R-=w=XjvOBnQXoW zfE=aqF$uM?qK?!M>YtH!JyY7H@157GdNL=F-aZE7$B6}T zM;JD$;2av6z5~%AN)H!Q>aIhD15aJ*4oX2Xu+y;)a*XarQ=69?0hbc!bTI?N55V8$ zxU8qAGX&4c9xj;#mO&bC=G}a7stNs>;biNJeh50$>dvqH3Qb`^`?UJSU)=sd@V zwlpw~Hn?@8qfGude3|?<1$uwGQ58V7Eb)VGOXbb|=*OE@S!HJIlKs!44&?A;iI#=j z+6%+!IUr{xk;bTUP8%*=LpPxXOTiH>?`9IeUn~E4R{f1dPPLE!sF(Rl_m7d#|6i1a z%649N{e04{ITxVvu>XDI72|3GNTj!hylpVBN1Q(O_o20cY+^Z>R@^4ksE zzEk4R5w0764*oS{S}yi#zWbBJ_d3C?5luhjS3fw|uJTsjsRUm{dzbuN1rH{8ib`_? z-|_L`px<1wkgQDhA0}~sNdL4vt*qtdIhKL)iS@K~L989{cemYJsN2;=$#GLB_Ae`f zo`4u%o;ylj*~nZ;7aL_dI<7mb`Qi;&I6cIAUNEC6WU~(8wc1cPkKlb+jQ6fxcc@Te zzs^gP4Vh$$IuI39zWLQRlL;AAgJ;stT93m$YnETO6?xuK`|*!~(mD_*IRP~^zb&1k zSxsbr#O9X*c&##pA`Ro{_A8U-KDMc%i0SMW1D5U-keF;AQtb%NnoqZm=>?-e-zd;E zVh4Kx5c{9w0r})1IsS)*q|>s&%gj9UPHOt(@ce*qrd%#aQNKtsqO}m8ctn%=#Yp2+RRNhbHYc+pA>{pmmXlM&#M_-R84K z0n@y?n!}Fo9nJ6RCDWY(W74h8if{vj&!!gxM1eHN!j~ zc_eF)q*$VsuB{yv1{hFs%VMpn$DS#3or9X12hF*)?+5d6nrMzv2Lj(a)*FvelTEh* z_eB<*rqOvyJVqpPXO1)lvton#soI`&R|j~;hMNXYP&>RnX35cU?#{0 z4h;Fqk!rY6p0GNzWgGj?Wkp0Vbf2QQEHHeev5e?veziGK6+64BT#g9sGO!idDx+B* zcVOF%GUq@Rh{upZjDH#&w>3K5;N@f4s;^4;mij>P4Os1F?Qob9$?F6Iph<^Xwgw@8 zkxP{cJa9?7WpIAcwet&F32hG7Ob^jG9%cgMg@_w_kCpLig>1fmkp|p+deM?D6kXVn zVMCA9-r3d%XNcs6=3eoj21ZtbgkxfDW_D6UHzonR^qi1Tw9I;4;zb>Zckn^I_s=RH zmmZgilJukgmjd;j$u9tY=4!%6jl}zhn;t{|q8B#| z0l& z?g#Oj*|^g|BsZj}_v;4H=kFBGMLEmpM9&!CDME{rVNQ41pYD0Q^pP$!vtg9ZkGl!P zTn8pM`HA#o7?xww4VpvQS-&=0PCQpBYd|w`B}4&Mz@=6?OFMGXon5Z0)mt+IyT5?rt$Cq z{mP1fko>c@$6;KrYQd^@?FtH5=Nb=ztWACEOFHJ}*yLFAMXV;C2(gn-<`Ew7 zk=Pk~Q0Q}ga%U&Un`l(Mqe&ODdv-o(mjRrnm5|MMfoaBuACV>AQH#dDzPHc(ew4r2 zLcA9iQZEJngpa3TSTF51*AHb$PynU%#be;n$8)iW)u*X1itkndyv)*dTZsn)xeQzX zW*qcuO~PLC!?{jBZl8R9mBRUY&I3oG;5Di5nG+o&Su%^-K0fWAu4#o>aKevKCEzon zSW~Qf^Jal8Tt6M)KRbXFz&x_7=g|y1Gnr6FJ|4fX&U&X~QG01avMLzg%T=9NN&4AL zzQ7FMOxCSB1XpStrs0=@a7pj*K8B6$9~*fbPck*yc#p4Hk-WYe!Fc#rY{iOM0L}OD$($`D_7zu ziu1UPh_se)2mUNCYFdKzccO~x8zJ5FHs*=kKeX?!uatlw^v{gVXhsr|WY!G?FK_FzYcgX;{} zx6(-hHuyBqpQ*@#LUj4MCnEe!lV~?JJ4+c;sE*oSm)TIn`y>%vTX~p;lo*gc?FFEn zgF6Gtp3dA=qb`-#<@evFBm6~ll23+w6w*(wU+;L^WvwJO4vjcbzy10Vc~zC`B$^d7 z+^_)aUJCgYxfTBw3l86$gab1*e|H8ZI4rO&JNMI;e_R%l9>nd9Ni+Kvf=qv!^IqHp znItZJ7=7^g(4RX`CAZZroLT%z=JH*99CPa&&c60Fd$W!4%X~j{Umr5zrm*i?fZ6n@ zmGd{>&aDJ_rgscpA;PCtqk4AO`UfIZntBoko00i2>T|jy7Px-;^0rKRrMj5idY(C; zKVQwxD;<^DL=>bsPi>a-wsor8qS8AQW1ErNU;}}Em}HF6?Vk%B#qT{F?;F&E1*rkl z{{U$ZfcG<)hEWXOrRHAW|Bu4CQtRx1`dyXhS-D#@eR!;OJhEp2ixob=BqAC{>r|1> zy)XSIJw$$t%5TL5iW@2(_4Tr${bi%8LFk@^2sR*`11akDKJliavxqmfPNE-Hf~VWe zuEW{r%6MJ{o-t*CscJ_B0`Lb7Dxzn4>n&_RJzEQSXLiqI6irXY>leOgzUW*Fwdqc& z;GC`rD<~{unVmIm!AvpD$}}dlSKC}Aq01H#PG}|deLS?tTbXe4iTlTQ?bTA%e^eyF zf6TKPa1**C0Tw8w!X4FlrDXs8A*nP*@IPa`#mPav63YeWVZL)a`!~y6Hk%%)cG&N( z%k_$g7fniKd=s)}#eg^#ndfDEJWqcIbWJ%B)w2d2j4jWzeS01>+=*vvl#Azd)2oa% zWkw`y!ceR2VVeg5U{R_)$8?&zw7qg2J&KCnnI{4_A1s;+a^1L3zAWgbNzX5}BbJc2l+QoR!p0fR(ne-a z|Dj1fWiHyJ3v*Oq_Q)D2O`gQ*9<;{{=)af;a=vb%XFqehkC%PH?Xy(4RgxZ6j|809 zE^LDl(z2d#2#oUFIS20!+2&0QU>0QVou1&GfIx>l=LiA7N;CXyq#9`ncD@|K%qJRo*9jP)^LfBC zga8~YL67h&d)Tw*LC-+Q^Mu#dpi+!SDTWaD4NcU%iPaK8|7(g|u*|w)RWMR5ZRzoe zm|Y(8oC1{7(7<~5^&@M$zV_+H<>ldNv@0J8S0pL{h~V7j`k*x%^~*A^5Uk$@kMhCm zlB?QAz$vW}JTc1gpKVd2vPSX$t@tohq(8a-TS!J+aq^_~+q+py6lCz8&SEvw#lu7!HDa$dG%#zEHyRK>c>xUgH9D*R zucU)|c6Y}jUZ4)d&xxnUNGku>p6{V#T8vQc${CBm{JXGa?`E;)n}&ldi*mrt z0bb?UC*b>aYjp|fs9k&Vq?P%GI%fK5moJ3Cy9${sNp)lPp|wh!)HQF$2SN4p&kBO( zcNq%uu8}j60R5T3DWM%$9w6{MRoh8Q|N7yBim)BVx*yM;?n4QyFJs6N=cwHsAmNTG zXe#3TA>{=e0dygN`t86DUG;~gFf{S|e=uKP^oAct{4K%Mup?bI_C!D^2%-+ddA7p= z?^oTMRe^z(Z4hiEEZQx7O=bGasaIq_%Dl%+EuD~kQi}X+`MUMihqbu9PBBII z3hWafO!{xR2epx?!Wr9kR?7X?!YXTx*46IwOuUoxd5WB+bFQ^Oo-pc*s2wEFGimzn<@ zg#y(NTL+N#Pjw`e2VQNQD!x8`BVP`XtSGzHtO^|bNcF_L%se5%*Y8f5yr&Z&eA#PP zsXTf)y7`FX3F&UHoEIY&kN4upHqJ-?ySSLg4FFY1Ve`r|4yuJroUNUKVGdWr7u|ruq%{o|s zh4%QWf;tav%)v%!leNma0b^V9Qf8{key9pXI7M>{#@lp>&BK)CfTiTD{(O# z8w)v&{-2N8ACZXSFjGwuhTiXnZW=j!yL26Hnf;NHhI@Hx3Ga|Fzub*f z6r9Y%ptP_Z%`rR?51YJsE~KPJsWjeZ)t#nb7ypxJqkrHpl*??CgN;#0>I%SLs+Q6ue^5VFz_Q(b20_1i^GQlu>EwkA@xC<6}hF?hBL;K09FeEA{5G4hRS{ zu^qkeE~q=Vnv79Gv{nIRe7j?bZl!oSEmc9=TzWJVDIXznQD4<_I0U+lE#$oRK z)MFlV-Qu&)dn0`|J=tB65i)t!L!; zp@Aujd$c;c#3~L&l%E^BYx_Vtm7{-bRElB$D*^86D`j}rAJgHqBqC!v`44Wv1~$u2 z@$76W7>HR1cg0N!c)b;)j43sViHVTCJ9ez`?918X!ME55{u|gHsYS>qt)=f1g^Gx_ zNL;;M_M;|%)RriKxe1sHllb9KSqA+`9Ly|1eK#+40SQc8P+N0Zu%&)xlq>F?y8-#| zJ5A1YP1Ekq7T}B7v>ObA=B>1K&}?Q0qE7Dz5N@NK5MR{{9;rW&9icpzh^PKyf^_Xa>+4D|Nx#PeOZ zy2LoFfk^hE0L@a8y!}CMioHX1>wBNYu&Ga`;W?mFNRmUpX_M!kVY2YYQ0~D)0L}}3 zu9!3|fc>$n(NIr^W^-51!E-{Cx<$)l4ya=@NbdPEpUB~*+UV!^-wlH!MS8MSk24Av zDmM2fR`*T$f*-YcejJ)KyIKb9U;m1Nhr$m1Fmn}?x6V{wx3(ESly|Eh@36bzM>B!@6gW1nMnS}Ge9(w9Yhu%98{@=D0 zCKmcMKKdp{jAZ!a`xe%@)61UQTkA8qvJSHBUUGx*efX61X0o*U^VZiZdC?KG`OrV> z--Z?Hy%9pT1=BC0WaV$nhbJ>Z(v#uw=THAJtWIqwu0m#=riOG%N_>*YeLuTW_5Z+D zcm#gmKR!P{XaCB1nZdLB{Mg{dJD9&F8%Ga`#x4Q@9RK*;7~F%54YNI7rPD%Rztl!{ z2~K0cVXx?1v`9I`JVJDNx*^T&=aYA`jCtP<-rF=kY2Z(UxjylPUT!ihC-~cLN`l8|N+juiMg|N2N43!KL(+mm(TQ0GPh( zV4<+(-(WD{*m;UFHQKe#E$ivMAp#`Q_;SWxWd^T^eudLj3^(2>DJHgCFawG}snL$^ z+fa!AhXvV zp~1sF@Bqb$$k(siEc8d9hhq=djn9ZWI^0opEvDdWs3Qfi%Rop*&o1{M;5&?O@;e5E zOYEafsd_y>0CRM6Tghxy^h<9&czycH@z^FqNjk}_d>&Yg{iNXzMj(rST)*7*qXEb9 z?48(&Va(TYMjdb^Aa}%+{Gu8R8)6^dyxi2m!u$PYW^TGzV&j7(1CDJD>$j!o}ghit+8ggwIXu z+Yr5r`SUkOs$ZG#8ya7xq{&fv<6bq_^b?sP1UKol`}M^zrKa(eYnG`y+8_sRfIgJP zeHF{4FD#l`AbnI`k{Kn$@N+`&82cZ|M68HwpMKu|dvM{`&79mXf#I+D_ustYSFC@| zrh$=6fIwA6YqRqY)-GZQzS^!{*(Y2-A)1p#tCegV8!#eoxj0o7yy1rL5~$p0RyVuT zX@WS5?6-tL?ztQk_kVaV&%>C=!HrVjT@%9j&KyiPJuGVL0v}0rtIMI;`v%*~&|=C5 zFM^&{KjS@+24dW~)8UkJ&c8inhr$m@zyM_SyO2eKPklZuAm(zc;GYh^#7`c!eC)b7 zQmT$x5{REvA91ZR-Q9{+paB6ZN49qbSYW@pmX(cjiq{-4WBpnBq}Bj_i!FY-SVf6= zHESb+if1M>;V9ywi!Y6K2wm%m(!K>g^}YTr1KJ5HiTYK@YJ2+*D_hN?jYtKX$$cSm{a4%$o z3(;Hh1^!5hxx*l#)ILs2$x7uP>*A43x4Qy)dTw_&Wk3~vQ+ZQYQqF{!c&)f=?kF9- zx+1P(Xow}ym2YL4apF8dOYaGcqe@rCT2(!HI8lJ;`kuO&B5(E;3m=#0Hj5nZN^{=1 zber6X^tZ7?dri+_S&fDi7?qK~S;T!r=Uug}0IQbjwOCu#fF;uwlgB^SKL#B5}(7Mclq-(J*157(TGCbtA`$Q}gQ z=A;>R#c~s?TpHzgY`j?tEK<}(Ko1^@nxt5k(90LWud}8=Z##Ojl_je0+RfUJYgkr- zw@~bByQALUQhH1<_zQXY|7yCt*e2$H>wu5c&81tERcUU!i_fd%qweh!YGydK5iRgC z;=X-f)>>#PCabm3>pV(lzL$7V`7pVROIP*s<;zA-G}*e$-O8+bGdR~nUv|eNCfPhG zQJhI6n5aJ@Kira5N(meEUJih;c!efaXG6?-lV!EKDAW6T=LKrRj~e!g`&l2D&Ko4a zZ9jwyNTHuiK$2`w7Se{!8gBdK6JzXPF7vR1vkrcbAh?!~yxs)+#taJ2oIqCY5Yp5s zUH-fP)7TnkYxHzBBR|LOAfw?d@o~uNw`w!-o`hofu&9t$xsyAQF?_5@mXuV`*Y}?B zqcHKl4B)fp5U_pn*x?>=&JSU7R_G$Ow3SE3Il^@Pr`aVSZR7IyQvJ!;HuTSi5E zt$u|QkE5_NZoK%F5FQ5FCGKIMm7iIT*97Cx->#oC-RjUk69(L>f1uG9$1kvNN0;_- zvJgD6R@$`0087qjfkz>6iJKT6z5F4jeF!9ja5S0fRb}fc!yeJu@@wqKUl$~o zedwYzbMIE^WPmMF^c+2-nf$;s z^~6qYPALN7smWri2z$8`T2=IPPcfl{FIU|0hE`E%*xKPvp_pvu_v#2!WeomjqRW}Z zjuh6130k^`SFCUK&nNcGz7%TjE`5rzQ!7X7AwSn_kk3A^3n{O@r>}`mS#E!sWD->B zeXwYs=cybrIoIW^YpV7WOifq=`}S^Atn$+Bl{HO$V6%gEr?w3B4t4CA6FBq_^J_iX zR$P5g^8gE-V>w12tK5n8!E0A^8~(JfaKp{8oLdH~aT`*(#lzSIHCYdIxpCu+fS>of ziQJ6RfvKHv*{hSFMKfl*evRm?@P?D z(VyS147k~+FJ;m4fCisdFbDgTWf)v4h7BBVq=YV(u5mZjyl0@j#}b{hWM@29Vk>2F z(OAop&)>iaRBl@*3UK3Faj9!Q^@!<~ShRMTB?8yJ!dB5kw(5@I6EUquo4e0!3vV}# zVtP%XMiVLUwc$%*&S~++&wxMZ)|5e8kYpUb>fpK%75sI(_4Id($*0XOo9^3OB=>r` z?IiJR1knU~91@aKcxs%$`;3ncNuS5-h)a^}RdVIBgUtXg%QdDP1Ucoqqcs0Y!%I(y z7rlZLuby|R#A3G_g=}Qm?1dG@KW;GGU^Wsb@ zihsOgqB%s$f+J;Z{Z#VF*m1em^PlhHdfM?(BRB@r)0^R<4oi%@wo$AHS`VFFP3aA7 z3;p|ZKMi)>5&|v_^4LjlTqgbc4)FDDqk&v?UUv5G6xB76GjrA!+Zm zebQOHn;@r`naZ@>Diw>k5qHf~7zJJNm6Sq;$b?9jOtPHqu(0Lia?ZqMuKJc&*uG^k zb)AAD5G1kJC9&49`-Vqv%02FW5R-x(A|-0tTGds)w)dRLw{z)rc`4ZplPxAl+yJKV z=&VJG4V97V&7V->*`2yJ=4NJ!0IHv3JC_CW$|SDH_q2H2VQaHYCp)L zdV_nN>wd02wE>qJ6YklkPfy<7x<@*h8>$+}a=+dr^nrvsopYyZZ{x|A4se_`IDIGe zXz{GSc6z=8m438NQ8HqfU4Vvfpcdroj(BBBYTiwR?3_t7ID&vn@3al|qjcr1=N=+? zg(wfv#`NgN#8vR+uVvwSP?>ZVbD7%Y^b-{i)44)g%!-vK64nhKa}wXSh|w0@JCR(? z(4QQu(7==@%(^+Pe&6$WRr_+eXa7Lm+}ZIq!I(1Umc8jl=OepH+P=A3WATwD@W3mx zk~9?zfh?<1-K@K8cBzXFPOGw+om$?3k>bbpNVDU1*~E3ahSb;~gFn&-+yS4zA?ZO6PSJP7>4_EJ^Vr)W-J30{3X>$;WQbwbGDI=-k8EgmRzE8u`Z!r9;bdPR zDsMFcwLNsrsh6(x_9|&&S1O0r3suy(t<376rVIqVN_Wz8QU-^9B;k175<`Ss<3%On>+4J`e*rp5n43Ix+$Yz>J$ zP`&siR(-~ucO+IFqXWBq@oeOH)jwXk_~8cW|4X;WG+A2W2#V(# R$cu+ndZ;E}a^L99{{Xc8E?fWr literal 0 HcmV?d00001 diff --git a/assets/pipeline.png b/assets/pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..95e0962cf5eb685464250fac398296d5adf65103 GIT binary patch literal 96216 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ℜa~980ccH*4 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 literal 0 HcmV?d00001 diff --git a/assets/vertex/model-versioning.png b/assets/vertex/model-versioning.png new file mode 100644 index 0000000000000000000000000000000000000000..1fee11c3ada77215ab88e7108d1c25826302967d GIT binary patch literal 72355 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 z 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�t1GBM?!|Knc%S|P97`?3Uj-Z5zTMxP<>-#zaCmqvC1mKtSFNb$L^!wkr0RQq8h|=UHFeA4nGK#PM zxAXqnST)c)RyLrz@b8bnEBB;HxZ0V%j^F+F1OI$`S$gZjzpMrM=Z1&1-pdv8qb4g_ z)+=9ZHHf_!xI2@#{aqA;ST$s!pyw@kwu_Z75mD|Mb(S* z=ArOn>VwbvAkLeRz+2qs9R8kInW=R5p~JL79nIwh7XR1?72FN?q;;Q#@VKJo1;^-~ zPr>J0C91Y@4w|KntD+(;oAn`n6Pzhe?EhtA6kn0v2)I0D1Eg+d8aIFMS%xUR_{k9P z`CBRU@rPG@(I-k*w@y@gO_=Xt{k?-+5G9u1`v(6k-OsXy^BH%YhRI<|x`NEaR_!nA zL(tG8Gr)zbi9F&yAD?Pek%qk2exsn;9Y^xi(dp{=vvUGL`tIdt7n1a~aAymwtelNZ4=3q8l(bh94mdrrb7akBG; zwVA8kz+bqu?e8zWJzX0wkK;IzxfGw55oX^93+niJS0lJU^a8)xdsR@|#aFQ_NoT~% z%R%PnK&TL|R7~Yn+lrW3Zjs{di!Xa@Dq8X5ToEnVbPqG{f%A6SxuLT&%)hI$o*QxO zw^7Zw9MOONhwjI+W^cE_iO#IOnd)YeQz*m1hFLXkfFP$8WAU%hh3AHX?u-@xNQ2o|` zThQ5sf7nuK{M+80K}M@x?(kj7WAVj9dIDsvA#mhO$&NM`^z|9D)KvT%KTT+@VXe53 zVg0F@oWP#|bsqmPSWB@Ms><)b3oMN8JEXK4418ybCk9i2V#LMp90Vw#1;GSApGLI! z9$%U!9fLPZ^3m75O#<{@rhIDGyKbQJ@#1(gOgsw6kn=!q5~F^2QSDJJe zCyLcsH6vwD1KH3(>NIlq;99LM!R_Ar)#c?Q-tgQoGe zQ4wDAb_~%0C@4%eC(2B^=Vi>Cul~#ce75OnRc59)QbZl3{n3QIR1FA`4Yqti<{3Kd zw_Zag(sWMDq{++G^mm4}@>{o-+TEziAX#5FGnpBXs@CI|%d#B|f8|~h2QE6KFBevqAwA?f?$YXvo5A2Q-ASHeIRia$CgZooeo2%{lRzBt zQs+57>4Yz1!WBV!PjYiGq14Y_=ABWSO!XNsaz(GYFT`~6+b?oDOYJnD&M`Fi2l%MP z7rOTLooLt3RGwmYI!5wgLdG)2$dx4#l+P%<#QwCmq;&6egqqt~yTPsFbY}Bz*-qT6 z2OZ(-TnDCR%B1oyTjAM1>;}QmS}(h%`(c2K#LHyU19tSOT?4AwaWxh2Tp^h zGz4tJ<>FKK%uqwihL>*aTEzItHD)MVz*GKbT3DV)z4N$ zR993Hz6e==5^nHzkAiUCU@N})MAeA*eGxa<`fEpu#9&(?<-6*JHo5u-QUc?@Dzuk- z`}>80gcuPTwWzD!wvpmh%jw_Ax5iJj_zxiN-ROjY&qmIj-L{xB8M`f)IJ|^kP&3X4 z*)dw)94&{Hym_G4R>cr8bx=pKnQmm<2`3v$C29}B!Q^A_+W8D>Y(mD#=U9L9#@MLe zb@f)?h`-`|ecEg=t?78qUhN$=Va@npm4-lU$NBqB^wHiseYzmm1U0-e&-@0qa8W`) zuhNg5Y}KCrjv5Q97rOaj*8^FB@yae)l1JZFKdgO+kNY?<#U&+2Pr+};qK+>WmLiOc zjAVI3c6lg^?)6@Y7+2_$oR@HCTb%bb=!xxFRh9zA)2GxY_>vm>TtWptL9zi7a#V6h*i=cBA%guaIL}mRF z(YN`6sLca-UmiW1OK#L*^Y~8%upbcuduP>P{=*2X9S#+@ejo}8$?kCIrcm8Pw+m|wL$$MW_*l&z7}K)PDl z?jZ@RI}9&e9vG{o&N5uS9^jCQFuXbO)(*h6JDwA2^LO1u=qw*Z$y}$nmti+%#>um6`OOIXb?qIyx7PMGVd4VI&UkY>tG-{?N}m4xCEi4NgGqneMC&JW>LU_+|6Hot6CHDJq6Ynj+G0YaiB=Md+eVew6vM zGoRr59+o;bNq5)`b}|gk3z{0(}|iee*?Y10RDmv7!l* zpc?R7j**GR_&;&g$fwqF|K;v1=fj>~o7O$#;Hn*Z|DIg&Dd*o0c9XrYvX68!qm!Lm zY_wG>xmoUsR9Gi;;sRZ-k>&U?b9-Y(K2h}%3`iYF4n27EU8gEdP38lvfi|b1oR*|9 z;WVu!K|jxZhjb(po8=i)h$D374lJYtDNi<+=T=~i)(U0VjhZ(xaW7NN;v#bfaQ*c= z*k-&$1Z%(Qr~|BEYP}xG{u*lIcq!6Ahb>X?)Kv2|gVguVQmUT?%C8Q4OUm413LwRT zJ+dE0mZF~SW@DQ26gTZ^*vZ+%U}ETemv&AP?W_HDOLVI57vBSg1+^H^&+y{nonyC| zDY3go^g-=&v3X+Wk2H(b47)NnMf-_sz;bmr`XR}>zip4~ob9nlkHEAeIp{b+M#Cf# z)o^Q?+8H=O*ju3}z5F`7JLUuE#>CqO=-bU(f2!!Uo*W}8cY^QJ%1f8*md8v0MHjQf zdh7|9g^JCav9h5skefC8lQxxG3i+?V@v5p%LhsSq)$XFkdNxx#aXNdu$*8T=b?p?O z8TCJL`|^0z{`nUL zKLI_nvNUdF|D6S*evS{vvCSGZFhs#1g!~EvY*0KaHN}6f{&;aLWZ#!Uk=3V8I2|D@ zPFJWk7%wn=R@sX4j|`EokazeHX+(4$zQh_Db*tvX>mL&gX>6JA7SL|}Rtckc;sw`i z@}XfodOFHNtd_c_f7t&GDBO#$5~I`NIa$_eglDiKr!K0z=SZ`mdwQSUBELw3UPj%G zf}Rx&WeRr$_bR6e}*1V}M(c5RzZkrx_nR@SWbUm6%!T)PH*`MS~O^^)O$#BNC zJqT+W&u?w1D3t6b(|63rW5UYndKfHdAz!=ntI{pC(NnZ581sOKURgQu5#}A+bD?C*AWZE=P7DelI z8)CQC0ScOQ;#&0@9;B}{@U+z`cH`mH6LTCf*^OE^55W)cZ9KX@@xf|6>l9))y+t_% z&zTH+6|Vsb-;fhmCA}Z>35UO=e8>IZtjHenD9{b`IiQ>}Em87|e zIu&j^DmLhimv2BL9x{IIMUP3W_93y$cPPk47jrL5&h6;#+*NV*wZwo*MGF*D*&*xc=7S24FC$qlm= z3}gbRh@B~}ooch{)H;88Xpuh38-K}^{6prA&K?pfGHA7r?hES{%{$F|L z9S&E!{`(W@~|ZcV#RE*1U;&5~?N90R}#u&8D;{i%@g z9eB}ywgk=G5f37>fo?adI>1=?blnTQxV7VugZ@IL!7fosCl{-+m0R~}^2s#fV}_RK z+Yj`9B#eYB=tH|rYReXQkOm&=VM%`^eMyJn=b;`RG}fn`?Vd9mJ#Np*T}x-AZfx#7*TV}T)+7?U52bnbb1|ZqsbIB3( z7VS5|QG@|)k*5a3uLz;5pI)gGGDs85Ttsd%4-Ac!%9Hpil{pJZH<<5uc-nkb*@d^{ zA)=9u1o4&wdNJC1lq=ePDME-u?P1DA=ul)U(KrjSD_Y+ABp7SX!=a9Ow{xC}u&KDb?Kv74$fo9dza9uwzvjRvK?2z{K) z96E70i#;Zdx+b7@! z^Cy7e0&$+i0)14*f+5|Ml7lJ#=Y%<;A*)39x&Z&t=Z5LE1rJ8GQkEGKR`)nlMU@t} z2Dj%@&^N6{q2mwhl`;wAZ;8eR()p3x&7@5$dto_O@F7%&7a9LBoxn$QVHrL*C_{VM zjkOA3W&uZs#rdxJeRUl&NQtU%ILVrNvEH(G{zk_&v2!926zJ8E1-Okd=;q?_%_456 zv+|h@^_#C4H%@(Sa_O zWP~_7j9{+4OVX3TQ{9*^9wrryKnhZqfG{@cpy`iVfaC$KL98!m2G z>m$u6MHU29vxlSb)7LnW(6(41obS0WdD7K6Ye3m1PY zj(^+2NDt8b_i!A10+QZgwl`~2r9-?&!5X)ZE@P6p^zS`g!M(L1Mhph4X4Yn009v`s zT=*nd6lQTptaA#Ny!jf&4_l36$f~UWir=#vzZHk&1aj}(F7er zuD!m7PI$BPTF0&^?VQi7X+;4Vx))7U5ptQdKhE|o8Vez5&#cF$IbWaRFg&0oy@suZDJLe>^cicwcNktO zxbIVzA4stDaZGQ|XlK%sNf{(5_KHe;q$)hjLBe(gE@$ITck;O#y~?(o&{c0N2c&Ys z+e>mO2O-ZRL}Fp-e9@sM&QwjRLW&NVnwzI!nrVYNM1uA|IwyA%NWT0NFn<^|m~sQz zx?fiIq%U}kO1s73tOWVK2^8RpjWiuJJlg!i_k#yBbNmkFn7EIsU8=XfPGIV|b&iX@ z&x1>?&wl3nGl1>tm`3;$lZH(&-8cC2*_P4^i&5p_B;=eJ#nFv7Ku{&`+;iig>j&XZ zhQrO3Gy(6Rd{B;~)*`OzCja+owE0TGjSB{FT@&j%#_XvAm(h3{*FBev3&UOMIx)pU zidJ{L*2~us9E5|87@_zQjwM?j%33~yBT2!)t}ff5^b+MoHr6?r$mL%X)v++a`?fnv zy3o??rXFifIwZ|xwPfeyqgiHe#O{|LO1lq>wxfLfB3>MethjXpV0)IJoXT$HaEh7$ zmP3Hf`~*dCWkMk@Ze+@=?Zg7LkQnC_)4q9oV>0pK?R&gFgyi{iy4oL{PL&QiReMsD zuD-6rcHgptswvB*k7>^|?`*2W&Lba4iaeo<#Rd>cKO>!;?v{tR;?W^-W%kZjPgG@+ z(KiY*bBj^bx?L$2gcHY)zTYXsYALU=04Pn7u}NRrI9|nHcw%|;73gIZpd^t_dSf@G zwFz^dp|d@MbU`(`NV>A_szwjAXZP}@^Iyz<>~f|p{Y8ja-=Si}Xo|xv@VkmVU#t%b z0Tlz_9Yl7zKT4`0g69~@^zF-*8dtJRs-R0$Pl2- zlX@&(D1jbGm)W>Yf6@jRgvrg5(|!;{ws3zI$|aoIS3`j;)_VXW3A@2Xe3QOxbMcO+ z*NAh)(q?tV*`}+~+2p8`Ra)!^*EusMTcnti&T0QQ8FZ#(P$y+wO_6@9otWIRiDdhE ztI4|4uodGwOLAteI>*Z5INVsWU8bMxi*@R+2$%T)sPBFxBYr*I%^Bcf0``-8d7J=j zWu1aMQLHSZmvn5iswOa$tOyDNNu#k2rFRZIp@ZSPuJ`HNE2w-4j5FmUU-TE(?=u%l z0--e#hKpX1_WjPN8&1tBMDeCfe-gsX5FDMK8nANMH>E%5FsWnY#|*E3&|wNJR_E!r z_x}^51B5mp@Zuc+di5u8F4<>b_HC>|4Y-i_`bY=bxHaQmUg5@~Ylic_RnP zf$eqU?r@`2@P9o*q995bnf-7ddcM+9Ci1GmFm8BAVbBGG44IG5lX)sNLALb|%6GZJ zVyyU4++4O)337QxP*Z9Bx)y6vN>@)ezk}9#A$2g+1*+pMT{;KwnW}GXlCcm&?7`%V z0#vC->7!CtuL)VpRn~ZcXA{5WEbGCviN3>Pn*^n};agOZAl9YcX(eZDisqZU`XRfD z+OWbaMPRr2fZ2y$8anHG)MFL(&rXVBEGr@TOFoC{B)+lS^{{|2rDQTREx=#CwME{LYLZ3g!njrZ40--F`rczf?F0yekdWo zuGeU^!tUuYYm7ORF}e8aZXl$V8>m(k%6cebqisi-yIOF=4|mlUpNb&!6f)@7+(m1j zq+dwvl6fSioFmLlrw&MS@VAPC2UEKZx%O+ zX;x0`wV4&6sq3!~Q2vN;8u70m-sUK+AIjl<`E3r9g00bGRp_SHpHq7e&{~9C-2Dhh zaF|G0h#CAOiQ0lUm%3fAg%iMxTRYwVjm#Pm7>nCB}Z{!Iq2RU)XTWB3$oYb{?e%BW%Wac~;5!h#2 zha+kqKMEI$>Wbzih=@Jl9bl#2o=($a42J}6Fg88h#x|hGHZI;?&y%gyr_tlg5WLc5 zIPAFHZEusO%e2f2#AXlZXjbG}7S2A{G@N+FWcc)}zl}{O<$G0X?X1+YAZMx?{n&XP z#|0}7Z$}ZYdtarIXP83^)Ft)cN9o8Vwql39ra1 zqo^{3F?)W?8p(>tcHU@1yYSu}bALK_7~m2^fPv>t+u^((rkCis8-29#CB8kNq(IkB2zEaL~M%Wb{n|#-B_#*boLoG2Qv=^dEXk8)e@I;WzyN`rseT4d$#IL)|0| zV2{JaZ#GRMXr`mEIx{m{G7~mfNz#{Xma&U>1#A>91rTpiQ4=+jKvtt1h7Ch&n3#T3_e9={&{F z(SNc4=jqGVVTCqtjUMbwOJVlkacvpPFU>I?I|zzO*p3V@?1$NVEypYT7(I`>*57P3 z;68t0mnSi;S`isj{7~HE=;dWY^1)y$B7CA*CI$DNtAWCii>m!p7w*d;2? zw;7MHQ52P~)YC{MJ9Hf{y?K?a8+;6gK!fvlk~=TfT*L+{IsHr{!}y=z(fXZ0x@C9| zbnBg}iHt6rzk63AM=tm9wL1@l^Ju$Ec(_cld3hs7iB%tpHoeC4Qkz;8jZ;QOA#`ttfj`p7Vy<@c+a z^&tkJWsrFN&hf&q))Yvrnd6NmuNj>{Ff1IAiDvt+bQW$`@H1aON~wYo`?+M%c1X2G z#;+unPYN1eR;%AhYkW@Ub>l)+)vwoKcK|B-brHxQRxT&)OBa-SLc{~o=S(~Eju06J z2fqOATP_<5;+ea62cxa@8jv>-&+E_Um}qT!e~j7#a@|orW`9VIAH-$CTU*o**Z+F| zK)^zr3vhP<$ZiG(mD2lpxP zC?=$bu~woQBwq*gj@Ow{!bZq^4@IVlR@zUmIy>18sc<1o=C_^(CvQl$`n)J)iU3-$ zy5BGOfIk~83V_~9Z6eyP$q4L`u6f=t-N4EC?>|Xz=k3qGN$=$0jP7^D*W15HZ!z9A zc9Z|Xdh<}MSB#huw2uCo<~eIo@obWu&xF*mz2e%o6Z7b^bslDoZosoh-g%}o!smij z6)EaYJ&8`}X0;h<6|q2SGL_qy`9%T$pj5Lm*Jk!mS}bc^uWan}Ir%c(4NI{djl&s* zwAjiXPPZx34WO{3Zl)p3RFULys8wvT+Vu52@?g0n4U?Ug85D2r6ULt;FhH&`&eumK z@kQyGpgd5DR~*Kyjto3vxvA09!DZ1DKFCyg#Me48ZNCTp-p!>FgHGaNEI$b)DhYt{ zr`6gzGI4erk2eN3u#MI8$EdYKsftuo+8i_ec37^y^+P9`%9_+I2^^fx%q&!dUZ z4}CpG3Vbw;Ew7E34!6?+uvMMY7xYc*UER86gO6lD8hMFxY5M|U(0E55neBQ1yjdsN zI$`C8#MJvCBn|}0lA071poLAZ_u@;^XEQwQ-py=f4i7RlH}cxCn$1ABgTiqAGjEoi z=w@Cb9Nw_=p&9U^)k4|BjFkkZ@fyEqH*I+rw+Fbtxw0zF)3e#&#r@fJ9nbiaS z1lpXJ(!Ylig2 zssqY{JI+8iX%RBW@zVX(AXMR~#4Gw3kj?e3fw7$pj<#%!6}}3RxwgP4I_f4XRyZoZ zuL;&p36If}sTOIB#L-+w_sXa5`KA*5c33W z@;S8LekB`&F11!ybn1s4U_Lw6X_LISq%l>Z3^dF-Lh3ojy+D$jUGJo7jLIkdmYo!m zjs5~aDx$+@pI|<&xX{`c92Ocdno#Hq_!0{d+7nC-Z5_Yp{gH~5(bKKST=tMCm+vq1 z@~wqTZGgrEn))16uElO@J;$pT$T>_r1x`kBcuy$L#EIzf4?NF?a_r(l3*2i~@Mc)T&%{_`2-SE1L9PWlz> z$}sfxHSj52uJo6I7TO5~pY@p)gs?px#7?*lJ$jDp*a6onagf5PNLuLD9@sz`kKBZmNne%2i>8-y9HHRYSirSwrwSeRKc z4l|l7nIsW}fz~6cqzJ0us@^&n#iTYbR=Gn#-pphQkEq}eTfXUPw2POhN5ut#_w(U4g3ZQvZYS51Mgx0eLPVv)tf_i zv^hV(O+g&J6n3K)z^C7Sq%(cWiyQ7pIbm4d{&kRVnlf>yW~FeRSS7<_T6Q;(l)=cU zL${La>_ilc&&{FS=pPHYEXxZ<^yuzf*<8E_GZ9*G(Tc!;L=QY5eUq)zB%SuW6P;BP zym-rzH&LG4p(Ol4qq{Qb>6wPPe<0m2?r7#-g-NGNag+F!znIQ@v1k}ZCMyxvnr$KN zjHvE-vz;=t5gMRZv1{Q>PeQ4u-rpcyYIq2#zWIC;99z8_}(Ah}w`#ZQR32klOjG&Ww86K=1l( ziN1Ftk^j-=Rf3UW?l4v)n;lyQki!^sj2-eK= zhytM>;jOwST3Pka;9XH_(l_SvetPuHYk(6 zt3UK*(*|O}CJOQA+>_kO*T>`Vw9GtBGX$$5Lp3qbShrBCVg_!O7kNAh5=9nX8f|CPu(^u>psB7gf@IE063pc)cwE3=jVa7=|}|$F}Cc zIC3T6e46na7!sj8slXI9DW{+7!5PpO!KflIzVr*xs#jvNf2O3a;RALqP%X47vOVtx z6&?Lzh2wA0FIujyF6Rd^u`zsplR}+;M+(cc{sSpYkjf{H8fV;F9-^uEs?O`4Ebf(2 z>MMc%;^Tql=*f}$O44${nHnpg*z2;OAuqcJbJo&j2>Kb_iELI>RLJYJ0y_!yqtyQ; z3fm8~K2D)?sw&=c0On^ zSVl9v5Rc!6wLrH}&Cex(Gq~!!W`LiI9OGuETe!?DXcxZVHG^$Z0||7hwwmhDsM~}l zi^(|L{Nc;BXw^977+CejO>2j*4V&aayykkhb!O_!VSY&u1)nc)4G6wsAsvW6=%oFT z-6&KGxpBvJ-|cC0#bcf}(VBt#Ax{Zo2m|ue;*Cw)9>)K`c_hsS${HkO--!xU%C}xK zTlrumzjgL}h~V+wXa#%#Y}>yEq#3A5n_&7#UIT?dh_cjdPoLQ!T-^}zDxi+$vegDr zX05Ce1JQfTK$9HAg0xZ@_Q0#pm5nC-9oOz)9bTK+P6>kmGTly;c@Nu^#CH^G)Ymz> z8SJPxxcevj^ZtT4Du_Jpb5t$x5I)X!V_McjB%9Rx;)S`tFBds9Ruc!8_X_!RFmn5J zSlVi(U>b-UVypn&8657YVV+QQqYZ#C-pMr4YJebK$wJ$h+^dmk>i2+`=a1TbV$ALA za90!qw6}#boDlZ>W`J+jmc@yC@HbWXF}28EDdS;a`&fUf{?|@Ykcks)w=|yMFF+A% z5C%Y<+$biFFF*^g{u<$B;`NQl(-f7BmxcxthUn3!xgnuJAzA*Xcf$8HHCIH{6@gWA zl8<_A&&F%Tes4QO|ja9RmQFP1^85b5^qZ)$TB7ky_w&d=#y6oV+Uq;wv zIld}ezmC<7-YJK2j;`)yKCo$+>hmduQAc>z*=NkB@A-dv<`Ya4tF*a0Ps?PNX+r_M zjo0hL-SwDyu5EGXT3w#{uw1h_!%%>xo7;VTa#uTGX5vs$mk~+M;4V$GSWhIc<$r>$ z5Dp7x&VVO-M}C@11;Z3yM&31@^Jjxha}t_-2N=U=>@kNPTsYCb;%IZWQ8aN5+C;0Xem78; zqKijeV`ZXmw&EhGQrjt4gvrxdZ6K@KI!EQ*J*Ay*t8c#)RI4B_zBtKmP4x$0JiUh& z!slSC+3GXrmC)U1;(z+8Z*;}4#5?w#`d!O*%yQcgalOsII<^Fscmxni$(z;gK6EOo#@fe2sE)<*C3=Oo6^b0}c#9CovKw?sB*U z6S2P^J?c}}W8iXu=;v<|++ux-4rFZ_aeaKYe->%~5!nCpH@y$g1Ic{vMPhS2`WxB> z{CUe~07pv}qzeZWb$T47c2IXmme7+q#-L1GQ|8T+JSunK+o55dxK6T%FB~>vUQTW7s3;wdAy-?9^=-Az( z|3T!^TN!oh8>VVk3bw^3hDIeD3_T}DGB=8;x})A4z4<~=85)JVl+pZp`RsAwx`2J0 zR78_gaZ-|g3^mtljSOa;0#dSbtgr9P!{q{FShsIiEsO^i^Pg1WUJrovCWk=Z! zpBdG(W!<4G^*2Ys{JhJ_K?KypY1DztjXDJUnv%S<+{8JLgKx}7oN!pMcn5ocMOETd zzMZFYB#foqCU_oCPAc9O-~MXPoKN!seD^a+L2NRQa~(6aF5ORP#{6DRT;!!NP#7P-*19ZM_CW8ke70i4<8$&{ z$%Np&XUTqdqEz&)NzwYcqab3X%AeisN#^5fMUipL#e~-eVDH)s^y(%booN??GHh$9 z9qv2LB_umZpX2*@cU$J()dXI>If^#DFvJ;Za`BD7QOTyDQu;`aL^) z_^l!eQ>E~3yc=7t79gAV(36^g>Z32g%i}4@SNao)_9iPVDX$5a9YtP$_Two4lkSmr z5s;ld992l+U@BaDDdmoL%Ldq3WKFW(-heBMUP^sHB6vtC_v43j^Nc zRSBW0W-bm0XA?6Q2L4|U6wFMmj3gX97<4&-2mD;z3!^X&P;eP#xC%rK$0&1_bLTE>n-3{6DP+zR54dsLku)@wscJjlO_D$MrMj7^ zDF&|D?hU2P_i&&OzerjNyHF#3yRgB@&&}@}@4IW6>W)!`DlBU4Jb`z5;$*`x6bF=H z%jUK@EXNW44=!h%%au>NlL1$wFn={2@R+nC|6aZ251|>`>xP=kUq)_d^=rtq%g*@Z z+>WBPxYzC6?nyaZO9nGnfH2(%wO{Ss$@(}^|56HJBO50nO1mw00p9fN!nPdY^mW+^ zl)^_3CXOgrL2fb_uaQ8R9COV@PZ`v;0eIEKM>-A;% zt9ry{(2$P{H_Uar9JBbvNe0e9Z!DTEtBnL}3JzSm8}jqjHVR|cBgO$~mw7)bnBMdL zW@vp!fn#R@%Erl6z}(7|T8nmX`qrR`&{MOhSahc*m&dSL|MJ!G!53y+&$5TkvZreo zn%Mh8LYn9z?21$gi&Tj%P#-VV7Hc0=>gv+*kX2dbK{S&!6W@KJ)Ejk8N-~m2El0gG z5bknYr~erI?Ob@5;%4EFq(pi|OCNjcu;}$!stZ;94vtKO(^X#O;)2U&_0r5|cV25u z1k66l`#ObAcTNASxIuUJ>C~6frnh3nOV*`vbD=$BYUs0AY#%yy(Z?y?&^?R%LK_p4 zNhvRD6>CiTEF$kKQC~oL)Q9Qti;jYU3+&&y^F9Dr;a6)2xlx{; zqgD(AKfpE

    +9cA%pA8W-O?y0dxUWk^Z7+{}gO^8;W1?XUeW*g-y^DZacazZYRBp z{|=>uxOnCJvcOQHA6CIrgt{}2&vSM@bk(RBRA=NJ8(I^jAQ=~}=4sqy6F)Rm*eaPk zqY!)JU*ieae+($6yWt-q3Kt%OfhYfWLkibl(HMv+r+ou^^*;oa)9(IH28jPEC~)Hg z%b$Swn@VsA@Cp34RN^yS&Si}MO6{T6LT@(zjK;&7=)`5g{Lz+%u;kL@J0P95akKZ) zCw&sQ?zzi~Ed-IjI|ySWgQ`#ux;u7MQQHY4a*FsR6w#49Tz z?p&bRDXhg7gs`5oMn-!psYv=Gc3 zcpH8x?>+`A4^I-lwR4VCy28Us3tHdMc8x2A_2Jbji&PD+?E`aCLalF8Rx1YJs$|>s zIq)t_<|o!kMxvnX3sN*~PIjE_frG|ihyB^NEGs*_Lu@gE14}=6HJdq;nAY+~9>@*y zYFtUy>5*uHFg}S%-QF2Ga1}};)U(>SZ&;J3} zb4=5TIOI>Tvp>V_BCOp)eBIgg%Jt>7F9xe${JY~74KGD7VQ_}oKB$A_q)4yaO+w)j z-dUAlqZ3-$N6Uil_fsU_xlk!a zK(!`K-F=CYOak#ZqQB>guJF87h{$R|3&JaLAt|{A zOTAB%jKc*l-*}`#{v)`+5@7-`?C@$%S*eh7Q#Y$*e`d6gT%8gA1}oI_clytFujwJH|Jf*HW|U!_Yp%M$aF(^)K4!I4tJ4#^h?}w*&VI_^?$m41pB-frS+WC?(vr08W5_qgRzctEyH_=JH-%rC%dj$g zC~8@`LQF50%f9)<8sN(F)QamZaRKKC!k$Q;{mh=C>~GJ(<4gHT>?gT7`bDg-U_$c;9FFJ5-1^z2UTpmojBtOUvop zDRl;uCe}NsLo7 zk0bF*l7fnBlL?n}`l`)767b91uZG8DBp;m9O|aCsH`3x0B89Wpo`&@__5eqHp)YlijZ$PF3D%US( z`6Fp@>L!p`T=<+!Hfl+qaPKVi{5bM~?>lJjn&2$Fpx zvw&kKM72Zy7D282h5o69g6wA2-Q0T(}_d51U$eLMW&NC#pVfFQ`UcTmHl^3i^d~eR?hrDC{9Lxp_lJB11 z&bpnonx371h6H=yO7w)~N@#P8-OVJUP@IRldwBTteOmjTfVVbqJB^1WKT!T>?b=nC z>1j~1mM<$)S?cT-78*);ktS2fKki{zak6J}nN(huKw@4c_^Ls)W0SwHLV;=DXnDgb zWgBr0d_VpoEpMD5QILZm%g7Z>YrED@P zf~;v*Kjh;p&#|=(_El$HqNZ%7V1>6kbJucrvRc8o6WL$5#vMVQeA(Y`ta%T1K`d`y zOnU0lbUb6&QRH>N+Uj=`c}(0*a4_(1SjArxfq$E(oWkipvI>00@xQ?;xbZCi4>03d z1-|e9%qqC?>Baw4?SD>Ixc|zR{<$|U20mT^4o)7ff5~yU|C&<#n`)fA99(?&|Fzmb zGp4_ejf;Ut;64WzAZPq@8pi!k$=g3n2^Rx5Cm#pjzscUX{!;D#VJ61Q&%pgVVf%+n z?5`ObFCPQMkn%=yn+PO_$4_$dEXJOR_B&iZ`ok&3E=T_1ay z%u~v$M_>gKy5*ou|B?)GPo6mzbuSwiG6&((wzFtKLn@ zM5w%+ow}Fpp(-0~&h2R#Sr;dRcGHUGt8z%4w(YLclqK}vG4;g9EL@f5k)hvuxZgYj-R4y@|N(Gpw^ zW0|#FrSa^35oUr{&H5uJn)@V49t!d?*m1NQq=mV;OMHBXW6X2d&by5o5t6JRpntg8IXkZL29{IY7xb#_XnH%Qq_Vv41XQ@>AaODeNnd1Y5Tx1rFmzp9Te_(B!9l_m zPI4n=nF<+=8%EWWn&LwM9jrn%2oUMK2IqFcD`tY551f{fp7${bCeyYWK15GALI)h`TuJ4(zrB>{)?LK!Nm6V=02zo0}`jw`MJ+h+b-z=0afRqn>sj9=* zqO4TAes#CMd~A$h;+F{VlpY)F#W3yK!wA%QalFSZZSxSUXK+ zFD6Q(Q|KkN`fekOq`33V@w5ex)TW|zOcTd>k5|@aO)-~;E?HB)_iYS%P56@2Z%Ucr zQjn>p@pUOt?^`w&FPGZSywoj1YQR}`T{1I$^LRhU7Y3c$^?m11HV)P{?U+F?=dgAvd)YgNnEE|*iF(m)*kT?L)N?ALFtWn;k|OD6o`1zdK=t}N*!){OJdJMufQLN46uJL0 z%Z5rjJ0KhxcuwW7zbJCt|BA$LC1Yzd6IVj08p7E1R6=}gcd8+3S(yU*I2Ru;7a>%} z%*w*jl|k@6Cm~eA%GE{L%vsXG&e6dhFBS^o^~S&HbkK)pZdN8{s?riblL|&IHVlB? zb_(Ucqco2IzW~o^p8TJq^vbx+n>zzW(0wS4$gcC{mX*vZ(y|M~x27kScjgCljPi3b8eo=%C1 za-QeWCm-+A&{x+`T7PCjPj6;!rX`+Rb+8xeFR!j;W@cut0h<+9Oi4%uo%#RxHO!eZ zwzd6Pyc*kPc(lvZS+!8_?=sQKn8%ZMKkp=4w2RGXlrcd7x4*gPzqK}5{WC@@+2!bj z8x=rIkVwjJzD^`?(2k!Yn*I_HW8HrEN$E62cUr&@VWHq`86?T`=dyc^eJTDCF;U|D z)_I_)E!*D7N<@j+aV6jKb7K_iiy?i-Q97@+-ny!(xSf%UjR74*G>d8%@I}cXMy-W}V=Mx)gEK}2S4JK;wf zwO`kev9Uz)Qr_-9rMPZ)y8WZ=u@M6k<&4M}&x63!eqQmZo}zYrCI14)6Vv6JsjPr4 zCimB$hZ=ZeXeisu`V{>Sg(uy2E9aF~#s%8FP^rsq^hBd&&&sM9Gm{R=_Alvsj}wax zNktE_Vg{Gf+Xt$k>6(^F1 z$5*`^%e!`46Nak_F_sP^Uwo~Xx-b2RfYq`2k1DMbg|EdA$Fd}QR8_a*+Uou0K>aYR zq|+1(`4SaFUdDc6hV9>)-I1$iab5rlqc~Vh$Kp7@YQ; zI^8fCT^OV%O^8{HOaC_IkoNsn=F?>n^KaWkr&uU^N0R)&cAl?GwI^RnV-T^4(|$UQ zL6a~7md_1oH_H=JPRp7NOdhJxDf^`7Gq&Ethk!@ktl@h z>Hw8AlK-A<8I<76nWAEH!XW1$PCmrKk7ax2u7qoyuLTyw3UW~v@#~6S;T%=CC3f9% zs)^g@12kLn%f~eq{0W1+&g(;WH}0lwg=gmLp-c3S-udL!qosp9m`VbA^3TS`8q#B(?onD#Bi3*P7u# zD*Z3Bp^Y!{kT0s?c_QxJTI)D*Dnv0H4W1hc9q4+fo&wGCX&m81ys1QD-VWv@DD0({%FGm4jD%YceJ}C@cbQ8>d1!6>KEjN2YXt$8O5@XmE5*M+Z`xB|VcX zzcP;Z=u8O)+sDHZ3B>ShcEgQ>LJ8^OfVOGPL(5mY9+WH{``L<;zSd&Tu-|h9Io75N z*VyDIMRDb}ms3wDaF>V=%!-XZzNMQBnhQ#m{c;@JsQN6D@ioU-GFK2Xw zcwlbJv`o5>=DUl_X;RBZC#*o6>4y;w5+FNGm!UQHlA=k3s5lH!WzP}Hp5TlGlTXvS zwND`GmNJ@EU>#J?_0>%_pN-Z)RrD)(VEpr5Ya$v$7pn=3_z5e9Shn^EI$5}4F`Z$c zlCWV>j8Og}Wn1gEn_fg5J?b_f>5xxbLl!MfNRbfl@mVW@^vlLJOzT<3jm$m`llmc; z5%S0%@Sf{4LRmh=aIx3MDtxGGeoUe`ZMyF&@fb5yn2 zVq5Wv$K^(TRDPnf>;9Nja|55j6KTM|obr*V$4;IM(tfp-0n}4~Z@sj6sn*7IgzaEP{qoo4cDklhGz&_sz{rZHoJTi z%F;^@K*SW1%Qg1DiOhwbY}MiT$Z;#_($a8{=w|;!f}QvN*Kz?_NNJ{L%}Fp2`b@Mz zfjnc5QhIC83FSD-q?p}F(f3Vzi{79-_wHrZ=5rc<;B?OJ4#=~GsKWtwPJjNL3O>Sa zsNPEUJx>a7_xD_w8SMfj3RLCSxrAb>Q{E@1>u7sNfx{Jkr*2(48M$rYi*vEjyAY^# zrLgL!f9&7z4tRuzyAymk^5}=vXF3{GXHgqZzuy2zKQseaPUSdWOPL34 z%^VKgWWiEvy0rx5FZahU+n zavUF^rznDON`2qr^$qKm5z8e+UuGvJ!HM(!^!QMii=<3iDyzM4-Svjt)brTVx2Vg0 z=zBg>cdZpOV%0zz1_c@=FQUgWM%N6SzRShL7=qY$Pdmeg<2q;kX*;*sMS8FN;t&wmHQEY62!p6QE(AW#+4i6tSw}OdEuQFpFyU=6Ack zX64mlQwsxzw58LCZsYK#@8K3xi#sLD?Xj0e)puo2Kkd*45qlQH zkGAVrtL#{H4cT1U+SV1Pw(I=PO&RTGaNh3{Dg7nIo?8lDP6Jj9wytQzKXWtmeXALvr179Gq_lnJz7IrwzxdGXczc2y2qd2_ z0kyAtLe%LdlvCacByUhM?y#RUslmCE2!g^$pyZ0rh)hhR;Gq1K7!oh{)SBx2Rn8*JZ5~)Rm}a?|2}DYvUQ;t7>q_e95MsSW;;W74sDw zbJF)9wQ=4vGXPq!B)u9+l`S-blz!4R*jiIJ;MTM}->NSQH)0b))kX6#6_yKG#y7is z7s~2R3`B73W1#|8p2*VEXalr;W;q?4b7FOPG51wMfXh}i3v-O2VcyS}p*mr-Toax^ zptu7=gDH1P^p-z>bvid`KY>}=Gxgz*GlFXltqr`esVC?{ymLtDf}%r1jr?eGIn7O! zTamYb2l=NBMTD7rXr`@IRGFnQL zFyU{HHjY+m_x^zPKh|2J!PDQ{dC0jFyV?X-tg7HTcn|6kCfhgXVn zVDAM70iV02E7o46MkkA~06F1_XfnGLs?#Y%53rDZ_yU7*g=&dC;MiR3Zs z=amD~N9YH@`OaW!BUm7U) zGoPMo{t@UcRUwM6YT|H6l`_${AOyzWC4TD&|9sLcu-iO3TDP%1*d_mAN@!}*@eoHZ zO1~~2-2*hz?A=RNzZ!1f#5r*z2FeyAbr=wYQj^d|=k@?M}sH!HKLWxK*^6!h3c z1^DH%mx68R)Iou>q8fUPHO4=FRCJ==<4wGR5w9&4cf04wUUEdFWau{UI)VG(H4hk= z+O!m4X51Ain^JvIw%0hDibcd-84^YLdV05E6ubMO5%nU&4!=#(RK?;lKY|lZ$|o50 z$tl&;KxjE2toN_>>#@ZYsD<8DqW0n~1Oroj2L9G(I_>T&uq?oz#ok(2y+>laryGr> zK=?7SsU4GT1y&+eGsrAvvXg|FMKkn3=-ZwsvaL#_F}CFA7|e5B{l2?$rLpR1g??6C zgAW=SnvuFE3;em#<`2mO=s<0m&mE=eIuVw8qFnjx`8O4=>SNoCml%L9o>Hj930q<@ zOCO~?tMM*!#^%ZDavCpP%eVhGa%MPjtiIoljgnuzCzW2*B=#9(K0tV@`Y3r_F8qbK zL(OUdCPxuZP}4WoUkDQz?QKEyyr(Jx1&oOem{-iFY7CAE>oYTs&zEI|H>4?P@d6kC zXTVj-HZvLe55IEs-kI1;7^l5s*PCNc0}R##n$#IYuE<`0*>8$gTzt7uBr93iGU|3JfN^nScQ^PkV?Ebq_cm-q~dZjT~ ziA3pDTaZ~V;TGdf`uwOD6|+k1hOCnxe2_DiSrx=qS@P5na)$=LJWflN*S@k)fd%!N zjgUb7Hg}Q9$yOm|es-%mObtO-n6!EK0ccgmC^oh-)2O8yENdgD`}Vcl5}akSLGMQg zMwmuCi)+&ny*Fzk*UVmUv!KXPq-|Zx=m=|3iwU%TZFI~y=N%F9v2~nn+k7!h#=!=? zkOnh+1_Na}e+Ov7nMCOvUsN5oa>{r)4Vy|2Ax}wEwA~s-c0QPKnPF`jUA#9XB@(G1 zpc?UZDX`QrhjBXC@yB;Ze}j~U!x_A{=1^lqLoAN4Bd%t}{0kIY&orFSo_(rnAd1#f z7yzw1T5B>t&>5>%epgIJ)s6`o&8AzodSJ+j2K-xhez9D~_P*9F6Pj?N93R8?u;I9FXxBU)0?Nc2H%4i@{6!a&q8ulg=}NS25s;T&@`Q{ZRxMG2sTnTX!Bh*Hnu^V#A>fnOL! z1(II{N%xt@N?TAUu2SV8TbB#RA}&&0H&<$FF2WcWw+dy=DHHFtRbf0~()Qh{W7e!??^2JPe zIHxkt89;M$a^(cgEI(>Tpt&ab%F-67wvHl%*U-CoxEBDcK@K>GLh1wCl5sKS@-b(u zGO<@9452WUkPK5mQ4hf+4cKDDxhCKHPytTWkyueGlvQ*$dR%A9xY$($RAU%g10<(H zS)2;)SmWZ-#Ki%S{u@Cb2=BtrejiI9N?!Mlwg|Oi95ow+@u@wAW`bqA^f!!)akfIK ziC%HpA3&d(cgWa=>WnKzT4D?1WxsUane7wEmxA!teSciCmHlDsIqU0lz?uR(D`Nn* z>E;(`Vr_Lv;coH}EP8#&IP)#tM{p~Xa88n}5WQ%$(%oeH=KTD4Vax7kEc8jJWIw$t z0A#9Viy*=*lBfEe;}P9H{D7B;Ol_>vv}meOG|d~}qhoPi!^*ov$2c!E zD>%nyF6b~FTMcHxT{&PGfNjYgrDIWZXzzrH&oGDS4TN&KO{-z)MxRGCPz`Ic9jGLu zbCO1%K+lWt?C|-CHhk9Q&cm+EY|%@jVp;Ga8+i$mgzGFdJ#vKuYr(0=VzHv#Jy+Ra zer31RM`e~eH?`iv&rzBXc$xPS*ZLXeG89G8RNRjwB8p?8$uzdJ=Opn?DY`p+`}hm}vb4FPB-X;x-C?$_k)t_P@p z$QZ)`VqritoX$N3HusOQ;KZpKJaK?OPY_~8R}*pM==o^~$m8{(Gey+E!eR~{{klmf z&T)4WtvJLhHza|hHq}Pa2s~^TJ>Oj$Kg@{@q?LIS3Dxd~J1j_>7GX zyr>#Zo)T?n86&R%!81$L`|J(8vP9H&<-QQJof4cak6(l}pWjvr&G62qu^p8wnl<|d>nl10*o)`K|!TV=R zuAmbmgyMM_EG{FI{q%>;Vhu&x&Fr_JN_W*4@-UlnM)fGhXeKKBz6)FU`s_S@5{jGY zyqh8JQS`*_bS~{&Ov$cqr7Ww70W!I@)IS768=jRTYEH5EHYCf}b8RUNrl4*V$QLZ9 z*$KsW&HEAH_-FXv0ahis_C5yMS`pnFzU0GQkX}ThE#K#f?h(aJ^`vX`tX4{x^Uv_-%u3aU&cG1bo=t z>~`sDY2Q|lARy6nkn9f>p)T}b-=s^RCT>vUH>j;8t5~!vtqd7as+yv&E;UtDBCuK5 zB17KeZKZ6hO2ca8BA@%*N-IhR#13gsj%3XYyXu+?2z`ax(O#MR*l=^lajo2x2o|)*DvGt284@t znuTCOQ035apa~uLxW8Y$WW<)2I`XuMcRiN8i5=P5*_ycni>_WZ2DSm){J8?WS(EEQ zlA=63CG%gmD+P8ZkH+gAYV;odx=dFwYwL8!4GKp!ppWL}=0eGeb&~=QEH#2IA*#kT zbNQSc4_@Vh{kM+m$<($ww1L6kuZYiW4gJ8{3*#(?X#M7X%9#Xw880|1k*fu2Oo#RL z_03NXR!!fe7ynh9^oI8FqQw@~L=T{HDxME0706Wwb#!*}Cw7R}ENvLfJpW^kt7p#r zlL;HJKw`(ph&G~oX#iGZP&jTcKpj?Y;5VG9_`9G~B5+&LV_7=7YEYO7)~ON78n9MS zRLnvCX-Tvn78x0tuPF!N%@JDAC871}(l8N2cn*J)bH{!OetCLjA^TxlhII~PM=AQl z+LMC6%|&!G79yMc^puTWy>UqTRrIBhW#kYnF_S1{GmPw4ITcVgQ2*Ai>m67Xxc%Mx zL&yi<_ID>Qg=B!+Yk%5)1Ki&ERfn4n+eYFyO9kxHIbnKWpQhrrkBc@A#eHIgEK3Gp zL!!qnG>${H{{GR9RjNLvnDlt6`2iTsUGa*|f}s@L3;pm_-HlFk9*%5Yf7?5=)-Eoy z8Vy-L3?)e}$C6T`U=%J+T5UpBF)96~ZAvfDqN+P15%q%3o24q|2 zy)n%${lO5`!Qw;rVnla(=XWVk zmYsPnwux*J@WU>?Sr-)~TOX-ho?K2FO-%?3|Jab(JUUegEq~y$*=0wyP7l~eMK5Hr zZ^Uk*2O{>Tjp4j%sj&>mGd}EZPFF`p;r4cY;u^C!^%`w0kt!%m8&c|jkm0`JP11>L zF{|c1%D1(Al)Hgg4oo9We^VYhE{W9s>$TVQ&)*}B zOUSRW#ulzt3!U&Nc`@G^GbjQR?tP$Ux3dFM%46coZ4DP&J9Kr7JYAK2?0>`+-N5=a ze$eMwNjo*@dmNucbE@MsfLU8L%MP9EB>pdigVvw-!%Q?mkfrKvu;0PQ5nSi0;eE#+ zcX{}zLPdMy41*BLB8AYT!)C9WDeFNrWL=Pu@Q*qS{<79IsJBzWQ%wNA*NZOptn0bd z)7N6R_w#@SP#Jkg?iE*&66d3_8Q3Xwh!b>Vu2!x{rmNXW8Q(m91LV8x@}tUd3$znl z5wiU`Su6AHofR3M{8oD=H)SVLt7pLZ%662aaM=S-NR)NPFi}R+y&d&UWvxLNx^bGa ziK1zzfd&mBKXu?6nIgE^;~6EvO#tu}!@8q~4Cs%qxW5Q`VHhrCiCaqRn&=Jp@2rL= zDS!C{{^6TeKCzS*JP)=5c3Xc>6>eg`;BGMrE1&L6Q{1QJo|;0holR*7qMuZn)(Ll+No>2}9aE16C`=8q z-BG23ZRi>0m^f*Iiu)d_l>`b|9(4hN^R>vOG@l1D#}*2ZsMdh$se2@I+J2CzuJ}kw z=2$wcOMMux8}o{@k=N2AVq$BKx!A_(OC&i+)zrvIgMl94Y*aRs8c6FzF((ASR(3{e zfy#eT<7Oy?>I0a%PG}+Ay;BUg5*nSjnN6d^C(cX1{2rkS1ch|R5%qL%2-9JpL|QFa z_O^@hMN;Xyh8`H-Kr3cB&7)XDtWV{B`9z8EYrR&QSFJNeNkYtp%Bm)jUFB-ppvLn9 zwDxOh5`5}$!pyaN*%K}EV3r{@fXIruD~}azIH18HzhbVCW%Y8}8v)<^%^hKb?*a@4 z)Rg`Wl13eb-wl)1ux6ui#yWUjQg!d& z!NF3^>>G(Gn`-NfP^$}wI8s8cC|58mK0ir@1O;M`hbKmhpj8>RYT_}ky`mW3R2fo!Mb@~cphyA2Bb0a{3D z%W_)bWO?vXT2V=@({Hd_N>eZZ1?qjV!8H>ELU5hPTKhk5{@x;hm?Fz*0DH0I{bS;- zPjpLZQtx~0%LiZpSJ*i`8W|ZeFY%lk2->UusmAoXk=t!*9ax@1u`yeI3k!?Gqgo-$ zouxFzOde6uqsmdQkKMngD}r>cSAQ$Du0}vq6yQkx_%=H_I!>9(=e@7}-UULqutTtt zJa+##7JpBeYnj7ot%>>oU8af&4p@KwGQKu8mLy~uy_ClLz!KmETEg7oPrVM<( z`IW%R3eWQX7uR*IAbiEav+Nx@lrVrz9>wn9iw`Q>-kF=5i;}Pzyx4dv3+P)Y8CVoN z5r#{yx>fZpx>k)>llPA189>Ov&V@rn%_6iofJd5_j9BtAp0@e$eUBx7qMDjozGiOU z;w>E#1u?Q9Pw1vIcUa`%`%*?(sH&;6ViKnEb zq{G~0)R#)kNbirMzv2il1LJyp4Q=@of%i*kfbs^gWq@w;QsZq`O8#yAD}LZs9vFG~ zXpMmqq!dWDat9KUlGOhYyYF6ENJb_m-F$$psUx}r$pmbx=24p|Uqn`Z#-`M^3@QBH zXuzKR@}z4gaei+F)p^kLH}VN=%K1iNJ+IxJhw-J4aFAu3O&%Qg(r*bJ8~~B zqKu8EHpmg(z+pK?GxNCTO=4m=1>F&5A`x|D=(Y5sbzW=(HNlsQoPKXe8-^3iWoofTpANEj$J>H0i`z z;lBf=X**_vN9h>zxDXrOOsCsN5Ez6yXH;BN6xzuD7~+cIvuM<-oqxSCKe4-IHQc3M z4)CSTksv~ofRElKQ(YwEh{s;rOkvWfqmw=M)OM}?uUllBUF_lq!wCbh^}~(k7vkCU zGr+eK&FOk(v#Z^V*~pcTr;hW=>Gn2K*Z%KZ6u{@>YU9aq=m0EV%4?y1Z$&=*craXC zjEg6p#rv{K!OM?XNdzz$rpZFgLfZaV=^T!opnN7-5n-XLG1f^ zuvN7qe)R%=wir5qUOEJ2QY937T-n+Q@+JhRQlzSkQCnXwK++d0qj`wX8S$s%_)aY# zp@sXI@aA^7h;y+%fKs?QFd=p|HHl{J1Xwl-`h(@>g7(k%%E!v3?7a^J7H!JjbyYiwl0mDs%4vA3PO%%u9PO>;52{pS#j)uh7+5b3@syhDvg2YpmMR#^*O;SF2!&ojm0hr3bhgC47vL0b7(v% z3zQq}rG8O}Y|SM;yp|ZV?ckHxN(@g26D}8KBT+Wdxs8p$2?P7P-=ms6W^$`r+Sj5- z^s4|QxdB+HBAc#XEO`Vtmo=`56i@I|6VsI1eEzBQ>+3@(D+x38<5QljIMpW_C~mWq zrY<{6tmMhr1(4KI$Fa8+4=R_xr_$JeD3&yeCF)ayT3afoe`W?g1d;-2XtH8gTY>X4 zj!ijGI>!3bMQKp<-rX=F*_l91H&*jyQjR+iYJ1V=s$s5NvzNW%%{OQVuv2leSHXalgZFUGkxQ+ zR%B!K@t3+5DvzJoV3blzp)Z8oA6l!NqTUI7<&vL^*+|4l8g)3yrnXuTe|f_Ky+Igk z_do%nj?IH}tJ@nKIbE+MWif13kJ}UU-@ySBABdf8iI%Ps`O2uzMro7eY{+XFpo+HM zvd(q3iyTq!#kvpyDH|{SfZF}@1Dpuue1g}nY4LY{e)t^IRn=tx1VMEU4k zAO~|NpT6e_faFf9X*i2YV9?@%tNM#ya;BEk+>b^;CR9-g0XVH1&1`Upl6)N-e-_y5 zXmAxfM=S(Z^)H5-iSo^^fBFTuS;%2#M0Zo`bNcV_4^ctMQS)GG#=sc!^Jd*nSO4%} zK%C)KL@2NLuvkz`r~@Zt|M<%MJ#vZWZ3oZaI5Yt5KW6__2J!?vr#_u)Qqq5thjh9S z-8Ac!j$5uUBMaY|zj5%y>R;p_6HF+)O!J!pzr(kx{2gEsR-+Z+q=drz;ay|X%Z$J1 zD4yy65to3}D3g4o7~(gl z<<1fLA++)Fu(tc((CqSX11mzv?~&Xvs@>jJun>0}*xq){>{9{d8$fsk1crbf@&^HC z=TJS5BHGnEX~^S}_(PaKdVV+>n-t%9FaBjOlq_ssCttICG&wO*4V146iMmA4(cUgH zF}xQ`a@2R?(sdEwM(9Vs=EPKV_LMcc`yT?dGCn?@msbW-nsYt?U}=K=`I2eyWY=(08={b;OafHmHHyoB>ayRj9lJ@ojKmV(XvjB{*n0H<$;WOKF zfL+abfhhyZ?|2oH0_1$6JI$|-9=y}u-kx&4Z+>Ff zf6twyZpZoe5&?>ARh{=fnZV8-U0gzZ{GzMSk>BK*bPWhKASVOM)bMSQ2S|rH4oQ^c zI|M9#&-KGW4nWtPtXSVj)pyyCM?%9$m)xo@5daHJ9&|}TNh#G|cReJ?2lv}uO--?x zsU3zM(hgo;Lc~{lC-PJwyu!kxw)`jCIrZLQM89Ruh#qwI9L~G&{;w47SGMO>bD9iJ zcwvoFh5opf9dJ8!ni6`~q@3n?fa-kze)gXPHeyE^1PHrjI_!w+rNYVo3*UO8z zFF?gyJMo8>FW+SZ$h!?i6vDhD~hq$4xD-OB@GC|6e16c)q^hw+3Xlteq-A=Xi!j~i7%_h zBb5cn+v(6ELp(&EKv*OlVtL0*Ze^i#uDjEfaCKp9T3 z)ctR>G<7)F?|XDf!FwxXJL`zZVoh&zFVnh39}n!kXVOg#)s% z23=55=FL#*>386e%eoZ&4l3_+rYjPh8#j?O>pFl?m{KHaBrS#MEe2!!9r4~5L17i( z=g|j2OV=l#l3cD_8m}DBFNN284VMikMlYu!JP>fB+cU|bI**SW6Z*p&8+*;P(NfH! zyjeGcH8jNN*v2ART5$@{YRmNYSJ323v$MG!?wLhC=|NW>E3x(K8O;FFoh-XUQ>!ri zI)q$&V6l>DE$S2`Kj8VfqR3pFNv-=4@Bz$Jm*e~fp5(PJrAa2oPJC0E;ooQ|<#AK5i;e zDZESQs2viR&IbHbOqvSUZ$TM;_umN0+WF+KB>^r_SAqnqSj$ao`|k_TTScygdq;si zfafO$SA-t!tT!4CBdvrxSxmN(i~@gbTn zF+R_;@Mud#-bn+yqit2J4vLP2`tKTNL>h1ag4~Xl5z$O%lm2ye5CvuK*uB#L(z3M? zc^ED})$l%COo;DP`Q7IkyFo|oC%TljnTr(jmJ>g|zh&$svDhkPx%X@W5Pca_gijBP zP4B13P`*tS98$j;*w8l$i0YD4$EZpya3CNt9j!NIE3hIrm5%DKMe2lNoW7T@Zu7Wb z`O=i{>>&jVuhP>Z+4nf@eC;g2X0NjE8?fbob8uPY{M`2K^Uxoa0Yc3FL(^wl!dYEwvZAM^b-)hK{kO?hCi{mR%MDa-#Cd+#0AWZLeFj^k()B&aln0HP?p zNee|7KtWLfrFX%RUJN~yL=6FHqSB;;fb=FH9Y!D^AVrFF5HM6}0SuvKKM79x%36Ev zz1Ma2b*^*x10}p9&->K-SMK}eh;JWBfOn^*$ z2MBR_o#iRuD-e3eL=_i?5{5SC#`SBrx6+=;Eyt_NhwKl+X2u4M!-JjWk6kv<#1 zX8TQRQaQhE`Z+*jSbGl-K>AK3ZCT^b#N&bMDA49T(ejSF)?|i$Iek12O?iodJGH2gtk+bGReaE$R zZ1vIQ$ANT~%}=s`6t=a(p9}O=7$JOlyiIdH>|@YueKB2DrHM_(LJEBFLNW;VjaP;e z3qIy3LM2D^N=j5dE7|_00n3jJhqAs6HUwEgUwn$ebSe;X_|;*AUxeAX&$*EaWvEb_ z-;tcWcF7%{U4B*vqPt&ZINp`s>Pxt&odFgSt*ZjPBJir#x6S6O_iLp>`MV4wXQ08G z8g{$D;==E#PCX~|E&z0&gHfg^A_FU4ToaGHYz=nvi-BwKB60JxCO`yfH2@Jn^;!#? zb6_ZK6tC%hT~c0+CasWotil;?Hcq!PK=!o}%y2N?Iko^VuT59}vhA|?DQ z4tTGmU3gy&OH^RiOl_9PB6Bqzw#~-2UmMT-=6=+0=%805TdJ?lUHo8r>8}deE(#d$ zju2)km-j%Xz_+JidSKJo&%D4Q)+MdG<@L3;TNLb0i3gzu;InOBi7Au%enoGDvGk}+ zdhBbd@1EU$McKiZhdkEyUjTarKo8QH{F-F)YDZ>fD*F#+KG~Tk;qgrULYca|R>?wO zK^uT>`6KHcY;G`sObKOlAic%$gPItYZ9WF4R|d^NibQKcB+Zkg`Jgm35H4u7(F;KR zo$Ysa0FE;{xV5I`AS_R=Krj~8X4T*GxV9>{-v_$Vpb$Oqg--ZrK7Yih2FnQm{grMg6L|9)qa$AyI>abhn7sa^BOgX zkQbsG-p`|LdwN&&Rf#;4hQ1WRd#<_8}`rt6^YvB%7D^Jr5%I&zkrkNZNK=e ze}hdjs+-ZFT7&ObFCliM5%ZR~PMHu;i_Le}dxrLL*>qJv`n`tmI;V z>j8xJz*dl4op1d&R3bbkNhXc>fL|nPs8O&^_vole`G{kgkq`Z?+S!~&N?_X*8JF)$WmuVM>YoFNA<)0fc*b1FYVVEw%1!YdbM6edTiNE7W_1^(gKKs(xYKo{MaWP;8(x1 z28Uhcf8wTOZ$d*s6`{|gDR!0r23N}L<(oL+2Ice~f zTA6AIJ^`eAX0L7eh!FVIBgsCea^N#5AL+QsRoela7L(_QK+gEs_&zx<&Q2;mO!fY0 z%3Iu)U=6b>k&%=HVhQkv6b^)hJs-E)3^)qpn}=D}R#tD4{ql&lo*VU>i+hE;aX&iy z!!X{se!TiSInn!j5I}K2=vW~F2ERX53EVU2HASKqxo0AwdU}-9+_;{9_(x}-w~uLV zbS+2M)UTJnfqt_sGa7Rm_$d{z^i$m_^Yin|;rqL*wd60;f2c)iZIjgsBejzlFb`}W zJ^yY6lpLz8G*rJKJ)4Yff@uCgFRIe2bE*5C6X53lnfa$Q{BO)Z_|fRU&is#RDh}0u z{VJARwfi!Heu89cF8u@EP}b=3cUP&dl_6~6=3mAUM}lk?y4BesNtX8?sQ(hG#l&0Y zFR=2T2zLK5*YGzhO7jIy((mSg`4^FY*h1GR=u2KwgwiH&rjoNMFhC1;^c!iiUO{40 zXUlcDQY&^5N+^E18aX{W%QT+c6+K7C4yqS`yjyT3!o+hsiUTuqtOG81 zG{>$?xDy>iy!GJ2o5ViunyCjd%dmdoWY6(g;4m*2{BDSdcdngOn`~~nQ0?nN9S7A{ z&EsP{wKFm1q&EFg*TwLKm=m=AxQ2#FKB}&m(U3XedwFzud@Z~5p)+|*WUOS-c+#Vy zo=|BKdk0vCb=*EgENAa&2Dpxc{9hq*pJakUOWZ~7gv}Th`1D6&U|>P*LR%SWN}nUJ z?+Bea$VTD{&QQMvH_0U`(^|bJo_Dev{!ogKTKRT;A>~@W`T=qBR>t*9Hbm3ALxj`k z8#?bF3@atjxUG-qXEJUp(&ntEHX5{PKP%;n?Ah%{c8YtpDAJp)nyczUaLxBWXnztb z!0?Bw4E8?1Mu)fq!TIOY#FuB?(PgWG8X2j|y}m*11UuGLIj5R;yEYZBTNKu?z+G#* zq)FYpeVl=tMUKVN0s~5ms|!U9s?BmB zVxb`iG@R!m{vHQ_9s2pL4y2b=VbLcV2G+T$a5!4 zOPc_QDBpY5p5L0#I}65uS;LB!r?R;4*v)3~&tNq0Wxto{n^rD$tb}&Sg0Wx;cnj!# zj4G~)MRwzf&p37*p)<6dks(1Jtej9xiQt!JK+^00J@^T?gSznu@m0@Dr%eN&N zG9gitjlo<(2v(h~Bw}O;$&i*IL=Gd}%5)Q=ve-UJsg^nSIZjN4!rJ0qdcv^yXN zLpa2Qb=~!%;iUBk0~NLN*yYG6<`B)sTLOUlif#G^~M zme7~EpWO_iSX^?$fyKq^6#;SG?0Lqqew6jcC@vHG0 zqYp2HvGbc`=^|lZFD`o6(FqbK@FNW5JlOq`-M=s$f6WFMk;!@Ng;;5Mm1od4wy53j zDIhTY>Zg%9Vwn9&3F~OqH+Mk#8UhcEZv95cfrn<;!M*#V5L$n{rgDhI$b7rs9c&R1 zp9v14*dau_%Bcl`rxKTWlDu1_Qf6FIqjE4)kDmL!NptZS^E0lxoVyS2b1?4cgo06i zA(LHwJq;6(XBn*rq#-jwV85}aWji_Yt_@TqAUjrgNf2^h_sB(QE=LZ(@+C<$<%;4p zP}Lw|&cTQ#K9MLBrT9#*QVa`FL`hK&Aq2cB-W7t4VIytKP|sZorOec`-BZX>L%4z! zo{L@IcSW51lm)CyYO|d zTtz79OBle}TZ!xvUbZ9g6S3x2y5mD_Yw{#S7E*+t{!WL_9rMpZ9&9vGpI+~4$C7ys z_D2V+(t|46jnB|VG~g`P)anRUZ{$zu;hU65DQ^hfZ`#86KoUsTNy)iufq580SC9aX zx`Xy9g#!9#{Ro}+1}=mg?rW6l!oqlY4{J_G&tCJTJ~SN~9Pu;0UPc$WT@SXSTPkuO zrtgHW?~#1vCVi#Ix`nzqn3-JET#gCFk0V6&<7|OS5hKq*!hC=)qjtp$l%WIg8O9MU zkGps8wy$3TO8Aqz!PEb8xkA7?B%;QM5!6Wwkn{7@07KAi3kiz$O79kUB1*$XLg)6ZYh zOS2BhX1N5cAGEdV1!9@|LA?4aZ{x4e>#v2dvEPKEPt+FS{c3U{)OU^Uh`gkf!)DH@f7U_dlu4(sLZR zOM!o+T7KJxT$1d!M(6x0?v>3yNB^CH3Vro+=l>knv%1^lRrBH~`Q#y{QHv zqx{cbzo!4G`hnbW2^pCoyRv=q_hl*dw>h2bdvY9l`U5{Bo!7Paoqey2O@E|~8Lhm$ z*bo|$%gjGKWwdmfMMBn_y$pA=Yt-u3!h9*ZX*YrUY0r8}=kPa-hV6bmsXjlIdiB?@ zT(mhUA4H$#g?>19{_^6orKfZGYy$l33&T^fS5b9~)ppmCTKv8T-9w`Gi3(FGVZoTA z`er1;kagEqAKp6oO2q=dqV!Ad8!x$WN>eHCS?Vj?$E{g}KZ`u0ymkZ8%^Z#~Q&`N) zXMkWsHbX8@Uc3t{?VnD`k2q5M+8joC;pNmh#B=yl>R$w7nv|x_QQwgddKwahxlZ|i zI{Z3}8+!hqE^ZxKE#V|@-6%wMGjF<@!fYR<7dX`eZNd~ z-)Ax1YON)XN-vvLZjPWyVaaq zpv?w+j@RQ3N4WoT+-Q)Vd%w@A_&C;BBQvD6+AaMl>EEs(vz zM&5lH;!Zv1bc#6{Xa2QXo(MsU2ElnRaa>TP5r;u^L8<$mF9sKdr&4TebZy2BbanA= z7X|suw`PJcpTC#I{7h*=VenNO;sn_b>1Y7=X6A-^yW@b&QJTIMqzRMpf?d`#iZ_u2 zpSmcGB1DKm)o)tD7@>0Wm6!(cor;UFh^*G3-;eeY8?9`NKX%yNeF2p5yzUPb55bLc zB&F|)n!i+N5xFZdb6+e}JxB{lY?BvNRCXE^VCV9?co!ou@VQ*Z@0i*LO?Khm2AL=g zN-#QKIvuI~Zm)A?)Nj3mL|C={(X!2Er9||OGg|yzuHB%%AdJOT4E!9Sndy+e+Z~sLY>Zx8BZrnRf4u*A#Hqq|wp!r~v1+bC zlbORoU^>M@S8VNS%-;O${bF_aovnn=%eAw074l~~4QwpzR34PxoePYEXYE@Cy59l! zuX<{~L%^|z;B_s#(S9mr+ea)fWMKtY!K6M}liesF{nUPd0b+_?au*Xn&Uu&rw49=* zj%6In{p5-Vso*##wlUDL{mksFMH4r56baKYGoF}{hw?j1eG8_nDvg%IKE!1>K5`oP z!!9aU*AZ($2b|FhL%|T;xe`$I-klS)9^Ui{6#;PGWl1MkU+w;O8XKf6$#j{=&MK-q;jXYbxmVVJ32@BLS?No&&=d{3P0^jhq6QP6sJ zuE7dn@lo0`__XvhwVM&GUw1yAU>0aOH-ELbqqzGbCk>;0?2}^Qi_2`C9BJW24;~!T zS`LgXkK_Sa(}Qus!8esLDuz_m+~x*Q3-MJer5&(7@e~!r+t#GENz% zC1kl28SFYmu9qs8-aXsRR8X6MV^XDk^T{l?S!s=fE(Fsvye&1*qSSa^jk42dyG~%} zle`J7Aa`&SqmP;x>V@_>GrU+@AWbj>|>*-z2_}T*f4uxkA66>v*vEe+h(ghgw_L=d~cEF zU<^%Wk`^q|GP>=MNp4+6?ps-#!K~Ik+o-hG&xY(ey)$=msQa_iz4LAadvi8}I&Kj#bK`-f;TRC`YIz=azAvcP!ka8;RRT)kR%ofQe zr8S$>Lt>7(FhQy9>Pb5@iR7-vh-m#zcE%N>ZxIHkr5uQDaGSyODUxwd8<#HrM^_e5 z4w|pIH>qla(+18!Z88aP^ zI~}!I^oz}oDqNRY_v$0?1!q35^WD$(Eiqu#XHsb(uvExfiPABL9KTyRgm^O7@Kxi- zLfr;Ur_OCg$YfTFlF0rdIr4JTL%aEA48a(ve(hWi43fC^IT5)Yu-Q0= z&_b1hKJE^v3Fh;??#vu-1JiL8`Fs+>j(RYjZotSW%N1>!FAg34IMevP+4Lrui+90! zJlqFd&r?qyoWZjOwPlB@!EWfte6f#^%i|=#=O{abw803DB0Y?}5knjt>eQ3org1vu z6-lQvuQ~$&d(`zAylM&95P;~=$rhKBYGtMH8{#B2e0UC@>o;RBUHFnBbQjoiY~R`- zx>*aPcjM{Vz#xM7;$)Ljyy(9K1~>j8iWu%gbQ@Ybro!j)N_MBH@dP8paSd*>iW6~4 zg!7u@{Sk(w2ysBzZ}=BfE#OPKlGX(0zLh}GoBAjx>W5L@l=`2SQz@~b7(h>_eL6`! zT)A62PC_JE!!$B4K;ukc5@$|CM@IvrP&;{25r*1DOvqAJFL$Md!v0n}c})@IB4%V{ zyuWvjay78burM=MC6hw=+^CKFdQ`SzA!j)wh9iit$`sN4bt(mq$D0)nIF%b~UfCoV zTGQ2SWHf5ZPcBk-1@6p+v~Z{bnG`ee{oQBrE^3})c}UM7M3Kh*E=of zT|%t2QzEfFg3_AS+mrQVq6j&Y+y{0P91f?$$_q|147g&`8}t4gWiRIAR_0@* z*`SCEKmGLP`YrCeC%I|kTzDx7wm`#peEolxZ9u*5Z{JGVC}j?SbaCldb@7gKHb^9L zmBx?y(j&gp3_*DOgVgT6w<%|S0Vxws88Z^bF4MgXB? zZoQiX)ETPH3wiJ^+1(VQmsM^*@Npf8CReXJiC6ZdyuWv{${T@L%Wi&5-ksZYCTHe$ z?GCX}=Hg54%$X7L{DS6{ZBI>UsGzVga3Hx_fMQpGVZ)a+q%(uym2E4MRb zz4jXQ&swud;3xenC5vP9yZv?M_1#Y8z@PMUDrjJ_gpGy8WW79U8f4Qh{upoRHv6RN zonRg(Qv-wRN0fWwkK>eX-nmLX(dU=tP+3c_4sp(Mco zX~agN6SUcH@nE(!d(U*$4cbV6QLCR|f!r3RC~52K>p!CK%Cl1`BofJ^S_nFv1)mde z_53!v9yJ6K4@|z8EBeGFvr%szEbMOGu5ZJ#D?amZ-2}Lo}(L{OG8)MnmzY>{Vb+6O$fG#Zif~ny!iN- z@A-)@L(7HhW%vubyWOs~OJvX0#}%u&JIgsW2}Q+l8}Y5a-F42LkIA+39nQ21VW0da zIQ=9x1_Koc^VOW*_ZXx^#(M<{cGW98%J;UGTN9;WdzxvJheVqN->;rC z9RH%iNpdsT^eo@ob3<)`^ZRYer|Fcm!E0hEPnq9_r1`woHQh98dhW3(Q^5Fi0QSWU3C5II_VJS{-(+9 zdMM}KP~TL_E3eQkHv{Sz~ zjgB`?=%V#Es_lHS6oXXpA|D=R)0&`Y+WI{U4>As99cyOp+KkyWpTBMP!iVk69LWeS4i-Y_%g zVE6~#?6-y+7C?jdp2x+Z(|YRgPX$+!U#ZOKCzj_t+yPUh)gq`nTTWvq(Q(A7a{9Y3 za!Xtgc7^sdq+{V;@ygQ9e6j-Kz960VqM!MP^7_RuX=>_^W;nyqfFY-Kieg-(Q;b<6YiN4fm~DwJ|&kq00>p z;@PezkFfj!KgRdE4#|3nBvAhH3e9jNbga^Q31(I{spxRuRA2c++Uh_4D^Jga_C7o6{0>HDGN z=FU(yMs+vBlh<2EvVt%TbR8p{EX-3W@;}o+1kpmh+3Q(352Gve$CIOI?<+(+c~e?M zIEtssh5gLzd28&nbSEZ;03H~Cj}aFHxP^HHM$Zwhy_FrER?`O0@;&IrecxsM%w_n} z)^xaLP&X0nWe$^_9x>C%LShLPIs>%_hl zAvu_&h23;2BtdK+#UiH;W5i(3v^P!1xCT_*rqLu=eO7nv1fHNZSEOXWVt9ut>`j9qMSLw zZY-mIeq)bwoK^n&;Qf}4CrwHv01&KB>}>@X?dB8xxC*v=d7M6$PYl@lV<*td`=#8s z88%i6XB%>``#k|IN^7>VoX8hHP|>){OeG#da{1+yR0!?;x>MSb6$p8wxLcPd%B_kF zWRBk833hyj6<%}YA4b~klkN$!1nmTrw9H*_Ff^ps{@(&dD)@M_Sa00tfcwqSfkOIW z7=96tNH}lUshbyaXjFcm8n{%LarO#Sebb$Eg}+6qn3q>D`xcLC5QZS40x%0LEy+Ut z=Rlki>3TVQ$^ihIgz`&J8vFL4u?mFN?cew*@#0s1-?`Qn4Ta4}O68JQ_n*nQx7hk5 zpY<6Bz#z1PJ(6uY(bv&C(>FA9>e1WM_ZR6+&4qb~pTo0EPHR8A&^F&xbnN^UJABs) zekyFUMagzr{z;Z#{f(Uf`fQIZQLWs!APCMXLUd5DE`BKpt@n8_PZ65)?X~U-&H$k` z*>@kOB&N=P)fF2}zY`D%W=#mY7?g%>)?Gb25t&p3b}-KFNVIT^62d?aZiJVsyacqn z*o70uW|bY=xfq&(%X;qJMa6;Cb6SJm;aT#?n=+ul-3WH}&GxbLx-(5`MX!$PKv`s~5L$xGAFO5heTXXb z=`Rd7_q2N7#ZlU&9wk$3#8(Jq6$>^rhLtYVf@Q%N&dhqU_g&k2ORT)(VBT1xu=qH( zdkg+hQ1KJMnr^F%^^8*>3tA2@&&9#j0oQqkA=qZ~PYCKov}YWDYG=i3)Hte?{l&T; zK%I^@5q?LLR~eZ_Qps|>?!!+JpwyP9*0KsX(l@LkNn z{>~G2DWnenogC-93Z^ej;mc$cOowEa*=8B#E1?H)E>f5EzHa5f?&`c-KpB@pOTYZS z{xTEib%A*O33?<_^#M#`8wV9I^WH&nwgnnSiM)H8#Iq6@=W}Q18bIv|d2Ho$*biBk zZk)LYrKv3qpmYWQ>38rNEiza2vX2 zTeO{&SNjrKGTAT-g;8c^oQ*3mQAmaJYS8GQ=(H!-$dqk8$|IBm;x~68xpQ{pxTYP+ zxb_kwq~ieD)#5+8uFudd27<_7*XBaAQYsyiNqg)0xS-T0c-D+r9v3tYO+j|K3{+&t z3c)$>lv?DS&+7i>^}6VO!g0GqME4t)!Ry6{+Zk7Lg-z-=UA26iDRC|zG%gmPGJKBt z2ZB!`KO`hf^5tCr)=zLM>Jzd~GA8|;Cz&v(8>5rgB5|o;S2yvD@Z~jbZDsgXzfNHe{V`kS2Ep>2eaveA;E(q>IKS zvV`b|_*sIfj05PY>!74B2J?>c4={V;lQVsoYF~%W5fT1QnnEX!6}Gk z0TcaqZW=e8lAAPC<_^yNe~4KbcNeW!hGiBdl_!5D&$<$~Dk&Ty=#SF}7!ZI?tIHJc z7|4#Hj^;~lX%$!>C9no3kqe^xo~VJ55x`Wl3R{XvHuZDH2k1?@&HNpG-Qs&PNW_SV zjy{TcOt~6J7a+RdLZgsrf5O7;fv$1)AqHs?K|#0be*}ifPB5?8q(YO;j|Dt2eaEOR zYt7#Fn#I<8ZL6)Iz7)=|iu@a3i0&UG2bu3Kkt=6&^4C$w1Dtx+cSq55Z@y)J8Q`3M zLWTei8RzR!YXPnQKvk*KYCu5daw-SPQ~iWKs|5Dv)b3Wy`xH<;NMXfI*6{~8>!B7G zDjZ-taa0V1I=8t_si$hCP|RbXrrkBm^Dmy9GwhC3p(Mrt(-_@VbxPvP|H9WRUA=>= zr4HSVvpuTR-rkPUpF4PyTQ6Q+7Zeep#lDF?f;*Qrun1E30T?WvYE>WOl)KR*lnC||NkdQ8z zNySv>`#@(SB$)8UeEMD_K~CtB`nO z`uvY&Q0W*dD&x+aHCbGh<}@LF$QS6U^#X8wU=cjQ+62aU6T{5RTu@U^-ZS6YJ{V}a zb!RkcOQ3p(mXdI!-> z_V&Uz#9R9=5FS3B7+RcFrQ9!NRl9Am(L1FQhyH10#TL@?_Z=hQek`5gDMa_@)+ew3 z#D@QM@#pUxk9DJ_?{*0&{*zvf{=Uk~M&8P#$A&4AVsGLoXsc>ZzrO#`4v{<~IO%#3 z;fT+{#n6Xfq*7f)VB1^CCi`!s>xHtURf+WEx%;Ut!WCODlfNNvIq$A^?o8|RRuO~t z?BUl3*T9n@hMt(GuO5ck$8^^gCueq>u5~{1QR%(r*x{oNP+zPcp|W{#;^FpjP~>g4 z*5~g^P;@Yc!&#?v^7mA}rX`8lEcI<@+e=fA?ehsW92IwJ=HLg+a1dvPns zDmAR4nkH%?4I|lf$v)(=6u>-tQd9aD9SqljE(eCKp2INoX2Hl#JbbP$GiGY|x6vyo=uX|spM_c!JwI3A|=I)yiSfkZ<*YN^P+^p^^#5s=r)|C_0z43pGrw%f?$_gmV!IX z3E&uPrMuz3KUpw_FSD4OGXzIs^Hj=VTD4`$$NNrf?p1uPaTZxdXLCl^5UVm6Ay~9M zl#tI!GMRfGNe|>bBKOB%^IQao6(Ecb;TA5 zm?@8*b26`M-o30HFVMxLnBLsddCOXa=xCvfT4KBq4?kMnj?U~Ql0Q?)J$$%H|JKwOtRJ?m5k>%^!D5iqB-`?Bno$#JdFv!$%bD*HT zkk{Fw$`Gp&GQzmLQlz#r>h}BAQn2G0ztwxYNqvFO*Dl`=486cy(JuSN`f(lxs`C?J$q(_Hh2XDlWT&P)H<|cx`cwVfmm~waZPK!hIB-)Sqb0KW2m=x9!zeR(+b;tkF_;N5W8zF znOEnUM?A2KjSWS18`DoQRwB^to-3HG*{OEi@eCl)wLrg18^d&xYBEHhSsAn{J)oe$ z8UM`920{b5qxKJND~_PHS;NRx7?O4C01N89QUy6s6s!`@(i`6P?^G?Mw>I2izbUcJ zg>bm}H^FcM0ov6rbBP_2VHYjgqJ*@+-^F4V*yA1sHxNV>PhZRMPd)kIYpcqn4?uPq z&sdou_&t+-X1tHC*?s&k>L9Eu9+I4%xw}r#W_elcvMQH%AMF1_cetSH)#)_?&USX1 z4*-w9R2coj5A4d~3CG5~Mhd=w+LLllK&GKgu}>_|(yx>&7AIt?ynz3j=dzsQX*x3K z02UE%J7->xILg;Q{7}PL5Y(Zbi>RHnD5(&gVH3L+#MY9Q(fS*~&;Dpg)cxmfuLoyd zoo?#Nwy_2a>%BqDX(F9hPix+7yl?`j!kM;15tf0Csryz4h zZKY=Bce(oQZ+@C0fEenaIFQ@PwQU+zHfIrjQ~;v+|9(brF53X9pIYAyGWed=&JbyUM7?sg&N9uyu}svtJ;PmVFG)d)w4_{W(X{ThPY@r8+gpgeGa$uX#FGs$JjR~_#=<&c3v_~lH*;HR0r50!eE~>n2`<) zPn=8$ffgnPZJUMWoTvkF6)8uHGL~AarUO!S#XA`_hY&Ufz5|0r@VOEC@6ww84m|3+ zZn?=e4nN;t*|#uM!*)Drj1-mtJ+f86$_L^yK4^p0Q;cPpmV#t= zbv@~>5tG7f?#ngFjZZ|=3HqBJ;QUsZO4%w(sCUgFRBlpkii$B!AFf>_T@{{0W{NVc za!;jL^@kL+g_ErlkWS+@7JH)Jut-kFCOB^?SD_^hXHPut5-X&Cl%mge=+E2^R=Pds zZ{Sg82V)fWFj%^M`;?B?NeyS_T)+m-6V%gnjz`BytHUDA2a0@74J%sOp0sXmxL15f z^#~=BqzY|PCAlcB_7!(KD5%W6F)3QuOgu-w7$^?~o^MwH^G9U?4360+xWa-2(7JYJ zwAZKzkq`O=ZgU!;h4)E(cMqo1OW#^EYNH1hJKviDq)Pi?@Zg}rJL688e_gB$_(c$o z^8N)TC-+uB8$ic_w<`G&|59|%KL8&Eg#JK!IHh{_D~taILK4{> zOug3I0Op9bC;b2x+1onns{@<{m0QtK*5(cXte6%4qq3Ncw3sBwL0CpBu;U_{)DMxy zaMs!4*FEWGpznb8sBH`OoYzN`0aS7W4RZPq@YDr&N~+GpiU3`l@?)*JukY`5FK#L) zd&(wCQ6b&$jG)W_xME-tAgx!x^6=*Qu?#KV?t@2JygD!T;=0mvL7TQzN(nQd4IVw8 zaiBO-fBb*Xw@0mO6gaXS;j=Qao4-fUH4n+(`yHYMee;DR!Qyi!kT%?PfC$Mog#ZEq2EgZVz{^3qSQq^y?%gSA8W^`t1mmpU4INaX;jVlzuqHmxH;EMq4Ww%^H-<5K$nT0w_qA1r zy9-krW)=SG2#Cs;maA7fV?Yt`hN6Wp?=jxCGiR?H<>Qfg;hU~2cv3yPeP}iz+4-!- z9fj*T7q}#1ezo2J+%1b#xicC`EbgS#eA4ZJ(qlFSu0jYx9F0y!q5LaCEqJWQ6_EupkVCJ_)rw zKLYx{#Ja1<(PL$tUF!L<4te{h7(3`)@^(>U8A2=d5crWs4X7@vGAz_v5?A^7L_>b9 zDNd00wA8Wq+O;reP|$hXQ7;x`2Y;GA*H4{7kA!g6iaSFQ8nW|~ft(x z+UL*o8s8ufrop59#?iXH&9p8;s##P7Nk>Dr7WL=vgsv&bxFW~rciDdnv^Q5_*27J` zPQyubQAhlzqKv2FQpsS+A;(?7oY(7=^V_2<_x*z5Y&TbB-mjT)E{MOXAl~t#Cl1>9 z-|=1QxaU}HJa?r`EwS#3>|?O+8>{ghcr$(yJ^ud_Wd9!|$PTR3TM<{n_a-_0zTI|4 z8E@%3htAQj)F^HY0^*5WDS~#)V<##UD}H-*0^O+^=#M&9drA?#t0^3w$gp4gy~_Br z$M36-Ct3^}Zyz^}leS76xSYsg+}|BGFQ+{y@ZD8n)8kw4lWCMbCC+HwYsysIiHp#v z+Oeh&f4dfr-qsr2ib$^10p{tSK4bj2y|~f2qinf zCJmMC8!K8!G4OiM;VQ)q2+;q`05Ljn00ss%A;Og3XemAEhz>P?14VEL=ji+AA@I=tjy8UwFg6 zA*V=bP|(4lXb@0{cTKxzQE+l+p#t0P`wJn6R(BsX17wW2an~e1w7R9sVnY9J3Vv(0 z(;n(@9mbd}(SA*ES|O^CZ0ot99M{1B!7=7`zuX$Em`uBFnOA<|Vpw|kR-2?Mvg zQeDRxlR#X;?TKtQz62mPaw=ujxkIVWt?Nq`%aMF8fb%2*a7q)ko6kIJW}j^NGb#8h zu1`h#HiYepiNm;;bV)E%r$){1@*eMTF$sv7N~}uM?D7ZCQ2JLE6N4{TW%_5o3el@+ zbh*v9N}SPPF*@yed?#ROT6`rV#`LVBKfBtEV*bNnUjADZteno;D|p8b;mqL-oRhuU z=&IL)*XGS4SMJF``EQ}_K7G)D&x}6WU3<*FQED+yi$-&bL`?NvY@zEV zz}{#LoN9cm{97bFFKrC-j(p+oeBaJoh^)}xM;aW`%;Di%IW7J4?44nOYn=1TfpiVu zu~v+Lb14_0*B49>4#yCtzgh>;_8u@^0j5Cw%&WS&U8wXik%q}UYEwR2Iq$h)KmCjL z_1A=aL2^ru%ksH-;1BzHf=4+s>D~R2caDmK?w)n>yJwl7C4s2gN)XKLD=rZ7Zb63c zWTm;H*LXP#pn0y0!)t~>Z>Mu|tP4O8K(AgI_iicTy`<34QpzpQiEsG`r~-hmq)yz7 z1~kj~S`sbcB;T`I{_+}=tmmQnFT!87-{!h8T>kdtc|nn;OHq(p^GdgYx8jPzY>Xl4 zH(4iOp`d@S>?S@nD%seRNxawv;lHV1siie2Hu2V_&?QQP zOENh1w#7u>E0>nfElQix=aXN^J-C2`Mb_E!ec1a$>kb9Ha`)HPc{X!K%0Mux&3^{R)3J5tjP{dPUH(!{dD%5S$e5zr z!^EEUf{(5k%zq?G4y?{he?w8@Pom+5`I~nN&0I2(5jt{;VLk!8|mlTws^Dd;H;jJCmPPgn+cnD$E^ zKMnyX|7Zn#)V3caHo`6M1E0j>E`xq0$<($vkfuw9(X~G$Sk`aJ)c?NgI%yW^BdBPU z`hsGiXw9D=H(!<`MQVqG$LIh*$V^|a$L>^XF&P5XwCJf6=dp=So@e98j>i-&WGBgt zA9#;_ms7T0i95WE)&&Lruc<4DsPCP54a6hCD>LDP0S4Kp?WNk@>u~Ai+>#-rT1Q2U zH=W}x6-p2g@iUZ!2Csa~fpzQ1EZyaRWYA>Pw19OpWzpN~By-VNGT0C}ES$A+phhEe z`7SWV-i9;Tx=`l!S-+fe`E=gop*NSI{57Ep^*y_^;(D-1ksF6@?r#<(i1WOYa(bT0 zEGB-|Z#l)~_b6em@BkWD2-A!pf4$C?ut6gbqyt;}FnIQ)4;ZC3@z*Zu5wDZvw}6#q zQyZTt_saZwYAK)OT?(~P8O4w~us`1V9%Vk}L<_IFP>j$^tSqiwESan%x zI^JACGYX}{i#96E^UN`c>Um`015zHQUR7*gPCq5*+b`9(G0qP>m8wVaY9Z~t?Uezy zEh0Hqd+!x9284ooH7GH|IQ1&|N^N{fPM?fq|LrKiE9IeDtdWT;V&6~kc6 zla;D>Yhhy|c)F)5jZ@Xll!FCTRDT0l>=kb%*dm+YS)`Fd`gS#c-GHMA{?vxtYC^55 zL!;cds}dIsWE#y%n@K|L^lCf!g)~<_vVtm%9Cikzwj40YX-WX`+>krkFuY+^41B(8 zt+KU-4j}UaWcWjF6*?GO!%A)0nXle@Ut{&=ZI)H<%o&p0Foh{XoRk7^)t>TrfbqSK zn4X+f8S|*n!qo7(m2H&4+x57^Y^Nc(mesV)k4&7a+6FJWTII{6ZgsrU*Qu+j68$F7 z6#`~M80vLc8-r9^TdK!Y$`CN-JX05`;{o@MQyNS_bX$2OK5njP&b#nT_(sI4PG`S( zC3uTFck^^^MszJ-1{CUpy{@9{nwHw}Qxgw>N(>OBZVQ&8>Q0?|ih1@q9``I7OLVOT z(c8!7>0NJGZYVDUB+RFF(pZ8mgKDFv#H1Y_fAVL*Kz!g^rltt|;MLOM$9jV>!Zk?R z2TGHcdw(mO?PD@|#7bKiFLk|7f#BXG@B3K*?1Cr{wY7Fk(} zR}Q4mYB!uxCWd^r7IwCQ05j&KPvz;5Nbu|=z?k_#j9JEO2ptgp8KXKB^>UXSg?{5XTkgqy0fXL8ZvS>kO6# zUwVHq6ZVSkt@sG1AUKsHd1U+cZ2S=>MMow+hSsbYFHc$n04TJ zKUzJ1vLpp02BHQEOc6J>PVPq@b7WVIRoe!=aa&RmkaL-MxvuJaD;L7q_hZT%VKCP2iS@j=BNR?j zY&|HQl(Eju^HMb$%zg=TEsH$EB)*KFxqeWc40yo3$$5Mmtn=Gh9;M7`5JU`{lit?Ji|%&eBy(t9}Q`FkAY|^?rkiA zz8osC9+ax~T!FG(_qR%FI93R{WZm|4`$~+am2KDg~CQ7%hn zx2YhW&%Y_X0Fdlkn6vNwv`^j6CF&0>BQ$@BtS2uPQJ?Mh(@$nt-|r>KSLV|rI8a-Y zccf5X9z!(Xlm0hFYIW*6_<^FH>plm1GT-FEk3M>&FWK1ail6)lCZ-}@It1GofJgXH zyYDC1HM=*&vr@ka`WD1KsuF!Fcu_HG2J?XcY?B*T4=yp_0qVWQ2ZQ}8l5f?#GPBMZ zCFXrt^s%Vkq+K_>ZOFk@MJNyv{_a>l@q(VNT_3w7vORZ^?{^ZIiXMQPIw5z{AZq3m zO|?I}fMz-IMa$hAcj2bUpY0C*`2WH0qW4GLiB2!S&TNeDe4qP;vca-v{3uQEJGa3B zbvXFTb=x;*e*xPjy;5PzY(K%O}Df;AO9UhY?l_fL?{$iSe2FuqSj|B>S*{jq+JG+Fp< z87MdDKXc7@_)n#P95SmCQj2uqH*FS*eH0iDJ2T@06}=Y^jw@iW6NWAjcc_P64LN}6 z53#7YjvNpLd~EY>+k16Xw_){IQgSlOU&(A8U0tAd0-_smGUUa{C|c*Fwe0rBBPi>_ zzvcT(QnamqN%yy^6VB4Q@b&L0K*l_@!P|d$zWygk{eSm$9ne-(eJp`aac#bxPw(*Z1UbIMzbmS#EGn1TT%iVJmT-@DF7JV=qNWqcQb*@OIAqPc6HdL6mNjkxBL~SlgCPKs5yMj3ZZ)wuKrgnJ|dK zYp_y~qu9d6cVpnKDjvlpU@}6 zJ5Bqa0xbc-kDUgm67m?s^c$OD>E$!!CMvK<=$SYP2MgK4tJG2rGJ5CTfJXvs?B6k_ z2OImJb}f~$3!bZ8D@JWBNjsaESwEj*tD?c_utt!p8610qBjpS~<&-de8J3mAok|*<-bIdXBao=M+PjTo+Yt5UTK3|_{)=rAG(7zo8gZ-_NjT3eB|e zFJ72-#qaSj1ldR4`6qv#&Hp3iuPWqI9Sqrv8l)Pz5O9y^_{_gpkg&BUQto(~x%}+h zwNpa-QCZqQK-B=i-ZyR1Rh$E_6)$(JmzYFPy3WyVgQD;RPEnyyCo1ynvw|maa(`DT zzoPp7-xif{eG@?IXP)K{yLB}E#XC?sH=gYj$pkfZdwjpm#FlJ&v{ftKa%npZQ})cDU@Wwi15BkfZn-iHbZH$)$9zQxC+-kb*Al)cT0e|7pz8-UX8Jk8S^ zr5`Ymq^VBRl9%zQO!a^moLebT_g;7mP5bKfM|MmLeiP14=IPQ)l{Fe>qxyiM$Mu#FjhvpZ&Kt zl~_pp<^RAZ{+UMb1@*uCb^n8A|4k<0zY~hT8i4;hq4+<6X+HDzeYc*S+XM4<@elBW z-SOi85AJ+#kLtPO=Z^FLqocD&>1L=8?6{J(x$`|3G+>XCMWA!Q&m&j8?zqABC|S9? z1l&CiQB#HNQTh|+?shlexTe;*JxUkd1N^VS{4T-0eBj4Xy|dJOBR1S@Ee8~k1Jh09^e-U1Md0n_@M&%e;q&6 z)m8s3eyD1ISn|IXKfu?6kYswt-{ZI{|4VQDTQE^k)6mlVUkoM-V_Rs4z--wK#OHK1 zkC|NsgPdPG12npvv1+J_47FQkw=Nci4>$`71dZqh9erzX;sxaS!9SzlR9FAwH0;Ec z=?f7JPc2)(W7(fPzq$WFRY~11SB^v0Up;<&^lQl}jo*(WrZC#8C!=8;Ou*R7CsHscxx%~NVQp1W3-VU7X_D;1`bYkN7AmRR_Nwmq%M#x9^J_X3s@^U=3LF7y8MuQv| z>jLquhdG#Nsa9z%cFXwt`k!xfn$5pTfj?_=3hh%1hi(pBdRDPDvRS_m6Gi)B@|y*m zw6WmQoR_peCcElz2N`_PeZpla1nyX2V}3{Yv#090p@T$9vM5n4;p5Lia@RGG^S!reUN zA;J`N!<4WPS7gY{XdF!uTsATv!X{H(-E9a6sHh;zFQR9thwQg~60U1gV2B@eM13fL zPs1J79k~3yzOGMarr|M1vXf4X3=Itx4R|=4s0VsX!`*TMnUm7S#?7@y;~}-5KiQBo zaUGhAziT%nb&?%1L2C_S`_}3-rrz~xSNor|iMBB^9~hC;%&<@o`#7@^W+LOz=xQ#~ zl+xK!miQ_q6HJKb({L?c`I;6OfvjSA^)~vin?N-s)ft!_~cJUoSzH!G2wQv#oIf1SN zsJfm{^l{u4`?f2WneV}Lg;s(|YKWrU)zY@d+K5~o<9_~5U1BLU-k&O^d+Y2^3bdt> zH@kA`Y7o>U3?(_+>RpL)R;`WVIhpXOI$cNv;oTIaKd8LdWT0*ao?e-fQ>$f6x^<&P zS??^p&SWnXnWp>9SRl==*Mm%fgE4-N&AiAR)HJrs<&@;eV>QAG)CYS52k1SXv+!Wu z^EnzS*KBnIPGj9t-lP0aKEx$z*~Ay)d4mXMSa97=@3_o#Ov(!EN;)^?mWw8HYD}qh zLtt`qAzY#&WlU-JL}n?`&holak^ftfJH@95d++wAdMsi7IX#UstP!wYBdigmf*nIY z`y3FuuL{uy8-UvY%y_OB5T?&*ms_u}IayRq#F4Wji3Zxr2d+ zB=3W~8BSouE zlx3H*R=fzwXinEw%jlr^NZev%G&XLT92)W;QIqtdnp78-;130Z|c6utpU3+juIOer(he<^DCY_ zUztV8(;|=~Hy9p)8Pr9~-b?RdgDlSUS4r z#Xl4aI_mCi?VLrRU>>EtB^3#hOHqYFl-{04O6G3N-RKezw*hWtl^6kb=~IW|y&I?> zm`4^v!Qh1VMIh?xHNY#!WqC0ze@AE+{9y5&)wc0zv16q2kd9u1rc{S(65{-0Y55Jq zU(?;Pb%7hi^N^9(p`X9-E#&^3n21OTo>z1CyVh6!Ufq^v6Uqfn_4>1)vJC&ofBkiT za?atMk-|`zEBTjQ7Ziqu(Y)7>ULRRx^GI7l4{sQqaUvz(kS#g&^1uES|I$yMgB4^) zVL>>Hc>o+aFpa=JTt}F+eOO2WMuq$OZv(QqSb7ra&;3ofM)sKKa08e*h)tIo3XkgW zW@Uw4UklwaJ8mJDb9UviNW`Y*j0)oio(KiA`FTN$_i*nn4h?gUk9A;+teJ*1Do zd8Oqc;oBF#jz$FRByL=7>~sy+*o7#|93Z4}K=OS1m$R6wbgMh+C!-&fmJEZ~SKz(l zU|;ePUod~&dSQ_K7H40Tk(}1E&Yy0Q#FAQvr(C-AbePT19b@#gZ#}EITvgt;OgLKUzAqCRYVE5g8vraQGnX=x7*O(;&`@c$4z-oN$`q zarI(}W7zf(b>ysh@o9A_f*mHmPEU*N8NoJvU0z+@%Nz`fJjk>O-#T~~v*s5E3tmk_ zOSWOzj=GUsooDflo42mP@3CzTu!j(YO&z%~iO;(=fF5(7m4cxxO&%?kN<68O6eMot z24mGLBOc7`>o}U5Xqydh*+H@LFD(@coqtdYx$SA!qjrajgqVe&2vq(ihrq3{M)a8| z3C6Tz|E?0N9l~PvmWkcV^G=g6mcygh%qU9O$S(bO6YoF7mskHGw9!6z^tB}NIra=S2tRH3iGXZt*BpmL9%Ct+HZ68;FzJ{sYvpoBF=CV- zb9kc^{wrh9bw@TnY4tLVacZHOi8X$`)hqYl7F*gz-+;!`PM#<=UuEu`HkMDgq~}f# zaW&ALC}o@WZlZ*mNsR+{khlJ zt}M*FUT=4JNn_ORfXF$u_|P!}v^m#OGTos0yJOjx*lb+iYwt(Hiyub|c<#hkyZ7DB z?FQj={AMTlysTLPQhyuOsU=R&h9VmZ;K_HX>hDP?Rn}b;A`go+88TOCRU&$p+^m}t ze1%aHx~M(x{#a}aaUfMe>4H6!)p%rtROaZ`8BONq#W=mY(<@Jb2jZIycwaWh-4beh zC(wA?`D|JS#&qL#%aj-j*HYcn$-hufb3#EU2(4ufKN^N#75Sd3_YP%u3^I-irD04z zCBn2C)tji9e>5(8{+gk1irV*QP~`ovl14(B);^xe3emoS=6Lkw#jI5s#tl~Kqo*jjhCq@xX# z+PNK1L+k<3j|rhfK0gq+v? za9z1g%$}V(<6E+e?LUW;0*1rVF89rD!Cw7pEQt@|BHbdFIE!oM{`?ya? z+!wYyfu+D#%rrUw7oHC+m*6?dx|K1b+y!aEC+2dOrqy2&%!cp2Co*` zZS?Cm*9X<3W;?S^p-UEScBOfgNtJyP!DLg_17Q(0L+)+hL8|?3EAtr`*tQ|+rvdHE zFILCW9SJGz&+{GOOrf5}(}X+X(}`X>styDa6^*F9=3a`99EfemFi~YPg+#fUK59a@p%GFsAh^fIKKe#_x?A=`u$GV&dm=`y zX)dFY@)GN4IAB;`o)s}ZUvN2H6KSE|B;Ik9NE+Us5Xk-pGQ363_i`RrS89E0;R-)> z`g}(6ONxQB^gp5>&_*QX3$I``A$mJS6OEx6ub#=<2AG*;eYfa2Y=PYXT#$G!wfit7 zHk~%z0&@?1esiDO{J}$Qze3At_wz{Au^Y-cAl-U;bP=-!QARd^NnnsnGsop3z36D{1Z{Jf zVGE74f@V}?VK-i3VCDmLqJ|4?^-j^USTO?4MmOL?q`{|(M06yt9Z~5wP1Qf#1PF$9 z@=n2e;PCm5zwdnz8*RWHG<$1i#zlIelpniyjRdlxA;c@fN?;pHp^0E0<@{Fai>*B~ z3y-TdQAfliLc%?7)kMTZ#!mD;_4(SY_JmVnuGC}GNuJj$NV>=Sc~R!v!JJQv{^uXj z$oWYa2Il-9%-0KH_taP;E_8IMRq;E_{z^}q9JU(W27*! z=z^j-U_^ij>C5!9EO*>87t20v@s0;>kRtM)H}|-HQ0?s;W~+SJlV%xja5dUFSag?5 zCwP}fx+kwMOUCs~foaT?jbi6FO?%q5dlg#%?LTZ3`uh83u34I{P!5I><`XV`leX>s z_l|PJtG@JXu+*im<9c3sJ#ujZ!BdOE&aFvcy0CL|f~OwT@!Z2F${$xCnU*P;hFmV1 zCcSYE#8b^Df>B#fm<=NDT~?F&+%zrBYMjD^kbx=23N6V*7gQ7XqT{#9#4Z89ttUEH z5a9$rmGiQ7Cue^9ty2x+k98bzD&1-Kwb}Y&qeb8~o0XDq6sC_5BvOCL6^1gup}6CvWo{7O&K>%?T4!m9^xdzKXt}_~e?? z<>N|khkvj_*xL|(;{oh9j&rp(Q~5PQWtFLfa}?CeI+ua;Q1suY~PZou6PK6hpe zZTX65VCMmFnsyE$Hodu*b(%nMYFAZ$3U!&<+)LT7R(b?-r(NbJl+UCKEm|L7C8rghc7oY6w` zE0%8{FjFV|t`7Q1fAfS}F5M*NC|_vQJv0LcF&=h}@y4UL@%z1UZ&3o6GWu$=FJ*kz zxy%;xhV=eZ`ZH;nA9W%ODQn5c5!~b{osBPZ)l1TyICW13Eg# zD_`k=gm(A!yuezCY)l`%K9cxdU$0;gJ zzGFER%Z_s0)W(^XQ0vZN`esR7iaOS90XYJocnK-3!Fl0#z_!2f5bqt`_@tr!$pis7 zaV!3P_2SYLm%*! zm13ETtLR}MGFji`Wczf!dD9JnNr^gChjjy<*_?aex!a$fUG43635Lw-YVKk)z{Kw* z92M$mw_`EuE5f^+`oY48+sp&uC%a!X20&bZbgwV*;rqD)fgDyt%{1IXMO{4zAoYEM zUZsX+>hd%U@sS%s>rlQE{u&{wRHP>o|B438Z{Pym^3Zp%eBYwv4n00LS$>1f(Y zvofk=37qhL>2Nw84AoO27@Q6LD3L$frcrx9Hv;);j^lm#kbkQxL}sxYX%&+yuTW@g zl3N*IruzJzM$2#ojQaMe$Y+vyv_3G(k+f_VZYBm+P@ugf!GkF zG;R$qeyi7zcg0@oayfFS$L|Al)B5%?dat^&#yhHfc_9T7S6i3=yxcIf#kqsA!DZQn zs$=bm5#BG|+{YSJ_J#1~v}IS(p7WLkj%aVhP6LU1>IR7d$oD)V z=7Bf@m@L3sy&}gE#=a^@qQ?mavLSS;vb=XA(_-e2*~?D-8V;2jGS5T(!zW97TNDS= zyT{)Hx}8aU#kgk{Ud`ODF}fgU*vOt%`gJ;K^J+8X``!N%_}BwwH^*FC*{=1}pX)`&hL=2pvmCyC-{z9H`= z{`NvXe)?>Ycim5&t^QLNS@~n9wLBO24)N3}{}U_gU>X;6HdZHAtdL_t=aR|+GvOe7 zP($Sw2*z*$G#!1gp7NDyT4E)Ni+x~iR-CsGE|9tgxJ;ljfbf1dr~fVuX>=EP-5_56 zfa%y>1-tw>AiV%0ry$n-h>}f4;!U&BKat8O&S>DA*|YFG2?uQOiiVZL!`I@ua!-~OxuN=kUJXy?50i%#iO=z!)^+8@Qm zZwd0*hgNKN<}`k-svy<<;!*(T4u()wv>xWvHx)DBCTUyA>9n*1G%NRVsywu6MK!s$kj8CD|F8 z*S=)_rU^oIqw5^t`dbgZqr!Y}{xXu}UcHZf8VC=a(*UU9d&8!W_oYtH^R=~_vn#d$ z36@NC%EzrpBT!0(-+nNN*5ROmD^Kn&;Yq)iU86K(W5Gd4^?XXP#wXfL{wyzmEjf5)4*C9l`k*YjH)4UDl-EEdX-Ki9#-AT}R?8hO+KmVWj!VkAvZN_!~|O!+yB z{BOJ}`aR+P%~D5Qh?v~j%9cMmIyXJ><1D+H2)VJtZs3jpgziiL&q@so<#lRm;@=Nv zpO?+Vq&(>tF1joJ_AS7S9>@rz%dHJ@hc?xOqN3e9gL(k3mu;2#fMP>fEj_cY9|;E7 z8(4L8ngeGP4%I2TeB~CD3)2n}17$kN6_m`L0{&nsWx}_fyt+MoYj^%QiyiTy`gbA-+_XalRM6VJW z?3}Ojj&NK&k*f0qFnvKn040j|P#+`JZ$ENEoWOTkIw9VuzO4sYyT~A*h+&6534Ezj zJe4_1VF)`n(x^%<(P^0(!gt&ED_JF5`QL?K?a8B`0hiWQ9P|UC(;$V-3fdHD{EF^D zIb1WI?K6}6Ejm<15Ot{Lyy5&nMXCQ=-pRDAH+>9Tvnb4UzDak`x; z|E7uSIcit%I=e{i_SBbqIu#BYdPj2bSo=ST)ZMvxFl?`18E-9+8wBtpU3ph%<>D`4 z0N%ju(X!YUvR~k%9@Gn)SbYB7Jep0u8{^E_&IYc#{QIgx52g41ldtyFN<&}-s#3D4 zg78IJ);|`N9Toy*>J}c(#{pt#+mE8i9MzdbY~b~gd0fd2zTk{{Ce+>j)~H?^{Q15u z^U1=%T1@B(c6yDWYi7rS{3z$n$%tvVYyI`JadX1wTLkzM#KspFH*RRE_dZ z;skY^iaZ7s7ABLpK0i=ElV*9NzShmF#~<%dK$NDavm87S-8e`SU%BO>UvSL4o>VJ zaTy_gu+-bYOpZ_A&7Jqkz|1vqyGyi| zzwCo|-PvYF(?EbrHXAno2yMfHmGXFZMSNQUGgBWNje7XYc()`Nm-)GE4J>eB8@qSj z|M`B-j_sfMZ@Hg)dz*lF1ZU$ACd6-KYv1Lq$&P|}N&Q9s$8N{d4+-3MJSrwu&q_ki z{+3VOoc0P9*A438fAn)!pb>Y+NYmDrJ~Mr2g}oVPY0s$((M!+e67LMI; ztn>s3LFV}xD0sB53MDx%HWtX^@&6D?E1u2OZGoE`N+Q-QNiJ`>}81l9;3s*c7J+3)W`p-?`62iTmH zmB&%gaJ`}Z>wfRy0ID{rG0bHx{b-acp0w`Rq!^x4+Q{kLl08@}n;UlCJIebw@p(h+ z&g7h;a^{DMtWPNMytKUXM<)z=ZhYF+V7b`DMrn{jEC|u{`L)Z z-Ry$HIz5F`Mi*dKHBP%~@-COV$XziXfVMl-LH>vq91 zHkLnbNzSq%&Z>BHeW5axo@v*_*uY2SGzUk`$)N`AbDGV;y(!X)N7XFgTwvKI@%bA|;JVcXZR!JB50mViv`tnJ@v zV+_FCnij3=A}GXS*~Ll%96B3>^C%c3ShgqiSDPCU5;0%SC`f%05g>nkr_aKJY43_r z`aSm(3mIHy%btuuIAIqyDT`?f1qeD?g*^kn{O2`Opk=x<)z#Gpg+7UHnaA*%a==?) zkY;4S!L<$P?Oj3;9&efB>N>lRKF>ZYn~2(Oz!H-`9d4fX<+o$n>P^5b@w~-q(_CUD zIq!slyYtlpbkQeN(AQ+mcp0MixWb>a7y=DhpzX8{ZQQQ!>qUtNmHgDY@JQVOP#y(<-(sI|Pzs zolL%|q&funX2()$36rFTrx%++#f+;(x@F4IvobxuVadJEORcz;gQU4Zw%Yd6jm&}^ zs)-(g@5TId`>@I79349ciKe`x7BvmtqE<_Ro{dnK3to7_bkT(q*u2QOJDE@hzsawx$Of3s1 zYtQ*`;1clITQ+ba-3OVy!yH7 z^_Q9IV>Mts4EU=6ZqqpWmrJL}T0>N;YS(151qt2_W*a+A`ZhK;@VOhUkt0pK#w8vj z$z0dL>DPguZy%kOJ^DY#lMwz=@_Cl4WsO@jPGJ_ZtocR zsO0)SKEwMjecjdz<^F(kX>s*DB1NCqXe?<_=^)m$+}~GkFc8~cIu@QYhFDIqa$Gsf z2Xr&Vmkbg9%){pP{)7j)H1@Mu?jrhL4Ru{Hva8ZNpEIL@3FR&iEq-r2$(L7d_tZ@@ z-SnCmFRe|u>IjLbi6tTKd?+6gY)i}J66A71{CGHL2y2AH$Ru-I*MB(v{kN#4-ZmF! zz``wpvOE4#Y&)mXL7s*eZ2PMM(d~cpmwt7xI+&;DLiO0wq5DIz?usrz!38m7)5Hf< ziSw(!3l%uP+x6&B7l4=SVZKSb$YoA*Q!$(Ei67Dh^J{d~^(Mk3#~8i8c9Emj+TUFd zXD%`pzsK+k$?iXK9hg_6joe#CFPwIvd!B-q+d-o;y;7S9Nn*xoo0>I$$r4 z7@OIOlxZK+cV~^vK5N>LMTC(gxhu6ca*7TNx@^wr^W%u`VE_y_B9AQ##|$WZA#Wt-5QrmYQ*a;U(9tM^dcd?2-dsR`wowGkW0Di zlAF!?dg~SIPQK)trL7-{h8SiX+;JI+=62-fSe^W2P%6zI#r@x4V5;V8?f_N)+OK(a zFaoGt~T(yqx0(SldZ> z?28VgKaXyQxfC~=IQ4ss0-~byBp2&LtRI@O4v9?|6Biw}mwY+8V*RHSGPbs}l(Gsv ze&k@^Y_}d2)Ibd$zQsIW`E6)Dt@t}Dcv*FBG+`m4c{o=s>_v^;yVf0Xq(X?yZ08Em zQPDMaqM~Y{FT)u3pchwNRfdyBhktd&^oO~}iG+Ju6Q3xq_11n_YQM!v}+}=(LVmggIxWU z%TnSoko47o%IUSh?F~IBujRU+gznZE`#>NR<&{@zL30~QP5CACpMUMY`{h=fuQUQ@ z?Fl*;JU!(PeH6$?f*4>H3K&yEicf6UBC7G=M-W*(uNF(6?fYmZhlr_eNgItFdM}>q zYnfhd&P5vIB)Z<0F5D)pKjNYL&jB_9sR(%M{JN=+?a(OoUs=k z)3HS!F;23s=3@1M^Q0UW0O7A8shVu@KC zwplD07_P@$YDPB+pz?VyVTFWFNT6}8$-L;4|87F$f>P(fXzW|(*NzvvZal203-=U3 zfC=}EO-&JGDVxV&81hbREFX25Wd(k*BiZ&|{OL_pV`F2HiXTKoQe3U1m2InjWc8ks zfA=QM75Ieo+E!IQn=IJt{5n#v>K8h?uGV43HjY!G3-vaiyC`NiAdBFm<-Bai*~^uU zvHQg!wgPUCt)C^8<7iv=!18DOLO5L6Z#uOZ@JQku0!Ob*LEcVS408t?IIm*wJ%NTh zG`wF%+VQ9K2=8|JGjR(3ligTvf$qpy5}f zDa*vzIA`!TUbmCwTG1sy={%73g+l`d7TB7Hsw1UbzeQleMS@`4EA?4@bpDJ= zk41N!FOz{1A1cz(z#1E>g5>L!ieg_|l~sykCXR|!x~bHRrgeQ&?!&1e zKP$K;OpJb2wsAk6N=GuV8)<%@QD#3YzO2*uRH&~-$8%Bl8*?z5qFBjeqyuzUhx(N| z6Z$YJtr0XLypF7dK&Mm#Uc5EvVAbQik!#ABuP^@}#TciOk+sc^l&Ag;{f* zMAirZ2n0uC=yee)#Yg=!nB#HFS!nrN6Q;6@+?2`}xk~%>a?EKli`C`|i}blx`J_4$ z>MuWk2CqM;^*ydik71Kt8EBfzj~r=HpgjS^5#wUR^|D*~rPUUqvGF#37_YKq^mT@JK!2Q5&rLJ0y>PY(w^ zs5^v>=5CoAJN1AgKWe({b$ zDdrmbBsJ?UCkX7W46m;9+h^hBFO`iIPhBc;pMmGyvePAuDB6NW>Qveb zB+Cg+2O6_aT?ZPbmL4eT15bkEvtVBKD{p=r%4gUR9lw3fnjp@*Kr7tSB_5u|E8#UwA3ix*swrQYhzWGm)g6vDwi*N8 zhZsr+JF2>==pyq<vX6S>k#*&_<&$G=)MXq?+L4@bGH{zwf%ND)M|IC za*!SHK(|l?6MY0qIPIzxl*WiHFM!yX**k3W94d&^^drrKnt`9su$tr&uK=T`=*0!obGl9)+2mMg4It0OkLUJc!{BshT+ z-nSs}iy+h+1FwMEe}5#ujV{C^^CzjTmi(o>zd-EU@{hIA{|0lfC*VNn-iV{m0&xrtSaL z-j=dA1;KIWf8JH?obg}voae&-<4<`XKudu1ENNsBaeQ9bTrZHbu_9vs>F09Z|IGuy z^BHpzKl3(-T&>ZL2Whwz>Ltds59GJCA4Rl-w^rXglkAuXc`C3J;u-JRl^nU1X_p`& zwxsf9Mrn)zSjII0ey3)>C%KYM4rkQ?kR?(_$L&G{o;JjO7H-;*B!_l{D>|Xy#Ad~d zbdb5r3Ha`!XJQ&o^eJLIB>WbE$XCk^_?@Brmc-k4@A?B07+_Os)}N+Rt{h!=?Ov@! zONWZh3gs^znV11F6?D{C8+pm8mDiU~oL`XMyenC|0Q@3@==b45H#~OJLXxE7g zUU*WZ2N^-xRazIeSu#Eie>BVQfb<6mh!LO+y@?eJem~}e^9bC;hIY7iufC()p%$`Z zy^54vnAcz3oO7St`%3s(bK-Y5=Z$pTaQDQA7w}2nae5!QQeyhZDfm{u8!5D7-ifzK=(9=Xc>Uo( zM+4$E)pX2=i-Z~lnz;n{m6tU7X zUxtAU5dLGra5!6+dKeIa%2Ux32Op}b%M2d&=t{x1KtMsxWLk08kSs#(jMMC8{GhVl zrLWA5p|*-lKBw==f8@y@D~}|(cL5W_&WTiqNBQH>$9P1%|3;5eBy1o9=fCm7Nk=3p zr9R*F4FzuTBQyhWP@wrXxQ+q`v^<~O1!PU-6MoAiJ;FEJ%KWr&QmaGdcWw#2o;AYV zj&JqhbZ0v8W(L93^|8iom*As;hzi?OHYLOrwzUlt9HU_Ao9t>4yhs8c*h>u(b5gTbB`r}r8w zwYrcSm%_n%atpSLg09ioU^-gd5!8w7UNj0K1U`6_X3Iu95}Y*|U_>u0K97O(>!{gl zIq@l$KURL2bLp#x<>-@pTV=hQC}XI>rj1E*Dx^NDR$GQWN9NE120;_Z!&of!Iv&7M%>31N~o{+1Vy}rm{XH8WfrkMoR421j{G^T$C$%6 zZaJXhF&mQsgVpEg=&KAJQ?P3R8Bd%I0NDa48i5f0?oG@;Q}C3U)xz=OJ(yh;eGR$b zxaWj7c8#_-v&Jf5sfO)O0>RQ&@!d-+OPYxkA_j(}D(L`iNCil+)u~SDsgFODZGdrX z`?ma_Q-ArjCs`x0Akl~*si~_UQ9)93U1$4xu6B^YCE$yTN4pf$uZKSQ2DnaIJU-%0 zmQ$(x**-oX%RWR~alY;gcT{|1&OLH0Y$GuXY*Fs}@~T*Zb42ahJw+{zYWvIq_HO<# zf;OHA4>rKZ*kzo`?f5OIdEG9_FwL{iazkCsN7)ZhrFvm&KUA$inPCS+SvkW7Ft;PX zO;`gw5D+KApHkOvO>XO$_0_NRy82ty z?PN_>g_;A_Beb^HpdaamiowM5OBBwbuvje6Iqd2yrwjD9YSZU$X-KieOf1LpssbcT zL!C8dz4+E{ma($30`lh=c1tmC-0Nga z_c(Zvf?K1F2@#ugr%|<4lla&N+Ire+J;o$@liXlx;=Pxf6U_+`v-RsVVm! zNKxv#f#I=v4N=4%;`t?B-SHyc4w6rQR#6Cyf+}7K+$=4NP-`>akgnzCi1)1{cAN07 zsIGRA){D13vw_zy1fpvufIdF>;H8*OSGc)OHJ#5O^HLD`hez*Ye7Sd5YFU5q?`4o% zH>KhrIjCoT>_peYq68jAb~5yaUdB}3c?B|o?!oH1ptBhsvoSe;W_sy`W? z)3hE*&CyG2-wFsZ9BtTAaatZ1@~fIEVen@lXD92qTb6RWlJZ>JMbyUSctf2WS=Qqh zGcfC}d?I{^w+ae{r1XsPu8|C5}Q<1M-R(-8F-P;t7+~OvvPzZjCvLrVh z7o%)YS;XZkl&xUxjMR(Dw4IZ?Fy3&<^%)mhaLwsB*OZJzPDw+{s`jPY^s-JS23Oy- z4c9`GSz%r5dAi1kbtq7R3pohCni6w@4p+95`$st!k73?Xc_yuLCwaz>`VKgY#)d`b zjf5k)Vz&%t@N{L$n$zVt(Xo2?Pfda&OrIIxahsRwowq7?2`!B9Mu*p(7;p43dTqP` z1vCc0iDyEX@s;dl>g3c z{4L4#-MPkF`t?-22P^YNQsm)T;qR*#MmM^=FpHDbNMd;C7{xGD@#E;NBCacmA@O>} zuAWeEl}AyH%3=FlzZZ`fh&@YlHRf81enZ9|W!WmyeCCBj^H`A)7ZjGZ=N)=xP-(>P z&*M4aQeB#&j4ArVlMFk|HZfkBN5cm(rz@Q(ZQc{Bb?n((E<^RFS<4r!c<;Z}giW5g z6lxXK{Ss5C#jZThMItn2_sZrnVHI^`o2JEiD`)PW9xJDWRRdH?yS)k2@qBsC5?cUX1WZ&_^P?15uQ>u=|@m?io zHj=UiI7JZ->j<$k_#_T(lwr4W9G|C`JH}XGAx|PK?%j}FU%4Pz*1al;1_&}fH%{eX zKPKM4bM;nD6h&Q6Z9YkCI##5(8sV|NsoFtN)w|%QMa!L~c)YlA&$|W@W98j2P1k+z z%{wAVWz|YLiA_eH!AQ^S(6VYUp2k1kaQ^oEAI=X$5baLX&|&eV?M9|52%OU-tHaLm z8sw$Y=a8#NryUgID^1&=%+-C>%D(bN-V^@s&mT769@4k^J$D91;;iB0Iw;fdXq|8a zfwn)ImZw~!1W&`|eXTUn?Es3i zgpKEr%GJWx37hj8XiyTex;#Wy!!C)2&TLt6iEaAjXW)y7MJot#5KgA9(3~iQYkEzM z!K0 zX7_P8hIU#?rYzr7G7X1P#+>Rm9T%0j=a&al$dfR;iZ{ZsIA;<)%Iw-xolc9KNxn6^ zzKfNafpco7v+SET2Xhlbts=Y>&F5CBp8)Cgf3f%8aZPROx-j-7h$u)=6i`5Pan6tb`zlV=h4`3hQ z|Fv}6X!;#e(lXy4Xce9pq1}b4 zBfg*Z@{bh+asl08zTytpAh<^f9@dyFqyS7HetqaWEAa!`jcDEjpKc5ATgr7#6Q}_RCskojVrT z#KOFq|7dP}i;;2qQ{YX;WVU)ae6P0LDJi+ODkPQ$tN;ygnBXvk0L=_!Op4ctV*z@F z4A6k%dPgPQkV}uHyoerI5+Tknb<++MI7OF$egy8fyWQR^tZ%(|^v>nkG3)rZocXr8 zhPZtiDUEumOf|pk64n|3w%tu5g@ko1gSUI)V|46`xk2Sfo+&I)p=WI@)u@id(2T2M z>$p9u??>*QtW9x4lUl>_wEfNg#Kvia`Fx>eRz}DtE)dD`xC{W8b2!dila!irLG=Ll z?x3`9N`%rwA7ua3f-?`Yxc{N*(*1$$SAQ6X6P=}l@DtmJ+!tady&6x&0v>u2w4{Ez z<|C~1pLPD86MbNl)-)0M(M!os1{?M+PsuRk4@ zXBV+Gdz9K+TmwjzQV=sK=39ih3u>fEx-ELuj>a?UK2_SOIY`oUsT(@IogDG83RCY$ zeAEk?^!wUdwZG?fZV8v$bT36HmfqF|@dbsz_)2dDf#d4}Jdg{nYI~sUoMeOrn~{ub zZ?Ax{CzkZ0r`H=`xiFGXO3>30o`DMBDLndh?Ygr+K?9hqa}_+pJv^~W{;~a#q|aIE z6}Y4_3fII&Q>WNrb@{_s{pF+9^BL~fewS1<_HP6?+8u3r z`fUMNf$$DXLT?RAGZlR!tPA}_Ci#830(I5eKk_&E5?NgwdHPfJLotLxMkh9LGrKfFY9bLwcL3%uJ6^aru^82D@%srhM_;y)er{59memFvXgTxk80 zKAJG$xkXsp`HZ8^`==xQKk_MY)5iyy_cwH48&~k}1o;H0q@nm=DhTSJ1W~%&7fB4u zgI{kvn%!|w_zUM36Vtl3L*^j&XR$ram%%is=-35ANrZ4u1G30GexNuiX+)II8- zw|20QGaY5a;6*BF{0~4cn4DeJRRHWH+6mN*!dY+&P*>WOD}U0JIsO$v$PKyb(p|<{ zCduTs+~j4`Zs(dv5n@IBz2rLXxaTv3G>A+&1qZAqD-bGxN7|OE^$*zW-TB-#?;u9J zE)J}|4hFp?3nVi6t$v4k?xNxi@t;3JE1y8)`!V=U4G76*%^S9nO-zvcXt`gdZl#mI2{u+Cc?9#Sa}PPUuGA9J@h^g0^UeKER%$c#J{*f z(=G;@6ElD78#kFxJiXo=NZf`JAZH=S2pkAfZ*9u-&N~Is_|SK@x6N~_5vOw0ixyw% zfX^KBC8B??4+!e#FWYUq-_+h|xT{e~pkUACTu^=?HpP2e3YxSLjx7nIF6l7pa#Hx* z*x5Dsk>RuKttHTg-!0W?uZs)aw=bxD6N9HMx+Vk3aTJUv0fqQ6l@B|l5OLT7J;{fs z1#B{(^{&H)-G?_IAxDn&;5lZYjtEdQ(l2rmQsMaqMVjcoW+idOsg){<0gV{;YQpcM z^#L($)myWZUBk|m7-4Yl{Jj#tw_S!2RV_1 zuaR~Y^^OkRGt;CV2y^ox)jF>0S@qQoQJJRwm1jA0TtbQgTA%>*lB_PctXH^z;8F-x zT+wI@5L$5+hYG~ys`TVKH=b*p)`{~Bx>koV&OhN6Uj{s$ew?q&1h=35X#^FidLK1N zShN$w$D_a~tYMwZ#+2WqG-1OuDXi=a_8$L27%|cpnX7Aa>1+Q^&$O~@W@mIou#?QY zCCG&)wRY1IAT3clW~PV`GGQG)OQhE%QAPRf9gzI;)9g?rL-bw=sV|652$VLjfUY#S&tIBXh(aqV%xKjrCWb!f^y`m2mT2 zR%np7=}JpHkX}uE9azTiKby^Zwx%4!QJk!0IVqjK8lL9{H|@dm-l(GJDUn15Isv*78)OmO~wrYgRQ# zcf+z|pKlh1?w_^y;0X`AklX-eZwM0S7_jG+MHnetLljEbMcNC%*u%8tb|bC65BNLZ z&|DScx;EaLO*SiV+}=HL^RhiK4)0?Cg#($q95v+nq|Owz5PZDzL#SAlK3GUbx@B8S70I0$q4sT-TL6S z-KO)}PS?6dtBBqS7zg|ZSo~{*2}XgZ_O^w)g)rdl?ITD_Cx&fsQDf2&L=w^H+vT~p zoHn;RaM*CdG*Y$ggyc|_vBmnjzlwSMbf1+L7g|F$o_bvTWU569?mjjU3lcm$)ahNiP^?3Z?twaI&lGg+DrwdDylm7NUQ zrqMN*%&{H(HgeKsDS=7U?|FR%s%&h|!POjoGkAJ+W`}Mk_yNt@ zt-V*>!-F<{u)Ua9@$}mjhWlFqdyDR#cW3t2PZ(FU1DS1*%2CCj{?OT{xMWv#u} z$v||_z-rgnQy!@eX56tno$Op#@Xgx0S|2)_6e+q2@fNe?l-n@N?){Ev*(o)$bIaUu zj;V`cD&a>cF^l{7bf(Qa$$0oIJcreOEGbiPrE1_HsEj-n1LK4rFPwMp(Gq2ya{_+8@CFXwhEuU{GoZ4{zWaWtq>wtu_> z-b_k6ZtH;5AAJ}M*o+k03Yh4C13T(m8BJNsH74YA;m6jGkhbzlMcwB?9j)f4a#u79 z!!|geIYxJ?Tz6}cp}HbhJuFmhBk66xz9UWPh$YPM$SmcX&caHSV|2|(NK}D# zlDj+^!&SoOa+TujJ$L&K)2nt=VCV!ZeYooLPhp=6Lv*eLwc#kbUs`YJ+`;n2$0lOo z$0euVxDE;soFkF2l)RkO6NJn6h^MD;Bs!GSE9+3#byQjCyc{&>SCm^d0loSo-(fB?u;SM$FXw^s#D;JwAkv=N!;2D^YR$h zq%7{PY8H-!oUhrm*%rbvHs@g=hb4{EYFQbz~xd%_d=ok9_yQ z{TxTdv~T)<-{!zxtist6C+M{qTS#s>I*Nz+k-Qi5rg1XBDSZ!3q5nFfkvK2R10Ppq(Nv!0_@4n7=C=uZDDA$Fz z2cSSTB--BhSIS4a5(#SAmGUVRVEGPXJe+8+6CAusiO-lZ{BpWQHN^M#YFvgXJ|3o) znb^D-Wqb{-kUDUXqp6yUe?068Ud5Z~*%ySaJPxYAy$aZ=_Za`^gSsA>o% zS-up^QH)3reqD7BY3$^H_*J{o(T6nNsT;F%9}mzA64Hg4=tbMQK~?WXzgHrPMcQ0aF1nPBmfq!(GRfZk`wY#KA!HTn^Hdg0PR=Pbpr2csKT#l70CN>>`?bjySXgFVeLzUD- zFp!ns-1pbL-<|e~N2Y)5JS0IVr*81&!OJXChUb>A+4O7~S4FO#nAELEk@Nx$)b@^Y8xmKi4?ZpZxdlO%{I9 z(-48JqE|ie+*rP1M4IOnaSWvb{S7+BhQ>)?msk1c6mSYj1|_XwVHn)l_5uTK9K zHGvl6L0Oo7Dcq6_h9B62nDuK{FDdV*mN|H+K6)d-HPeI_?r+17Qx#Wz=|TjR)2rC5+;%2F+Yu?j-+fmL)q;9|%dHsfj1t zBeJp|9ITXQ60vc+9j9wZ{a*Fc`Y1MrF!;ws_9_Nn?|nSx)>m(`z!q=k)5AzVzp0T( zQs-wxQm)5MRv5xCrtp=xp!1wMs(LHXK|k>*+yS+_)YhOY@Ud*J$URH+tMB?Zl?nc; zIUAWn_`4vi%_aw?f0^~x=E81qG&V8j5T{>qrSnx&ubszuHE(wr9VC+sRjvQ_o#4hJ zGr%&W)4oELvQ$0hU#z%$0DtPWxD-*lN7t4E0c%SQah)rqh69y_4SF-DG8Se|3|e&@+#mIT!)l|4RL_lnsusGA~ri zJ*iFOFx7!<5jadToxr;*6(ceH!J=B+Z22y1+;{DSM70*#oL{f(07=aOuK85ILg z8)!Y-s+*zjH+38Co?;$z0?Ay<4f|krjwiWz{N?2f>*9%DR7`m1K3sT_1y;Lh*=8MZ?p>u?-C=jk(a6Kq*u7QJ=7&b&zVDCCgb2h z=g-S&;3ciEI8K*t{57$5=t<0Z=nmxd-J($SYwx(D$|bk&%1E?c*0#k(dVbMgdlIag zEJV#hbcTCeHN)WylFA}Bql~|hs4wjGzIAcaqI5Jxv&mVU+DpmS{?yO%U!7BU&s&m; z*!mpgy~>*6A46Z8*7j2t&KE^I{AEn~(J+pl02(JGWS`Dn_RxOi6~cRPvbwA5X!3)7 zUB+{Z-D*>?ZdOvjlrepkhu_Igk37H5`)Xe25-&bwj-0iXp3N?|2OV8BOE`VOwrSnz zL^*^W`5CsmHT+K4Lifs-!YAv#z3V(48nbu$ad~sdSe|9{>Nw@+w2(~V@~L7>buoE# zR<&Hk3!i~1(`PSd;0sQg@kPl$XtdH={jD{6Jt~NC_Vf^ww!mo;tONP`3kKRnqV8AM zBrK@WC*-PP<6^#xI>qpSoQtKJX_$5a=QSD&-F zA;#&t&La__{E1DUMd8+hBl4y5oVF3qdB_|jsQ8T7M>K}HM)+F5?G!cawez02A zc^Z1(Z+Ddy_>3TZ>dtfFUJ-^g_7iBg?m5cWJw8QWy#sHqwyGF4oOZ|10luco?7b`T z#c5-R#vJpmL+4wSzdANi@qP!@D4E@)6zx0`wHb?n=d=w^6(m=&c zO#5eYjq?+yW4Gy2unJgcT40#{Nc(2&oUXgp}^LCkhT=so)}^+#O4 zi=Ijcwv-K6;U8iaau)Sr4J~&KUV)y*h?M4r*=qQc#Y%Icvv!fo}lGkw9mUrvywi! z7)I?)k?&?a0oNE#7Yx%#u^GpQ`MFyuTQ9-2D~!0Kph&+AE$$a)Ds(lRbWA7?i99{S zx8M_D>_}cp*kGepUxrdCx39Wy!}HUrn8Qm1SR*lRMt$}Wa67>{i@R0BXutXLxL3Qw z%dkS?!=)Zp*k0ND`-2+Fxl4B)Hy0X*xIT7ZRL%@p{X>Qly@^~S&Gp>ljJ5Gqn*nmN z1j-r0VmD?>yk=>9U(jXc9R*#C+*VRU-j5iK_zmMzZq~YN42Lwe$#Yy1DQVTPSVa^A z*)={A)?C$uYGg6%ORA|z??acKF$Nt%N&vXH^Fxm7D?wi^{Q|?6EXFmGg5s-7VS`u@ zxEf60#f3h+BQJ9?Zw-<<-e8`5oYuq0ovJ3RR~Wfz#bc?j;4GuB{QnHJu^Fo^(&-Dn zi{z!W5K5fc`*MSFdpSW4r3vK#9-u+|_i3Ot$G{}GGgU$u?wlR0J3d^?C7IL-6AlW| z2MK9<1fm|fmZH*h=mVXyom*X4(Xx!gnR>bk@i6Vw=edh3&;J3wP5%Pln^^b&?I~PL zgW_R5@X~q|`EhC1)u13;65ds_b_t0}&Yl+)lSTViAFC?8K~Y4Y^f~Cg2Lz1`ZB`NG4FyIx`}*CUdTaXns<5viPPS!_P*{ zHEK~HjV5>@SBz!=*>ZL=BkuxK;uCSAwp>nG#@$wyHM`0=Nm|0yaEuC)Dn1bQ2dGve z{}WRe&LaznIo+4TE+;$at>Et@(VRi2;so~7rA)-R@H%3(iJut|zv{n~JN1hv$93w_ zfS4B8*9RDAyH3kcMy4XfP#2Cu&4;TPVREI|;Gp$;qZN-%;>f|}F|?oIg_P&}y-S7h z9>wDCa30}D^4e!0=T^QA;rw)hmY$yszjmFaZ;T$m!mhB??i->gn@1nh!y=>q9 z((t2CQ4GZ;^~rAtZ8lr4Th5xKMa+OdQDq=>AKZCF3o((29=~nT_Y*x~x4Q~){b?Ap zh$%@5jf13Y}IVXYi=ZG6+?%Z)1n*Tzt9BBj3>DfGsiz^A{jLr#9Tas2Ts zMH3@zH_t=i>=Ijy(_bk+`I5~V#sWGXerBok-X8;rOWe}gyu3V;@o;C?{c_R*5Ls;g zF-=h_JzsPFeQ2os^!09BF43oxI>V)K&wx8mFL2N}<~Z8t*UO%SEQY0a#q?BZn06~r z`%S)wzThU8D2zQbu6L>S`0(&_&UJn!U+@1Lu!eX239REz%{#4DJi@(Wqfvo>$JbYY z_%2p;ALH;N8Z%Cb6t4ls2v5Q(>UZL0fpr|JRg$Xv*MVZy(4xFUa&jFTl}6ZYeP^Af zJOF-%L|VPdNIlo*?PAAGRlqNTjX6LD>?>+@+rPMG$+U92h)XMQAvOM8*oM()V)*Zqg`y_n85S6w1F6uSV? zwjM~pTAU*E6gQ4I7`OtiSqvF04sawKkqA7VmoJwHhPp z;-0ok6CY*ptGNNo@2GT+tGZ}ibZN~ zuhYOg%yblV1h$z-jkNc4(o!G9w1ZD*ZK;(*ebVJk|-$FcPX@^U5 zEp+-l!{L;tAV@jvomSSz57$rwaW$eCY4^*vx>aLevp)>FdK4#sVx5$S%7>jgy`Jwy z>xDNqoVasB{xv!;b>peJXDm~+>DyUt!)Q`$CT)s2D9Ah=6HY2Jwrw2s+khB4Vn(M` zCzARVA5C{H7_wtTIRIbCh$=ku!Zrz|iK=Gn(rch(wnsTeUFs~&{6wqg`(8`jq3!+H za>JKFmmxIHa()a!nCy`kU2-_l278Wvuz(=8rGfZLPh{1L=7M%!eYh@xg%-p-V9cHU z8^M9WQ!L<<=ee9&I^@n93$xHTcJ~ra&GL?$v;Oi&7@yXe+XKusB-7eEPBf-#mFKor7X$O9uKxqUhro^Oe-Cx;d(z)IVs|0J z;cp0jhOm*Ccq~Rd=mGpCV?06I;dGxL?_C!68EzOS%q85>O2h12))^x(f}aWN=z|5m z{Y3){I)Fr%^Zc$EIE>cQy5)gdkUrvIa<6ERR}L?8)hw9!r1QYhDOFp8k~+rj#qgMc zZq+dxXRP3$U$3p)o_6#bn6SyN2OaHCGcAh?8|()DO#FFubnK}s?TFx|ezySEX#Y2l zIigd3e_fyv7-fQ9?5IzZvN7E)UgV+ur+VwVSq-cZV6q7OWnV;F{EM_-U&AvrD zXtCBVLNKT$B)rNx_R27Ta$D+1D(lCrYAfF#RNxK1<6&5LpG-Kc?$f$v&w3wkNrP~{ zQRC4&_OKI>k9*|8(NZ4bggBf9D}0}I-6=ztU3zC);Qqrclygmivev7`tA&tNnaX^N zdR?e;br`7B^vNb^V&3in=qnXN|BmRtW-Qb3 zD%Aa^B_$8L8FDFIWu*mMDd)qbCqK=8ta#4Gxp>{vJrv?dAfOY&8m+4Crz`>zifK`J zF>FPn9d`A?gp8{d!TW=0Td5!@R3p20;1?<(LaDt3$3@ydNjcfY9R*)z=2}x zwY~YnO=TG$ltbFF3SQOF?thc%52ZJO$Z3=8*AD7Y{%;XL3vPRu?SAp%1B)q*UMiD= zhH>ZtG_HhNM(WA+!@^B-#>mL+s2+|DE)R&zL^@(=Dlhx>mY2QEgl77MRVoZs7o=Rq z@kP`4dM{+eGa@y0H&;A4(!W<+-Hs`kRx&$i6%u_t^zp8;6Dm-z+IIvU3c3OCm#mVM zjHBHYRS`rwV{&hI-3P-@`;1Iue`TfnL{(fA-B2-7=l`O$5&O;BWuYMD;hXS|NFV}+ zZ)fHUKsAE=4(*_oK)8jk$se}{P5^K|VI3sBoU4UE063rS`G3Iq?497lqJN7{7sDl~ z8cd9E%1k%7kLN7FV-DTRlC?rRarFc@aCf;d4=QiB4L^f z4fp~J|8>pm03dW@6p^}I1b937h}nk2y!y<~FmWE!&0i~nK8x>nuU>T?b{4&fA+ywi z?n7xBd#my-3A{v1Kn{81IwbVK+>WCl--=jbU~N7`1m*)Xa;Dqat+Kv@B89GGL0=Bq z{v)T(zR#!_@qqdKSlvvj=Ad^m!o784X*WD^STDsDY%Yir3f-U5t6K*k9YaMZQ4Aba zexLaXG5`f+8!Dlfr`kGq56!9_2=lTVqNf?F87aTnk<6yce^Pca1E7yoi+xHc9HW2E zSAPsHoYPirS%0LYuXd4}E_J@9>7mA0sxQ)v&T6-ZX6-BfZhpPqIwU0F;XX`^H?fij zT-^xxt!AVNOWT&Wa7%)U-Tm=Bn*Kuomb2?toi6MnraX{KF*7g6th)DU?^4UwFJtL9 z+=`X!-5>n7_;gx&woN6dT}4)YJ4nkY&<qs<1wBI0j*8`BowtR6D`&yeYMLjNSw>%|^)bTfyBYW4pn z3^5HWq;=zcCk#BHF4p^IY~i6D@5xMvkja(=NuL;lMlB!RB2#$&-y_hUwQnWN^0k8) zxI{^#Y{d0dh@m2-A<`HK4pk+~Re(HwQf{7UE*KqiR1=KDfMCXjZM{vk!$oMK`0rx3 z-t_Y?{<{Raze@q$8NLg~l8Z^8JKF2dLLbEl&ZQaa+oVw-05d?lQ200ge7P=)<4O%JoTfcexah%p@Kvi)`99!{`f1scw z2mXfrp?OV3vsD8zUwuGu5ioMSxb^!Va)MQJLhz$7TBLF51#Lc`UjTG1&xF3 z|Dw))x3&MI&IkWaoqNiwyk)$1h*pcKk%B`1l4E&St@U4R=??C3>^Lop9;)qJYUpu1+&nokz+UxE^mUS&aBO9nj`F81}6M@zXsY zxn4l1ylhcUd^XbbL>Z+xDN&dNivYfAis|1@hmxxae#o*)VB1%x&dQJ+K~ESh}r;GgM_>c|BN|)BKJe z7l%yq!G=vE_2qE?{aEPq8-w%XXS5gcwc4qlvDWjwTp9{h*qwaM?^P?Q^c4fKu`F3v z6b2QqKJ76wSo%KM^n{V1qF$?g%TT}am85I=;#0Q4fu)>z>I)|gIf7tk>CyS3z*Lha zpf~H6v2|fp8OsY495jg$*I6JrgJ{WksL`au)hu-%kkBZN2?st_b#%ByhV)~&?)t%s z=#2rGOF`|qx!UD;1Qw?}!_07Ftt==vhNszw_W51#IWo)pC%D{RX34F>L_Q<;b|lzP zK<4|8RVY`)b?zF|W*i0UIUHl)HJ8Q98Qa5@G1+9z<9;9@lET)N`wE6%j(7AvfR`8( zl(+qMf|OH_H`Z4spd|F5iU6}pCncf^&c$j#9*)|6DInW)T1~is#=H1`Z2yoB=+VwV=YQ!CfOz?nF8-50 z|C3E;P=E67EJ4Npz!9jncqR8$0A%yRM+oV-=?G6x@o~Fm^O&A=44ikiI{S%qs^a>E zpK;oQN1hwAs;LGI>pwmj9d~Nycreun6f*rjJIFS|q_Tfu;><)Yl|HwzQ4Cu8(WxoRCe!cx#1_n>s0qF!H2e! z^^Z*+XzkTE-5YBDrlPui8caHvo|KF(-JS&>b?)n1;h*}djF+!h*v43$)qsE=;MAX~ z0eSlhuDl~&*8cW4;2xR@mYld8xPWlgRvQbQo~CEg(|&WZG3IgX8Oc;(yp1E!0=k(E zx40Fe;~4OyWp|e)OnHePx0fdzJg(qs9wkst#$eCeGq!1bx3hxpU-wc6sAX}&lA`Mp z?*~vdu%C4EtnXpLq?ff9`R>z9M8sX6iAelZrcIYUMl6iEVQ-M}rX4p-8tXFtT3%$s z=C;=Uy#IV_J+&q9e~Mj4gldp_Yw_0 zF2)bxTLH;L-=_^>Fcz+R%rb;FVJl57#lC}~W@>qCb)n-vFmD7BS2rPDomLc|6#2R` zvg=6XF#NGi39#>u$=x5vfvv^U)#Id+4t*+g^(LL}6DXs6(a7n_O(_5PJU^l#%zKXn#;5+W&Gs-Y((?P?c7j`7(M_ z)r4t0ZpF9YLK z#%>Yi9nV@DHy^YEWDIDF^N$02_yIyQdvgHL0dhpn0KjY< zmdFEyiId@T+sI9RwIB0cT6Y26qI$hF96mzOi}UONQ~U>Tpw|0V8-Wo{^(SoviGQ$CcsU%bV55j*Q0N zMl?~zsKa9~btHPDde!(;>1cv~X5XA+d{!2k1Zj!!J2{fh9_#?us zdT+L{`_n21B_;Mz>sH@^j{Bz6`AqI3!G~WP_YLlTKUUnCUz#)?R2oh%j@vYIG<59+ zFRg$C%n-m9zA1)c@2b2oD@Ue7=PMj^?wR}Dx=T?VpNDr3Td=0Z>Lh4>V4w3TyUEol zctMm=xrCC<&38aEdNa%8)`f1OxCff_qG;BI(BB&Jk=eEc;jQ##C~AAgAlvi3e-t6B z=L?5>KR3DWgWd5hgR<|Tb-HsI?46S*90hu;W+63L?TQgbJFdIM2z z`wj&+bzOYqv-m=*H_hB_-LKVoxa?h6$gT6T*AKGHYgWc+8b^(sGmN4ku1;@ z1342(B{f*Lh`k;30I*#?^Z!7rUs10!mQ0>KMRw^o1#)CLxR6=w3GyHRveqR9W=# zp4+^9$F)Z?s>aky0~hGs#&@5&Y15W)1Oxd(zf5N~!DY_XFU5Ltju#@YSjTtZ85?Cl zU8=tTuZ94Cae!2ps0^`;J^0Y(o&!Bre-y1-5I2d$2O{U@y+O(-J~ zNU#W^SlQwkGh<}eU8kO1n1>j*WxGw=`%ojAM|C|B1F`+I5cY5_zg9jhitjzGs+yhL zd>A@s|EG^$QOh2bK#k7~tQ6PA+MU>2ANVIy$m2Yl{g%ncO;Xe5@eI2WkEZtkZMB=t z+zf_Ke(44v;sV&%ByFX>#{j*Ct;jXph)xA~rU%--)MtG7?qpMUnBzVjmD0;v7xXxr zzpB8AQfTt_Lb>KkCxDB(ryr(z0QXYwKsOv(zxi#mIfEF-aAo zEU-y#;o-$jO-YqJhA?KJn|p1p1mr{zt0BWWz64$$6uY`UwQf<=!Pmw|^H2%j1JG4# zqBUEwhr@7#*mK(u02uS@jr|3T(OFc!S+UaG5iayqZnnDPuupngMlwt13Wy=gIlY9J zNswSZDY2p9FHOHNNdtU^<`(MoOx)`3Wj={Xfb}(b0*Ja*M7Zg_{~;(B0UXRo!kd`Z zXbnIY__WiKTpqXt*5Nshrv9iw;I@-E85CPAy`Lg=A%qymoqb?O~18JD{W8t=FW>x1+=NpMu`m7phKvKpt zg@Irp0Q_heb8LwFtLoDLtp#m-^iX4$V>=4NtJUCI@rd#bFQaqSykDnFEMDjQFdDav zO(RX6!@?Jb-R9~t6wMlE6k|UV#e5IoaxY`Db(82+^kSG%Mo^4F8MK$T$t8L=5&I84 zd2bo8xi;Fq9%HL`g3k-#fZUuyoZumel>CT3vxU?mgvm+enA=zV`x%IHWX+G(A&D-$ zY3W5&r*MPWXo$T`1ZsR39evH%g1~G1=^TL)aM;2BQ74|HEYYn-6?OO5;j*qIcyI$C`252mCxH#gu^WMjdV>+uh)s>5LD9&e#%yvBtLfh;gpP45C(1 z)DAeMAD{?BMYaFnn=Pp7S~4ppKee|daeUSY{_+Wu(#I~G^P0!2o9nqDEf@^Y()#l{ zn?icXWucSq@~jIq#$z%Eput$HpyV#mG#1md*$V|ix)0zFPu zNwfNUOx-|E#~mr*#Gqn2v?g>Pdz01(5Xk^tfMuF2j>1PqhVhn88u>5E)>G2bW&iwcfY&O5092;-A)(-yYXblWENkTB{u zpnw~Meu7pgNIc)n)0*g{5)WN z$SKS4igk31{R#}j|AXb@ySGsMPv4jl!VJ`U0&Rr&1vbJF*Wz$VshKanhQ<`Mf56i3 z-RTAt+p?^wV;jRj`~Srx-$_=LWUu$EG6*5r7-f%L8(Tuy>?)DhW*dxXb#^4(k>l$9 z04D}07{|@p!QM7zy~WimHtWm+;-V#8@6o+cN;7j6=>DYwyidN^IWm(;TvFVl@np*; zzh+=c+AxMa(Thn~wBm|*q-S+vmL6ySCfQOB7-+i2-sYCJyJx77whcU+ z(L_*{jHjfCH9al7q?$Aehf2e{RYr*(^6EDM=t8@$R@jyLl0S2)8_&4)8VmRHd2p}r zbJ<~;W2veK8{vC45WcdPdAs)G!4JxSBId0X?8VawG>_@PH>yD zOo6OYPr&^Hxe$8-syOkbx-Vw=;i!$D212&Eh^!^c!f#@4aL-(gMPapE1DZ24x3jj8q5x?;> zF?<)>Sifw0jtsdzD+f)A!T($g*@pT5+#wxLHg%A^NvDqDcrbLKJ&m}n3~6Xdd3P>K z78lO&T>qa;F_4!$?OGd=_vq+i&4*jk17ts^-vc>28z&e#Y83z)*W|h@5dXgF%KAFt zze?(+bC+zV{U37b8^6htKl*Zp(f;R;p%0`hN?RBNxrO6fS2q_6Q-`xp5HnkH5kVFK zma`91Qsn$^yqzpq_;pmxY%R>)$oVzg&D{PtqvT*}WkJrbZS&U6nnh4dOoW{OxrL3D zwHu2FNRXWWnT?z4YYP`yh=UWv(ZbPp7Ge)^(Qq;~2W}{5;bCKLq3B}jP0s() z!qE!22}oRs<~8~DjzwQs1o*BFjAC6q7I6UI7`WM9nSww|I_{4-B|L0=j|FW2fxG104W8wc??D4-WCL|!nCjvb9 ze|kvae->l;yGc1a54_`RQ#ZhJII;-+`BmP_O;N)QFd{5xMopasFf9zR50-haFAUQbqmgiX4pX>)Sd zQu3+z(KY#?)4ibBm=Vs-;Fh;igie|!6LE7gA6{_s{CnbhE zhF_0R)t}6|Eq?4q#n0yS@T>~+Ny!bw7Td31*G`m#Bw}xWuFDqHqqPGMiY1jdb?w$U zw=BvB?+3(U#eLj37LGp%>C!tRV1#EH3;V8b8JdqeXa>+m)6Fb-2}%#{f9Jd5REw~i z7X2pY-;^N8Fcf$xTz1mt&W|@Y2jof(2AleS)0R+5>9Ag{PFU>e7a4D-GF>=u;eBtM zG{w9FO22kvH}GcU6N9PT;Q60kX6N&1O&_GtwNB_Xyn7x@zLK5&?rK;;5i4Dt;XM!k z35aARexDj?!n}dYXzY#aV7tJNwc@!S9u(htLuFis=R#|9&a!Iwq0A+BBbofZZT9d|*XQjfH#GMb?1m3YdyVVhYW8~qf;$O4%;lVo zqHLYP6vH+dZzPu59hP-Y=vymF2mCLG9ey{UYX_;_X;yyruvqK~w~~_3*N!SSa|2UV zaHe<=9~BL zcrEp3jivM1hC66PKdI%s*=e=-LAdVdGbQxky6emi^&SzoK>NXqupw)7xI`T1r2pQ2 zo`Nb$JxK9Y(>1E@Le9`{FFsuq41c`yAu+9I1pjzYKvGQfMdFT+O>W+Y7dgM`bLL|4 zuj9fWs;{ZVRSx~CkAIXcR!zww%AIUK{a}FNYu^mtn$yCw>eR^(m8p~CA$)BO5Wjk_ zA4-T@?(k8TTQ<48jaJ`buMpbhGwbUAi?_FqYAgJDZvWGDJ}(q zLsNn~R00$WlHkxnf#R+~+G2s=?oiw*!ToNi{LVS=jdAZ7?~R*(nv!IHy4RX(uDSN7 zN%*A!@4L>5PeEJuk$C&gLb(>nWtvRF&P(ZWr4>0Jx1&$p#INr0vMf{cNq-`sV3*n7 z8Rxbwm@s;2f?V1li?7Cz24Pza%Xk}RfXQv-Fs%!GMu&-IXA8*c_ zKCL8Rdy5`twJfTkqBwr1`Mx@9Wdv(_%{lziUAxABnT%@l8jsXxgmG`U!qp#sPvO$P z9?l#Nlh0)?hs)!wr-%sRB}e0HS@|bl8Y}a<6wsw)ndcAc&$ka6_5v%#}V-i@xdHx#%9y>~WxhDNfoE)QP2!lcq3`=nX4RJIL| z_p?OxM;m-jwbA|AqoZAH)~5F*`$s=nBxtTiv+&n_QM2&U(q8dvRB!V&)My)%N!8rs zB*<~1*j-E~A^0pAAS$r+ohQj6SO_TKauU_3j!sqe3wRJ9?E2x(r$!W7#`yhvqVdm^ zwH-I|ORL?lNC(+@``nSaFwSX=&lb{tL+T}l@lhnrySwqJ!lTqX96^)u%Cg;I_n#5m zsmse*=X#q=MdN$NWR&(*{T(0Yp!;C#=|u*7S;@>(Y;c*kE>TDAMF)}Go&TqQS^1x@TscmlO1W zPXMG3*lZ)%8BFCocO$nrWMELoHxIbZP5*y&k!M%=Yq0;%ps~Qyr~ja_05{kFDKu7< zkpR%Pf|0%T1MYJ#^A9KU@bmEroO_7>Jx*R3^S03)@H{X7doT@uL5}Ef&$D7?K2` z?6lCFx=IBzNwG)o9B1AtAfw@s9+XL!ip{e7n$oy?v->{y-XoQc>zAS`cSr5pMZOH~ zAg6Z|lCEn65{d5lNc{z9Gm>!pKkxIw{}ysK{f&n&X`jdwcuryQrHW$nRc$GFHt{*VG(1-kmU9wiv5)OpdW={b+rF){n;-UsQ!;V!~7 zb^_M^sS_#rWq+`X%f3^Nyq`#Klid1}k~h zS#JbC;hPH$lPYVUmKNa|T3VtUO9+#!)Z>e~!3`lQOsn}mOAzwKWjzaz{9KWH;Tv;U zcxun0kn>t(mQojT;n#49^+2AX`G?@wqvacmO5VdvcwUcrd7^CRR2`O6LdbEz7o_G1 z!Sk(%m)qkOuEsO*-@@KWoozQyvCn^eHxW-`Zt=}^s(;&}SW24+@5;(AN_K4>OmkW0=MZ@qIS zeo;1HmURn%D3Y{ErytUU&ItR|RFza-Bk(F)>a$Ekq6Kq*KcZs%&5x(DputEUCqWvU zT)vP=!k{3ny#D!7uDiC@dM5EoPZQhipsvH8~CZFP{yGBv8IQOv5OTGz|dADJWwel#Qfx-NHyiX7(#eaP-i)-|VBl=g_%Q18EX zBTMUwWd9dkw3F@gZA7{v(E&~h(`~X%1uq@TLXT5Ew;1W-q6~7Mf?IDxw8wJen-Nk% z(;7}A=1YAQpoXW?#RufeLQVJsY4nLaPUJAPr4JuJVvs(>IFR&TTd42l93zituBQDw<2L45?1^;SkDH+J=jS8%^Iw6 zNOPnV>qwuVPK(x5nM zk03)y8RlMJ4Z02yc+H4;w&SG_oP}~P2G_xl!3J%H4}Skri}{hHcv0akeDxe&+hKK8 zk(swv+Wzg-@X}^&6CFEa0rQd!zihG(`Tbz_r(j;q$NjV!n)3l^pkS&cx(GVWX0r1m zIe=RVb(j9ryeY~3uR7KHb8)E6L=HoG z`Cf1`>BJ=k6E^m+3k^za&h?5llmzYvW;p4GjNnQ)?Q2w2iRvdT4><>CH&?a44JQl({|dfD<=Rk- zc~$wBC|nuaj=dI@&UTxeg}Z?o&$U{l3li2-M0lS{rHL}^v@)PajS8@(`&giGVP{i^{94^{D0=x@28;dDPs(ZNimQnSZ0Z;LVtlQ$ z_|Ql9m$sv0V*FNL>z+E#_WFucdu_iT4@jx=BO;@4YzbTQWq~skr8_z9RdV^geh9xF zx#3KGzm|Db)XU@uzD4V)FKVbckth-~hUwNL;CnP?(JyVf>;oK@UUTwO+wtX$NaxbE z`K;;dtt^n}utN2daS=a`QH;)Ec5ZPhiAapbo3MfYdsT9(ca-#jC+W3wZqGwlCoLm+ z3HaRJGGti9x%837C54vsVUeEwvgxDGW)IYbd*`eWeD}+w?%G*46*#rL{-%z}A-ydJ ziOu4e4)7n>XMDZ4>u$OFele(EKAKl)+f?4=p+$MHhyHV7%A0OTVie2ShPl8Zc8P+T zdUavpS95(}#1kdjJ`FKY#4~6ai*nck-3D%*5oc4|py8dIB$zFK8BaN&-=2j{`@GbuD^h66iWQ z3`ItlmnmK>IMXSJqXWms4JwZN0=j$+lJcCz1wTj9q2`t%)+DIH=7zgQmOIADZK#!* zg}W%xM#Ahl$+hSa{_H%Hs7gK^?SY!_T>;HE9XCLlOexxxcjayMhR360JEN*f*Q+)a zpIOHtf#%Zd+G4Ip^R_(tsZV3t0h|Dr;AX`-3F?r&Bxj2&> zbOI^(u61EqC?n?_hW6dP2tbo{&vo~_nu8^h7?-Z0p+!BY`IzHZnIqklQ(t-PvnPQ1?G zFpZ#tZ0m;i$-H+w#ViJ~Z6X(K!zf9+Zuzu#jB}vS-#M4BFG5L5*xJg53o@IL5m10Q zdfGGhMoGhY%fNZQY7ID1vSn-{YOT5`@4guR`Ib*B+q?@NCQVg{AS7enkG2+QxVngPUO`dB1Jth#jiRGm>g02i*eEuA+=5Lk zFX7T;%vcF}t=z(djZKZ+o(eL7+c5Iw@!2oPc`_O*RAVXqgB~$K&Lw#)B9~$l6TKEw zqnuWU9~m62IoA@OdW*%V^Wia( zgN`m~UyZlYmgP*Vir@n)@!FeXP@mKSrACgA-C2!4tRVGe+3-Y&+U>}?cl6QtL*-FA z^sD6Ux>))qyNc^n3Iiy;XDEI$y^a=CfjSq zw%XNNdq&V`K-=WOXUR?&i5bHplTU*=rd0oV_lCu{EMZ7~+Bmh`FWXyZ_5`c*^G+wQ z*8zlY;JMwGk-?OTYH+SS919ga__}gAhgUPt!1HLMNgfYzx}S8at=CRryzlL+&XkVt z>Qp>&H=~_!ml8Mo1He!?i6lGl+RDt{LPmYC2bXRq*Y=FycWT^dDq8uL)B-UgWTw?T zwIWvjnXHUlJHnP!iDE)4&e(vtRoLy>aEl%UuIF3Q7Ggb(+tJIYdS6BE9Q-5`TBjg0 zdvH&{S{w7dsDPp5%bR9$n1b3~?j_O$Hhxx?)x#_qrF!_P zGt8SWJtsGnIsNrT{j1U1(uePBPC2ZSKgn@NeOh^WDeG?}a(A9Oo0dEtLKYW@ls3?zaw*bp3YkbJKjIyn zz{5<&G|gQiHErCYvLC5hSh0XVRFkzIeUBq=SMm$-osNT1uCr5|FJxEUkUct`jWTev zG*A=*;!W^|w;ys#mC9p2!MTOM)5>Xct_^T7W8SC7?TZ_gj?0oEJU*fIYXb&nEX-bO8ZY(sHdD?sD>(jeGZa`CJuFwn{^%aE$t7n}E6nvY zB8M?q9|BgCw4fA)t9K;GEtUPDe9A|@!Ml(eIFd|f@_>?vXMpnERIlte{XE`WD4{f| z7B-m;vd~U_zl$dSNpMeg!qa#rQE=(1+;9LDcf18*!#)VeC13DC(q60vqVcIy{U&2h zo_k?TdB|7ejhgrg!ZgEjLz%hB$o?@#gTNs+r9ABt*57F(ZQ`iro!{E6o@OYW#az}IpY!% zssS@<92zc{%8XFI{PpP{%EhN|veIVbpq9=g!FTB|MU*e6SL>xe#H`mij7etc`Ux-y zq&%Ol<-h+MFl&Sk0iJtt5gWzft^64H%I5`C$<<7fKkWf$A)gK5_v`=lt#USzPv3h( z*FWD8SNzL}T(}_g|Hs=bX+h+R$7+i&g+zZh;d2*3mv<{e3wuBzRm~Tx<2e0?QDVG9 zjX?I)|_=SrnAIB?v`--8(<|3;1n|AHKjHhk^Otg&n7BCL6GOhWGJY9X}Ud z{o0t_585mh@8!3%hojR>Au5{OOU*%jw`J8mJpPPp77UNS!QIQR)3Xr#kc=13`Epwl z%VTenSJBJoSK_K!jFNPMzhL_#Yk!qW4{nd6!}gcelOjCW72vGBt|Un=CJ>GZY9i-z5llwXq(7FQ_5xByXmPn2+xza3~%@`WD9Tqo%bp?e#$ zPnwcj^pNm=J$|6!$-QI~%S*|cjs&n!j()kAbfXfRxr|b555u2f0!x;LKUDmjpZd%g zY!1%7dHmsp)JWkD2VZf6bawU7Ytr_WPPSqembl}Z%}oYdxFtIE`F!Q`o>>uwJJ4#! zy9x;msJ4M-f4+g-RX68vouH;FTqrFb-@wSgRHvrr!^zx^l4ul+AtS6kji+Lc{Ntw3 zxx2Y=;oduZfuHyL(tfOED^#m4EoT%lC03a!*pb8T=xYy|VTR0crsY>j>ipvpgQEJn zQ~Cth>A>s|7r)eSo@-MFy2D!Exc|)SJs*65Fmp7t%D&oEZT(1AUSEOk76uWx*wVra z03L1j?Vt&v=aMb1&d-a`EhkW&eWOnCY z*1IpN?^c2oS!G0KWFL-NX6}4?Uw#!*zTHM=`^(?Cy5zl|WtwB6e`ypS^}1#8wVFq! zm}TAKedFt7jli~ZrKIl$K7t+ae&*UZU+zHxn502!{}==nn5 z-_DTse%Jd}D`M93n|usimXV9q!&jLLM%giUreoaxOu|nLA|Yj1y;tkC=0`yVAqUFr zL+7Hbr?NKZ9es1d2(RL~nt-Xj>y31s|R-nL?a_+kdKV67kkG?G_+wy$@+l z<$ww<<*-b;I&B6<(#c<^+y-xs|l4YvU(oIbwtDqoAyxr;W7l3&_PSg8ki;&+G#l^8rc}2WaN1T>6*Fs*Ek%Qs(UnEtM@r;~;3IVm^^LPghsBA!(|FKRLd{M#U)--#s=qR?tL1DP+4m zHdgrO!}UwIWZ+d+e{&nG0rvCl`yMs24`I7&`Ww?RT;`GZ+5$q{+z-8k-%R@8rUwVL zo|D7YKJoWky59nlP56Vwai6i74^bNHLZu`Sf0_$_ETWlkG2Hd8876KQz%ZUD#iQSkfxq z+HwJyPSBLCl@-kWa#-~39rsv0FYmZ=H%U>EDX0~0?|A&Nv+mQ!WeYZ_;jHxe`Ds*g(eDD=fb-rSULxJ7uJS2oxZ=&%116!8J>MF&mypSBxqKU zw5zv@4%}YM6&7x4!WNi4zaEn-FL`VbrRP~u@#wa~FXyqWyZ>pD1dG^iYqFxoTg@&d zs>pfXj10a@7s>>7+OB6imX|_^pu$Nq-s>q0sghrQ`Sx#)>g$&lQ;d}h6>p?8F9gH1 z7~qED){;wTD`C|;iRL6lu{_Rlbr7D~^^@MZEl6#PEh!*pq4`gvNWjF>lS;&qUZDg* zOy%t&vL5k=%iau#o|wkDwH+eH+S(M>+GXjPC>|24)ZXKC&P+&6W}CvbThJpF(<4m2 zxAyEPzXT?L^}2nLy*y~i7$42O3ls|gjI980+Ng(U(w^GBorQ($k;~+_i?cE&79R8M z39=9Ay@Z|D^uCYjE>X#gnbG8!w zXXl#klCK=|?cI2~M<1A5d4eT2H&m+UIyf>Fsm1q{0mxS~d`Mh^}X==r|MRmtJ+Pg>3@#3pT6)qde9rMcz z3%9+U932z*?WV@7-A@mJGZ9DaI|3NIY7Lu%8Cxs?2Vj~8U6xv7xPX8RYHLg4 zohaxiSFG0(5Kae{hG#=CH9MVGPZ|bxH#rM%G5t`Dw z4$j4aghG*|(uz@Jz2X8;8^m-7;jWY8YJp95&C|*Cr9LNVz~oaeY-d$(5rr6ZohoRA z$X#s&FD+A&5pEp{Roc&)DmqUNqAi}V#c7r0vga`Rq=LQIX{On-@Dlx3!%6kX-$+!h z4h7Wpg9YoV58bcV=g4y@OBcoXZpNCA<(V+Y=an2U1z1u%PR~oOTb+63F^!z#jVQ`4 z2E$iIQ^$s=Xf>kAgU>tXGoG&Boqw{vzEyp=>dX7?#E^CfGun>9OYRNf{hOFse1clTFc>m65_ z5;w?BZ!X~`V>hc(8->QS`p%_E{ z?)_sThd`q~dnr+m00x&pFXp-pm@V_kgw@ypYT<=sx?g(X-6wJ5^N zb6QqCyar7~mg5uL%kx>#0d{$lW0BSa2chD&P0OdFJ{tzN4s`ODHzj152UwFRX;xTt z7tPLQ@WQPq^b3#%U@#s@%Hcc3;K-RAZHe@wg+D!k!3akRmLuuD#!`n9XBf1d03A)A#WZr4n|=BSJds$H?8 z-$)dAv`!IO>Z&pP7~H<5npjYI5^~wBb_kxd=^?v$lxBMBru&5HdT)z+^zmXTG;W@+ z6EM)5C9g)(xf$wG1NbV@l@rmEwI%1n6i*GK%c2Xvr)s*SZ4rh;zJLqIW{qZ0T_*=Y zu)NO%q}2r5++Ay~b-P;2nd!!B$SH1D$aW<-S(m0T65MJ=9QxUwNO+FxvVy>GWKeTWCeX-0_~(oy=x^iTb|c=wxl-`Q(1P z`vBa2MMh^Zv%jFTo%tfdNHfjX?sB?`R^%?ugJ5R!xFCzKuyt-Ug>irYaUxyipy_4@ z@l)9e>fm4nx7SKYnPDn+QF0kp&dtMoE5A2ZS}rZU8JTW`Ao5$Bs;dEpNx+2bw#_H@yo7`W& z@v<^G1OvbQ{AMVT*3N3?MTBZ=pL&Hl6OXboJpL5uW~B0d+5q*>@(Dz z1t_URBFirFLPzacew{@zG)L#fQVkZinA%27JjK}Ysg*OMRpZ=hG;3d58SVjD$gu0K0LBHv2F z|H(9iZ9SsLuXxW5)A)gBOeaK+t<-kYgF>zqksxN2W{;z6^)^4>q&_XW+vKpDb7rd_ zZ%56;z?Um{pJ{OOrmu!OK88w`MqXhoC*urgsBWmZ#qJumYp_Mqpul0cJOwQ+AF*4h zEk-)kSY2E<*nmdHFy$iWI5knFcnKN>p6rb-=M#3}Dg)SnmmOcW!MH6BZm%BC7JZ^F z@~Whz*1o2=^!Hb?Zj$40pEadlI#IPN0BH^^mh^cD;(2|3=D#Qe5VXLIvtP52iLX+} zGuqMG8RugUxPj~ZB|)|LK{KZ2uXh@e0ULM`cq|uKUn(c0zGv1rgsR=Cy?)gGyQ%-3 zE-rGQ!~0}Y)6jE!ra2GLt48>s3Plu z+_4J#^lwT$|FAJTpc0cbF`4$G^^%nfFkM^f%ev~7+5AUViGN$sI90uvaps-EUm06u!(}32WnEqOjVY-g&$A5M@T2d!V5k* z7^ux{YDhXgnjd?;+oL2_t^L@*pSIyywJ*P_RI};SR71VoA`(C5ZwD9ylR-0v$4i=L zt-}c@-Q3-Q!1eWjje~@*}_(#as|IJw)SzkH=%bZU$*Hy&L+F*3NfdTe^5G+2$*Fb{$;`!^Tb_mFh8M>uTq zhUf0s?gtK!pA)CY6W+Lpq$6BZZP0yxTIaPeoZr zjyG4iW?HW_`tgdX>Y~?1piz7m^*ir9`@6#Gsw(6-mb@x@3h(VK!yG_Z=;&|?Jo^+l zr7^{2V<{_-omG!|tzf1+AmUJm7CM^$dUco}IJ9g{CejvCC)K zeym~G_~0S9^iN&`V8WB%fKAp;qY$l*PP#0 zUBK};LGpmKQU`EY$m*fxvI(UX?S>15HKqF(Nq$b@EwxboQ>|su=CF+_&6zmyIe(^o zq=9$aw6-R2%=MyZ>WHH;qN!LP7yXr_?Qi52&2r);4A^`M7jU_@Ig+f2fb7|Fq5nG+VO$8YSC%=K+o zYir^$$fN$;?G>(-yEWxvJsK3fFsCH*oShZnbbRe%f$)kYfA0MzLyFq?G9?g%<-hGG zU|C%!Ja>V76tcR&1fESB)njP=t{!Vx)PcY&r(ce7lcNhFkb4=_*#9}O!kNh2@l)|& zI(}upj+C~XKTTs{EuCif8XBuhoM@-XHtE{5v$liQ#yktceI~h>dQfJwK&c{oJHH;)_ z`FVcvryo_hAg0#EsjWB@F>1~0o)|sk)M|et0Z|DdGM?^#4h_)GL18f5XodZH&EeVz zXhY(Nk&t~M#_jZ=u=4xPOxUrQt)~sxc2&?0Q#??%L$@w3qbR2UcdIEis$&SXc?!u> zy^CHmG^FS+U6`v)uE*d1>_?O7neAB1-MRPcq%AZrE627MWZ>HA7`ls}P!%n!cki8? zIjxEeD;wD9_fFK_XnvA3TI1>N%=X}DqmKMYZ+S9$Jr2SU&$gGp2j?>XqC$ZzLo{7WpT|h(m5by|M zr~4f&=2As~dM&f{X)~f35hWl`66hf4Ip0oQvxY*s;0;oRbTjMxT0ZC2wR8Y6p6XjS z9OS|6y|cvquJ`G#;oc9jAQIqFkyDe-HJb^iKuf}&2M#4>(GUy-gQfB&^BSU;mcF^y za6U5DoVy@MpnMejG2o>{VKbO@@6*G+yT+>F(fF>eJt^scB*UK?gZ=0tR39h7cS+ zOz)Hb_}}aYXRbI`6zCE;Ip`1V#{$T=F$jP>#KEND_DdG%4B zpAcRxUG?z%LpkPG>Q}h{PdF_BgTa!KT60Lm`gpbOWO^)qMLoU%xm9jn9(0L`Tl=@N z^NUkKR$5vbCqirCi1?Xvb=vn?OT3V;85^=#3eLBDI&K}l@YvXEu5i;h+X5ipqx8OX zq4fIO%QD0RQT$-Vs+zX>ksUW<&I3{6;m2!SE)K(HRVEyJ9yMek+K(M9(rY9~oT_dM zx;)O<*@2-gXoOWlbQNfZ=?;c#_{;uaE-fRklg*@BTnoz+rNoC>^{~JYwT#}C6&sZ# zfbanv4F}*}HBa0nh3eWp18= zF?v%+iKhYQ%;*JWCkO^GxUe6?GqC4$uvQOday%D`+2HTNiQ+GYT&S$G@*;@M7xRUp z5rn-1Wesy`MoONZ;B-2_kX`P+0rwv*PE!u_-E&sTyyRscrZPr1F_JwQ2;Jb4S%Q{s z*#m5Oe^g1<=)3#w{bpI!HaA1BAl+@Y7KDX$ie zqWBnV-~4)^I$l5}_}SKA+?CO2JcCkocUqB#`i70>&I&vT9UEaz$Xp$;W+29C$-MaH zVX;Y^laxmn2(oA};=FQuY@MH98v>7y>D&rSNREr@_*#~e{q6upZ>L@x!O#e!8Ym%7 z<7!M~!=h(r8HU}Ovy$>yERD^HuAQki|I+9vLO{Ag4y&^FR0w8?3@XXy^uuh3nMxfN)Tv70S!%+9p9qR25%R_Ha$!aIuBI*skZj9RbC;)zG_GCS zC~P-jdt(F8`3yR>aAKT%%qVhHO(B7g8OmBpT|ZbPs=J-)5Xc@{x>2E+P<`xyB!@^F zPH1agMF2Y^;2B%ri>ey^c*}{x>8qxjwlXq)F7z0x4_TUe9uqZMce$y32Q_E-@83Ey<0sC6Ie!#pC}VrB{n#bWsR8 z?6W+f_{5|r2?&pVg63r-I|)3u+1Tb_5tD9fd$zzA%vo>@C%B_cwW9?Ke^EW_q6Bt2 z$b480RC&;GlHxwfM`DXW5b#O%`)Zix&O3e}1ufK6ocrT-&Pt)DCXTJYjOn?(+rw9k z_^a8`_yTVvb>7X?7x*Sn%N;OY&vk3h`hW#g;(Omnlc4i=Ozmx^EEw+#-y4`3A=?7g z_sFDv(GH24#Ve*#7c03zUMPHBKnn?;X}xgO40G9hwxfB7;X9iScOsIGaveu!GmLv(?Cpem8X_^Qn~C~M}+Y&&9hG3#$l#0j>bfF&BSTm5);>5i4Z4S`nh3fIj39X3f+vc9c+VK^c7 zYGiP1-4J=3}4fze5bwnv~85A!eM#J5DebBhncG4#I`hsbTWn>r?rE`^s#Qtc*b%JKc zt`b&QLOwclHSb9;h^!w?M8)*zOdn>jA7GMq-PtA#>+5iT`DMhPqAyl*(2Ow`L_nf6 z98Z_=(6%I*U{m!CMWAG|35?*TAHFuz<(~n}l;I^=GC@M|sqL!G5RmCmz3v-$cE6TJ zQv^N4_2J>Ok8KF*%J3+ku&_OdSXI_rCywL!%nlO3gTNn4+ZcvV8}?-v?97aLQWg6{5tL zXnuQT_Dk7i>Phis_LB=k0Yx&i^esAY)(<7CLf1O{cYn1`hB&RNxWk~-98|(_opQI# z6R$oIv+WqwjNzJDxu+FUjf^Y-R14dpr7UDjj~Gk+LKGHw(vfmKQs$T)eWnc@iY!F# zNl1;dj==4j?%xDxO9+0&SNx%)E5b-Bdh0`vh&#|}ifZ8kzU1|jV87Vq*%VbDt6<}Z z?`afRGb1{lyUKZC43pnvTLhDSSZf!5xU_blr$2H%MQI^iH}!QVyok!)v;^(h#I zn@ss`yQ)Jl*%<(CL=8+|?<*b{sA1#3-`ZO!n|Q+(Iv{@?o61@|4r(g98fxaWqL}2V zzldhhd)%xvd`9~R1CdI z75j4ED)~5rGCRn!e79vY{LGMLCV{3KR?ex zg*aYnQ4cLKF97EP9EK?X)26Owy-$^bXPaZruB;)(c%f;aizg5<*d0YEi7qZLTLVCKVWHe(AB6Ye_eG|hBRcAEbmN5odYU2a+6u_*%ZE6nw&S5a>T5sw<_Bft@b`CCN94A)x@2heYrT#egDC+)#=R0P z3FD0h-3Q}0Hk|zVJ}BS&Fx_+{cdj9@^f%v9ZYIi@bE12Xr58%pHjJ(F&8%j~>Sd+W@JkU+v~d zAuq{VdV! zKxVL`oNfd$Jh&dvb7(#Wk#-mGT3)u-b7OPtoFSmB8<)hG3^uaruiZ3F(2TGK!&%$D z3iLd^gR88jlbAui!~ZW4K8lr4i>aO?d#{9~w#wt(xvkScIgh)hmy~S#i5-15h~5AS znRgG5MU#}M)V+cljQODBtQqb+VASU1i!)US@4XcN*-WkY8xrZOW@2 z#kL6SRJqa?QfZXEZ&Iz=XZbG@j}GC@R$w;*%I8R0vAxN6rKP3q?d`z&EN`Eyr)#$R zbssqt7%8z8Fi+Df5ibGg!UVk{s`NGZoa37U!Ak`;#5-=oJW)v7U5$m>Sw z1Dcd&B=%7pJCrLyNlIvJjrS1>(5-CvPta0yH9eOZf!X*p;{NKOE~s|{iiXh-fa zOE(cnLns7qZCo!!LhfxGzIGlR7_~zYn6_5>OACaQdqk|_Z6C39Uu4^cd6?eIW=Dn? zw^;BdZe(@4k}C@9YhNUWLX^^^6LT)YqIe5|9}B@8rKQjgf&!#lyfH~Tex@OR3CXWt zfSXqYU`a)j)(ZP? zTEc*>D?{bFoKqIm7D6r54_Mk^>%0Qv|CH8?&sOgYTZ<;;rKg))STNqc;Xg1oHU=b#jr=bR@w#3n0&-|rollPQGifFR(!J!SIuS%5dyp#Q)2f79kCVjNi~R8G@eUGi!X1?Ie{@djrnLPEl| zqY#(As>7|`-u>z}pi^>x^ApS|tox7`8mi38tD%WW@v&hq6cR(%PTEsu36;tS6U4l2 z^2(y+J-Xz%C^)lvy1eqJDBV*c0H>+OX}DN4tEyC2#|EW%C4XTYFn;fsTQYeCcx3F$+-Rr8P9j=NCm7~ zM7m!oMd4g<%~-)^OU!1M*ZO$RRNvxQNeQ|kP(UCyF-&lC(LJdzr(@m(?MVsLlEsWx zxXQ*ZE_$U3RTz4@by%nswqwk4WAL?C#S_E3*AcuN`!u|B%Rq8M>#wv=+>})tUbQ(G zgd!EPy{3UPWU_jB+04}WS1Qvq%Cuy$^-HC#i!@KCVFL}jp6rCg>(fr@1ocVF3k zs6#7)kI+CB&9y?`{z7T(usgCc;NUspLP*t?}AR4+QUxeQd{y8vWa0sj2kd+nU~vd%u20&(#r$ zRe9_eo=krR`$@hNe&pB2ndABFCfno~vuS%wxn}cQ^AOvd98c8{mz?x1)w(ntQn?ZN zcRDvlvQLg6A^7`RwVJj|4$i@vXDMPZL=7}?C>E)$Cc`*F`Uh|7<*3AfHz7wb?uy9c`Q!UIMueh>j@2In1 zhOIBie$=P3WO(_hW;*`RFBg&Hcr{H3X4ZMC{w82VCnmf*ZB9>)r_QYO-ey$o(IdQ< zHy2w7w(E(N)YDk^HER$0K#FmHO+#aNUm-@(i<%3PqxYd9l@6+L!J1Vxj0@bpWV)o~ zZFI5B9-d8u6KE|N#2?CF0nOk7rBeWJfSbjlrl7Z`b(g^k9 zRG?OyOCz8FaPpeE&y34qZGVXy^~P{h4CSFx2j-y0{}+3285P&Ib&D1evJ*lG9w33>!GjYtc!IlIaCa*_xVr=?2=4AuK+wY7 zElA-KJcYhh+2`zY?)Uz@)^2<6&%3SV2dh%Gs@9xi&N)UOee}_I^MaUn`xFt|mjiEz zB@L^tw_cjBGzfCN1^hYOITyf3W^n-D#<(g6_MJel#6uhOyH+MQo|;VaVOrbOi^L{; z+gFt3Q|^1N{#>;T2ul8Th5Oa2o;Pxwx;9UY{QwF9F~s0aoo>gv7SY9lb@`Xp=Wg|f zd>qMz*f%*>vyG=?OPckED$UGBFbBo_Ak-%=0;f6i&VW)$zAT+n+HH7K2diOWv4I~? z{o!lgJfMyrTn1zUUT6b=Rz@tTZlis-{SAQ1ul<(wI*D7kJ#;Y{Nk6~7UF*fBmcf~* zr&N`u1}LcUwCydJgt%s#fjZJnS=3CtW~KN02gNh z;He~~+L4?9cs~^t)fsPNdHKl6cc|WbHK~;k4pSnt3zHkWAtsSI>zHjb2hNRJ*0Pe* z{6?MX^=9}EEaRKbPkN*t626Fdym(mmi3}50wYe+!s#_u`PdJcR|0`Y;N76@nvmG~z zHyAE%TH}%C>t;JSlFKFsiQ91sZUc@~wH9&pgkf_8jL}gv*fJVhS&Ockqwnz#mSdT( ziD<5P7A`?Ym-p#ot$3&u9qWV2}>=*9b`iM`d_IE*NMI;CFFP?Pu11>bD<+nQ86stl<+ zoLTcySe-gO-R;ISdgAyF??mH;5r=5h@9yoxIz4(;{CWCtvGOk>x$fD)*d)*Q7%x3-2c4tY6Pk-PBL^SO#Swf=C~qh(Kxq4->eevKxne}M-o zEFF3*hTHq;g(mXT&(#GO^NZBcb83_#g$=y&wQ78x&%I&8)v5cC^QeAYONx?XFdtsF zpx;QH!bfz?Lq{PT38zf}LYmsAn+=$qbK|WKbDx844#fCGht&txW_8Lhl;846IAnW_ ziR}n%EcLGGr!ocGdusg)-}q?s5;Y0deEE%-EQVASjSs*}_f&xGmN)X+11*!oD+LA+i!M}@1CI@1jW&z6Y~n|vd=n%5!evv6 zh7@xb+3sk&^1%>S%s$+HVl$1E!6+IRX~J7dyOa8dKH|)Cj7?w20PFH(o zCLZ$2XcJ(aO>6PqnRYlb0fY2~QG<0XwRcpVKH)E-U7$Rw_rb2-3G;x`Am`!973+^{ zfa&*y*!6pCTL^GU|F;2`0qpqtZ?*KHvD35|3lL|nR2fxAM$yYeovLC7_uayLT14u* zK)RX1e{5dK6@xfYgrJ^ZrQVcn_Y}dX+q%Cf1xPL#sFXZw0Rq>A8zY>~1dGjoc2?S! zCm51h;hH4H3&-odp8P97k{^TH4G`=3Q!Bo1QSpvADnESU-?Xp<`BgqwH7ujWE43x- zmDbx%lDkn=(3ljPad%NCAT9ymOwF@xfq?hr4OZ0sw`<63DOzR?U%F}_lmc>RTv+I8 zxx3gef-=0WcAk)URJ64DWC@RzZnx}X|NDDz6_fvb&&t(bddWXk|0YZ-&5|Ab=!{is zDUAaCNAB%^JG29;$p1Hk!~chOSh^q7`lYjbFR+!4@RoJG%ZMpI#y|?e{gQorhpF4R z7It}m?RnqKYS+4j2=e|7{7csjMym3(d3gfRBH-`=3|d+t4|ph(&ha^2tN-Uj5X;7{ z^Yw6VDpvW;{XW#&mT1PaJ{5d42xa{=Ph?D0`C$k8Ln@!uW5xM!G|uc;e8r*%n?0Nr zd;46vyDrgha!2&0mDPB;i%n|E@Xd1KXVZitGFBBrvds05%-FONIBL$kwiFl|qA$#p z@kAtj8Tx&(#Qa~&OTMHaRY-IlIn@8!UEYoL2nIhq4evp{=$&(T;mUu_m%+ES?@f6B zT#z5|Oa<<&rrYj~ZdjWcy>l+yR^%jwIc|ZvVGv>ih|G8*1VwvfY+~2m|i?pztCOOP0B>u<^}m2IO)XZIC4vOKLDvc zAsrA(BM5!2$C|cJ3SeaetcY)a>FcKObn89)mEEv+<*pB=-<)OqtwNRqK8Hu+hlMM>w z38Vf zFanQ%0Iz-A8rtIpk}`j;DvX+)E$5Db(q{U@8=b9V;Bk;w|37}ji=Qei;B{&N z_3b@L&%4v{d;tclh3RPTjJujox?1oaS#P(!-KiejCm00nUO!2J*=$dIYq!4JnoOPn zwz%~EaN51%e&D6t%5jp>P|#2VYgg)9=^JmQ$=o4&>KW9$+2+_RAXvP0v3Q6KBwWTYN79+=2VwchIX1j<&`6 z2;Xbtn|vqy^W6I|Bjl_N5#UDouF72f&x&?jUgmDwSxVke6R(yWC6+i5mxiExgV#}f z&bV_-sQmFnN5}2M<&o{x0D4^vbeX$V7vtYks76B;eqINoZhp8vNx_xoqO$3ARC`@~ zxi{i@#G|VF!Pe;aVUc(`;5Kgxc&~+@fH%iO_4pN-Y*sI24@=hFlYT{8Os%M?k=A{F zb0WoCq$NPOCI1%0-S(ARcji!vg=L%R?Rz%75K43-hBb%6-((TvGluk&dzbEf)=@J@ zN9bbMn%X8rx+b7RlMk=U%y$`ew8rfCSSNpF!pKye&QgGxv_vJg*Mgm{!pBgx<|=;Wwp+(~)v5nBMRDDqpxH zKX2sesjCTPuNel_J=)Q39t6Yi@z06c-aze+*T!elb5HvQS7XZ;4l@K^4&7{CophWN znPj2eySCX+3oxcPx~>nRp&3wHYw^Z#w5)Yt%TA72AlC$eE6nK}&-@t=CptrYE#G~) zp~|E(ne^kn{^6fN>y7#7XJ6pNFB$~5(+SYo3zI4HaC{OpaF#FmoedN0;NBZZ_#>zqJ2tLD@Vs1BSV5M?A#Aqa4 z7ApOcKUZOM`y;_)wZ|2<=}>DNMNwU*pIWR13bXAkd{XR=mNYy(P$nee{0fhnKXqyO z6auC+)k^WQ_?+C&OVa3WzQ!;W&`|k4BmGy~?G+Cl-O=ESwykq~9nHQB90rFUOpeA?yOcpha zagLrb`Canv4EL)Sn^EIc%C<#!eOiKFP6-%?tygn3Ju_Xkm}(Ha1SBLUO;c{PWz|{x z_}W zZMoKCb0HUb;ITIf6qn-u&Rr`=nDQ+es!@kBg7gmCdtJ6la5&UlIfbK zKf(+a4xZw5icDpulM?gKCGU@Se16j2Ot?xo zU-KUi*ZjVio+4iVd#YwZkdelU59e&uFkH80+_Orx!$m8osJ%%KFjZ%GWhODrpKR(ptQk)qe&j#_;D!%@S`egHT#P_f%NDMN*xbDp4$MTP-q&UOKVOZjr4#p zz^Bjv^Dib-73KDmCj5j9&|e>uy=sj8wtEXHs};8;ddiYdqUpr^Esmojvi3!i?JWY> zFykLs8rhKUf%ZpRe8D^Jjpy%`SH7=tCv)2f5^Y>WTuQZ3y8m@_)?y;DtSOTG=s23r zij@YIKmqmTS4rYgB(@)O!|T)2EX*_)Q!nOz0LB*G+a#Kjv?8u514-{X44bPn9g(Wm ze*|2JEjJheL!!-21pZ$|%|rRE1UWy`7ULQdhl5*;-Khws(w%8A2-yu9=I~XL97hDu z=`^fA5d|!At5I4GVW?gNtVFew(AbR@%z(IC} zrEV}NVek|OdN#F7qFrMlwg9lUq~wMy6;1NX!|%V?78XT*9A+98*ex+n{iZRHWoR>Oh{-c(xb$<`MDHu$ zx8qGCdRi3A`%0s|+m%e!c6(9x9!sRQZ@t(S8rpER9tQ#maf= zgLLOJRF93binj&Md*W;se&WDx|7ubGo91nGv!z{V&4;`~^DiRhy2phDz2BE#Xz-Bl zYAVCw!Lj|JA{rk;X{A<-#_S8r`3_8evM=cw;ibFkTdhay@~7QZRR($7uYtk2+3+yx zL>+!RVVyR8QdZ~t6kfyS!Y9D+6CE&=knWcd1D!M&UOy{I<A__V2rPo+7b>ps- zUHBA}Sezd{5S}B2H5JZLS;o!tZfNb?U@EFJK`)alk!vL%s#v~#0BKB^?58Q!`CdfO zhB_dOGZ3Aql+3x6AX#PFVE@B2x5S^&njZ32jl%$54&`2+Q?lmU2*qboE6eITIKBwf z4=A?%-SHTI)a9@KO%`v9kLK-F^g*2#niycXn=x!wc$sRc&16Ua?iS3cvz$%u(}Iej zzEKpZgAK$|L+!%W;q`j_$U#=#T zi8Vj%cE-Qb7@5xPbuuxP8S17fZ8NlN`Bv3z_V-(;)(D!GV+dsEz=mw@E_Ygs!kj~q zNAc`Sh)eyGP$#blU#&j_tcV=oNJA2VA{pz8!ps{Fg+Bv4xmATGpHd-heiq%?xKL17 zlC*q1sP-0!Gy|MknJv`MBB|qydfrS92v4UAB&q51pMbzWOhg!3WA)UMbn9A z=kaYU{x$}?XUe>Z!$#;9cyFt%;0iZX;OG~ zKfW}T$5DLG4+QZv;8%!z&88dkwUi;Kje z<$WB5L&DQkaMxZISD4Q*kKz{5oeb0*#dfZi{%m5qsMIJ1LaE9kErZ>V*zUTTzW4|Y z{5@zhKLwC*6vJq|(!dKSzolzS6orT34`M0d@mf#&^Kt&j0sg}kR`IwmJd&eFxa@c( zLO5u5k9`%0?Vs~*1h!ceO3bSB?HAiIg!!5}0xQk>_L;Y{=ioB~l0jD(D(0&B8(u?( zBKmJq+H6*HTxcMbO&}Di;WyD+zdL|DovHk(X~t)Gpe%q`b^xZcTbP5~Ws`SfaoeDr zQ-BOyJE(ydn8Y$|GGU>PGf!3P3Tt#qf@>xemZ<6sbif{la3XH% zUO`*dkM)G7|KK^_@cg2C5in|PV?$B)&X{++xO8@T15L7NZ*S$T!X3no-3@kyKTpu6 zC`)3QdKq2&mD$|xq?{l+|BbP#Hmyg{$2phXRnktCjm@F6q&7>;hhQL1#6lqP2wp=p zci2>CYnIDyVNkqxzD~F4kftDe_a$cAt^e-p(UM!SZz!9)H0mPB(`t$&QL6xf7A$^H8bMa_9o-P)07FiMeo)$ z*8)@P{^Ky<*6BF#3(x`>aD@_k9UQ7MUq?a{_tAcZSxl;y8=Hrq& zNoA9lnu4q!cLmMU(m$N!z!@naq};K;CRcE3o(&Ju`p}#l+*VUFG-Lq?;bwS)t0WYE z>=~-$2A4MqA?PkY|BC)HV5=FsdD!MXfxgk$h9HWGYjQ_=;y{ECJ4Z*Jd`9>yS_W(y zs~u1Vqm{Kx)|dgt0Ild8;+PvkG9hS`y!9MA>#B8@RAXvt>X0!?`CK9 z!2P<@JrAA3Im0<}`sgS(oO1C58Ryl+NQws_pD{iNL{aJncaXMEF&XWmf1cMfw2}@p zult-VltiU7EVlh7=_E*bz^&0;*9q+r04G!oYYqt~;@Wx?bZTF~-xV!Vc6iCgF>W8d zBINvK-L?Al0&nSfh}gStk1uxZmCFy(Rgs=}ZA*Q=jS85pMfW~l;`9<`c<*`Px26WW zgiq^&8P+z6VO~tcES8=`2#AY<_oYj!>D#d4FkZF}WK`EK46KLxAT7%M0gPlqq@#U4 zW=dwjLRjj!n!}afcqTpCh-il=32^}4Pha9|dvi=XD`NY)=Z$C$P%=b?4Z0v89*h_| zIlB8jh+k?(9~>UCKLv$p4hj#KyG5t|lJk3;WJy2PtKVpG@`xy{>t`Pm-W`jVJfo+kgP_}b8}%R6#%8Aehspu!DytPLgk!k+k!x3wCrdM_s$x6 zJgk#n-1g%%&QK#lTz;rfSZjIGf;U)g4(^ytT7SEjFSQ*T`~Hn)0XSD%>v3~W!lc+A z)NsWXfE%rGkQmSlBuw!K|K!~`F)b!l)p<6@y)jK{WsUZTywa5(iymle0Q> zFo;Icd-ETN6J|6vUHM+^*_=d|@PU!8=Ms?t2McKV0TQ%4007ZOd69?x{sJy>=T6p`|O@YVmXA>@_O!$E*wZH&|P#ET0AI{jzfiGDJ?bbbITNhpPrW}kvUsl})0 zyTfVxo^Akp{_Dr@lB<=y#MrtkuIuPtfI2PfKOaOt2gFxVKqWsJz5^e-m_{_YnBd{z zwE~jJ&%WIM!0>t**1d__74-1Qi{J=AZESySEeq=XU5W+oX;5d38jHd1Z$qiqZzNBW z&_Ue)Hs1?WFq%K4=ZgsyF?vw;@$(1_5Jv|9Rzg4*kA32tS`U|!_1@3U%(wu={qwy( zpvM7(JJ-wWbcnOveTzlOWw><{C_O34fFD&_i%}s%_ zrL0VmChit>ry%6A>-_ep1=ndI(4wK~h`H_(YeHbKs<&^B6`bvh`@5B1z zIwC7`_^p}p%lfvXN7nINJ$~5HXua)F;Kebu!M)a4c(^LU`%d8u6}z}n&`!u*E@|Mm zUTSkLE7>Jc&hdBM58~1lS_ybMELbly9>}jt8oTsV@k~Lb0w2x3{l^x7S@4G_cgjo& z6Nmdd#iTPP7Qcj3Zm7M-r+$`&!oVR_@MX<4ryj~q#6Z;v)rtC&WBSUBFrXk=grd3H zJ{S#zcY-&HxY})rhUsY@BJ_+)I^pJrgXogO6dmBF7~Q8>>a+tw-KlT{t@MeCv`_A_ zp3Ik^tk2N3=7%w^pY{j)?Vtx}pxGvF-QL5&{(cEnRaIVMPCNu4DZ+oXogIi^B0rfB zM{R0yyLiLP%*<@J_OmrTozMNMx_40Q66Q{omp4rEW@m4AUZAq3iH#5J*ic?<^Sgk{ z%igWbB?H2p&;6vc^`0Qx| zSO=E&jW^xI_WCgLz53=QKqqs4ac(E5=r0p8FZIP#UY)j;BV2$G?x1)9&SaSu;cO9+ zX(?naa>CFmou@GhoYHXYvr0jk}x@N&RXi?211j48g{1YnO&I6e>9T&j2k-QIQix8TeYN%4oa2k<& zO@LBSRqrzlVA}A?Ug_3PV&@Op9?wu{F{3Dj3`)4Ft49Xh957UUcm7>Xr%~{%_;n(m zjG~&+H@j)uM81ut1$UecQgRqR)3cZn!)HRh$RhXa%cC~%sj;;rZ30#hB~}P~ zu!qF9>*X&Io#G^_z~)+m`0Uy_Iz*6H0(C0Pz3JjLq|~+XLCn#-i$0C_+-+X|k9YdT z?lRxdbKvN3nTDa2p^()boK++=n+|A*|qKw^;57&=CCELKVMju5O7A(QdiJm`0w;UVv zS=1MMd{Q|3Fu|}vXQ2}^wN=MjzEthlH_kG+BESe{bVcNu5MFlF#Mb^&bSn2 zEi;PFqt;#J{wGaDUyKJ+alcUBjPzM@u()j1=qS6v=O8EYnomDB7QAQ|n&y8Bj`6@y( zdHne+krXk~BCO@z8%%~Qqo*<;I(J}e6?W9A3_v6PtH{7l6E5Ga&dob-Q1`4#>nACl z+phIMM%fER6=D%QMwdm<^#f2{)$mLuPjyQR{iJ4r+s*}2p(l#(Vs>&e{hqV$m_&KtPwWpeSw`miOFm|3 z$`uT{%f|P5%;%*&qZ>Ipb9l^p42vGUrRtWv2*f&XG&CzH>p>>ih}Qq}#7>vM6HEI; zP>HMLFct%M%m4aV;zoh78u@ib7$$bFW(R>#>@Z7TCaL*e!y9vUnos+5#W3p%x^!w|PS+ z6Y4y0+*tKJ2G5la4X?1Nq^rjbcUb1tpp|@L)7~pW%ZXCT_z>~V)q)clYrE#Z+-jc$ z@3rN)Wm%7reFkp^Up=&p{*SqHu4zm9L#8@p9%9VB>!%~u$Rko!Nz-G&dl6)?JH;vw z{-rr)jy**#o&8c-z??y)rj81vHUga5d*!De4jA8C;D$_|53nk*BrBo5QH_QBQs5w_ z(9G{{$YvVuE*^s{%^>AAE}MWTDNy!i13g#CeMm)3-Hn25yE8AMqdwbOY-6aep>mqA z6B2WmPAolS6hX|DCg;dc$z+&gorwQomx!-TL3=~=8J{*^Cw9M5LPA#z-;(x}XzOB_ zB5S3N(GLWk_q#N5l~+?HGZ35OC)vlYY}+oN3wkc-3&O=q~-UYW-P`^@5xuxe6Dx#Fi*idBu{>@U#^|AMr{fYJz&6E}?J? z{>d8ZB54jptAK;4g3g1^YqI4IIF9LW1A2Y7o*8qSlMa+X?zFY#axv zOJKLJEkEGa)rByP96VBnDMrKCqUcKQI zM$@fK8f+HbhQ7v($&i+;k}pbZ7|iw9Adb=hdV&q$38u-(N?*Z^Sd!1F^{Hfr4&syM z=r!VpMEn6a;}~!=B4!X0SY}mEY+AE*U67kr)-Y!QkHh9*GEgpt`T*s8X94IVdJ$pc zVPJ0`n_=VW5`5Dvy%%tkR@sL?j7}&|Z@8HPvg8IV>koCr-4AJ53=!N#;P?1W5?@G+ zAGZHV{J;B-f?P9Y!<;od4tvw3bgE^5FghT3d)iq_Vnp=`db`w66&y3Lba;C0X>}rk zgO~cS0zf?ebz5O5aNE*QAoD{PR|@rNTPYq)*c>7PY0d%*R!~+L@N8$5ATIVU#sl4R zV}fmMoC^1~{(#Tc236J(9a%p>?`8(Hk3s)-SzA$-A6R~739&7oAs5dqJ-Ew!Cu#h^ zl3sH_IFLcK6L~w{|HF#;e}VXe=y5Uuc$Xggvz145Kyhx{x0Dox`V631;bfuWO(Y0} z`cH%taq%Zq<5>Db``9l%jo2QhXJR7Zb*+$GwRpC>rT6}uL~gqBPZxR$0-*Y)a-)Yr zalLytzW4kkhEq))Mz=IcMojE81+jVtg0Ns;5&gb!QOT!o{r*j?;v5DXqDP%-auL_G zs9saPowRo30Cd3JmJ5%Hd=IcOs37I;E}KBD13)tL+OO=@aoeFJ-P!GNUVnQ88*!9*$ue1Kv#<-ULQAV zG3pvZRoRoIBJeeBh~r`e+XQelWpe}PMe%rrjlGc(ouuG^lQHk;TK~j2K?32KB&Y-* zKx6(ezMz83558=flWjXCy$t5wWEyzi5{^;3v(~zKA(xyX7W#V$*H_q2n=<@~hG_S7 z=VKXZwzqY)=!ubD!5DQP_Dmk+Bcnt=xh_M7SW;1*^CcbC)Z{N}j{Yd4h$3#?%fmrg z@2iPkplTG^vv$GzvUvq4HM=VW3hsc??E7=w`>FR4ik&A8-FKbb$!%^qZN>MW7=TTg zqvc1Orc(LD(&p*)txk83B?cv@PzA#QDP80t_rSN9XFWKnTplf)-czpS4GDEGdf+%L z$AXpFxtznL*dNDimr2&Gjh5P2{;dDLaguk7_ zaf4#kAw!Hw`J5?(CC0I1KKxv4v&up>)qTo@$8_?!#f7XIccyF76%fF;=M1iOmOo!w zR;Jmvpr!VXsG~~s_{haaie7Z=;Cz&`b@3!OjB;sO*2PX4Oe z2+5kYb!ABqaC8=G-rnw-!ae_%dm1GEB14zz2H^23mY;lwt?m*vd8hij5r$BSi9177)m0I%|6+U=lJwV#Zfr zo0G;zK@1YiOSERl2(Z8huOtbbxx>9fq{w3L&mG;Ln>Saa^;>!HZmaI)>zAPbVeLK= zp}Y7K)>5L#TC8d@WLM;}1;?(DvU_2#YW~3Crorof;=C%7C-hv6pNc;2q1j+Q+7-)} zHZM>))_p>F9UV-QtW1YSo~mV%T)eD_P~IHI^q?)Aw`KM~Re#WKZfHu>@8rXwPPZ@T ztnxJ2%-jYa-xQ51EK5RltY>OaO?;L218Cuo-8%9s%np>#qa~{52KTVnCJHS-a{xy) zUE?~=R4m8{-~-%N05!&p^Vj06F8BuZJjB{UI_NNiyh{j_3P4T+Hlz>|jR` z)89T#pWI>gldEEvrpD$l$QDPFWJPuJ+k`l(jip#Gq zAdr!Ly*NW28%|p&9TD0RE`w`U$@{#q51%nR#cob#I8yGSmVHabcvN4?rCD~FR5s1x z@byT)OBXfC?C!ZmXG*Fk=F~T3g^7%Kj8EhNcGb(wQ%iod`BvXt<)cI)Zwpcia22G) zP!mvC7!Kxty()#3QBiKI5-08ky1>ZUBzmm2?X8szC<*9^vgr&y-Wc(1JliR1(~0X% zCDJ|Y8-7-#vVgERwkTmw5`&X6{B$jUisY>!S)Vrk^&e-|v3>#QYtI)+yNZd!^8ys} zi)K6wR;xWH{yZUuq)SM6%7UYuSZqqd}xuZ%LG=S|uS3=DHG-;RXOplNC zn^z=?Uhok@$3$3?gJ0BgHcN<^C;jd~m;+ni>r1*yNSZh0x2ZQ-sAbS9v;B#@>Ar-8 z@r8kSyNX=oF8FE7V*7FVZu(j6qaIeHgklAk6*(6=r#~Yvh#Yxl(x1g^jJCgjeNiN9 zYvL~L^N`tqV|aFoQ#*#g*uYgyM3j{glOHh7GFO_bY=pTeYd-!Q8W04)Bhpt%w(rOp z`d{e1)A9I3@}qy`iRKji-~??s}#YBer3T^^@?T6m?RE8Ynoz( zqv5N=`X8gsL`Qp?U=vr}s1*8eaLmImoSkdp&!f*fPvg>M6?0Tm)rp&l}u`R8OS)h0Q?`yE2NY;lWHFR{tIi@yG7!D|hKfADE+Z}4a_-5{+m z+Ix!wq?PI8G-m68q_Dz#aZiZqe&wqiwJG7@m56vy%VO2N({c1v{Uk?y&|0wtg7U;O z?=>ReWcnxRz~cyU`w{%bWw{5+ekcEd#g@OjFkm{XM8b;v8GzJo%U*Ge?pkJOkma|B z-I1nm!UqcbdSUMK!k@tw$NqaPnCUDU!{I?C$?rbH69(-ILxb#bN|Q_GDa`Fro6p|K zTR50d6uu-n+m_nU5-s+NT30{f?Jq8FF9STLmA8=cG2!Vjn`8S!v87wuCW}$4{0uZb zmp>sg;5+n}THXVim5Ic^igj-#_EVCRnHf&hlSv4MLvO~r?tH-{{aGT|TT`OjMj=ON zZ*aIXlE4#Wy1ZdVSGL{}WaTZSJns`niz`{Cg`PIoBHo1dh;^=hl45DWe|KCblk5;< z>pTa)(cEIe)b+Bf&7uzL7LK2a!ks9Kb%nRL+J{a7qU?)(k(od0SjsEPjt|uxr;xPY z;ImVkY1Rf2`6h|6Grw#DMD2H}Dd#)Rk=E6>anIeVy$Szs24^xAT%s_mKQFAZE~qV+ zCzGl|2Bjsg`tm|ayw1}UmU_;PIA3-35Z~{^o0sMqF;g`??K?s|3nv z@?dGQWs78n&;ECuY;7vtF?)_w4@hg?GXWGIK7jPyD#+c|qhovQcGyo|k#)}ay!pDP zNi*}$@%Hr3@mAk@UMf!F>1b-Y4fHeuD#`7~mVs`8Kv$AB@6BYBB1%R2%&Ns_RiShv z)H`U96lFs`r@NmYRWB>5bYfZvTUmxgz#0WRwIxf}k;7$5(9l@hkzfAy+Y)QA^uw}U zGTpoG!u|(BjIt&a=~7)nCuA3M0WMSBJE=UrmHu__Q=59Xb-tHjjN!d3q+E~DK~OlY zX6-9nGTiC05l5lI_qJz#B-uO|I)JXK@#3ir(>kmdeyg)vOK_)0rJ;3CY4KaN~>YKL-n4u&PGm7gs8{6RYsOI$|n38|Q~tY&AW;GOHzh0%Naea?JOW+O@`vB9xIVpxKX$pJYFnZJB;}-7V zh^jySVh?yvwV$*~@4n9#8uF=9)ejt~La?WBT`T1LbZf%R*dXI)EKiz4ga)?4)_QR#Qt(Yax>+Jrj-=SSmQblgf zj{0p>x5cX2*VpmcVd?t`I!2UsN?z1Ov6lC+E_v)YX7(@xI?`9v&OvUE%UEIX)n*^h2Cl$W99CI(hlL5{&HbgU7!qU;1Oym!=wG5*byzJ zdUu5pI&szOHqi%-qsosM8{5l@f-GNg8TB^8jqQwXmrnxyf*Bm-69GVIdZdu?Ig_O9 zKCCq@XAT>7HB$shB~nNW3Gzta+-Gi;(`w^3g==%;=f1NXN`Z~7g(fZ~Ec);PeSP!) zKDlO=(WVPCvQm%j2e65pE+ZW473v{gj6SzWfVoP~+S=Mxtw3)^;HFbxAE58*|Gvv3F9nL2xywyJLhGJY-PIN^bboJ^O+G*>nMhbiG)pe zR8XLbvZ^lZ6{_0)H#CO;OxB7+E!+aOl+SipcukyVm|=Y%mVI-y5!tN*xrL& znc={~0kFVnWJxPB4Uj3fouI0NI4}1evUxIPt%q=FdBFAhpI8ogf>DEfa)CvkZp{Ol z)!c$CLQsk`2ZIYMa9Dgg0h9YXUk$)fKt~+z%7&oljteO53ds7QM8VJ(SGUj@3U(A9 zAf%o6?^>bn3orgpCDH#zu~fv~aBvq;A;+ZKdb6i{e|2@f_l*<;+Wdz=0I(pD3Fygo zypw34xXed-1_|i-7ez%zdI4hc2ehjey4Ulwv$IG+A}!UqDH!na1D92P97`+fvVKi_TZW3>o~6KT0P2tYovC(U(sE&<_t>5a6M$ zm`ZIYVM8CQ=LjDRHKo{HJ4Al{LG1r#6mhU`z?wrf7Nk>|CPjkob&BfG?UVFE40QOL3Jcm-6 z9pr(;KYl9FCNy!ggOQ2Uvh6j}GM;&4;mTCD7QkU?AH$iF7Yn!#w1 zg*zMJ<^*=j?i)0xB0vx37m{Qe$GCV1glT_@^ZtZsjf6>_BPt9!&#qH8U`71vMIr?= zwfFwP9~39Hs3RlKoSe`nM>|)#zB{zkvu}~^?a^S9&|~u^1|CSz&o5%e%Jz2&FLO^b z_*emZRcj@;u1;Ip4nqOi(gqscp)FNrK}`{YV9o({Fg8Qb@nZX?$*Hw2qQvqD_ZCB}Xj?R<^>`6MQL%-7o|)MaHG zBNCJ{uNMWrM>dQKd>`a%oP@mh)OTddD9;*YU&GHV5MbFXZVoDmn>o$2#$0AHQ`fS{ zEK{d3>#tECoz%;m5;yzS>`6 zf}1%5-}|8dAvXOdfY>r;$;-&23upnrB$+Sy`=l5d{XFl1Za(L4q?FJZ=2R; zV#Q_5+(kq~QkrSatz_@FH_XumO>$ke2*OIl!uz6U4h~;QCLR{PuA{3g@RFjpTk()v7avmI9Hb@MKJ>cU zQQun?$P+i3=uHUSH(v!trM=|Df~%`vw#V$)$CTZfCAJicSD2_Jcz%dE^ve7^F|mb4 z+`s@KJdDYZlaZ2^mEINCGR)8d{)DJ<93`#;Dbr z(R6cXaLvxtiVyvmM^nyaIcLwyAgD_fIR`c6Hls}G zbZA-aB*aWjazq>pv|mquhy(`MMic`<^lVQ+?2}^sU+*Gd9CdMtp79Bn53J|}c)PK`{i({jqbS1qg0hOK_zaD}sL8a7 zG|wEpjJTWHG+{TEb#jOwq;up6==PZxuZNhva1t%8aN4>Sxf$*5ev%Qs+)%mU54vuy zB9O1jIZ*74eYJEU!D|S{&04Os<$7g`?G#)g#|GyYQ5C!izR z<(wpH7y2JAuObN=&43|lPw|U<79z*pum%>os?wp`vb5v=fCO}(SUH8KO7M>gB!$yV z+a(*M)PcN=L$dGxT98b8OlesiqiJGE6s10U?$?A0G2$}>$OqZp z$`0@f?K>?wQ3>1KUULxA@)R9gmD)IdXcm0lB-&(ncldRIE=qjh#ivu878Mnp7p%m} z7u&=*WcxnD<+6WptznneiJ2K{ih}z3OC+4G5%e3W!4syv2D1BxU{l3nTbnsJ3E$R*9n5`0d%&<; zAHC`eRp>h6IAu9ltQLY36{YN*l$?tLwwriO0{9M zU1tYgK&*z8CR zmA381m$z9^{naP+Eb)3qzb4VC)U{-?lg~z?trRi2JAEO2JGoQ2A-CF|kN5Tgo0LjR z!uQj~L`-J zPm%oV;iZQs&GAHELu&6qb>IJsh+qwoq7H&|+l0ui<#I<9j3)>)idbt@3nESJRV1xl zNt#DYkXG;aYM8K0q!X+-556L$%wU;>j>wZ?@KHsj=TuG=eDTu}@NUYRhgHYRrH}E< zV-dh^+W&vC_tsHSc3=N6-l*J?79b!kqSQz?s7RNBf-rXFKQcn?~ zY9FYolD$d}0u#O&O)q#J2@fjs>R;OVe%D4sdf~A8oSFTtJ;EdGGX2%Y`3^cS?8s&lB?_DD*a_+$X_IHF)5YzEk+7nQ43mMW(g)lC~Wt)NRcWErw# z(DGH&<{Ly8JPy&(A-A>PBU0Y7{%O5ON>|kfJ9Uy?(zUEBoo+iI7J68jI>W@szJ_|= zXEqrAl%2c!J@4dOzIxNdO|w?$x?oH%m9>gjgAEn@_U(48FlMIfs4KE6mxe-~clRtT z6I^sGZJ-A>=f{7k=n90#6P3y# zxwEB**z}jXnQ?F6kucmfF7(6qtP~A&N>j(7&B6BU?GP4u%8pJ{TgttSiEaspMzznq zR6E4iQ$L|_aeK0|a%Do)lyvvGJ~~7+_Lx7Q8x)GhT~%OJYk5dcz3|FNDa^#!XqEN( zu(a1^A+jeSI#T#JdqpDR%;l!izT@`}pJxk`Cw^v{Pqm`k=Z`JZE5G-$GBJ_!-9BJZ zYfpgJ`{IJ2qr==N1}e1rJCxUYF-nY$3YPv@Kr;K5X_)Sl0=R6=(^HKoW<473VisML zZ4d#AE(*XuC`gFYSI2%LUBtXd+9-Sdg7v;Hu*H=kzXE68-2X8hrd-dY=+YiZ}&8Vje7vw)&JfEEO zmvvTy@zSTl^WaOW{EN&6lj3g`UbA8X*KE7&vDu40w6?%d*QD^7vHNeFwxBly3do~n zTq}s2rbqgA;75PVwV#_m>g4rXj&VJH ztC_ai3wN-$wYBGQ4lX44^oOT*N~2N^ylBAq0-dGkiz#8}xm{2+78y%&60hhqQLpHd zTYuglj8K@pNY~@miQ^q^hr{~Z1Q(Bix*scho&!ro)4C~ULoVqK%<> zd%LXGYG+YphKuH4rRz$?feI-}YiyiI>|l<(g9T!L(`|YnB0=|SO3Y9^<&n41;vr#J z7m;}sh1rMIlKx8h1yS=1QDnaX+wN?MAa6LmG(P}r z`o={9SxVw_Oa#fJfHtzY}q=DGV4T1K5AZgH8q?) zHSPI=iO+I!n09$Hj3YNCQ&U!Nb=N2JQ46o1ePou92JHD|B_|@9Z?ctj8lVDUb}DCL!9S?2 z$t~=W!VIG^D1XI6{%hr*a`bEin?i*30u}>%gpklId%0IfS~u(Fdf4FRy3e?-!+$e0 ztT3ECXYk$9ot5ay7Z#5ka$J%5N1yk^8c6&oWmjDu4;Iqf2xY_|H3!#UEPVeqF@H(F zZ+ovR?U`-Lr4>89M+B1*0Lc)C7B3k;T!H5f2iG#&f5;cMj^0uJNjd!Q^fR zNy>;?O6k2=N23=O*1HSM?%FI_?Ayr{hV3N!doEGR2;0HT&ld<)*&S?`NWR5OQuOYg zx=!U%(I~DZf-pVS$vH9#MAwuIJR8Z@vmfwS9!kJD=(?6fDt^({D@{na(xgFSEupR} ziS(_%6de&nzrlFyhO<h*2wnYX1Tj!Y(5;T9+B(0ZhT_jv^C6lwGGP=b2R2J=i*BK7F) zWsw+)VaLVIE-S&<$9^p8Ep)52EvVUd)pU%?TcY~Bb{?ol<(FBIgccp@Bp0aAg_7t! zxyoBI@$I9Xqm%<7!G>`V^!T(@4^yg=t+8WcWBZ_RqCF$Ea<_}roOr5j*Yo0iu|I6k-*o}lk2J4; z*;#0|8Y`IOqPd&osy??0>9^T74Y}pF6GokpN_+4|d^J4Sx5A^7lUU<%k7|0E>~Z$w zCH)&2+ptx!X0|%A*gH|)GE}*_45%1rCqggI~K+HU-4+Cv~7;S^*W`1 z0}=gJ8wGvwWukrqs(D1p&R9Bb!;Y2mD{*`!TADeS-4!OVB2e9Jg~#9d{CVvtwmN* zG}#owNnWC4-&Yb^mk}|UqG4bw6eRiyejLWQjna2br%dSxo1q5#L8M0$M2UXwA5ZG2 zhmqkDHZQLI7abyCYiKU7C=2RRZk$ZI##7sW`!RMXM&wy*-qzYZ8QH=-KkcBh0(U5R z_?EY8KFTB`V0yC|op@5-_{`cQqd-*|Me%IZOH`)rurf-a5=mCccc1dVK$m@6Llu|3 z7HdWS9FMZ^U3ut*w10^Q-5?<$CC$=A@^Er)K<{}ZGe6P&GWseAE1N+`&zcGhkoR0! zFp?7sOJ(~{#|C)GK@V>SKe*So3H?BhbUE4|9==&{?uSMCD##oJq=L^S|Hfh$e2@py zC2mQ}Bq$wf_V^?VFJ0)j%haxPneR*h8C3PXZ}>EC(FIMEp1K6qR8=_wqWt{x=l>;I z*m0!Xt*%a7I%xN+x+}!L36-q_Vpp}x?4E1}hJ}Xql1+W+5~l;3X@ydcZ?)L4P5=Zq zC-iBH3YeS{uUpN3k?oP4ovij}daew2O4+7V@rG=~NEyioyKpb_qrmA=@h~@(b z!yknW-b2v8_2@J~O2@$9Vqkj9DxGnV!)pRimB`lEIQ7b1OoMKrY%(zEkeJ8Mm6iWJ z%e90EsttSdduZhQ47a%}NnP_2@j{}akgKz$Dr>;ZT2p~H;8F9B1-=evKOlhnbj^@r zjbu0Pyoc5H(!j+FJj~3@be5SW7r+vdoW;BW0o>drtk>M{!1*qg0Km4eH=?o@d^yie zm9HWOZTfJjI0T4ZqrPGY4TaBPWgBFBc;Me>MDhG!T{FByhy$yR4Ds~vL1AN>Yab)2 zh=r9-wgi|FzI)~o*x?5&iw>eimm6B<}*RU z*r@$%45)Q!`ife6b3$~tny6GGGc*)a-)0t6L&s2@-l_2Ny;y#*rH#kOX#sZ_|nX^P5jmwSqN+k`Abdoit z`yqHdACFR}=t_S*hamLt8>8^K&0&C&mAH6x9FTJSR;2Gr-0qw=5H_?Ix(mYbY#S&M zPX!i1o%VU_($AxB+huJJOtr%XDaog2jS+rY-x#%sk#9}<`t zWHvw>ea~MroB#e<3`3_{hjX+op|KMvNwxRgL&SQ0qVCHwDVxUb9wRliR!DrwmVY6b-=umGUa(mo0%`t~-AkJg zMnxSYjD?75U&Ul)PUIQhi4}fC@q=WYnbx%s5*N@uccbNo1D-lzcbe3dIH8vrJ!w8# zCLtr|wI2mB@*(UZ^DWKLajp%o=H{JOJ7xu3OXR-weQc|YJer7JH@pm;%8ArbD78!ZTxiWKmDa{epJe@rLiEzx9)TsE_onFk$Vj=_5YOaC zu*CV_@d}Thng`Il!^Aluhu^SX$p0BfJ0=Hvuyw7w!tPD`r_}^z`u1V7W1(f%ft2rX zQSCh%>Jd!LVP4X1^K(4+(YG9*+Ij{9D?e~B$w$1={K0w$CzVhl6GF>oGRKXsCm$}Qj;{I>1i?XXn-{!zRp#cT(A=nEWf&W#nW0s1^DJ|b=BG*Bp1Kz?9PWv0- zFIneE+PdxWDuy{i1k@cH@<#SSUZ?4k#s;w3n~WNvTZ=G|h;tn#W{dl=r6kgeZDQpH z^A-tuA=Ela>)IP4Cs0QN8;Sz( zu)`kn2DGIADisabgXOnHn|@6(@FR5Ko|eP-uwh9Y8$)o@(j7>h#0_$^frn3%=brmT zXp0(N!sy#luEfZEQ`tGrPe`fpn}*Z(%S%2DUX>Vqc$%eW?9TDTK3%O48e3EQhYZW zD+{E{KMA#zuwM2A8Fo@IM=SHV+@vPKaPHr`v7?3@YXM_L`pxHU(13TP{7-_mhCQHMp9aFnzeV-)+HJzd!i?^X{uSM*4D!g>Z8D2CZ6LtNm1i~qHL>Kg^tZa*ccnzCXVYG zj_dKP>#?EhwjpRu((XPebz=!$MB1=nQ<#~k^9E4h%H8(%cJFT` znZ$n;L!YYRDSXb4iM&$a;fo(tx3$;@(JZwFc(7mKa+3F>M@kxqqhA>8F#`5?aC(2! za-pA|ZK00B`ct&+NZZz5a3+S*05EdglIDuGfgkPLkQBToFtE2*YwS*t1+Y4_H-&Y= zI^wxdJ}x)l<@^nBijJ_Nlj!Z;0*q%&iI8;TwaMNoBhL!logIUSFc~8>?`>2 zS1AaDk_Jjn>3G9`0qp%pxf%%JOA}}8TLKPvva+(i;n)*gk0`w&scSdV8=7_m~q3$eOT#PX-9Y zo#ia}>>5w!E7r=Y?Qj3WT8?STP2HglU*1tZt+)Nf$KTci(iT9nCe{uDV06Hn{)YoT zN!!(M-b1-*y9{vSk08dJB`<(-l;6&AGgcVam^*{=h9EQ=7EvPOoRx+KrS+Bv@@6q* z0I`XLFwqLHxFTD6KvbTWedFn%I6uZuz%#~<d%zo;o%X99)f&Df8y?TV7$gay&;VL1l3o2qjw{%vB1{4!6_*?RzD_{^&A$+ zbEH_MZMZ0GUL+cQcbI(M8VMDkkLX!P-41J+_V3QA|MKsk{jQ``+~NmCr%iEk?O-gM z&q2$3m`(#%BiXtaG_Y&ly3I2yG8;;5_v20Fu6N~btD(ro0f-mJ#>O_eS{|A8zlQBt z7Ot2>kE+wg-b~ntx<|;*bdWL1UhW%3wrEijDbQ0gL3a19{(_pWSISW5it3s}hs8Lx9m;y)CMGPh*m{w)acWvOOqf%EXjpDTpu$8MzebDbXb}*{wyr9fYYAi2+354Zb z3pm{fT>{wh^iZVjc?;d>&;-1|1Dz(U$2w)XX9dzHk>%BoY{R&yHtoBwe5?4J4EN%i zu|f_N(1XM^C~qdeNdJuarAK&~s-_DD6Yr?POm$7z;J2?3<`*@S8krHjp9l&ivNz31 zQyYzyf8yoQja_F6*kj_JIcMUrh2ifw2%9ha$i(cXKu`lc3 z=oo|^IwOHYudbe2^0*!eQooD8<+Y1IF<@o|ZZvGwE{y4qm)C#lk32}8VGkU78|fKM zwo$49=y;~RId+R|q%3tO#d7-=%{TUrT(qO0PTTl(c^)iRy6oSxQ@}40&yvQh5E+{ABGDv4wW9Fl5?7RnnDVWRPhkqiC(5mwFYt= zIfgdU9jy_Z-ZCml&GMxZs`vy2^zv-%*(@ndi;)M^ue4MLUAf-P=1OISqgo<7f(vL@ zrG*n-LeV~8k;moA_N2lPY&Bpgbsb2 z*S)oG)_OM|e@}guwo<+`x+DoynzIR}lBdg)ujEg-_3qpw&n?7yTxC|xNA$RV^03FK zQJPmFa`97aw3=?0>W#2gZAWI07pL9winR^c@Y&LAi$c{= z@TzQTl1C3dpRTt_pl6sGC*Y6xjeo$JNz{<)e!arQcKtvtc1}9RJ$|T|`H(Ucie%*f zl)2x{-9%3rJH}p8`f_07aBpK{rtKhOY(FEr<{7N<+D3!}sD#~Kg)=(>Z(*%fwcF}Z ztrY{iO%xm6u*!PRLyo)=dh5nhP?|4 zJ-cfH?tqhR;4X0k&@7O^NKQNRmCiSk@frwucf8LF5W}UilEN^))l}w z+tiJDklQ0DR``1^J*-KmmB}*qC4^jJF@SGd+uME(p|u9J^~;FX$=B}q$4-zNgTLLc zF1j!&bYI7R1Jmn>3BsFv7GNf>_oGvklWP9kZ|x6lW*P(Oy(G0N?vBd|5Xpsua+Fg! zP6oJ91QbPMIUNC?*IqS(yPx}Ycgz+2Il6$or{aO?o#*$sPTCjwTW^sJwsA1DXCrTcX3 zgGId`wI~}6_9f6@^sEEZ$umhHbkmgd7xAm&6KKUA9BU{J^kJ0yLvoJSmLfZrT4EP5LwTn$Zt?EHAkbWY z8Fj4S0AO18tc3Nok%d_IE*Ujq)$a{A*b|VwxY`-;nZ`9UY00FI1nV{}0a+Da+yP$} zEjH%H*QeUIJ~}TC{#JD>o)-JYtQGYvw;txk?r#rEVso=J|2BQ_F*kl3Alj$AT>w@I z=9w>|+nuBP0?uJ>jOqPpcQDU9=d)1)<`DM%xk_%@-RbynFT_KOz}55UU0lYN0#-PF zb5!MZ_vuQ$%_5x-JSZ@H5J42RsLSEze3t@C)s*Ezcgj7!S^a37+x~Y)16&kH{D-N3V|6LW_kS0 z^BTZTR_^C+zq?1{p~J5|DRj?XZvDjA6?6u8z^LOU(qMlN7vmGWEJ_&Ppj8b8_KTN? zaVsF5cJKso!zI{qw=m9$9lyoC>=i&<_lWEF{QL;X$bO{aiCNwV*bqcv2fshrSR5{~ zN)k93i=(ug7UdQSJ#6a@0|{hK@`rt{=5}QZRlWCUW{NT>g4ill7l}|B=H#^WmTM z@Q)t&M-Tj?2ma9m|LB4LSL=bQSLHa$p41@K1-vAHGxmRR%~ti;0JLv4i`v@Uv<65y z(T!r<{P_(kxJz*conU}LsjP*;PP98{*o!jc1L!>Aat;I&7F z{+AL@yHWL?%t}}#s6_qj+VC6pml`=ZuE}8zsjyyOvH+)(oc6>#;r^2g3$J7s=Sn+6 zazz~*m4jIcwd{<_kB@xwyEKX7qggYamnRe!+BVb^Z^(Ay&A?2ldSv+L2A>2DHr9u} zVQ^Go9Fq33{GzXGByc{7?Y2UymA-M({1KZBWdk?!LJ*#BR9`|bi)J4JziH$Ff20%e zhB1#h)F`$XZ{@>7-k5%1(~}{kSqv@AwEw+Sl zMMp>6|H_w6tGY*cfQ8)D<v-zEO@HMQXGn<<7N#>FDV2b zS}|Ars*&Z!d<3hP*S=xVTyQxpuaK3z1J!heeL!%pCQs^o1lfhNd4bMMN-~^6Ij&7R zdV3kLP}vGwmXeV|GUeGMGEXMS#Ko=LdnRs)jvYF6H4d#TFH^R$+ZJ?ZvQ%30TU)A4 zhr0W*XMFrx@j6GQ?Q{`}fG)CCb_FL=F=3$$- zxWDTLhZRL18yi#U@xaK}qvz$>U1@7d$jC(#`h_TD8S&`J+01D~0&jipStF4)8*Sf- zrR9^RJW+D9hg5A13)3A{*NJOGBDKFXGa^;``F? zMBl)s23WwBVpff;4JG{Z*^H)H1>Z=fmMxDt6(`S)h7l1Ci#n|Zh1Kfvy6W#laEdw< z#wYLkFSh&StBjClLYUMwtPIdxdblxXp13{Gi^6Ehg>pN@la3Jx)y?tGrJ`&rkcOtV z(*6xjy3JeQ80BHo&)(OGD6h&nE~7C5jipAvv0p}3!mW%gl}|Q_t-OHXGlhlhGHSWO z$%6q)mRX!!T#Do$4RvsI{7UUybg+l?_VSXUaw(jVl*b{W8rIyIAYEa*gcoXfd$P8m zMOKNE8seH`j(DCjFUj2wh`YU=cE0aN(=K&KFs}X*C{W{ZO%oPJ-rlpVH+Fr>f*dO! zcX5F-EZd2ZkYPt>%M+P8E0W6Ru6#o(wF)uzXoWKczHVVq!$13nIuTpa-KuYTzvfgSS9_I!WG}l62w8| zvLo0`{(SuEoO2#j+cDF4c~LU2Y-)%7r^b?gqo9{#V%4)Bv)r`2eRMFCmsw)p*Vq#0 z=&V5jS2XEDMP_&|XRQhdjFMhL6!H|<8aOts>i$#^!IzNN?Keqj<4gxjgnLv?Mosw# zlq$Ch${F)miHa7WgA^u(<}jh`odN=r)Lzs6NSCFl(Z2n-L92Xr&%z-D&z70#Ofk6h%Z!@xmK>DL6xjp7-x$RPc+6c(-9$N&2(y+$KdU zrpEH}MIBxCxi+fu&(|CltGri5yPs-^klTij$~izX4iM&JW%gG6(y6~A3MG^YEuuasgAeL6F8n(+B;@ucD$b)j>>t z^7v~?*}jI2jdq7GtD;-S!a~7f(dzKf;Ako0U_W(hh=O9L(AM2hC`^liyIkCECbKtK za;LJyrY*GqyIuCJv31M5Rd;cUaaYtlX~*77VruF$=PQM-ljCD1y&$G%Z!59)>j8xc z&(o~I$78WeR`T+)`_es86bA|q7Z**^cvo=|4uds@w{^|_TS)3u5SM4q}f%5H|$*U=jR54Qy25`2wqS|_n z3=@qUw^F&GWB5@Jy15MHYze&<12dP| z>ClYo>&}mV2$yfEt8mpEZ2FXx6l|gtcL39t;~jZwO&}X=5(r7`GAX6pp>FxENpy4Q zM>#(KR12m(RQ5Bo{ST(#_}3JFu1Z?~!q$Ip6c*OqOD^tymPJNdow%CRtZ%wk*TOpm z#As5;8`Ii7U}eHNjv*_Qi$-$etJxnb=*m!98S zAVUEVEmPR={%~ry6G=~+O2)`&H@{xnl^wfW7qMqs+eh=nO3LRA%?lSg6B<%ty17<{ zFUP8vr>3Sl)S{lAQy`v-f0~q}s|9Lio`Z9Qz)hY9#6oq!8aG)?>oZrcv{iOCIayC4 zDqt$edDd<=R^oi!O6{9s$9MPW_0GYu;WC3~`)i^X!NeTT!7_L>Us*{j9RbgtuqO z6o1sod2zcwxVBKGV7~3xEh9@#FYoDoqA3JM0l zylMU(siWi4wf;glhVdP0r&|Spf%7;9%8rXB6Cuv0?j>ArS_`qSMODollOBz|l!FICHHLw90Qk6CBOz*@>^w z>>KH6P!(W2hJVoT%)$g9K;#4`4o9%OqN1Xmq2IRJFQ5wQS4E%4os3EO31~ER#3}-2 zxH!m0BYyrwlPzJThSqXlU>YDH7bZ$vJccC#h{wyrOGW*!ueVvY{+$g{A|Y39=x3^DrXcf_|6) zuU4#R%*9b$yl(8UZR~y0ho-5;m+mm;fWzjdAbSimzfJYq3q(R| zRY450HKMB^mJDijSw%J${auVm_;9V3fPg@TLl+~qyT8P?GJ@2#*%>=t9y4f*EC8oc zIMhxS-y8tv-##WQrq*b@p0#NBDhUYpjw{=ni3$!n1UGX_^6))usXX-dX-z%@w-z=G zM?Ad&yr%sYwFJCEN1I*K)6?`?riYG|JC2pxCY3y9gZcB|ZkQ1F?6TtGU2Kp7QqZRr zl}-{{VLFhTor2;1c&JiAulIBLFp=LWqUV|79krX>9)f{HwRI57@$#C=A!_vym2cFA z$uhc)sP(nL5clC1iJ}Aj<>Ew~U$kWhW~XFVQy>1odAGAs3vmJQm?slNoE-3@=AfXU zkgbXbKigcOXD~cYum?gk%2!GkV_o*=Sq{)iJ1m^ZsVSSc`^|8W=mZS;zNhi&wQS;AQkcKzoufm>(@+ z5TcXT<7#_O5bnWaroL+k-`QWxqMoa763a7aYu0cD+Z;N1Aihy5H|)6>q3lI+xMXc8 z@pJ;igHsRYP1yGyB_xNMmU;yoYBh$<3T2X!VJhV6&R~ON^mhiScdH;vzof&;2SeG$ z4lQ#){6LoL(PC|whZ~0Nu%S%tY|`BxT{B_^HxIHsIbJKFJZK_a6?Z4eHJ* zG-V-xvSd8Zc_}Ww(A(P6mQn}e`T8~?id4mkxtY2zjy{^mC=ryTW#$$qC+oRPdl83h z$kt4V3qGA%&(?1VwXi+e&jP^=I>i(u6^G~+-O=rkFbfs?hAY0J{cGX))0} zAT-6^gwOyL4aB`EYcwtazk&uwr>+~ku2wJnyyZYblxqJjSWvZooq~tv>9ihDO+gZ3 z;t=5DQah;D))O=L_7rHA^_K}O9ApuMoLgUF34F-Ij66;s(vCG&wCc%7G- zW7(y8NhKc~4s-xg_v|#Y>QU+CbquNOC)&#Wg)|UhYX}kat_!hStHz-QQAXKcecTU6 z0u7}^&_&ZJ-d?iJs;229UA>4)mM!(UPw!~uzpVO_JMrZU+RRK^jBTW!V=ah6B{5Tk zjV%pq_EePAayL$ze4?0TpwaF=Gwd&YZv?c*iN*~CU_y73;#@%Ku#zzO>V$*@5c}F7 zayU*zY6zxj4b;4ZAsv%h0{y6kQ1^Bn+!CF7wyGaK;%?s+mc5L`FcILVaK0QSa6xli}l!tdw222@A zmlsn&aA0v=)(Ge*`I)Rn(?);MbJrN)(Mo zFA>o>#p;e%3TJ2mNI_ zR%+JW87#~z(5zxpeP<8e+Jg^2ml=)YeFbuKNj@fMZy;A6n5+YR3N%QdI0B@_!o$f~ zS?x}*+9J8Z81Rl*cVTiQ^_qbCy=YEU42)DLL|aQuEn;cs@I|eE;l}Rzm09+cg~nwo zbg96g)2Gn`5S@cD_t(I42yK@KL-L0~PEAs7E*urjA7<8w$;~uu4PVD7)M1x#H`0q# z`+1@Vd0|=(cTH&{uJZq$MlekESVe`z_PQ-1b4;HzcXjgm*~WC$`Nq)zz}(9FJwS9T zMUhoKf3COX($H|ZBcgbHt(GWGz=mm9v(Qux{kV8N0pdKL%gNLpD=fHlXK6*leThI# zBKGaiS%ftJc}Ue6Ai5FJ-U@!v;C}P4Deh3Z7-Qxy;E}vXVx~FuQ3v%1h|E^)576{# z75}MJA8mUF;E=;%uvMU)O6=Ara&vQsDd1}$vCD%2!v(zzWV%|ugIPK{f&)dDZF4}X zSGIb;(MlNIfrCw*Ovm0=%!lT%U;%bf!P9dhHE~7JpcqC^aZb_ za?K4g9QiKW8#4iQ5Mt!HvVl#1NYUjAd=1!GM%EoL3!ei$t1o(Gbt2n6+9^`Y(eVJ2 z>;(cowF+rHY>wB6PSyamu{x~sCPaLDBwFb&5=5Cc%FD|GJcJ>lk1NNj-0YOqK1PRm zKwLq(DnP?~JpgBcQSi_lwwv??LK$6ik3Le;8*95O{;L<|v^(3|D+75+X=!PUX23LJ zQinlg4U95)VPPT5X_{G4WKS>Drsh<~1qmBeULUX~QC6{&T>|CAeu2mr`D{Z0ppa3V zt+n+naZJB^X0GAb(g%MjR916CX)8;v^ejOd~o)u>{4VOssWAULPi&tX3T^>!SC zUO{Z$U+w|q`=z9$1n6wQ0uO%4&CN|rObiTuBZ&DlZ%fOr&YlLq>)sOG(km%3)H)Ez z_mm$%I)We^us?Qg3A1rul|0oM015|hfstArLGFNHM-Z(V3sSjq^;@WbaX93e!l1W3 z^t8^TVHcO4``pTkLZ%lHtZt2v><>tup+OGsg!@wo1KAu~@2re~`s%I-P_IJdcy|($ zP`o9xx;nrKK%m zAZ3#1(L6vC!steNpk67=?gK^XV)xR{p}&y=R(6Fad;s&%XnRv~4&6^@$3d?&rNszA z{!R=gB^}srjaiSwP(VPS zV!I$KBs5fH{o6Ir;gsa$V&L%1pkf?B!u-dOkP(N)41in+d22?p*NzWXi2#ZxVFi`@ zdeZ^gWfyXOp-j#(Df3edrD*rzfmIA$JV?&LU`4YR@KllUY#6t2Fxo|QFRU&jpd3HH($my4g~9u4M$kPt59slA0h4dl7v zOJjXqYg~x3%}eXkZ=}sY1xj3qs*#@cD;jqGd-rf5Qu;=QudHeKxj1nl4~?v?9_z!! zU}hFDbA5Ab8a`Zz7|av~SGLg61vh-8Z)>EhFA3MN$A!r0n;T+o!pqH1bNa%CNEn$~ z>%(av5~e!V`j7N=VS4(wA|kjy+i5qrT+NPIRyCiFQw#}+K7o(_y#A5EKN9#y0{=+h z9|`<_RszTP(_+L`|G^@2|HUFdqJeU8g8wT4v#h30!*`E{mz$4`pPz@u+{V;Y6JsZT z8FHTg;WBm_9zHHM9zNcGzl`^Pyo~D}HyZ~q)&KT1zW?zu4lXV>ZVtYGzl`J0%V_?J z5q|dZv5qx>0_HTBpMfrm+gVF0TLV-;!+!b&zzQ$`FNA~uSm5HJ;rRJ82~J)b_Oo9= zBslqL*zcWPF2Ti3!@+g>8OZ4ut~tG2+KiKi^XziWpB}?uy2|?2G*BAI<3|!Skf-`~ z)-;e)*ds>sS1EI28u|+^{lYRFynO##EEA(53!CJ*TydZ}cL$r>+Ao&TKCMy)~BSm|qQy-koOoy(XI%HTT%f=O49X2<+IO1nr@ zTf=a=GqE-AW6MEAZo6!`@Ui;rw=@ zjrU&MGr7vnPvYdcDqXKaf}dc)OwRlesnBTJ6Gp_UEYGUZIYvK@+B*{ zG?vEI=9yrcBrH+>3ty>4kI@%(rR?8eL%PbaUgvQ!r+kmQU}(6I`+eM~3H`WMcBrs) zeL$+Zso<-V78#K}Kgmo&JMnwfXU(}^dtC1q+^Mpg%`TPH!@X~&n2aUA_clBxsaA+K z434t`eeq_?wCeRcwoAtfmv2gcW{)Ea^TnfHz`jUytuwgp#Nhkm3-N}HxGB|z-)i5U z%ds36&=nq$JGh^$lhkDT)nO<~q9Fdgudhc2!(z-VRs9NZD2d33Sz2VKA7+jn~7)maH$(c)~KGE;%c zw}f7(E_d`Al1Lz zAzn$}H95>TB5ZVirG;B~*J@0F^z7ZH&c-EoT1SjhDU8t*RjAggy3JxKKqaNm6H zD>rjE6dll5eQca>hgib-^m+Rp8&6BI*Nuud53f8}<~yfQG#+uj7Oub%Q7!qHn$E3D zPe3?vEj^XPWz4VF?N&?Q<9Mf`$WE~(YvFHxuTjM?=Q!!~(4sO%5Bi!EUe0etVzD^C zzaL|RCwa77rcb$iGhmZiKWU(Yd~WNm0>h6@{H@=yt#W9iHLu$%Z~W%qMe^IjXa~g= z3MP*dh8w2T4hxl?nXk7kXmcmFt_7DXVAUtTq1^az`}_3_WRW*iQ0T{{iv#r#x`2B_ zkS$?Cu9HTFf%P%EdRBvW8?g?58ov8)dZl9y~ln1i3r=i^gPQw*qi;7D50oa$R8T!@ms z70d>%s}H_8RrI(Jd3`-2orf?x8Yo8F^RRQ!@bYtL0#&X9$GD*ErxpblA_<4tSkQ2u zT7qDo-@3g@k`I9=Ew5u`@_z_>3!pgKrfn3mNj8D7 z37)_%E(spoCAbDBK#%~z-JQiD!3pl}?(V_e-QC^cAD-uZzwbX)=hUg9ri!ZBnfq?L zyRYu)CIHS+;8^?L7?_!nh54T-`2Rl!-fPgaMxUH%x<7WAcyy3LGwc$z6loRp43YkV zLVAYhNShKhlozLiYnN9$lJ~jcQfrk4`}@!7NUFR`Ep!4Ba=6I?7eg2o_N#Prk9%!3 zqX~OP;_0+Fu1luN#D>K)DVNc1+=WkOGL&Pb2K8Y%u&$9n#f2OMgrgpFChl}pUm zzmVze_HJSZU2r~G69Euw)2~-JrD*+bIK3{lo{!>;P4oxF>|EO|!=4-Z2lHz6J8JP+ zb=4IdHD7H{T<2SyFnaTX*13Q`#HDHZI=^KlVdO-*Uj1eCPT4CGp>HU>Fl)__pKlHg z-b5J&*;?QquFRWlMoj$WNN6Q*OQ<}HtjzCow9jIoEN}s;nwJg{3__s=ik=t0GGUav zZk1}P#p09$g8|dWA=nS{U0`5=?{e>i6%amooi$u$7iX2!3lGQRzr~l$AYJ6CU&KIl zrS(yT!5$c6<+ob+|~-B3_vgId~Zo9{MBi2vc|=WD7sPlp(paAlWpK zXB}TBVBR~140v9s8<>0mpGlc*5*uoIn21=eL(04p#($BfYU)+$>H%{ND18jvvdR2N z4Ogw3efBX?ESet&S8qJj3@uz0`=nS20G9eHZNi@o$dMiXTITX!0g4($Vqz^HhY-U< ztZ09Uc2`%R&UJoSAf^yqRS-T&5;%&U!-H?~t&n(VNYWa;dZz0=qYe}FKtaHsBS$^! zC(UhHmTvIVZp+oK;gQSWVgXw}4p)SxP%GCeyivW?X+}guc!b3Z^7`J7n^nvi9EM-> zs1~_?9Y+*2=S67FqkO>*qw^4FBT(2_olDz+f4Y2&$B1OlBXpD`{r2sN;R_wXBavn| zs&t*B*9f%FNa3chzKgwrPG7V8KgsSqRkg zZE~%j8eQL!bG8tdVw_}4EChC*yFE{a{C&PnV6niJTzki*8<|YXZ#`Hc74^84y~G*x zswnV{6OQ2Ji$D~&B}-lk4ND|~in9TIgodwbf4%R}5sozMnr#Q_WP|XK191xN>IEOo zb}PK=J9 ze{I-}6!qveScGM6)D@BY7ZgEABCDfHi*!v11`mjx^pCVl- z%yV<;rJlts6xN(95%T=yIJr9xHe)_}q}(Rl!~m>w5YIB7*HdsOtf*2Z@W!l!0TE#- zVp-q8c?9?3l}WCgJ~*lG@wob!>ztF|iE`NN1W8J>|_#EcjR8Uv3}#_fNt)zGCRCGHim%MAcUoN98CHjeEKT z2h^-|mOSYzv^Y}~obL1TCp6@CX^8N}Dtwt!7#6}FVxI(;+Hy4{~`v;^S;B` zL_=U_)Q#l`6@wt$Rh;v08r% zm0%;7$Nr-sIgSVmem)|uPR&rjd0(znAuYWsM2+w~7c%wg=75hHlkLy@5%Hmu>`~ra zB8e(O=!O&qCZ-PQ$T-v@H_iSn4&?dH-q-O+yjNo|CEq-tHHw{*hBN}gmD#dkDD)J> zY*-y{!;A976Qzq61vYlPofz%`Z!ELx#k*XnmKJ95l`J^+J6$Yl&DAm2;Sz|UhfrRh z&0NBfw+`c0ya*q&9r4dOHC^njX|>b?n^U}!f3^l-3lt#7+=|ROLb@1*Tg^v^01Gki zmI)BVum*)=mnF{&pofNM!uT5W_(^mranOBo?oqc_WvY=p{(xj_rte)W*8R6HFFFkT zKwP9~e&hbIyt_IYg=HZnI}7+knhaA8gJ2;xBmVnzKU`fd-uJ=w)dHRp5~-$b0s_ z#fCk3i4-~%`jbsq1MpCQ^NM1oW(J=HY>f6KtW7KMAf)78#A^~#r)Jir2jX*R2o;R} z6|k*4Q$!5LeK_iO7W<}AL>U(ZggdTYk0%Q5uE1|`SP34LA>ZVhdVtS;2Hh>1RkA=6 z%+u6}z>47@U}_D(WCXA?A=uic^8^*J@_CybbwzCesoZ{VB5HIY8qGtCW4Do!p57!0 zErylw6fyp@qAhrk&#R|>*A1W$uGRe1K!F_<)`8f6!Ox*bub*TG418!|B~ZcUmQ1T( zcjI~T^z#?i9*uD5CkFU9}?Gqr(i#p1SZ!&%!9;8Ah7sfx`-n{dXboOL1ID1UY8Xzt z1K#zUSy%!!L_?B=)uuo6_SZY@R^Xh4CzEdO4=C5{R-T&cHXjC%a&wW?HSbH+agb~i z)qGfoKZzI*vw3rEP;xol1ltoQ;z1Lv(2yLEWzsOwec?6YCuadbRI8fDKeiyYh%e)K zv{^*t+enQ5wewrnKsx<&g%vw}3U^M_uC(K>8fF>Dz#m!Wo^ujVTtqa&T{8$Gf4&{9 zWBaaF>`CHrhvw0sa?jaWYAeKbx>xTJ0YbwkpR*F!2Z4|rnBG`d#VD=8S+DyYB;IGe zWVYqqVS^nE4w~~)n4mM~6He6r3g{y_0UqQGok!ckOR?cX*%A`%@&srGZ1y^9-R9aM zjb6+JoKH5!M(`H$O8v(5OM}hj7repgs&MhQd)>EhEt+S~qUoRm_qE*J-#4w?2GVeB z=UPQyBGezPcAv4kpyxb9(-j&)|B;pF{Zojz+y)(1_#SBwSdKj;ElHd30bzzA?D7o7 zmuf$MvVhl44Zs*&qloi8ZeMW)r~ne`udc?Er>21DZ;zJY2nehM`V)|@JS9YHrbQv=CqJLY z$Ln*8obR52UpnRMQCQeHmdDs>TFiM_H4{J&Ged~i09l8KUWCN_9I5DNc%2G{<^D8P zA2*8KLNtgQ6WW-EYI`QrvP0kfqdXpwt8mUu`&(#LMjGUshXg@ zVaS@#BRSO?B5i#v-cXv;PGXKkAv0S7Fv8G=uks^r7h4@*p2! z<~c3{xx_CV9*fRcCIdn~yOlVl^bPid1KxzuCG^BpM@+Y>MQf?5$( zIUxY)eZ0BmYDwL8%By9x9eSe{wMxdUPtX4h=DeOVRj!a_w7CiG_+3<@j9GuA5ySc# zQuw`!#;kR1Yk2iJ?!@Mc7gIzp0`9pM8r7P#evVunYGn%|7 zBkRh+uiMW4l0dGaYtaYt3Y~6(^O5mhrBX3$>}}1s+$0l<`vxiBif$&#WgQY}eOw#2 zzgl~XTUV)<6tnmyakOG~D}|Wzn`;N>g0{Ms?bWwnTBm?R9{UYAp%u@A&QR+*hc;0+ z?gOLUa?o4uz3IHgbVN_Rx9=I9rn;Ea6VV8pG7oYJ9lt`@$$Z+PUI44AGzXIe%Ib_2 zQBKa?rOy6o1ZASYDk`0V4_^j<$ATILEln2R|5+t_VY|h*QgxoPthudV3=r`ynww_4+k?#Y;6wqIwu!|`$6dxq{Z;lr4Q#+Vb)%|b7OJX8R>!Q?uQ6Z??>+dm+Jz$RKH@>G#TABWnl8!b^zhW>zv{?USCPJ#?~61>Qw>Xi~@zSta* zhf$M->m=Ll3N43PxY?a)u36IqPx0NEj7Jt{QMX`|MMwStrqg5 zB!FrqLCYijj(^V0ks!iACEfvz#v7F;Hd^*v+c>)eB`)28XxtB&=XoKgf3P2P`bd&Y z8^~@-NS`fe<7EjoyRG3TLqD7HR~>|Nx(J}QX8lNci$%@DtQEhwCph;3*`xL{X2GmW z7Qd9|(Z3flha7!(<1yDA;KMRJ*>ohvT$eTK(Ya}BOKCoAz z8Jl^cWzA(|QSI?DxeNK%)z?>JOY-jSwWx~)xXgVlBx`sEyjQKcqN7^ucCf=1F}(u| zZ{IscH@3sk0sgH1na2s^=Rp$3G;Y5rQJZ8hwg&I<^Y(^}>8l)r!n3o3TAtqDVaM#6wOXQE( zNDr%r1GVAdteBmO(`K8-E5i4Hqtlg%P#ZE-^kQ&+Jyj>$9kV*S9tuvA;DgqB*t7zrHW}-dvD! zK;^AM)_-(gdzng&cl~Uk4IWa8=sD>+ZGz+ER03CmVd<(AA6=2FbxKA5MSXSf+My{- z(bOr~b<4b|g*fVkSJ(47VLtZ_GhbsEmw}OV2;jW`_t0Z&vkK=^N2f!#^!DZcUcNV! zrPhgpkGs^;qgRGWg%2aY!^Yd3WIGL(i@bEXQw)xuwt9PcP`7uR;Z!q+5Awha&lG$- z9X0zaajA0~SvqBjCEktVgobyqI_C{0mkOFMX6qfz)9(p5;`ZDyo(UsfQev^@z0^Rv zeh=u^)Cw%*X5mFsp=#1>&Foa6i?G>(?9Q%+6i#Hw5}0$rGa~P+?Jk>MPre_us=z7s z{^5kt-?dL1p8QnK1B1v>_}gPOmvFO5$71?>XH4Tr8mcorsVQ2kjrhH3yPMXGPOb)I zEE?`ho1()e4O@6`jc;Qz;I08qIpmd!-y0;HnL6O7ot* zsZXQ9SKyC8bdIms;pJa%=4*z>9?N9y)j789j60ln zn(tYyXN8k4@wmLXenOHMHNy3v7e|qTuMD}kGPM7`aOTjO^*hezYhw<0-+yuTDfKq! z$&mbeu9xQvms@5^+sVGx2JKd_01$5`DZEW~>K@ zyeaOla{V6NZ|Y@B*OVkr+cQyn*P&-m`~{p>D;r*J<>fIS--WlYD}7(gqo6e6V%=%$ zAGsLbaTx-VP7<+litpzO%Jo8wgizB|%Co{D-q zqFO)dXs$HM@8;v&wi(ueO266SYpn~tckH+w>KZ$ozOapEWR7Y@Lk|Ec)r{5Wz4t8$@m1e9#E6rwbi7S z()^8t`2!^EWGgqJ<9TtXSa^IZP+d!UG`9#Hjd&8Ze?qiSNSA?D!)tV7>BVIx7Yt}| z2Kfa|oF~X*(UP}{<7LI8jUC`*qzCO}m2lHV}|rDnCvMpWG~x$Ct*F!N|k?k7$)gxO(6#X>!~ThRm)1EhEN!&l>`{W2&vbz%I_cQ*gT4)CbM zYHvq;`-^D0pcaqpz1`OxRvUhsWF9E`kN7om&B(v=i;t5ZePL=C*EJO5H`KOuHMW(X5gi2 zdBQGVgwb4z#u&Nzg4lQA6(}bx@j$bF=)3xSP^Fe0ef|3P6wX5T`71x@A_ojX@(=2~ znD4ov+nE?;WHysz+cSLa9|4Ocr4N|$XMBFu4Q8gh*cQz<<)>0+K;ndt?jEuS-H0-t zzgkTMJy8}w5b7<#81=~@dX6zkj3B8L1UOFzVw`@^5}djpP)g_U1kpb`zxQig*j64= z9PYoII{IQc?<6fQ)ct@J7dm#y-*k<@Zb*sXG+^Uz=GG(b5%-ez$EBl}iW-irhFRAj z+sakBxz#`{uF2r@1>aZ6dWQI>*SV)}C%)e}SO-)l1a|@KVQR??GP$P$=NBcJ#8OCC z`ur2zEM1bReMu}U?3C!a!-ag?uUFF$$5*FpCNTw8S;O`PR_x72Aby5b;A%F4bM@Bt zFSt=KE;z@Q%;0h{Y+pP?cusn7KJTHKBdg*xFYA}1&UR+V!EPZn`5G>aU8*Hllf!7PQa{*88qV@M#&%DE>(AN6#rhAf57HdqQ@NTV!kRljVeZ#Vu`5aV~z;K7dy5vhJ zrf!%qqr;%Ouk?!w2Kot`0va1-oxcsq4{EAg_p=ada2AXh}? zw%qc5<{p6dH6zd4+hH6U&a>N2Oza=cH71X_b2{o(`M1gdGIm$8(KY;T_!$s3_(Mcq z6YRqukEGPCZ}fim8`94jE5`L}m3^byCe1w5k}Ti~kKv9CG9-{&O>5{@yUfPCscD_C z_72_F5?iqC3Q8(V*DdKG7~RS0;BqwUHQ8`^*pB#2Omw;h8?~{BxMZ`@tMux^S>E z+-x*nf^&b^ccI6|lTGYpA{X1+3-2&1vs%zybQnFoSjoQQp!oegqo0a}dVv`DmhzZ- z0~(Ebm)K$x)L`>XA#C9h_Y%nBwP$lWa?TsHw6&%bhcau zz71P+XmQ8ci-J*J+YQ|Ov#$-Z!5DK@)5eZvk||8F{q3NA+4*^DJt~;XLACgYG?{`A z31?DPR|NMP1@ZShA3l@d0@?NtWw)DJHW3S2mD47t!91>JMzX5-G8{$a7l}EC4th3_ zVHZ^0n<%%>49`(c88tX^SAY7HfiqR_hp*u&yFc3O?tgc2SVNes&(OpFG;&eqMd*#} zOmT>XFBpFAX3S)|wOU-*F>hurl**-&QDv#qfri`^Y#o^%N}>p~J?A-XN``^vNh<~r z6WX$g3e}Ck@n4~I0Gf5#oKT_m{|45pZ9P|!3!{kRM7^WL&KWg)u-2z{e z+8HGin0+_y?gPz;*7bmqPqJ0P}n2F1TY{ zu2w8cI<&RLUJ6B7BUPU=Q`X^D84KtPN54NN`0*LFdGPMk_ce0ss#Q5w+Pqfo5RQYM zRp)EV8zk|?^ZrMBr-kHK-O*E}B_$akHnuf$U(``IDdD7iMCW6>&tb1+I@(@@UEcr7 zwh;Eu8)1bOKYY*>is1X+Z~=*q!z?=`2a;FBgOg2na_^I0$nNezcDCHcn-S4R4-a@! zmo3!*(`Mal2;2l3bVfXi$Lb!(8V7(?k0*5w06lmnpjxY>mqk-jZ#?rhm~Y%`V(rsvGn8YSZdkq>7V#l{@zhKY(I0IW7yTxp_nRH4!nZx zCgSQjUsTj>*)+Ih3GO#1NGO!DFamJ+bvsQ81QcC`bNzb9A?O%x?LC*ZciNc(3W|lC zp(zfXs*KdKHgzIu-&9O9Zpu`s6@N>l^if9~NL09DYQ679#TQYU56!jA_=Ro|Hu!A4 za9Im5H!ir*c0`j@p^?~sKCQ@Et9?N+X^>saH1dF;=tvBiSWB~NmYMT1sR4np$6~0_ zaMf3bv!j_HVG112{5PBcB=ewzN@9Oi!Fe!vyTd^MAqrG2955|g&n1Xamo_z#6RT$=M0NkRf@bGeMnQA?ho!^ z%@RY&iL~ptwZ6)A*PFswJB(*}vJEx@65|}|LC50V_~&g05`i%{Tb2#}Zjy_`RUv+a z5hXmA?mvOkCL0nBD?3HB;6-c_>MDA%^de>Ba6|Sp@e;#%Z0EBF;*=$x=k80` zh>tvL!Y61AhOOFlhS>*;=BqzQY2*4; zvEih@KDD+g;`x_pWyGwH#eFlLklPkaQ1&*vPOti@*Hp!1&@bxX9r`{?xv=;92T%=_IcMIG8jayE0$D%D@nB#iwc5F1tfy|rfagq znjc9iR`d|m<6kX*_3HBT4Gn!uOne|HboVi!9GRHf%kLv{1)j`@57%>V z6nO>0Ba89ae?~-MH#xX)9w!@f-B5(sm53ll6Qw;_lOolX5|8;0^R816E`k&m9nyj{g?)Zln@FImB81eH;1W`1r4$v!4lO)DKNT> zv4lG74`CmltzEDBu;_dH#riOnA zU4aW+*81d9oGG4M?nq|xPeP!vA-|kgwlF~m(%vXUreX7+7UwO=5${ef+;RL$Qs zSLyH8h!L48#tG`uT_r}j?j+0(aIB&X&VoFcCVwmF#zjCag$v@)Ni&54j>YzuVwkBb zKeFFseE`3ZFtw!?jKwwyX zH&#Ovn}yUJ=)__zn0iu03BQQQ4VkpJFCM$lfpllk7w{>`Y?|j)EEW>l+*pOf=p9C6M)xay+XwmcYleJ_#Et(WuBgCA=G3yZFS{3A$F0s{*TY`mT@^Vqd-Jy!CPleju6WuwlR4G*$=h;(2=FK;9udq8*XrO6P%=(qw%A&;#2% z!PL+BtRat;!j_ba#=1iOcAT=2?Gft~pQ@OmQBpR?&Fr(R=c9{xI(Z+U;p1U4nfQd| z4{Z#g@$qE09<}WNRQw$(t@bA_j#4o~q#}&o#$O)X{JX7PB1Iq}^iwyrG*;Ay-(r1& z8CVuE%HIt?k@eDte=|gj`p_W@LhvGr32o;O?UVn=fR>G!zYc#`@J6akJ~q+6@!4-Iy=t3jH6!a~-V7 z?)Bq)tHB(`;#$yc68xf+3sdpX3a4wA9HuF>V*_KEzKlAUWL(fF*0D#_&RGQ58TQB5wRsbj!+H|EYkq}w}H?Dx1pGD)wo;*PbLC*Kb` z{Q#j%ezI}l5kp;#+?%PUt3VT$%>!a=vftfWgd-SA9}mkvFH33&n;e_i4&3hb1?A^g zDNpxdRk0JS!oMy|JH`#Sy@arOTkuA1nGB9qfKQSB2*ph&S4CGHNIlH3TxxZz<&Edl zMW>k=E?m-*)rBT-T#Hs$9T-SpWkRMt71uY6BCZQjTQtiC{^(!!fZ%-ssuxx3B)68_ zhGk8Y9~RCmXR%w*l0Ywz!b7u7-Fxae)h`w%NG2Z&)ZT*FJEmXk!28<~FQp;hC|E`z zBI~Cp1h|+gl;>eS3w%c4W^WbM9Kvl!Z@xdIwpPtzFV4`XC`e5!Ft{&%B@@O_mV zg@%GJdQrQ^2#oOOFVXQZ&jQ8J802@;%UTfQcB_-$n3Xcjnn_02HRbbaSB#)D>Ps+} z^w20OcTnK+`_E)Dsl*U+eZ`V@!Bu?Ns8rSV%H+Ug&!pW7q#tM5n`3E^%Mm@}l&kX< z(Zw6q4wwlzuMlJ;u>|Ld;Q5ZdAs1+%zu| z^W&c`7^_ZJI*~AvQmKruFlIMdaQ<7nT<&etlK8Pw#Q;n-^gi-{hJ4IWy($W4&qc{AsetPiB>~HOXhD zcUKX16z6eQI@Tw&TwxK|d+^@0PvHD=6{eS`2fH0yAS8DC-_eLNG2IW2_M5PtVY*;wVo%7r-+H^= zIGM{8CN=tU!Oq*qm7QzlLmePE^#SGPAm>F;G3`*4K2OGjfElG-_+lyp=^Iq+uz}*VF~pqYQjV2h`Pum&lvg}FkOKb-E#{`u zsN$g5T%yf0^P;OMj|CkOq@<24WZ-6q0a2e_vzvX^*&7yh%Aswlvven+wpy1kyQv!d zD{*d;E6k=%)ge;p?uOLS_W{hQBD%znvdY4bD{dyDDt2P(g;gpAy1zTZ)HC(eMh0iJ zHQYvQ>qLH*tGv+_{}O5`TOP~0#8V&M6qwsX!Gg2Jos@&QLEVV~paz%9HSLJ2VL!`3 zGvUAeL0BBnkcexyME`KxsSb+pm{|9rZy%MmsmN;7H*LCShAH!4{zA4`(=n_Bv|LL3X2A4~s(rw;w?e}yv-~9GuZqFy z-Ol21Pjr)9ta4_m^Pr*V$00l9Q2>3oIn?~=T&rkMJXZbn#*myH$#8WATv<$V1^g`I~dBs8ZuaUbTA zPt5wfk!T~dgNk1zb@_)*G7u5t-EhtE8)7@wC^1Mz*Wl(>P}Zleo4b3`1W*LbnO+S9 zz)3sh4aN@j-|Q7EWl4Bq)lnTpIVA`lu_^5o;*C2cw^MM#hDO5(TgJ){3!*Jpra)*fcIU*@mC9=}YsAHeQ^ zPr^Q}sZo+Q%?>mEJQAEHa5VtWAa-Y!XZHHxUi|Dm)5YboNJ(!!vk39Xwpis(+PZ%I z1YGH81N>kXd5=bFm!DOBT3Cp#=WYFRmj^xuk=T7px za5n?Jrmz85v{L7|gw>m0^G(MW3m@=Hk=bt}ZI3DU>l@;6>^kCNKc}GFD?ZK$0rM>1 zDZ5DtCP`oGHHKYs`6v8*$8X)A)jYQMupV*!p{`n^I$tUK%*yuomYZ!Y>N;9&%*M$e zc>kx`T{=wJ;h=%0oAB|h`(aG!Wc@<6^zHT5+iwm!+D4Zy^$hGK$W2GIyOj-Ra<#iT zM$F)oI+vwSH+@Cr!o_>L?>;!3t0ft41REam`yX*Eqzo~720 z9B<@H*u7(Z%A^DNxc^-2=Yg=_=!663QuxKL%c^x}*Tg`I%nn&^8rSa_^N?7RA&!cQ zI`$gat}Ml+wkn4k;$$-Af#u}H^)?E3Rm-S@gmdj*GYhulRsLz^u@dfWAP*AV`6lK> zgVuDo3)V3T(We(jaYSY!Gfc^}L^@<1mm51*Dl40zrL_~bbh5;$W|6J60oCTU1 zK%TP?B&wO3dQ}Ezia}BOI}kfu|1lTsc~et|YVEYIX)WKjH1jS80vRh?oahIpX2xy8 zExrd$vCG>SvMpweJF(nG;Es4OiZlGkX}@^M4DN{)fpxIfjv*cYzum6Sv~u zIN+;7`vupwIEu&5{GF_h?zM+=`dY6LfYtt2A^_Pq!clmM`&NKI@ck1`Q>KWohY zQ)&>3%npa5UXTL`8t`)Kx#L*1>uxpa2@9iA1e1^(^E~mFs$DN?y*ZM1gGmVmMqXZ; zEk=mbrFh4qK(+!9IlerDT-6bE_LP&;Y<)9)FH%UCcG+q2@!txYBpcOnMMXuz&_4?D z@8^rM25Yx>Ze%iuu%~-QWEFn=Fc9?SOQGx55sT;nP%gm0j=YTMk(HID2^A52Q*D$i z_LGu2qmnWrl8hLsMp@j77mXUpn~x|obizl9iBdxpeUfOUz=0!KQB_%%h?;_e=HojC z3`|iSdWCR^NNaxmcR58ew;Z#kZhZrp0<3?iWBeMj)icuDBmb<$RAVtjJSuGWa=)D8 z)S>eiLx1+}ooLu2gI=Mpx1gRLc1HS|kT8Bv_a`HnD)nW!V?#r+G!`D-@;>a(A8X;X zl3aP)jRyo#f$2Ruw@12A5s7-AX^~d{zX~7o^EEh3{e7msKtrCx)iq-N{AttmB_q)p zjfm}eS)JO-#X0xO=NyM9N|1RW=0QMd_NQHi!TIm8i2j_#FATQ4mI?GY``p|qyOU-= zN?IEl_`4i62@Y2}NHP^HeD{p$rh@Pqnl}$ETssCI7j~ch9p`02s_FSlxQ3V4zbgOq zagBL1)(YIZ5I~)Ja6W5|Oln+eG$jg_O5c!L_E$tk8AXVdeJ>0bW76rciIMvl@Z2&X zqPrXuGt+9b5cxUB=}CKMP(spY?d}Sr?LM3508~yusKYoTD_iP|f;*nlc1uVoLlKc^ zOyZv{q|I%AbS8{%vpw(BTw_&b%}&9R)+S0Bz8x>9hbD+qIv=4GDneXTyM7I%>M*ED z*sA_^Bmf;y7j7@{m2$Eby`5Lny$M66lC8{gj|q3hG6XY9yL5JbA%V&g_9SMYRk5WB zYH^LmFvZ3ZgW?g=S^FpCprD7TEF#(LqB;|~SLt3e!RLgKTw=R6a2bUXz!OO+N zwN-SWj34eR3@*RZLa76oNl&#Qa8M(SAaBJC1}-j( z^Hn;~Tps9wOvT2glviO;anbr^J4bHQY(av`FXFpdYOnQ}q9gFkdt zE21J)D&@6ClM9~UU=BBKzN|8AY^8V}HAHZc|eIP1M7;TnXr~ z%WhA{O>=NnpqfJ>Gr4=HtFzY8nbg;VhR^MM@)t!$QSkv7AnN~SBx^D;oVdn(*-%~m zbh~P34_2&Ng_z{FFsn%*t4mmtF0axZMgU+Q3ldzecVjhHQ49<@k9@ji5gkZz>^2Yk zvqWehKsY7Ed#PzzP&-k7ucwC+BJvNseVyy&C6D$pBZC4>u%j}_~MWUXxl7k zOEAe1nte2q;q~Va2R7{jiJ25mVY>jTi`0XQGSqaT72vX%&ZG(&`A-1+28LsgfBp;>y-AmkWj59Xx;h3d zEs0o$HaN&(;NV=}Us8&?+MKL;U!S@W)L`wvse2Inb)76NFOHVOg@fWx&L;IfR|p5vApPy5KEWhQXDNM_K-vs(O^$j?A0>wC}TII}n18x}^7jJz(FMKf3I zP93!?N|Pn6uUI%&ZoM6QV!6V%g*@{HHl$Mu<8nOcrM<;xHCIV1(b2)6Q7$!I>+&DX zqP;q(Q?9e?+&!N#nlzP6e87xvE(YjEUDI7 zY`hA@brGop`kT%Gs%g5=$A}}@*cgup63SQGZP0AVeSz#cRoVYIl0i~1VS8>!Z(!~> z6naFg#7#TsHV-@NfmYSlY3sdy!o+=<;7@Y++!AaEGoawJP;m64GEjc#M!VOFq^ zle-uogu)=u(h665V{HuA6P07fDKmJsd!z-;UhrF4`oiX2J1_%RB%UpFra-|T29^!73d z%AosqdsJ!Nay$qotXQ-_hH)@gY2q}PxcD3_ERsPH7VL6=j$nBq!YxF!6KCdw^t|rO zF_#L+Lom1ft;HL&WLs+S)U#&q-5zCWd~}txuco87yiDdx)9Y6u3jG5#LXTkN4kzpP z`^{l>cSV}&3v7v!g6OdcBZ0#X84^@Fn=|lNsVEcJ-PuTnK#n|Ld&oCliN3}_+$t12 zPRGt5kYNQk6;-WV)_|+)+-fK7LJe_$_otm%yQz!)X9P((h#+rVi>CiCc9D_XsVROIv&;}<=dtYWH8jyu#}zp61LU`hgi*WQ-m)ZU zZr48-8=SswS+^sy^u^Z*kc|Qw{0qsm%C76rCuDuF0IYbOeQ78~+po^syW?VqNt%R$ zhFSrF%j~);w5VD&;)4<=0hP|6Cn3=ZTif3nJ|$s$yxDyK$QmIcR-`VuH*M9N$kmyz z$iY@`wrD0=92x?o;E2KLiM2!~FHSjuPjvwea&#O9ZW@fQDK*phKZLzwcx7$VEgG|9 zbZoO@+ji2ixndg~cWm3XZQHilu{zo7dER&Lea`peoa>r@=DHTG=*Wb|OmL*wn(}uu^kEG=DQ5RqbS&PejBR8@kh#zRT}R$;2;d z-1)EPaGpp>3}Fv40l`wsO>B|OiWHf$<1S^+0~Hk&<-EkxiWNeIx(&8~Z?kAV$^H+A zeL4a==)bEe_=qpSK38BU+3~t5h{Ek!0qQ@sOq0^dx}V5vy1P%-8YYao`Fy;z4TLI0 z5%5`lyl5KLkr4^r0#%AB$&ccpetSR0#d-Dob={1@wbZEDE`0CODZ-y^Hw;`^t!n_H zjU&hVVE7jKtajJCLoRlnj{zhB3jR`cKsdO3Hm?9NaiD0Nytx7p2)Mqv92dd^ZeJN2ZNtGtC1<`x88;_=yvPW?uHWjuD)%#v2?$cBc01R1owNjHEzfV(sq52;zp`E+^Q*{(X7FYery_Zp+IXbNxCak0wjFt z;o$=kUVS>PAwD~&|6e%+5X6^uAgcN4aU^XOLjayar+IL8rr=mImEkiSlLOSFe%st6 zaSXp)0$2$8*S7wwR#y78(DD2uzS*(~xUOYVY-cZY5wX5OTdx`Suby)6uExev6)AT( zpAGK~P}*(b{BXT&tY>2dt3Wpp&BT#Xvylj$u*D%Qdw zEME7`aJ28$dU7z|(4B8Sr^-}Pq~aBXC5cvLnEm!6iUUfMA zcm=}mdLUlONYkvGJC%ZJvewK3pPvDrHqM65ULpo`5EKZfFC7I@b(NI7fT1`&(_5mb9*8jGOzwb)iredHc(aYx>j}^K(Q3R% z1{Sy~fZEISQlF$GPY*W&Cc}}zudiYVc(ET8M@MhHy7!Q4b}KBS`%YUhg@^Tt+r{VuRF02W?4gLy=UTX~tTv&nO2aMJ-K)Demz>L z&`?1fT?B2Y$8!;k8rIX%;di^PCl(QpSEQq%Q7KDT@PY)A7QO#;5XLY2K3yJNth`$^ zE%NGEHK|oJ>Gou|TP-CALMssPxYpV2pa3zcUZVxR;d)~*3d;Mat#r}a0?X9LtoP^jQbmiYDMqZU^~JLP;UTZ*Ei?~aZScn{RA5x08d=GD-9fClF&!fZFiOO( z>gZ+5Ry36q9y02*UXNpx4`lZUxb+8N!()C3IyNg6P{eubkx;9ZO_JTR+uZq_WIcm{ zL6|w+pJhNpn{-Q5H8ay!^$w6)ELWO}f}BihHv4^r-#KQf1GbuIeP?s`3W>FvtTuqw zTq2w1_v+XW#6{ofwL0u}q>f+vL_+0lHb=)tshF{@vjuVlg#l;tO925NwY6CL@!{c` zudneo8_h9<0>*RsONI35td@wD%Y#Oi)|Y)i%+Gbg>tfRUoniBOzUVoVOQxazw`2h{ zw70H!Vv|+{5TgR~Hs^x6`Nt#_Y3areH$vSyqXQsvFOkm@@cSIUKe0P|Ob!d{0y<6L zF0E6)F>o;%begQ!ppHMu!b5>*Wiq`fRp-q0io4$PQQdJjizgTxTa}dE<8Bj!mYrU^ z*>XCQ{PS~Cdi%0u0Xsvb1oGd}mDS7lU(7n) znX;2&GJh>2>($~fjE#)s_4Lld(Ne;|ueW_7brgU(rW|TjJu^a^VC)6{*tv=dd}`kN zSiss^5pavBxUq+!A-Fqb&9v+^f$xZ`!k^ypdkM8|4y1viU)Dx!pdw>FG6U?D)C3@MizU3BGOg zcwDXyZM3iyDQ5{AlE;xISuyI#uC}pUKb&0@9<@1=tC1)rC70W6jg!46fJ^ZtLTmrV0%CH!F6c78Zr##`zOcr|@r{AC{hfw}7igYN7Ar#$JME322-8Zabh$HrDKt*4H(E?P|@y|jzQ zc?B)*)w6(Uy75K!4q|m}34bcI;f3l^-WVGvBdjyz$4;M?yLFMu3xbGS6X+S9u*Aw@)Rq-%&E8Sz@V+A5MT0JnOV&S zWAJ(Qf$ONjEJ{K>d2nq54$-~Eqv*P4O|jF$>#k!b6e2^|@MpcrK&2-9^K}#@|LTh# zCf+R@T;VWo&iz%#dZqx_oJiNU>t25qkeFc5ZNFZoM{!~V1GcFH8Moubj+#PIk!lCj z@ODUwL;GG0c24>@{TGIc(<$w9=+#)fc+}J-uW&gV{@gENRf1duoN%4P4 z*8fXE|1d`ffHR-nXUXH>Gx z#t5-M)G@igqztL&UyP4z4%Nv?gJFqXUZ`Bq0lwepzcUA{52tF*03Td$L}=^;=!QoT z)6+_{;Bp)*7)W{w_$ShlzmAA8m=H@HwiBRt$=6BbFb@1*Umcs)Lz-befYMg+vC#x)ARx0k zud^)oRdO21*Xo$)CNeb6R)J!9Y}77haKoRO7L8`mI4WCj6M{Usaazib=0I&bHEh+2 zPd$sVU_nSdF#NHOLuY-(y5E_6nS!_VrE0FIV)e`-;#zT)sx=F%4)VP>f)&-u>OWb; zhF(36EGGLVMvxZp)+BGg!HyH6>Hw*tsl@*6jRiiWi2M5+^v|!$E@*A-wI%isjqZyo zg>AB#1gYVKGh3GHVRnP`GvKByULz0N5thw;4|)*7=oqR(s6?=eBd!={;1 z`-fw}=26uHb94NFnx?1qXCGHCp7##u^emsH>u&Mpl90=5%R}iV;j)0sD-8K0?7Ofy5pNodSdruVD5}Hc8NOg!g}lGk{hLZiO5==&Dv%KN8m^7q6ew_r z43%!gJ@QZJP-%zuHfm%T70*fEm7IxtNPWt;rH+DiMuA69PNF>3{qW%ye16l^luLlSQ^x3Wvx$@TZ-r{X{u7ZwWKjJ(4!9gj z)YyEBfOr++5wPwDRTK5Sd%7I&YlfVbfrD#bsJ7G>4+yYF)#T1zwm9bz{8I+4TJi-1JS1T zAgF$QW8DziL{Pmh3hAL>J8kl{BpGJh=M@P>4l0vLinp|D6$u|knyMj283aj681e6g znHe(Wv24}+piwffo8PMSU)ZKGaetq!9K~~HDwjSrlS;uz^5Q3Z_OHW+q|XHUq;rh& zyZn;FKg)<8G{oiv=wmGk(BKXM75g@Q*XA0>JptjLj|HbW+0mu(sB;9^(3`>%1>SZT zpKL~!U;1RRpB{S;H5Mer7dyrV{zf7s+9{XzMR))EPBc?Sn+xyc#u%cx!2Zm?Er0IC zsn-b1Tg5bTAFFspf`8O3effxaRj%M)+)5!fdV+s?<;>o5X9;;(8!)i@ViG^kpGA6R z1)vmcJ6iJ@zv!fQ#x=MJsGUt=XH7r6s?A%@l#7a1Emu1g^2~$ZB`trnJ6iP*mT{ zA?9D5A7-rI?IfE1@KL;#G_qx#RZcWYytzb+HdYzLb0su3QRv)rk$yx}9Kins zT*z1>0-_rFDeA|MYc*y@$J3AQyBweDW5&3>f(N{-otD{OKWy4`@)pjfUd*{YY<&OX z5Sle;RiQ+XUEpog03y1^-$O^?o;TCfmMP@nUW}5?XDxnov1eue0IT}udGMKSrA=f~ zv&;Mu`vouwe%633dxwje!5A;(kqFgFh)X>k9JMgz=i;B2BCDTzyi&uwsiA+hLs9hu z7<(zSA!P_gp`kh8_vr$RK;0x->5nV#%8qlSaxk`+iv`KzOP4}_pcKplu;B6+&W}2z zv1Y9%{aSxS>zV%H0({`FRm%eeZw1L&3gY$b1kqt3l@YZK=1vF+C0pm#%l%uZ1<{3a z(8LK-!(Ms0_|0So(HvHDHUO;!-rto>{7p*_7R!z813Q!YFAi}J| zf4VxmTZfa7TACu?!UP-HX%lIk+-e8_L;?@oQNuIcqr%PCpQZ}0E>LtcaC4Yyu>(|s zHu3{~*yc&6qH2+toBIsps`y8vD`UOxBI@Elo#bkI@X=fj?+LICZ7y6hsEw z6i3Mg*vOeuZ_SdVQYvFD!479ae?tL(ivuri^WirQOIiinUS^kdaCf&hOU%0-VDiKq zoL>&Hzq;p+9#|8}bQ94DwGN#5A8R;Yy<&SUh^mU*CaeX+f#vAL@~ zJueGJ2l4_3!eGYs9fPfv&B@&^>FMdZ$BHl$HAV_{gj6_0^ z{-_`);vW=ZdErIMq+XFETB=le?)CeVoiHjTWiEWra zh#?6`INwpnN(kt|W0Rz)o^*}tOCjupzDgzhDh3E76lv+Gx45j;HkA?F4L^NlK&7 zLbx7aQzsz|!ttf9#fy`kjnFEzPd!=nm8%gBK2j!f?9}4w#4fx^f?HTV$}H;5!Zch( zV~YSk$#r=mN2H=Rs5TdZwc>lAv11x4-zb38qjqd?{-@s4!su+_Oj@IqH8ihMn z;13Rr_>mxHNd5Yb_C8vgntCVKM?{!#8EKiZQR#{CI%zXAdDr5jdzHh5n#u9eDe0LB z$r*Wh$>(RpC+GXKD}vclBp2?jw>Ncb=lTWX=UD&Ihr`UuhmXq0kIBeiJsr6w-exQ# zcKj;vMkMpRI=}J<=97=tJhMIx^cPm{=XYrPXIOZt*?DNYs3;4lSPGDHdW27B8s_1# zsozRx0dNZmupxi!5q-5biBKk7xC0f5=*MfEoe=Myqb23&IGr5k1b&X{3i2N0H~i%# z{pccr&hFyoUnHodblFJKD}M{np!9o*?x6m09tHO* zByj;!51KBp@FV~*Fh@l@dh?JVGHYLlO8o6p+Ss>eUX;YS{u%^DVM6xZ$F?RfPpr_h zEm$m@WaTPw|_sMd3SjxEyBX{8#h4q^qnFZ@OA0~`E(?~X%Nu^%&-1xTzOp{omN@bOAVTc8g&0{NDP z+jH|P|BM;;L>BfxviSmxb0Pxma`k2XW@4SS^Y~{=M;~zzNF%#gbExbt?uCMt_%Yr} zgu4ZJ8sal!Bf87-suP-8;}Z0aO>PpB)VcYYy>b<^sOA24w*&a)`2R?=rJ+rvxVU_K z^9%`n8Ig;m|JIWV)_&`X1oS2Qwqd>LYIaLXe=8p5Ixqe-INIMHYcF+MC6H1vl)Bd6 zkI6IYYOh(9-vCWN5?1Ew20PjMru0d`b0<)t>RqBbs0R@%&+nR=bs-^Qk9h1>6`*3L z@lG`RJ=ak}TOfzh=%EhXh2b|pc|JdRY~`C`($nFrIq1vzo^HzVn=PUjEoH&r+Akznf9YXkQmK8vt#_Ip5<5`0h>K zlJ=O1ewn7`Hq|J7i{Gw#tV-Vos#+4q##$>VagQexG0NCZxXGhL#Kq$`v!)tklvt&U3u-s3Ld#U z%+5_cAhgc)&((BxI;J*SJn)a&K&38?tv?6fwOQh!h;^0LK_*O!Fc}%`aW2}kIp0Dd z2Opn0k?qMPHE#y<-fq@67iB{hOXXEC-%uXD!!o7q4qefAMch{y7@n%!HB1y!V9ud@ zA%wrxM36^FLx-LM>k%DYeEoAivI=wv2=e}o|a+?@;rh^C%K@JO`d4l}ab=_ujjIfWv2pyE?c@Y1q({SnEyRgL7xRP&KR66-hu!0>PHwBLUQ11PL#LZp2fDcoH)5RDh!OP8K#f zCnHr;jY3=@OFk3_2g_%a{+oEwM{Z|f-)DfAxbobA1c6}ytP@KGcNM|-fF z4t4CNn7Oygr^KM3T0NDk9(fn+5w3G&DIE}<%Jyi*^@K>{3Pq|@s^WG1zCsxE@+ zheG6h)aOx2vL#Ebvosg{ebOab*!%{{_;vG^yjYR;Q`M?^%8KtV0nql$$Obwl!$4Rq zy514zw5(V{@s_Ku4t_3QvzQ@|@HzYvvXBKKKePL@r?d0=2E)*45reK@3KW78GP zOixpX^!`T_9nS~Rlv0ntVz%`G|W!DU##D!IHWDZaoPBDDKn+@^iB>_saA#iI^ zYNbK-B!y$xDT20ZDHf^j9CX5Nm#Lc~OkiTB` zz8{eB?R#xyK*=9`WH$LJ<>*VIESniwHY76`1P(;RObc@35b7e^(F%hdbZ!3XSch6X z7nz67Iu@^}n)VD3U#C3GM=~jFpnql+O*>m2#y_)l5Nc}ZvWwNHTUEC<8Qz?n-`k5@ zvykdk|K1r+9(cBp_2Mg{FNE&)WgYke2HKxp)e4qv{3pP=!FL?v9kqSey4*F)FA>a8Om4A<@*(6W~C>*0WR|7}eaRQp6fWO;gooiqVeezi95j>@LfPqVtle2Rq zJcxxxGS{v|je=gzk1uJ>d+?umvZH-yos*DUBfrdZB9b<8iViJV6rH=D(R?Zbr2L7a2 z9cxzpntUBILJSohEX&OeBO_z8V8D1$w~Bk;*7}APF>FuPZYy|uv>f%46yxez^2k{q z(epDZT-J==&&$#wZAfb^?ke6zS-e<*qdPmp@YN%Dr}c@7v`CUh33cC?d19~wK#Ni?o968$Q^>ctH?uOlQi{W0rhXWC#`d}($eu1JLAM)@v?Q_U z*?KqF{`&1+TPG5LdGd2Si_eN=Q>l!zlnT)4HZiw6+|*U1FPGa9XFEZJL93C>`6FWO zMXO|~4pW_M1GU~QXqzhGa#XYf0zC82dIk|!6KZ+!`pRvKXz3y@cs35&Uf;<*XlWrT zq|bk!m`d_${b!#Rno;27q@11u?Ms4`4Hr!zyk&DY)iY8Tb17 z;WhQMlxdXgP!y#)8cIZ;G?Wqfeu~`Q_H}^i4cG!8A_>ch*zrZD?+z6ZJR~l<=ZQ5{ zN}g(NVsSk8monNlJMb^5vu3Ow;Mgua>9-H(caC32DVQm<-MJZa7VGP~eYMLpJu93K zw0+5vbenajP831%qh_4kjnPL%7^ByS4Uy8eWUL? z=E1j%Vd5ekZ`=B{L~eT}N{dxHC-nAE8?fkX!N zw3{;2JNlX0Nm7T6O9gWHgjN9wjDBt>$Bz;)l%x%Vk+~KLnk4IcPDAa+_>J7F0tWO| zWr&M|E0mOA-LW0i{C)J>mO|W?2KIfT*bB1`Sl&vj?L%XG7ay%SaO;5@e!$ zH>bdhht>D>m}hI7O|H^+SVKPvnyq7QDS+&Tgm0|J_vU|?pT!*W=>h9*pPkM>cMD!dN=Tg&7Gv%8L zPJm83Tf+HnY*#&T(x@bxf@Exj7>^{IdQv5^v-%iXJ=DEmFGiVK=<Fg8sl<9m{P-+@4 zUu(w3yYy0r)Jx`sqGlsZuyxGqf_FFUkM9L(L~A6mrBj9^5M!gag$Z45mP$V67x2*9 zGk5jeO?Q#xak7QvEg~>p%WB>@uw`D%rnubHmN^GAT!|^gHxoMT4Wy*`ECTSLKl2 zo<)pgCMhuCL=85Y!RftWL)Q!`TL_0x4tIa1w^8VdOuu{mH8e!Nd{?ehO-4U=o6gI< zaIVi!==CxB_YEWCp^!IDQCh0eTcW9doh+jPTM8{T`{$wKD-|>sTwWLqD8h&PFvUh9 zz7@v`wj1$SuKR5nXyY^otALvY+xC$MqKPu5^36ZYn=GCYUV{ z8g~YGxIEf+}JT`_Im>JH3kOlb~z5+Dq;tI`<5;fE> zzJ&}N9Mp!5c03bQRyoAVYN)H*ZMT*v0c1~^z8%)pChemL8WGuR)IbL@gR&0}ku|os z5D*d`;O&-@|IJ1w;FuL~|LU$vD7g68B=HcQa29Me$Qp2QedzRke46LY_{EUO&d-g3 ziavB=docdz4>gk8PXC8;tVEZ34th#}}b{YkenUv^o2#p9nD{HHb zOKg)qJNzNT^P?aI^xN)C@^E$r2LZ45?&%c@D^G*yGk77ABcMXt?ym_hI&wpco4@`X zKRHJO6)`)ui;%)|W8?VToQtO;;)!|j$$*IQ$VhQG{^;lY;aP=?1m`hIX?7%A>SV2g zl#rN+O+@(GRxq!Dz!Dx!!1L>C(00fD?DR4nrd=ltjE=O*KtU-$P`K} z(jwNWm#x!?p~UYASz4LPceksEh;c(g#gg%oCQB)<4j$=!e0mQMz}h)-7NduBWr4JC zXwgtoP*5cs`-rHx*CP~E(a+#qp1{10f}8o2ot9=`PEN>XEUq*nVSY*2-ofe4$WS|) zOSZ>JaUbrH`<1i>Za&O-JQYp%#ZW?>n=NxZV-!$Ug$^;1qwBLSgGsQZ}%jfr_-Z@GOwn;St z9+xL>uW-CbY3M%lqW&(?ax^gC1=OeZ@uM|77elFcxg03T7;`uvv-}j86~Mz!YwYa& zWprYeai|xQg z9-O4&;_|)mXN?S8?NN)caNbafZ;Vql>+7wne2%($1_uh|l)l^Ro7iYcolSL+Y>F>4 zD>sNwNZ?lm-U2(bjf=eXDYd3}IfL2c%~8p#6uA1Co!M9!_m7CY{M^edPh?t5DSPoQ z(`LfL>q&%m%jz7zhPBRztm!mW6+MnZwb#;yKr&6v!HIo@Q%mdf5v>R>E0p8sbuzbp zR$}NN9o}5-f(puO!5NdIikU_5STxS+kYP$E9I$loyyqcJDJ`pq7`3p!d~OT1*ztQ? zUw|czVkNK1R@L?Gg+Pqt7Y(S)hFbd?u?KE&b9qV+I#PvAI-M*JWL|pPQ=w;MX(}qI zgYR2g9)~Po+K}mq9Mp#_-_HJ2wuSk)cohRbvLj1WG8(2Lg>LD2xAyOxU-v8M7D) zf{GqTl@4++n1@Xs$W zm^m6mFC=|^9hsR~j}2}Zc3~ZOOswA}7%&t7VO5Q9hl7#({cy!mv1Iy6EdrF!9~ zqY2~?@LN&8A0DG`_t-Ub1Gn|EU(G0!S_A*fXn~b80rDeVy`qTJ=#=`d;dccMj)iZt zo|F`t9bjW8bWBoUO9Dy|M2jQw_+He3sqCq_I!q+$IF@tKIy+0x+3^nDHUe1}r|CLE z!293`#lM>XUk)InA*_>rE-0o}e@J+*jh*p8YKG>PaC3vk#KbQ$zfw2-7L(l;vhLm4eY#m)qB#f8sbNsO>pYVedwUw{$|8Y5zmgktaV_IXV6EPU2)mOd$(Ey} z;@+g;X#3tFP>;NxmEC7_6#pq6oblh`* z^_1DsHn5e|P}I6VT4!u+)!BFdX^61L^U-S2;0GpV@>a(?%o>L7%=!8H<|SCn2xZ}n ziEdLDde4+vH>Vu7;*P^yH4?MxWx3`d&7Zdi3K=|B9{}#ED5N1KsnHdf` zcJ8tcr`^x45hWA{e~4s>u;YXia8g89z0)`~8a9@AVShInm6fWD=a`sA@9y5K@R1b1 zkNbsrIIO&~I&xO3_^$D|8yfYWfQAGo6N5NIxYHpZ-rbz+hcdt46{O$Unvfl%2UX!= z?;*R5YW5vddgJ&4I+8p?buUTimK>Qds7s>NAZGj z`BWm{&BM$a;^pG@__yZk)vt>W+(R2o(p~b~DC64iOvcpgOifL*n;SyKL2?wC@5jkz zCEstIRIxefIf)!C9W={UwY5xOAxVnukD1B>I_C^*k`B(UzX-qnbfio7x1D;R4{7Pa z-$fuk#Xz0a+6#i$&EM^hbNF@FH@64uxHdk0oZNiw9`6^e2?S+;ef0PGA?0GYc^TR| zxCBRW8Xk9Ix3mO1vD`PPIPJKi(&4~)QHn2lCLtof#(vN9xNBi9MpF5dpnL-yT6-%wF3sVAI4EP~n zGQWI~6P&%gIgL!*dFfc8T%Ya{UeDIInwnggb22Oet=)OWf7g?Eh$Iq4`eIZPSZ*f- zzhvA&FAp+mdZ7E1Xc8$BUeAwkkI0uw*^Dr%vYSSQD-1($9tGuO;OSs0ewo=jWJ{@`Y^CEk|sl6m~++H`MHCNi36X6EWeC!KK0EB&xg(BOkwBA zna|u2C18^|jgE<*jqZnZQ_b4y>fOVw(7pE`Zx|Fkb>+R+L5Xf!iGCqk?M&^%``1M0 zo0}WEO1sG!1`;_T=+z&*ROMxPYE{ZLwW~0`!auOrA;A$5zwvPKTUG+1q9fg0{^)4y zQl`a4;}haGFvHo{WVYghSt*plz3+5-_|^Ks0P&2z-=nUD{b97~^a(8AmJhB~#vzZR zB26Q8?fYLJ4D4(ctRW*aU=q zBaa)^xw^S2U8I$1riP)?ih`wMInEsqCu`esH-jZCvhTqS*eC5Ix9kz^Ua%? z9_qf`br5#HgT^UzTILR1Ks~@9-Eir2c=Pa5d1}|%Fyl~<46^N7tW_hMuBL+7UskVon0YvigUdq2~z|A5@3%ywErtM z*Z#Y?LMqA_{j9*l`;G6Zg!;a!#Dgvb>=f%ZEn4xpT zEvKWqx2&{~Uii~bcpjom*2zJQaZoR>?2R?9Zx0AXWG0`-U!N=N`bIXI<$)rz`IONF zlJAR!kv&N!oD1!X(L}66D22W_jaaplLuoEv+J5dQlqU zzrb=DT_u8u{qn4SN3XPW5$e<0`tH001J#$LPiA^%QhXx+>et}Ocw^4LTG&E(Sf&@e8)X}A(cfSw6uZEHiB$Rh6_lHk>Z4(2sQZ{yTUo%h& zZhl^08}F!}>zkYDY3T>K9UAe5%h2r2*w}4{rheX_s`I6+>RRKIR_Yjs7+=m;!+sw* zJJO=c7fz_G=W~0O$btdRF(~a}A+v&gp~IkQLxH^-B!AA{`u^K9B7}1F3mmc2-Q~Gk zS4I0fwlhnd1Elk%R@bNIj?+$W?b=#!w)x+_JSA7xX^f<%-kj)Yg}XcHSoV8InfZA~ z7a<9i?q@eO(Rgh<>!WK>Q_yi z8Huc|jMka^haNPgUww5{e|Kp6i#Cc#LTLsH3R1j{_kS4GNoK~yn>yXZsIx}CxY?AN7~hkQKF)R&U~KszP=SmuC#UA4rR*v!Y~?LG|Hl1&>uvSaMBLNXOiNx| zYg%we#=mj%vVVTx5oG1zp|XA+u1z+Y;WH>rkrHD<5OuBMGCsegHvrf%5F~v%y49Cd zPK%p2|1wJEfi*FS7AXA`lNs@Q+&`-C#df) zHX2$wG9k`sQiY1v##y-dafw(dh*V;fCc?CWQ-ArEj5{cYf)xT3@&}B;y+t~8eEL+7 zX}Y%qSQ73JYA75V;8+$MNlA?Y;zqxf+DI80DLZ=OJWP&_OO(n+%H}f^)C}WXWF+hZ zE5|8gtOnp`eSPH5hws_d-Q>YV>WGq5AgKqpL7`rPa%yO4?Ze+FL4T>MFSd4gf*(ak z$?A1@4;+LmC>wEiCZ}cNV&agmCnu+9fIE^=7N3}X2eH5}i+S_PIoJqFO?+835vAkI zZE5k-)rI$RK_FnHp#l<}vnAs&s){U6a3?RPtz~&v3Vt6#ja^P5;J>$Y|1PN9KWa5R z;{U|I+9FWk4PfWlX#emQwkG5>DKyKNqP&e5L9@$!SU(S$Ox#>Nw0=SVNUzMe@XL;m z%|_3`L?K{f;s(9my+VmijD`A0z)FeF(f9^o;c+Oh_f|`rbZKqt$TIK5yXg}!by^Fr zn*fx^bGy2$`ZH$<6@t)dO0#g_T~=B#qZm{gGz<&<@Yip19B4fw3rx~ zSQr_UT3G#LyH$r+SX`ga&Ba7d&Ct|XDol~o#O}u1=&+eI4h^mM<^frkyjJK9)inTV z6bIoN5gzU4=p4)=7=8K!85~T%qvMTxm7i<=wDNv@6px;PgPXg$stJLBh2lT(ll z?I0ck4Ak~~|M2+cd!#4_E9?ICIU66_yW_2?Ck||0Z0sm7uSx{BLD?Hk`%?!?PHrlk zSKDJpL`G$FdSq`S=OgRf&uxyMC+5)c^mF8Z1PXmXq~@dZ!^sIgI;K$_v9)Q;sorf$ zdIB7p*APn3u;K)qu@5Y019et!BlO9)yRR0ON<>IcNzb-#`B+`fgn?I=0|5@Io~~wBeSLaboUZE!V= zIHFhJ10B?HkuZgmx%M+D?ns5eHVhmL_=q=)jwx$jxgoJ(DG#TZy4iJAhFc)`KuCxl zAEEc&`941z7atc>T2fp_R$5GVK~+-%Z*t-#Iz}P|c`*sOy4o@kLO&vt(jTDjxU$Kr zWBSv;a&Lk>E;>9nJVF_R*c3)im;-{t;yjAMO$6S-*{+ei0$7xIAhV9p(s^6p*lmNq zkFdxiu-*OBa3msxPGdmrU7D%Ue+SJB3Cr7`uiZ)ub!dk%xlcb_#9UKo+ z_-gB~l*ZDQB`NZInMMt14b=d}le=GP7&SC6meUeWoDK;{zjO)$tLgsp;;u1Gvx3oHx3on7pgJw6K=2j-!rj|K~Qp zTf_-)=fstbofQsbd<+3zR_Pr5JnutsQ2nr+$(fmrO~2F}{n5_;rAacW0#TAE*cb%3 zu+=2$Gf|_D@~Wn-r6F+L^T|az@1XbvWoFiN5k+?eH@n*Dx3{;&LuUwp)py_ zt_gj;2P&k(_^jY@)p$=YXqw%bv1=|}+<$n|?{|z;qe}Z(U41D9H;#g%n;%97_9in8 z-5($OnRt>)I^N7Nl&vlkX3i$c6kD%+NQnO1nCS>t0aK+!9(&gQLB?BO%t$ zyc`$rOR!On2S*4PXjU{3s7&-N2Y?EX=Tb)t;h`z!6aNLYS|wf0LMa=+9w@=}HfKV5 zBFZjWV_kDnjy5_rN&#@0mrYg$xK04##rhJi;6adY{2w;vz2rTA7rpAw zgPP$-b4~+SGlp?!c@SF&3n?k-nhHy6D+^eJZ{TerU#A!NvvbSA*YUsho|X}vJ$iGR z*bw9q6`vODOB&{)9=jvdwZ}k-K}mR5`Jaam%*rgni4;0!afG(C_eUD14zFh0z?F z@HaHGuztCF76<@muALP<$x2R9Gc7c4NLB~`8|anR7nXN207MiupD$?V*>Ukc@5}fv zD44g7k5FG$mbPvVuCxpcRa7+|&O5e_MsTWsx3eU!sz}B|3v@rhI``dxks=Zl1 zUs6kO>!c_c+mHZIcxD-F&Qb99r?jxLaCE!3D76ElynA}k)IN&r#_@U>t!}G(4ZUF? zZJaErVJnH|Srr(aqNZY?Vf%p;yiG^CZ|(g$B0x(2lZ!})m!o0#=!}E&$Liv0W_)~h zQe0GF5Z&SVJ{*|J1UI2#qQ+$> zXD6n9vu!2asG|`v22Zq)>cYf91?9Q9raEnbpvjmD_8@;k%6#FCWBU!V5*KFwd{lIF zI(j<4Uq2Xh82vQ8e$Jf;Vznz4QUnI#TtH%cz2gOu&CkR4e#IfMth&TcFXHJ83VL~i zD{2t{cyWJqapM!w>8e92KzflB6rA1SVZV2}M{i`gDdQle$l+`^EjpQBgB+BebVl3= zMI@~ehknZmY<_lr?ibC~kc_{w!5WLAm5M9bNbz% zWbBFtf;0NIyMkj@Q`I~8ryPZRxJtLw-Km1OD-q$nD5K%x6L*VB0=2EPQLP@p{aCqd0Eb_sN3;|c1Pb%x$5C*1(nCc(czyQ{n=Ph zMaoUX&dKQv001m3UOMc0M6^Y~Kd$V21=yKG8V&4DKuEB$3Do{H{;u3+%a|z-N{x&R zYj=F5L9D#b9Gh1v`=$rtv=c{7*Ug@D+va`ST{KkGo(|RcpaGm#easDl{WE4Er1J~2&uY;`WY!TD*Ykb;0BD> zDHlJx)8qI|zfB%SsbEXf65BYa2P(NjNMOT(|G3*xA`qlfGji_!+p96*)EnoqAPErjO;JH<$h207hERtChs09L`F<-3K?<_Tvo?HFh#Y+bVn(|}sNA;9TF8@`nlu-RF7Hb*5$@q`6uRFhE zAJS9w1*yv_&)wXKl3_$Mt3A>8>tZ7bdP&7m_}b!{t%SH8dK%mJwF z<+LouUc7hU4`A1%l!VvGNB$oBk@ zckngT*l9G}|416PW~C=7_hFv6fm5OjK8VH>j==_ zHi^OjFw8wDgi2^)Hl|YZgm!-7H~W~p;P&UR78iT zw69iEA2(+gV-nGq1SX5tCK2EflM^!0dOn}34h@N?_a2Blru5CZZf^CPpBK1j5_1-( zk>eE132iPIuCdK{^sJI~(Bo@(6JehRT0^r=vYHnBR(u5>~YI zcW!f2Q!?-i@~hJF3i*8Ln2l7rD{gOjeMTBw3iONM2_VnGTZHwb@QORDV&e1MyAm%? zPdxnneccER*gFw$jQx8Mwh$_|cYwe9H&-bUO2U-5IOQ^LJ+xSqZ|Rwt*nwF|KgbBO z5YYFnAq+<$cDOBSHfH|#1`9(&M5raz9mw4GX3nTh=cP)bkEN-VzJ9(T ze4s#muW%SU)H_ehMV%Y#wPF)0#9+DUYM`>5BEAfRmt<~U&?JW9!uJnb()weWAdeV6 zWRO>Z4LS)dTytw{VO~Yo`h+AWqm!d2b`oR^YfzY$jaGoi)65@{7(fNjyN8k?q**bv zidtV~OifMm8XG58j@q=eY?t*ub=XZU5eKyQChLk`~Y$+YB3$(E}dPOk|N&``XixN{)ja}5yeqz5u5RQqA?E}f! z*}G#3*85rLoY(yN#5A6mL(ByE1N*H zHiU}sauW)KmvDiG_mRvInFqt^%Z-jo^wZr>-F7+^ULNkj#$Urjbv}NKj*DAfUNmlT zNBe+l(Mz^ALyQR-y}r3=aF*KXNCHc^+!U1+(JgOsl}!KWbbEC4(fw@X7%1b9XqUFV zv7>IJosF9+Bt^x;C%hm^Nc>8WpYQ(RPFl6fU z`5@%}!Kp8ytE#h6=cVrAA})1m^ONAcPY=it2C^#uii({@k>l*_oSl~5?0S#>@G$pV zn^UzCNOKKFDDc=*5*==wfC6y!Fj+H0Iwz}XZ=AgtA-m}%WLs%D70*|jIH{(l!xv>N z-vy7UD9(Iw%ZYvKisdw1zXP zBlA?$J@eUARH$!o|DAR`yV$spj@Q^X%L>tiGcIl_-M;>csR(;vqc}^#Wa0Q9pOxVv zwfz$4^SL}RvGt48;L*y{4g)8T$lA$yA~2gFW~Zv4`7+Mfe|2$cd3rijzBU42Mrw^<99v|UrwVODo}q+cCC@-*bJpXTivxr(p+Hs2$=ryF@s5Y3l)v4Ikrsl2g$p|!0d{VX7GZ=i zqB%u<{no53aYckCN-E!iDeFCFd|nT=&YCtdDl%e9D%G2B7TT?u+fXWPZ10u;&;uUa z*-u{{N08Iq0zVQ-oaY58MM@rx>mGgr&PC1rY~l@Py^jUOQ(^d!`Ft$?Wb}>yk8n=$aaLFpsg*#kmUu{|0n2 z-QOaRAUIx}Um(k)P#*ft?H=9r{#hlbN$W#|pU1|;oZ6pOl!Bznzn>0v9iFarK$fPL zrnNN;hV}F)1Nc2JclA#kjq>vFLck$k|72Cn(@2-jwzf1S6DCiIn~ukUwfO-|pS1(2 zLEyMw6_j*t7VAa$fJB8pUYbM=)m@fwhIUG|D=7`{Snc963fxiyj64tpO0bs~RXU(R zuFh}3IiWnw%|2$|e^mU+d(EDB48`(kdIXRuP`anh2Et~lc82*o!xH~UGrd*U`WzG9 zDtN>tAk(1r_CMJhvASx_BNij9I0Hb7ZT1h#LgCN0gTBkuO>+Vc6-W3;yLdaa?6{n= zD66vZwBBw$1TiEyIJmK)feGu)@<%EvWfc`HoX&*zpRFZ=Ub?D;uL@5!OoiZ+!q^ds z5ugPK4GWz(#w_R_SU@muz`Z}oIfCQi@&5esA07SG$+>SNMyl@>k;^M8-YR${z0%3O zclVM2XUD}vc7B<-*^YW`BEYIZMM;Y63O12VM2eRsu&k`w?`OUe4x3nXk!txvBg=Ot zD{1@>A|SA>I&yn^6V#JMk?G&&kMf8n+WOQJSIx~mA<{}tP6k3=WGyA#C#~S%*qZ3y zDJ=Nh?Xc0iaJNm(5mF{BDl#@U-aTWL*Lnb_5fm+KDvCHtcO54F;Q|}0e7On(Pt&`? zSGl4>o;Rx|t8{uQq00oD1X8vd2?^V-J^>DtSNo@jfRpGeH^!96$;fc4YE)Hv|L!Lf zE3<=xgQ1?m)%k^|tGla*PeN)2YvRxvmsjHZ4kh&S>vx16bZ^%uHGYMHB?9-Nk8Bs$ z6031|Z}3k3Uc3?IB~R{)!6i~dJATK8zuN2pH1;#<>+99j*1EWS_SwF+oB#gq^%?Rf zQ)8!7*$fEBI7c>BHW&<6;L$#K^D1gtPk+O%KxT1q3XhDUrM~$cF;_OAVtjNZ#tO;T zAA`pEwfF@yL}SLG-Uau5C9G<`TkwW|$#o>jFR4NIf^-4t_t#3$K{_m%p@Wixn+Aco z3mzeO4+Q7?7!NPcofs7$uLu5V;p}6OiJN+6-1+ZkUd8t^_-~_M6lZxotrYRo6nqdr zef^IF{ssZLGOq(A0!@snlA#k`Rc_Go7LnFLy3n7r1u{Vs07eJ~cl*)^(G;4So5#k+ zj;p9lI`3^yo=;8PyTFbpoK!i7YkzP%@|M*%Rc)bQE9`uwP#>6bXt|=L>#sBUv4j8JlfY5x3hxBh*};Ify&9rDHI{5!Bk0jb_f3~;C0d+y_&W94mnhlKywmAF}XS>F2qH` zm&2wn;b6yUvZ4%zdT3rp+w)-s*8u0O+r=vMnhYQ5>8m8W_M93~a%}qXHEs?tT8<@#{&v0AKF% z_A-Pg@;tKh`AcVMrQI|od6{asP$@-+MGj{O#aV$LCdA+F%MT1}@BbFUs8CFfQdnO< z5lHVEEx!9|s}E*AIe$F>LvpxR=((*VoZj z5ykDdg}3zwmL)WdSlcou@W|u-LwUm-M~H`x$c_MSVy)?GbsFM1aZ?Ex$e5S&@Oxo_ zrBUY%fiJDaPVtb9pJ?I0jS7vy5?z3iqq@8I(Phx<+{wSe-+uLMZls!j->60aJFq)! ze^#ARZ{TbE{X6~|`VN`ig&XZ?mVYG0eN=+HdMdIpu))UZI6cGAVApvFsaq3Uh+AOu zzPGY0KR6aVeL}A00K6wJ&yd?w36t8zJtNj(*1)G1S4Wkulkt=8r=OipQs(AvU)D{u zEd?sxTBWCFrY9uvi1A?x1W6dOtTD4Nv9Pj}Q<7rPutuhTgs>=vyJ))GV&AC1?h#N- zUvFI3$9$FIW!u4oWO8v)ob_H2w_q|d(d-SJei@x$l|ma)8rkE^${HLmJqYP(Ip~kR zTIpDONk3RxIv}gzw_AsXw9~0Q)Ml^!?4C~kED%jVgeNM(V-#W|?(@jCl>;k0{qhn`f zrL%KB6L!WPmJ|{3om+i`chSN7=PY?>5m=R@Rl|@%v9YjrcXnh;JuDSwYJv{X788+> z2p9saD9*$n`Q$Gl?*V&5oEx>Mt)7#f`SR=~`HDCp)Pz^ljeDbdTNR|dZ2Bcv&162m z_v2*C?u7ByHep@8XLlTpCe}4OT(L+;)0}q?%uaobxOKkfkTJ6rT|HIYoJJpN@Xl+z z+7%X^B*ug7{S9G5vv>L04yi2RnBl|DLreeq(~jWx4Rwox*|}GD#3qbFI=U{4cXvn? z?-f6=FthlaKOsBQ_(S@4PcdxMs#{tPc6PFJQac;179rPgcy37v85a?iJnPvd7SeD* zhL#5Q-CqZ61+-X=>eP&^FZ^}#0)_$FK+~W%7Z(%2&-YPBe|d4L zxpJk4{UdDkmy{V-P3)_cH)tTb6{LwyNW z)lz*D_h({qoS;~Fa*)SI`geVk5HASjr%dCj#@fSxo3h5jLYhhhe>XorQD$y#adFDb ziu@u}h3tXt{Deu1ms`{i3of9dby*HK3EBx zXv~*?;vnXO~Q&UrEt(%=2uLw`g?-tA4PRYr2>W0v)^27?imX$eay0>ClVcfz(*Be5UHhUnS&c#_=H#T1%(PnU+3!Gu zilMgU98e@B2yYYOTzd8J`0(O>{4iLGcZYrOPG0`@_ByEh7ZIIMSF?ekfeE(|@>SZz z_IX2-D{o-x(V|pkqbx)Zz~x5--fGB zdPu%(P=!}Y@*&TX<`8p5mH>jma3`Jc6Le^yQ#TBS5vEVNDZy!aMe$kCP4VR zcBw2iApxbJsH{;}RVy7Q3rl%%$vd8bN&zAL&+n3l&TU>xZ#ax)`If6!m)bknOpLHc z$3!9@ZCu`&|1vK(F~Vm)vry4~x$H`H_YzHFSl7DqgY?PK&&>p! zNe2fTRyH=3XjM@AU&nK2EHPUAZwLV(8WZ%1xqB2PD7b+Y9qu?rrrD1R7qJKzaeiS^s3V5 zCTTBgL4Ui=;HG*KO=x^*=&0|CW5 zYEY2$4iO94LVi(|5Wg_HI6EaS_BCQ)MMW9PU35eQ2_-2n3DzW}DfB}HRR+S$?)hB` zaXm@Q;UW1Mr-_BFE6Y#oIJUDowpssFum)08N-P``4b7CjcGLn)>!G4ewS=*%mNl@Q znw(r%__^=xKpkH_R9WH8baqAd%1Yb9kGqvjnYXLG3l@%+ul0gtDn7hd+222@?^bEq zMf-+`4GHs?xXT=mdPIffyZYxl*fF(@0a2;nEG4Qa&B&7NP8=V(=oXSYdP78GQ-`xKDZxFe7@ z0`xO};CLyRRseQn0euz+1Ff{OeAb%Jne{|JK9!i7+*nNw+R)6^i4X_P{Ap_)mpeMs zz+g#EQT5TA!l0%q*TmQLTN<;kC&!*X5LH;*p?Zc{Zlskxj111P7;+rNeKZp96X|96deV z-wY`rN>C3qH&;haY?fEgOC94W%?VPg8(&HIp*-}cv0TavG_+u=Y?H)4DI}!t0vO^Q*Uu;`N+^vZJ0lNb6#3qe2338I59ABPQdq}j*ajAp~2)yg=5{HnJtSq+`ahM#oM9H zyF&2d$awnrUa7xKfBxg(hv0Av+5G2_pdip4GTHCK-@#Lx=>>g#-@c(IQIp~=uD+|n z`gAPy521sMoD>M1rOABEA&J|^Fq0)b3#o+S{uUvu(HTxw9o=z*V1eEyv5=PnClD;O&%uYnvM zFknP+BfoO-o{0&;1a)Q&z-XF@D2$Pjky53ove3|NtQ~fQISE8Igs+Dbkh(pZ6a^BC_hq<>#ajjgP5#!%G3ULDHeLslQHID1bBd@o0rTLg6lL(fW^bHZZXYE2$`dq%` zaT>i924)sr{^bP*6Ro{M#Tr#%zB<{XHKnDDb`~N2-rj=3C`0fYUEZ0rEQnm%0pvp+ zbi(%WH_pbrL6Am=Q&-OD;Gi(J_lZLv+@*;BwIe2SF5k+q-PGid-bl~he|vBc9m#zEapkXU;C2cyAQDLp-d?-8G0d0)PQ z@MVPxo?$EYH@Z(yTVt0Mi3nBkFvPC|y$M0vtGHWl%uv+FbT?^e_B~IynEP}xGW4&C z2lsnrcwaKJvh;Oz^G>-78yPr12U>~e&So%u2?)sQm?1arYAcFJPRg4z`Q?ne@UY+U zU2g$Yt!O0cL<7$mAW~CdBt+luc(&RMcgzl{G!bbrIS_+J=5m0@HL}d|Auh&O(Jp$`5GA zg+#D(vj5_Uii#>_Eu|)b5bCZgsdOTfH0I1qPjXO1S!MYj$<#f&kQwe zY)skKZMyfXOyno~>g4+^6Q?h(X86(BRq#Kp&=YCFd}Mq*7XE0@-a3hm8v)uN20=SH znRjoOyLqQPvcY=BRgR0Fea#8_^B#Cl2R}77n4QV^hjR5BmeumapD-{m%>4*bS|QWR z^MH$ykb1dcOnH+jp>S!t+gq0_ZSkM8-B&!>k2bdTfXb&3S$y5yEwVD(nyaM`75Lw_ z7#Zo+#EvE~X4=^$CMH(B;U``qqs3~3GQ)#wZ@Rc?{VjdP;xLN{LW z@Cx#E5E}+UHUS_feoJ8+9QvP5pbMuV(1blv|IzV4o5wD$@BZ2UBx*RS_u50Zd z_4{@fO*EHeIS^l60sv|e;YQr_(lM=*(PPI}@9*o@{oar<^dnx)k(X^ANoNho1{cbw^o;fYM;~KAwG4oY7 zpwu{1ZY}K@APFh~>WE_;SE+}lQ%y_{N4qiOBl$IQm0i7+a3Q$xW83X=C%t)RV=VO+ z)M^g-OH1T<^O3pob&t(~19lM#gizsjeFsXs`9DiP0$P8$UHae?mK^o`?`SpLm{9%^ z;Y^bDX3e~8%H*_v0gn)aMH$2j45$?LJ#Bw~+D>sT1mD}p;$ERkWX~G>Pq@Luskin(G)M5`{f% zZGB!wNrgoTu-%!`Q4%hFBki^1onc;hQpDRuvLr3T!Io}}MAc$V5@-84Xrj}rg%JEj z_e8fxoM02;f-ywzMA2qaZl8hPdWMR=8+>N&9q75OUyg45?ZVaW!TK8*X`m^FEEx-G3+Ys*b zYCEzWc7R46-^Ljb)cRp6`Z6$}{jt^BR&f$4gMs?g2K&_j;aODT-tu*) zwdNOw_7Nz?KSdv_!{=-_{W_3OnD1`A{Y6}+Qt-Fk$FI{+>Rs{-v!FP`B4y|8(}YGQ7af0+*fFv12EA z{*0q{nSE=iAmW8zcZMiWlaXyKL7;X8@NcV$6%3Y{x2IOO?+lynMY-HCtyzYl)U}aC zIS>kBv2}@$$PDYKWbyynbNd@8Ou;H20&+L$XGpW$IIYcOF7^rhZ-deKrv{3qsrljI zDugHoGwT7;;JL=ORE7u5b&^Yxv-U4U|6YU9M{$}yK~Azzp6-kj{85r7COB~g;PR4< z>!wnQqk(%2>HIXr&~orrOl~d8QGO;H)o#Q6-l`ENB1vv)0$V- zd(qZ(-|D8_`gL>mLTR0tp8!=BF%*NcQC=Eh$=tJuWBC^iTE?jzK{(RA@9ue=Z~iL_ zSY+`#;ixqmSe!QZhMVk+5d3GRO5%!+KIaOQ`r++gK@&qe;{YYe@A}NA$nU^r{n7V- z_-R}?t<_LXrJA7s&Lv?l)tz$Vl%!vKEo(jMV}K+d)S)+F(+SeBHb3`efSR!xDWqIj9(20P~l=lkn--R_CSO3 zHhK$erBVEGQrW*(nq_e3zP?&}55DMZaKxk1fD0&i3Ybb+rSpb@7>P%q9Zpz6LxOlc zTceW)(Nhwztgo7G#*aN#QqPSjPkV-_Yvbc?oO`0{D3=>0eB5&G$=h3m%F5+(a%~Au=9I4UdaZK@t3X68@3r}V$|ikx7jMZD0RDJRe8yG?*8MI zPr&K;DFEMEZtdOmr))oUi}V#l#wuzNLdo<`1xb!_&Uc@}()dlPM!}@gU=@x8(7-?_ z)}Wu=O6DU0!}_jn9TynCIj=m2&qUVG3w-{NN=4gvi%yC=0OB_9f3hLr;ucQiGWpaS zjCI%bVj;qdy&!G}^StQk^H&R)gQB~lbMU3o^J5p$aA6C1S?|lnfK|?80EG@1y%2U& z5hMN;LZqMcXQHtWxTDHKr*{sqz+u9PAJaV zojR%RU!tp+HleqtLwaYxwfxgC0w~!}gy4S-X4ZtUh3cC&p|6#;eWYH1Z?xy~juN}j z2CTTig3?^1{*G~(z&gTis0MR8(>|ERXAE^opRC|oOC31wieBOuPY}DZz4BJ;SkQhz z#Qae|2rQE*9vIlW!dHhlr*8eA?QKJYloAl*?uWq_Zp30+j>^Pq&8kzGsmUU+xmQeFY%)95K6uf!FkcAYp|^k)dyzV$V@04mQS^hXu!K7HP`;YKUBO8I;lFcre^f@nM?(gj zKa{uNpCC!>54H#CCAPX26=9?H7BzahW0djtq<44`UCX$&d7)*PAE7!E6FpEwWfprW zYyY(k8uB3Z`H$-}*x@0Kn1nI{cowL@=u@b*6mZouO+gxN>>tT7|GoBqKZJ*mf0bWq z1u&~(HnVTU9FN-l8u#E~~xHt<1 z>i`mfzv#24|9dOZX7Wd;rQ+btgC4NmLT9*1*)8b^h0Yv5{&^15-;7JN&tvW!SO zq(~>7Z4&Ah2D1#mS74f*si7KVD$}j?yuV1^*S!}5kJlP1Mn{xPh)wx;Gqt7AnCx== z5o+{b;9vMY?b<(knDE#s?rmtmLswW8vdU>MrRmlhLoV3Wak|nR9@QnAvEf{%+vt0} z^lLz6Ve!uoEcVYt(cv}UO0_Eu8|<6Em{@C)XMFi}iMgsF5vbt9wj=2|R&Kx1-xdA; z9+m$+l^g+JL|K(g5mmCYqvoiGu>O*Rbk&^pHdke{p5NuHIu#;52W7@m)`sTfs_18K zx}O~aU3>z$+mnn8hpcIiwby4{;nX|;>w60Q@x}( zTryZLE3Ae2iVcOnXSXd~3ax4?7~d?ain#uI>|KGDPv~c$9^VZ@h?s-BO*}oqLfU2+ z_?T}bi{T|de2ESehm;HjyiN^D$dgz>DK@RqGabVB#rlYU6Lm{L%|@O2qvhYSEWFhT zhXNBlro@tOhQAKgzOQ>Yu%|z!D*7tGhuF&)gEhQxLTe(sv(9o1MTi1Wkx(5QEH5$} zW@f51Y;;+yAu^FNTOYAAIlN+F__rCvi=$Jcm&b3?nfn*{U`GOT&2lCpV+lo9d&Zr-Sq&t+{wy z20q;lB^I*0Hl2c_UTpBgzDE`lv6WqI(cdA90D6(vE@;I&+6}74Ma(SXU-C-!j}Fpw z)X+(6Y(9rbQw_6}8@2D0R%*v@Le;Q;bqLeb%}>v56tpxv{bE$jF4bKY>SrwI?uM2% zjIU(|YhWq2%f}^Ui|dSyaaMb|tNUKaD9Z}I5kuMP-qOGzlyke*2)r=RQWg~!AK>IV zy2tPkz8}z@i@m2Of>CtB)U-T~2fj^UDvz4~P0Vwqnj9`YknJ&d$5KvCGJGROWn$Yu*}vVZuIb2oZ>DJJZIPLhLiKTaZING?pIp)L^uX;FyXl{r<46jniT>T~ z&FbS$N`sorpCiJQH@`=_pyUGG8&x$fU!M_cKph6{Pq$xKQNnF*v!5%n1CwVxTrX6$ zD|P?P>Wr+4`O9|y^1%8)%`Cy)SQ8bHj0g!9Yl`1clY7g!ATnuGQY7i~(A_)A!u5uh zu@fnlc%o0eI?@+~LCr_#)l!Qb2bIM86_HC@WFl1bNFKgw@3Om(D$?f#>8}V8@!z8S z{9i-c_lDcCPwTz+$L{k)D;VW^Bqdf{ z#5OibeNcwuO4Ie2VC%foLX*$sf2>htB&E-p+KHB{98s;h{Dk%M!x-=qtE3gJU$SCre zoz6CZ(psrb<#MxI+>FEi*$oANdjaAL3PoVJgzXH=f+A z5GAV#n*F`$;U(7jHzubhaieVZtZQV>p$QjmXz!V=W0F~Qf^hqs6dsVi^4AkUh|91- z4O(2EVW8@A{l>1Y;J)#!&ar|Du zel@z3k_+tnrUi(`{%rP@h7i5+IDQzLEuD82!D^pz3VC3=m4;Ju^0sYI_6aUri4T6;o1FT*EGMLhu$ zE*1fo+ib9LK)rw8w|X-(`3<-CL(8HaYvAkk7LV|TY;Hn~%;tZ%m`&K|>y4+PE|K~P zf~WRtZQz@%yUM$AUMo(7#SU?2>%|K#sInng6YAjRr)uK7mBzc?6MMS+kG(FkEqHp- zjW~tV`1yL=kYPu_q#)rUUH+S@=^7um1e+jHD%thE)ZM1hKoxE#VbJ!l*vWjJV2+Nbw7j%9YiwjITzRFD;XhtSs=N{9 zD-&PCG(qxgZmQMW@vUbHL$woeaOhOO#J~fP_*@xVqk75QWEOBDfGH ze^gjaVeoHsD9i}wB-GH>W%YQJXae(X5#XYK;uWZ;C2X*4?;R7Zc6kr9p;S<<$;V{{ z%fwQMe@{xs`jq(H?*kbZKV4(1(?Z{v-*cF<2?uvI-I<%5N?zrc!M>4s?Q)}5)6G|Y zj9zXunGSmU^&fE-y?fJK~3q z$!O`kQ}^#wPGgU|Gc>1llibqZ4KFPo89+p;G2M(@aIH)kM`&DT+-bVnf(7`(0!s_4 zT_T@Hr1IseP=6^-z}W1Soc-W}r}G~=DkvZ$%QL+B-R@o7MYOKd2vkrBH1Hgx<0nja z5P<18fz;?%IV~;TLoz+&lcG0RP48Z72rALwOF z1xx@|(@}VoPWy8RZ_NeP2ezP;s=sRi>(T_$>XFQ84`B=}B?o{{G5ua$sll_gm1HWP zYnmgbS-C0E=)DnMs@8K&F3_nqtMY#0>H=$ea{3Q17dC1v)Y=j6c`e|+{&23+pnh(! zmxrBKP_%M#W(7MvVD@0v>vZTmo1%C9_pKRB=e_PU5Y!e>sjB!M+1GGv+`~df_HbsLO9}%# zPqN<)6;g9my66^RQVKiW$$~#q>DD&+5iyDFp_J(5^Sd)bg*Rff4c{i9CUvnV(pbvk z3rO+1*>#wx)x|Mb|Hw$vTu!$P%Ja)K25dJ;omX4ft6tsblhatAO5B~5w)^2Ap@fFa z&XX;ntOfQOwfa09uiaAS+ONNW@zl}yJz_56P{D!iZjJRZnhpVOZhl^_ zwsUI%k9mrKw;o~72U|udvc^$}VgXT!I}^WnVd5$$*C|R4Natkr%h~j{9T1_Qm>6`L z($V+=GL_EJuml=AU7yd>&^dwFdJp9)v-ilGcP>In#tv&2^-W)VNBHST)#Hitt z{L>NXe_vKx#;Ddn_kG*z|C~Mg(1R@>Zz2J>B6+u}J~`HKEZSuUK#RbO5AC&nTml^X zGy9iSbK9i}KF9^0Hyq0i4#o}k_e%Vfdw;dLKM6X$4>8cLFlcm}4`f2RXoO%pEz1$s zIIhYW|HJ(hwhkSm6j#kImbz}RU(73a!t|ia*0ejlxj|cN_oGgF4u2}sd#U{oADpHUTj<^pX#Z~jzGL-&k;>5F!c%7i?qFZxaIxh|qR-hcdz}rV9yMsbQC3 zrtDSM()^-?j(Inm&QBgoCCVNc!UTE=Wqa+TbkN{#;QtK@$_pzgS%PMbWi;AZlOqTY z&gVDz+#M~|TP05#JdMdf$wXlOSSX1y_XQo26bAlV^l)rC}2u;YrQ%_b`B@&-e~f2+4YCIbjjJdYogg*v175VhSxEcQ zLjZZaH#;WTSr*Dit$EAaD{XEv7CT+E_xrg}k3+$7gJwPHbF|!F30(=vnkXwk2(mK0 zlovKsV!@ZBGZ(z{b2GsWLs6PwD=VhLac$kd7DAC%boC#Q3}Y=8#gX#dq6m&l&Sp36 zK>TS-*0M!z0!05NZs(CUTUWR%x549W1Pt_ajZX3AW{&Ny+a-XdHtcjEU{V~_Rx`T% zThRZ2l>r#8OO1CKZTm@l@PpaI9y)?gV_BnNDU%URz>5G#Ku3GOaIls9OlM|S268eM zu(2&6xIQ?0m+Xv?gsU~bZRdg?tq7s)o!fPAdqsr}6Kf?ZR@{4)F_vEhnpoXDRkcqj zUlT?EHa8W6)Opcso$}l6!TUN;XHAVK!a=tYKv`HC&GgjYM}w%p-v+zxM&$6r`*gv2 zi$VZ?lF_U*XttbK12b3(Y-^1^^uN;NJp}Y+WyMd$KSEc-LlV9ll91pddvKInyeY5* zocT(_vz<_H>+MlobhNU<2XVI>M2gBW{SNG?h>(EF5*wiYIxa#nLRo>Cr5LsgTED!6 z4v|{JCWfK4lE41X4#HFIVe~IXYX2b$F|z1hwuJY#WE=l2U1tEc;GutKBD>V6%^iyi z`3z6gedZ5ieB10~Sh~5%Ih;5}gb{>8U?1xp1_T|m10Ay3r(E9W zgG|{MTIk09tcoIh3oY+4idb(-PS!Ed9%}oi29R!8fYR=_NTt7|&d(3*K$zR+ry6Dj zb6Yn?Aa~<*UQW?Yk?i+9h?~>{qTL7w{b4l6w6w zO3()-=}UfF*qIQwyuYT>?x+xao4o2TN;fptql{r6;tE8!OO3{(!{g0m!FZ&XickH= zKqwXjDxhYPQV0BCjjQ5h0^se@F(cX7iqCE^!v4u%sb-5{C>H3a_uL0y*&q5#W21)a2Y1nF9FQBfwnD}L8|kh3-T{`t*rW;W1py3lOaHw^HZBZJI4L{nXn zQ|Ch~&974cOJaGO-LBu@xZZw?07bpAn?DKAZWvcnLCZRqk^^DhUC;ad+$D3KEz$Bi z?EpLvhK@-euT`h&UllRDjCkMuX{`#Y`9Ma`t2;C`-U#Qul=5Yxq6047awrerQPehi zthc?m;f8Oa4qD}n zlBB6-)apn_NQFyyb7M3)^0(^m?=jIb`z$??mM&}k2LE>7u?K+RR#I4z@Hu!I&+?lq z(}i&PGd)HuP9m~O#M3vm+s=~Zu5Yvc4acU|Z}p_3pfnVxlcPMJ{*ha?SG&tmrYn0S zN>N59uj;BAm)z=k+)(ZII-KGEn&SVHKKSpS@Io`#-1wTl#w`#f()N!@k=y}f7{Ts% zPHG?xISHAr{<@;4+EC${29N7!BEqh)RxB1k;pG6j)+xk|-o;y07 z-yfZ+b659F7!}RW)Oa`YbOTy3_wvJ4Y2tpj0M~5yuMwh}Em8XOcbc&QHq3N}zu0Dv zN;2?bGLOzDwAYR?4-w%5KfCzCNk_nXH%o4t`G6`5i)6@8s0oZU8`NmOxW9K4c(JwL z?$`Oeld%dwkm*StCUz_5-H1vp^;wC)rz^k(Cu-Ix0C8;rwYVpl=hLE_$3+$wFn{)z zY7lY#WYzD-cTLn0Tvd5FdIbf=NJ^15zljb?<1b(!l`tXcSAkMSmmOSYvbUch_0d3v zg@GgTXrgBa2-Ld6i8+iyDM84xu@TY0yMt_Pu@K1$z>0TyW=|;j&AwS8ZrH=OSJ=>J zeB4*}4WxJCYV$MUlt7L6&rRUfPS*TN6jZ@M6?km;3|;h_uBoz{#GWJrcwim>65st{ zk55WkvW2m;a@rR=<$lh%I25>#zPlA!t)7&^z7#-CNU6c!&^*Ifs^|{OOx`oF)^1mD z9fk&^+eVf|u#+E-g*AINIddG)a5 zzP1xh&#NXHn+2HH!rv9&qY=jtINt`y&~|yXbyeD0nt$-GX|HYV_?}h}qxsR^jQ&^N z_f|0*n7AJf2XMSEcPP~qTy0abLNX$omEVq*E2Q-WQ1BC`j_37KLmM$sdu!K!>)6dI|zE;--Rmq&>d~ z6!-YIL^Vv@@VL>WU#qJ@pzOMkPc>C_hzBN)pHH{RKfsf`*qW3fxc?7ZZ^2MyyKRB8 zNNFUbyFqDKG)o%k?oztDyStTcrMsm|8l<~Rx;yXt?S0POp1bcKSnGXa&S%UqW1ykM zhFnNBDj^{wNez!6BSwaFOAlL0>cFrhDzO>d z6&?*-26sF@&=!b2OOb^%GUR%BHOJ1v&eez*9adgaY9;i_j)&-VLCftY=XG3I02(+m)g)M##!(DTlr0Ls&G1t zD=roFxkcP!HASQ!aL+M+pj6r+m^`<+R!ctee=F)mzInd32g7BLV4_ zUoKT`8#q8Rh;s^%6N+@RvC!U&<&Yg5X%+dRtns@l=I_^cgx@yJ#+V={(8kv+|MSfM z@5kkVlKnv8QSjeM5Og5#>W5G`w0P4^`=fT56CLuAD?=d0ZrO40QBsl%EvGG)Hv3YeIyu5f9AIrCxQ=o8&FID9Aj4;1ryW5 ziPHZcj0&V(FX4&I%#LB;XB%BaOycpIm5v2kWs2e+h4FwNF@X5XSN+e|*+9CD-I(eA zqE=6r{7|h0;wJo3Sigt^X_w?>?)AGPh4oM#jlbSjA4GVghO6J42KpkN@-STjHa4gK zD#O4BR;t4QpFws4?cD(m_>0a5%7d#aQU?Oytxhust%1)$L(BUo1^-X_jVTQz1X=lO zy-#eY8f%NO@V!y^|CM(<8)h}|mS!fvU^n?^yZ&?7|LiVvKM;4e{j22Vzb=E2I?OEB zZSMd6>0jRl?3e?}fYrek*uYyG{J+1vj>$>Zj*I=**$J6K#Fd%xFfN1vo_Tgf(y3zp z-_u#i_7I-8TR>ffF+|^e1E}U%u-v%| z-FK4xYwdT`_;J7BVP*qh(>)Kgnh(<#P|J@VzR9T}x0vrv2yyA3P>{m+dVU0ss`Uyr zB`(87R);~Mw=L%>8RaGN?(u;^Z=HMnv$4bBg66_S%|!)=`jCBRYz9#N!OgO_vr$M^ znv|M_3ZFrgO;s8DH1}zvV$RbN>#uX`NV4y=foH`AcoGvX*J`b1&2nAT55%J%*wLR6 zP5)hK_SGKp7T$}U{i+8%{fiLsp=ir5a?Uv$7@)%s|5T)YHV9_l@+0wyHAvAHifH^Oca^EAB+MfuO?t{cDUcTu##* zPArJevW*Q)I1C*9E)%GUM!t{xLoMS%BS0<_2ml zQURU7s_%WEHh!-^V6q)$|I^DN+4i=rBuhv^Lz;g(*DCV=dkUSu&4{Yn!xh(5*2epc z>Nz;-Yt#4$wD~kX5dYhf{DJbmR-%hG8F1AV>fYv2b1y14=Y5C+$64Si@+YHizxqXs z2fOvZKJv*5MMHUQz{;$`)~eLj!rIIN?tv2%>d4IE#Hvqo9oWAoso&@+N#e$xvAl4r z*gVg@WuR-PT|7H`6Zni7SRJ?~crQ@`jEZzp;Vxub3M3f0vt5J?N8~+(OzN}IqiJ%Z z!bmp~1zGgJJi%`ZqN;|5Z^ICp(&~!p@HhiU!gxYHjnUq!e+na6eIxLx@Up46(cY|i z=I3YR=5E9SQxv*Xd#ZSvM8^oKwB`H#QV8>Q%0U|zocvD&?_Rj^8#u)mBeegiKTAbG z;-H=D>iSq?DmgL*X1P=Ta=BJ&`J$=xaQgJ5Ut8-tJm4k7!}z%7?*7WabpIpo;t%|+ z5w54v-u1x1-uyiG0s+w5&krLk5ROi})|#3^KuAP#d_s75f`9rs*3~82)k&@n%e}QN zkh$?SetCgsb%wLg#L>e;@AewiF_xG+5}P%Hg_E_oJ;=2F`zH?^boSHg$Om$CBw*;;@YoRJ0CO>2rJ1EQAwK>FepUHb76W;CTgNYs zs$$M+YI-K(Oz%;67#VLxjB3t~Wb&RiyC>5K;8je#toRw(lR3!TzOu8i&36(=|9-HP zoUhDUo#I%m%b%(Xgoz&{Ewe6=9S!pxM2EX*$uFo?>^Dyvwml&cdb~pml9(<0uAVfR zE5r`@{xK)|X@r{$;brZYg#~lLtyu5V9wE!|3Fom4rCMWkYC{7}&5xP7A3GzzyWPnZ zJwwfD3(di|9ryR>A)#|rKi>T?#=*f>S5tAWa}AKU#FzQttoyf()555UsQW1n8_mwm z%*=r~W~;0|*2HVn_ zx}u}69d*Xh==;W`|LHKR2(mdkLR6lgms@Htv@(4ak|^vL*YVI_}N2 z`k+SJQ+(Qb&A=rdA5UQehf;D{+saP|aU+EB?}$d$Ip-`)0JD)V9FX^aeB~wh8{h~r z!ra{6qNAaqp`!ytQs>v;9{;qMM0_;Hf9#fdX9S;+lsFq>jItMZUew2MpEG<3$mqu_ z+BbWMS7IhUTBb~~vi3H`X0D8AU_Kq~^BkWF5o2&4pS;+zUz+Q$?fXGR9BrI4D^Hn| zk{%SbJPH9lp+(tib?Hko8)V35!KIdszBymx#UvGi3Yr@Nj<&9*Q5=;S!ML&A0SOgj zC;tBaxw*OVxw))do+ZWmrZkty2WhX2%&(^A`$Ez$DlZb|3qpHW`V6HnLk3UNfUW-` zIXOH%JcfC8Z}Q~hY4Y#{S~4?_GmyQXBn(b-x&_-`2S=U=16dbl1t;f#IkhN1qi67B z9qp&4%NXdWgf@O3N6WG@Rh&kt?c&B|N1>p^xVpUb8oiX}81Ql=%@dUkyel3rz zO^^Q377(SR0hwo%NH(`*8qLTo+`@W^)f1eVeer0}aPcgR&dVze5!aXh9j9<`vR9?3 z0;JFfVVr!jA%R4{YNBV5;bk!dp z|9W`zpzr?6Nw|B2C9%}fFJ|LQYQL+kbZLp%!y~MnIFFI(QGa-N$Ib0)@?embtc2Lx z2q$Oib&>p0Bf73-uf>V;W7;S87dp+D##<-1J12{SN*tVys)fX=4gqhU_K(cjr7P|3 zzfV$!s>1PEhu#rC$L@Y3?eD*5CKd7a-p|d|^YEB~gX@+>ov4e$a3#(pc&n%}rz}y( zAf(UDyF8_gPqbW8h|mrnf?jC4sI@pW$lvTM(Wff*WwATJtZ{z6;|l$W`~D`A#g=9* z3a#S?%v!CgLWEE9j>*NzZGLWGVE6osqN0Ynic@Qg=k!p-9hQIo)|!Py%_JM=j5Eoy zdr_t3wBKJ~>Cfj*;059!qmfAw99B`%vfoc=D$DrnYPsZOL}f^g9{V~w^UTi%J#ue< z(wI>Z1e;&?1ZdyC4@0TUs(LMlkal7z;}%I#yd+vi1C$ntJb5^8VsyB+xg_ zF3>YbkFh6|o>ri&^ajCy3(C*Xu-AavDD?I#X5mbR0 zN;sKc@28Sone?7Vhtm8slqLzs@OV_$Ml$@il)n(k)pT@}*RXMJa%aGjlIFL#>Z7A7 ziuU(mdV7nB^JJ(mJHKXr6XytPc}%~#DH@;~By6m!clsYLWJrK5;_WJnvY3t@(=5 zee#(S9+YZt&v@~FRaM0*tE#F}@mgHzqG6VS>U?EMo$Bfe!ss%?$A7J;d<`CbF*gc& z|2=k8?(E`Xe8RlA9B0+Z*A*NFpC`-7i4EMer6pbI(w}*owgLjLR#q7_r)}RS3Iqgv z85v&guO-#Q(T?NU&fkB}UK2VXgxwACBR$x^B9k7jxpErvrp^D6mk)aPt`nj-(Ydg< z=IIdzQdXbScXVjuZbL&Tzyk>##o-W^@$6(~}+#P!NbNGzPkr~A221@)>*7woL~d;9*`zC_t% zbQZ>(CWf4=Q^;%8XNauOc-W#j@9Fom-_OcBN|1*yy$=jr;ovAiMh+ehW$@Qt;pDU| z%G++PI5?Q`0voXy zaW1Sftt`>Mu~4h0sHm&^NGspGw6rEOIs$VywMWOgYHEBfEdm2|#_a9gD=oR6cz2f_ zEM5S`wlFaP;r9>^vD?5H4UchARQ(_&l^fI7+hk#;5HoJy+}zjG9VYPx2If^)m(R+E z=lI~JvYGd8@y{P|OI_WndgroqLc0WLduM0z+1UvuCJ_~0oAOEolD?*9w1}{fg@s?u zEte9nV}MFn=fk5sTqp$V8T|gKa6t;jy=?Drk1Z~t63aWk(*%SlhcI>ww5QTf^tyP~JBE_ihP4`X_z|Nz39S zg@>-|=)MZWrLuT>P9dN-YiZGSoI`OpL_{3TstuW;M4QkvF3l{<;78jzu(i8ZI&yu| z`?~%I4V`(DsUL92XdN%$M5!o_`}^m}UzkR~lt^lGbEwXYd5w+kesOU?R%3AyN?>De z?{E$xqybhJt$QyZ&^3OhZfm>g%xZ7{T3wZKbAGRF%iIB4(tHomiTjFk6kta#Iz7uZ z-kn!l9L`3-b=r)98nU`Q{5>dr8}l8N_WbmYPObHbV*jDSEhCZ>58`4&-(U14cQ zi?+NH8#SF-#-|4(4jwWC8PVyz6J3Aj+%sQJu6SYeYvf6lISSPOO=JJ%s5T1*-BDA{ zl`@+qSUIoz7if>%=ou-XWk6K9PtC(YMc<7izEB!-Ffx3SziQ^0m{4%&U#2tf?9EYd zC~5I^a>8s3;pN42PWMFK>z&7|t()#2pkwFHC=udWRnQ|bFcEi;q!B&bcM`%%jH+Te za2_^rd7perMk z&A-RPds^L#O-$_g_Vw+lzdacZtkD$Xs*Kz@3ite!X=xeJ#`*w0KF)~~>h-mzkO%Dh zov0WjTc@JNIbrd>wPmj?IyW^kq~KTB_s(`HH)mmI=$p|1{q>jI?hQi3D)@E4756G9 zH+FxKeeaW=!fFs%FjiN7T*=9~?S;@fV=4Wqu0q$cw6gH20w%y*r;ULD2{zDKy9q3h zB%z6elcrwTFw$0^UFtK*lO*VSX=dH_&^u^3@wKBPf>giZYp|AVDs^!Qa38 z$1w=}+0xdxwsP}fMj06n=y`duiDgF+46RY&t&CX;O;EWxSk|AEeu>FOv-49d?+4Jy z%8sgve7U-|MA}3}>5PzL){ls2jtEOwqDC>ZCf*4B4=@1uHoyg^e2ajk*GJ>w;X~uj zwS5Esw6t6}DIO9saVe9$)1`tF%kdv_;5~4te=}GbD^jc%%bzPufH!V zi)YEoOlH|IB~fJgYVXf&?9WEg8)uh3PY-b(KIPSVN%1Z}qFlpK`V(#0O#yxiBI5p{ zJodxIr9ju5&%LGGTbp72l8mJtA;F2w_(!L|BciTm=PH@#FxtH^V(G-i-1iRDc6XIL z82ES>rST7OQ)8srYsB9BY^Vp=1B)TVVxosChgp-KKU7$GT9IY=Q2IPu63e zspNmLB=`}c^%1o5A)I7oyTd1wz0^;~Gn+K{O* z)`GY=09syt+dn>%IlH<7a~e0+BjT7|vd`L}k zs;`T4ejFahuxDquCFT?gmgr0tI>HuU9PXcQ;%Ag@GVJHch&Zwm`trrYga!__uWzWf zHrFNz3r@I>f|j;(L`J19L)#(05q$1Pg*V>UkP4h6D_7RrcP37cHv{Wcc7@0lnyDKb zAs9c>4nYrAsc+xHH`r|igHQLb?m-E^$I7+52a(KOLANIh6oRUx^AMW8nb)M%f zyo@ASL3U)!t^msX+RF1#f4{DB?Z>^7@#2MIDDt6_qMRt2`+N7jy^-3A(h&Glc)8CN zNN9f=6EO48)MmefG*wl}xwzoM!;?^#G<1nAOp{*^aCX{zTms9=kVGW{*KkJVCGXUA ziCMXZOgoz=*)9>#!|ZuWV?dWzhq77WbX))EA z{sFW0BL9!1>9U&OLR@AjGYnKj#1FNO87>ac&u>qKq&`vLk`-P$swox^48CQ`2nz{< zB*}5c^hGMg)S%wp7KVmQs;J)QFE`6R4;f(8n%MP&28*GT0|R+f0#nLmOj0t5lSJ;d zaKfNT5@Dd}P8FzWkb;UjUitEaK!ZRBnVy1)zG-sb&M>>J9?pSN{M5a3gc~!XC?~VN zjip&m6kvyASjRhZl#=4%rd;La$^hZ_pO6d!EY(m8`XN2dn?&I*lf|g+ePf&@M4pAr z3)9Ga|LTI8$1vOOf|HHHB*4rvKk8wG@S2mW!TYJn(Weo7x>ZUYyOT zC>{%2LK7|r=U0Qpbps#a0N^lr;Az9SZKlO^Gue3AI8@FKz82AyrQ?#GGGJ35-srR7 zvZ9%B?uo)c0j}cK#rfPZQ0BvOI5cHuhMVHcw3$AzNxW^#;7 z-Q+btPB<}mB_-p1e5@_(GQTu4oi?qE1UA;&uO;kZhX<3*F6DIeQYtFyI<4G1nkvBS zxUxB|;?VLJ1NLvT-%ng8zn_tyMIC6v<>(tleYnXBiQeSr4>MCvEGjzBCF z`(WYLcxSa83^*S6v~)8+?!7%k0oDJkm5`&j$F zyFX#Hzz}xEY$4-&do*Rso2%?{d@+pr@pp_&cObx&_B}K6a3^PHfZm~hpOKaVD-;qUN;kj= z%%cK^^j*0)|MK)~F*8%y-touRN0041fzjyW{vr}6f?Dr9=>IXR*#nNg*zVf@g*K>p zLBO}XY&#l;>v9x*;LEQ=e{%E>)}e*+Jj?qZV43VFMMQFh6qP~3(<16~CxciqVRU}j zPJ@yEKi6f@4`|$fDJcX`F7s1w^2y2z=ly6$04OUYN?fUw8l}?jQ)b~9D1&W!ms-@AU znSA~fBW)8s6&(c=FVk4R#PP1RFKu!Nyqb)Pj)tTWFw^*3$jRj&3mju7TWvnoLG2eg z4jTlA&jtqbFebqE%MvF6FZ{_enFb?7pU(A?Hmgjj@2ozjxzS(R@hr*7j0$u~8V*dwW{uA3~7lHh7o*YHaXnXivYx48yPf@7y zH5C=}@@Q^PjK##2(0F9+Y4JzG!q#Jv2*!sk7rQrU(POzv{v3r3zO=S^qoC4fcORP8 z>fhhF9q!jp&nT7+oAfm6U5b07plBT)yeO+n5S$fOh2{9gMO-j6VRY_bHsPM^Z`oQ9 zZ0r*gV5X+VTUwcU+%`BVK#D3F+QY-eK8e=NwjrQbtTr)!KuAVESq|9xCHCW;$t)sb zCDPO+%J#Ocx38j}o}z@r@8KRW4MTf<{mRI6NlB}?l-BOx%%K$dTUz-HXNT`?pCkb( zsa7A=&F=eQlGtpF+x`d^1H;c0pw8U6q|A!EZ6h1n#!wqc!r6)35*n*a$)0q+bcCY7#>P5wdhP3 zlqxQu`F3KnI{v$?q=c1=LpmaA#+@#G9T&n}nw0Flyt+CuF(JjwnB45FuD-<5GwHH8 znK0>heEoj3R9zn(MbV|XIW3*DQV0JX`EyL4_`mRW3lOg6v%_EAO8oZ~^9PxilrS9} zBw@XSIH;+@1%yX5mz1`Y6kmsjdF<^$bs6aT+Zs&zExMji4KZR&Zln_i2%%ozng)gP zl@=u#8!3=gbO`Y=AYrJdWy#@>Mnz%c1ShalQsis{fVakmA4V=XC>S=hmLScc=8^$9 zGMbc;fKdogKnt;am#G(zkxj*1c=eR}$xA1%G&6rp1RvMCr|^?JDyobgzcT(2?MXH; z=9qkohag5N%PBYRp2OQzF5R(qzn}qcF!1^*%cL4Q32vRLIT5c zz0(K#jvgNsWjWco>E5%F8@q+=O?7{+-iTjBH;N{qpB>*b_1%>^v`9cX-t;+m@2gva;!xct#t&aKTHJfrrd-Jj)Xk z{o_T!ihMk*U+^`oqeRw`^Wx>?6z*4>xL1kJzk?7wJvI!2fy9Kkcrc%CU|UN3=g;Cqtwa{&uW%!&GR?^B3 z(Mb<0hAO?hG}KjelwmMQd<+Ym&tDQTu|D=?Bt zeKN=yD9Y3=33Fc3ECVR0m!c{VU%GbQ%CdlyGeDL&fG#GbUY6z-a8CCTp^d*y0#o{P zNTu2AK4x8nJ`!`+SMT_#6Uj`zB?yG%*s>V`eve^+MC7+J#+64%|V&XIE&5cEvo@-8_gqyA& zX9zqz+2Tmij}%IuSw8_{V!tvoT->1xcg3O5#jv7K36y9qdR~J4BNTxzityWRk8awU zsdRL(EuJXos3OGNM4ea$s2+D)0=l~UxrTZk4>&wO#}5IBV^d^%VshK%?BWzO)qf&~ zh;%bOQ9d#nh>WizwSIYCZ9hgAnu1zY$;{3V?WXZ9748to0|H{FC|BqS-vDZO_zgOO zo7(nnx7Mo>8&H6eqaLK8J*A>5@lzRuq{Ao?5(?u-goH$?;wUgey3^`IY-VFa?Xdzu zM&_gb@%97-`@chlDb5@K_5!J$By``8lV9VChK8|lIFk}e1_tr}*wN(!=5cjol8}FJbLH3ZvB8%Y zAh2jJNINwAZ1tX+#jf21mmN zFDPcFETnVB^`JB)f1A^NRW}mQx|ves23D_ZT4yOW{e7Lq9~tY3vq$Q6b9D;{jBMmi z82{MWFpM`@^dN9Of#;cOZS@)*Ez6_$9Lip6iehF{;d##n73b^InTot~mwvG91;y9Z zBNY({Hxjx7ysOtTS`nSV>SjVT;D|pG-|@-(Q;g?1zK^yezMWr)U4Y&FDibR))dK z%1V!ltKLWHo2#ojM`dko!VKr}*6p$>(m&~_W4?;c+M9@r2xAmxjki7&AN|j?AtY}l z?Z$4eucM=)&SKsWk=;4?l`F5N-FY^`9SijyJNKO8J}uLJo@^5`>V%&3tEj2*fAG+8yOpaCK_LE zRgujcEZZWP<$71jD!{o_9gvV5`kQh;Gz2LY+eQ-p9)XXi`8!qN!#(_t$sa(gz~sB} zQkn*TyVt0eh~-)qj4F=muE}gwb8ND&lZuz0epPyTeqzYC`n26IaK@A{$_g9xj9?3V z83|7<4~t!IDf-ONn%}l-wbeE3TwKcTxg_hPDm%C=#|KEe52FJ`)oJ7`68x!;i{b7R z9*cb8!|zOGpo{^xiLoPlz&d!Vv3WNSE6QoO5+esPlN#{rLnQ{=H~mb;PX%e*Qci^6jan)*^!Zv zjEoFnVPQ6QcFp(iasnM9yGgs<;i9ElErqYTTV*e^t3)8GS65DU zr1t_)LfqWkoy^Gd$LRWj1NAuqxzCqBp#y+osEoTiw+n@rn9AmRR5Oc%+Y9QeSNaY^ zVpSCmYTHF^E!tk%&R~*u1O)i?Ac6qiySuwoAs-asBMa+5tT!&-ytHYE!ZtSM&T7*e zV#@QBOp#gpVb7hGI?3E^;l!;!j}d^#ZOmqTBr2tfnL7COLCj=cL(U21 zjHPdGu50#fOh7Grd2L&5UaNzfT~qQ(CIJD`VL`BjkugT>A_!r<^JmLX_7eO`gwTtv zP2K5fq{M_EX%Z5mk?82)ghP7|st`R!f~aZYwh0X_ygmE*A$3H1u`Q1O!o6M5oVw0B`K5$xmaXvpCx zx2R4kQ+5;VRa~_m_c|-R1N?l9r|orCA_Bv+eXJwkv$4UcS>~B2C*VM3K(SdQt2_%l zzihI;gMxv^FOUK4xu~hVg%(^}YgG;g!}93K?lJB-dfr#fg`jxawUJiuq$S66qHLo^ z7mUM#?`Su_m;WGU_nZR~rT9d6un+sIO^R8Ws0hg&<$tlwPnalgGBc8ruz7fXN&`Iz zZ62x?T$);1!naYbHHe-HcU0S_4vEN+4IsasBke#GEhMT1NwIwraQB~db540ywVs`v zytuxm9!|~q1Wk>cBo$+`x4$1A89BA@gceHK3DIaOC@^__dA6{yc+y+{xRr@ZBRL+` z+}yn8^LPyC9CeDef|wng4cF{-1?3(%fYI!1Y?u!tt>ua7A#g#qJ3D{Se?py#Ty!MG zQRTOCQ8hw;g}n)=99+C8jnL6Znsy_E7F=$1XXoHZdWv&>7caE-)6w+t<~Wu_AmI-U zK7K0DsnYFF$HcU2OFA^vN1 zR8&Mo$&@BD&s6B4UffWdE9kFbkY>kaW<2|+gU4oa&tO!qJaJwhT!13Q>q|Q8*IVQEL!_vEZ2-M9lUSv>FE3t!g&h&`f}*#YHe*cqlGSRpdTEn z9$T3hz1|2|>^%$fK}K_5T0Ig}%gf4u7G_G0H?b;bJU^+9PM=_;wu2GVusvD}bz+KPsvO%taunrMhY&PPkuCczJo}RwV?HqcD{6r*u1-4G;2;gtgdDtlYIO#xK zq9paby}hJ9cc2Vv7CZ@(_Tgk^-|HFmot+&BP`&GAR}m5dPXx!Un$t0gMf!w{5IHJa zWj;x)z5fc}@x))?JPDq71X3U{@1wO7LD})-=MCkii{$9qS@2t~8D_bY)veU|r=s zJv|RF{pz*$mSi=WNPY2EsJf-0^=47eGt)?$aiJ#QE9WOH?)Z!mavpc?C<9n_3PcPl zC~=lQ8IEH-rg5ChicBZ&$%Us%`Gh= zpX!K-hZRWmB>LUBrilv?V(r{Cara}CW3i6G8Gc(@N+kuSzKH^JF{bCWF(?z zWLz>d?H$)I%IsAWk-#DzSGwY!7%kFZBN-6zmmJhzerMoY^`Siy4JzZ zvoP}P>*`upD1n8o694T+H0tguY9n`J_T4VQ@@Hr`xuQFtZoXTsl9Js&&VUS&K{OzL zbT++QX5(eY{gLc*z(jI#=%;Nx5-+|b?FVOpsPUPF6&2k?I_zOx9Z!Pvc+1aTHH9s< zMs6tcoII>EN=tEc*kVo1;H0mOT&`D6*BgQ>YhV^0p0=8rX5F=cR!Z|2kh*gu1wtrx zu9>6m+RQ4}+lsNVp|0b)j>?YQ_8(3t;>WR( z8AFEr^sV88OzAM*=y~i@Kf#&BfkEdQr-z4uf!+tx^lUiX{QM{+fMC!jzqnUuqL9yB zBzRex8xtZ~tda(7z-2sgJ1NHceD#;gwwp9bDuxdqW~xu;*14B`>a~tfPtk2NntVm& z@4kqMiIMSf=bg3TAi+fhC)f!px=BjD`M%iW3RXaiD=8>|HxAI8oSITJ;YbHi<$%7; zAd!Qrib`i;01X{1LBd?u8<=)L>(|Z+5CYh^H8C|sM?vWnC4%w!!?(79hjH^!7Y+{2 z4%rZ^$aH__eEg9Y1NEV9)|9hlG4N5cW@jYLmw?dMMkyl@Dtcmqvrnc2YX;339J40zEQI#3LC2uD)rgu(yrT!ipeBJM);OOItOZ|s=9h;vjV||i;D~98C6=& zI}}Ciuwl^gFG))EI!*YeL3y9gU%rTZ1GI>pz^vHf1ZbQ3W^yzZ_JU>p-JmQyhbEPC zT=A_E8mLH11Q@8YP;%5A)>UqJ(P}_AWjmptyT7TsQ``j)i3?<&XNMh`j`H)^&bz;% zQLk8q5&Ny(4NDgKx6dav;F-3z*)$IudAxjJ4y9?~;rSL;VBkP-KWtQig6PdHdh7M< z(#{Ufj{7~+X~%2lhMLiLOfU>CuB#Uhpab~)7()?HrS;DK&-EPEv?5gB*jR<@sylin z9d?AbmzR9DV0y(wQ||T)sHa#e29)2u4VPSbgaDt`hp?UCV)b5xhA|?NG6o-S{8xCW zG~(9J#ujjIzy95N?hG>XT8rcFxqcxqpU?+tflg)!RT2=d>T;V?JG%_VMl5>PxFnd+ z($sYKTuxhDkg-IezqwASLgV9$baV`^uAb1-^Bx@?=}Ed5FnuK3eH=U4eE;2^0X_Dm zVE5P2Ngqk<+|qnaTYXDl`rb|c z%CYW^Yu3t-pZE78G6fwncy`Y2Jl%tuyL(O5&1eFA+AZGv&ri?LN(ssyo{vhHO17=% z1yl5;X(d|YMX|}R!I#OHn~9j5^bP7qUTv+!F>PDcUmS;D)J()(nsh+ghTn5D0BL!M zPv^b9;Hi6;hm%_nN7uNSB_pG609zCK|MfG9@IfJVBfum#Xl7hFKJahhUDuM556Lt?};Rsi56;n3Ho->*+Il|FE$31kco-e+A17@%GS zY@{IO=-r$d1bpSkOg#dprBCiy7@VSTugO zv-QP#OS@n8yV|yGa1>-v?fpyCN*|~Lye7%u8xkBe|kKG?z+$wG7}TAo~$#V zei`6H5n%gy`w5?6eqQLyz|E`D=%Mj|3fTU zsn-@klkcdw{uafo34%@Sw?0m^Ehb_IJ0>(iGz1YbvUhT#niAOy_><*%;<@%n619GE z5+m4cKkd9fNzH*zD`IUnKRNli`SVm5s0&*G5bzu>LjF0<%K>09e=;~`=1TpSi)1_~ z=C-TJl@?b;veZpcF%}wp#U?KWGV-@|&`w92o5I+Al7Sv{q;Syi_RxLgqAbMKbLxSDz+`(I6lcFa{i#A(e}l_h@hJ)e1)i{u*(vt^qK>_o_xQ7sLeHr}1zEZK@6WCSLFrj6za*~lV(nFE1P5p+s;BwT%`pV=EH zaXk(f|CPDmqtHM-5s?^TPlRWbyUlZcyVHP@Ue#6hd91!LkbTUbVr8m%QXBmy#~+g2ZulfGI()8m~Dv02kyqa8ZRB*9fLeb?WYm8}fU4j_(H zw)H%<$OL84JkA^1HeyBXYQ1!>ZRW-NU;?gUI2T z7sjvYGyt^J9Q-k%Y5s08t+_g$b;7&flDVBIKW5+Tu+?GT!$z(>z0}me4~k{r_6C=a zN8kH?F4Y{L;fIH@JN3sz42G|7ok~iJoq27oABRerV#X#8@JybCq+1XUwYj(^d%Au4 z|0w@|FwJ`gh5$xnT2iJT6E)&&vqO9ruQqB?rNs|N8qgY<>t4f+iI8y7z_=cd11^K?;oNU8-qT7or`qB414Bq31?0 z?z%vnJf;g`|%r>rXCM;lJh#DIk!=)>{zk^G|P{+5( z5x+aLi{0o$fP-th+l>5Now5M`*%`;^JlfU^M#9U>%dS8;*H3mmf0GZ49+o!%Eq!;^ z@p4_cG1((6p}oG^<0$v(69tCpl}h)=={I0J&h8Wz+$!wrJSDbN=yZsDk~qI99@b3P zqnI-WDA+*Y?q)!8*AGISBZL8XMcOpP$4;{GcWyDw>q*ehq__NFKG6C|HC}`dej*b&_ z7a^1na9sYoz&h8l&7i-I%bsm#8)Ch8goPoHOGya-f`J7uud7Q;fGil$h>j*axAn&A z!uIvXmW7WOS`E6U3)>7iHKb>Nyz-r}yqARDJczDKmR0*RguAY2r)BM#DFi`FQCS(L z-Sc6;(2#XoOpKod9UhR|*@Iq3=Y@+4I1$@KbD_sJt`IVAs{d6Hyy*OX#!)-0_1>*fAh}c6ONIK*2a-lhCj-?CY~L zD6N1~0|X9I7$~T)h#Y=~V4A%qb1oL5n!qGO1Qa2pT1Jf%q-Zv@m$}K;C%FD?e z6Q97Fhl9MwvTf5Hm4(cN91_B>6if zHA_lPZo&-Hy|B#T^B2z+PYH?sgTsTlxoadbDseeL^jIfjcP!nufc|Uew|?dt{5yXi zT;@;wZCb%fQ+Vf8@euzBLBYjy`!QGIJ<_sDW14ek_Qmb-afoN=MpjnFQO5k<{7FUD ze)0YdFcoICT{1Pp^|*N|wN`e96BY{9Qa>fr_|wfz7SLx(0vm!daFX$JMo*Xc^mI*6 z)4VTsW$~b_IQ+|xSZ@-8;C>8^Yaiv4HThaUwf9nnW~rlM=9G|h{tzKNs?Z4HO4Q)pGs_a zmM_n5gnVZUs&csLS!cQqmPgg~FR!nPONs`8_)3zA;r+LW9-2N{0}AJ`&XXN|i2;hS z>{`St^u^_QD#D5c##}-0+~d)LcYRs~+>iegJIP2&`W=$s<4fuFv3iQ(v5~p|LC%Yc zLUFSR0)g~}9wuVXn05GSVyQD+YKX8$pgTcy8_1eE2y?`o-5;oikvHrBf^essx)0Ir z%|=`gIuRiuWlMV}A#6$~Ar)bRpTO&m{tMjd`>mt;Mn{x^V{7PZyQl78V4NK(f>;9L zTem8J1wA_)cNzbzs*2-=panSHR&9AQ45pi;N-Dp6xsieT=^7QedH6_z7nnlpo`GM*JgpgBxF=wx0>x z$`p$?xb;KWRwvfgF3DpB^@T8McY^}FMrcBptDj&UabM79Gwy}=aQ_cmZ^0E;w>6Cd zjk_e!xVuYmx8Uv&Ttd*`1b26L2p-(sgS!WJ4erj}&-q?Ecbs3)W9(jQu30s!YTf{! z!-aeek#+)3+Dj64ccJJfj?#xT1IaQYdnmz@4>oYWKz7n0P(8wfyEaN!90i9V|6?|+mHB3+=yyBXQQZ3||qQem+DnU96VHv;UcLTNPz-k~`c&LQN)AhK zbZ9CDS?RzY49<^0lI78U#JC#L(*7OL6f>{67!@7qTJMarpHf0*GXE=ewftqTaK1CS z@!77uRHMYa2%?jG?Mp`+pU0>yy?Rmuu&Ncy%d3*uQ%Oe)6N@k>AuA;=uA`x)Kh4(D zu>17kvLWeXD>d>zEJz|GEl36SWrUrCU$?njrF71o{KJ{1-u9Xo9jJF4gxjMIBIqFm zie(Vr=U5bPKq|PiH<~iIl+(O**t;PJwAyJyy?m;OE7XoV~>qQx`^RfPEK^AM{`bk=U-2Uq5 z5YWbjp9Q)GKPq9~P52p?O`c`Z0SI0wC1ICq66Y-rDG}iuVC4-tR%l3PU#wx%wgISs zi<9#k2i^@{`Xhj{CcEj`SRhovvK?~hrvV*eJ$Rcb07IdMLTd=A4uN@}z1p_`zza-6 z=|2RLaV1cZpPnESo+ehJg)wZB=pxxr$DCUO-T`DDlvbGO9rm&Au=hs-IXIX-WX z)-H>mYu%bVJBjuT+FYVoNbulwKXGv-V1)`AN^?MK;_^bR-A5R_KxrE~hT4DHIu=ej zB@`z!1fz>V^?~HYh`0DAc9Am@5udI9-rzB$_p6jH zaWUUAus01hIo4;0BymS_*g*K-Ayzqm4PyD!KEgvcr-_S;3x`MG+>vTrU0gi8-FMjm zDxO--#{rckn`TkJ3_B1Kzt zn3o5T`?oQuZk-V9?11zv){eg9!z9$gp^>ev;WX5(j?Z31tWGNr?=VhG;F-HKcs-!U zHssEycU+DT5Pq-no8yq==YiDI_T!7Mll3s8Jcx-KXG{x9l$A}2oNMX$H8Qoqtz|we zqwL|~+;D{A^Ks_JsW3x#FhPYJHuHp7>SKf~CMM^2kRT*hp%jJ0bKSOR} zUsje8cLEtESd5^RAF_LHCzhhb6{x?b4UBwStn4iz$ z{tg9(u~?zG^V28`qLxe!=;edq>vr5HL-mD=t0^c5Y)1o9ryWtdP*GW;`{XITOEEyb zd0yA!Ts@ym4RE#_{NdsvxI-@3{mcQ+|LP0js&cRIZ!4I4fR8gJ_u`Hc&5K>4dzs=3 z!n3c~TIjr6wo-zq2BBfoAP(Z^LZTRWUP`3;BgH}3VI4vbh+Ol)LaXm52 zDS&KU9>0G3)@w7+y{cy;}Lg*x^E4(KRDhZ+M9{S8qGKBG|H+Yq)HW1PX zz1J7490(Z(&j8}fwJg}+;S*MbihRH+k?>|DtqW&i7+`r^1AU3vnj29VkJY3-I5@z< z#LVTHla%d=H?$}buO#X9Ef|diqwf&+9Sua`new7QC0RMx03^#zL^a@zCaLl`e z0F91uaL!y^XH{OAmhr`~#`u1-L-Y;{4Q_G5*4E*8nkX$}Wygh~$3R|5sk-8Hb$6HC z+`%4)xbFZX?%UuXG3)HTIoRIDtWdBEB2^JP-0I>=NRkCT zHM#Zj)s^*?^;JPV@eydm-7Ie9l$5597Kw$>TKoD!gO%TwkvF@;Pwg*jl8ul7OWhiE1qFQC8-|~11m|hL(CUxB&6KB zZg>FgPl+?7_yD5^(zv#~NkE#g8D&DTxsjbsRJ(!1fPkNzl9GS=`1lCCl3-D#oqw3L zL-49RawsG=F7D&f1{{SL>Jaimo5wvSXa2u}emQ-ojfrof!yA8C$NanVO0CQ)$FrL2a0yOEH@{iX6f7|c2wnR9TEwk8zgU|ZSEbP4Bs3iGEeZjbdpFVw4 zoct9TnU{wl63We~Q`g#S-FbX~ucW3lr=p+d^^oMBh{5@x-W(au?^ zoX_oEih+xRgFlz-Y8S9g_?pNWAebiiPs!qkAaXHn^sN^zQ}ny z%0b3OzmU?KN>9go=-Y&{$E72C?ufnLv|VpUSi})zpA+l2z~7qBC;O_f4(EAXT0F(; z3#%r2-9re_yfuTB29zGXu{Mv&FfZ;L*cQD%l#r(&ZP^@t4KrnFRss2|xv9zWG`M%j z@bC~RtYwQXu0~{surnflQ_%Y=G#?a&UO5m*A#FO^+l3ogXv6xGv$CS7Ksw6IVePPo zzFg6>n{Elt1@>J+NsvaYU;=M$1rkWCVL$@&vd_f>8;F{#$^H11`$It1Kkaxfb}qsJ zISzmkxM>N-UwY8IA+`hXl#pNHt6@|DdfJU!A@^a~4WI261vrJ9KTF*GhD zTrNadDO|D$SDd@>ON6wo<##6LXrT5kZIo%Q%B7@WcWT&zdwJpA|)>{ zI`esNFqS-%SV)3tYIiV6Ffe&wDd?#Ip!ug7Im`+n$@jGRX$aqwg%FI+@`j6xjzdK^ zL(GJ<`?EeH3-0&c`)!qv06%|bdo>S$LPbKSgRHPzWaZ`e7UC*v5nLf|PT<>k!nQhd zgU>;taMjfqpr7R3zNV^5m`xl2aTp0ZYSmDeYtQX%YC=X1donb(o5jyF4tqi#ee;sZ zBvjS>tG2VCfS*n4@MZluAZyKYW0O9`IwWLJS;48ksJ!06TnC>zX~W~X;&^*z`zM>c zr-PW-^=7w}w6uhzq=KWWhpOdKK+{Gvq9*5D6BPA|4&U|;CKiWuKtNwfNyo2n*KJ@6 zQ+tC&G9>lW^QWF3GwI=K2ThCnhO$MQsudJe|ShY zIjQNHODdR20I6?Zzsa@dbOem8xOzJMtSqX@t86J~{#jC8U*Ajs)-q7;>DnUszLQrN z(Mp+5-8(m>l%pmCwrAuw{#mtg6Ia8+o{+CL@bG}_>XI%fgWa&~UsCebU<1QZh04y< zG%*FoyF=$fG63*iZ29+zn-HS?c zFal|0S(le6&!SpB+|%b8jV&wQ0&rp2eE^-laPB0vo`bauzOO!a6e-v zq}w*JFwvgbds%bY-%pvU!&Mc46i()E`zNTa+4cwx;$pfI19YeSKYjQ=VgUiz-!@oh z*e~Cj8!mpEvf*aByufVtFjtswP>P6cW z{wyKU^AY;UFt^tRB;E5RkPE)q7Y8L=WE}~I2|_;>!&wAz5G|X+NI2hJxbGek;offo z9<*)RJZs8G({4Z%19y%?l&?|>oj_HM;LTm2^!!=q2_wuH7Na^MQyPpe57O%SE7@V+ zzm*O((v2f8FJBE_eK_~NZ&Lyx##S)qveXt76y!46_g*ri;++Xe>n{WlqY?=B4gXTJ zB}10<*iW|$7?Cs)mhCKpTy+4O?H@c^rh6pn!j2E+GHas2TU z*Y8Hi#Rn4~F~H8+80VnN&<^klj6_wPOq%s%cOrnlKF8LfF>v`6fYsyy5;u zVkI(uhLEpOh5!=9wPmCU6AHZ)2BWWqlR}w82Aw-|`1N7@M3L zVgaHU&{`D$kvw3=!%yfmPf&||QYcIK`1r%WS;zcq!dnf6Bh_OG-zb|t00#n-D}jXs zSz^H-Zybba%EZJZ>A`A?g_Qt|Ajrwc6f?OcMCO8q+Ihn0ti z^3YJdr0_3s&9h6>&d&=1d@C7+lu5>MHCXxnp=Ph~wPiegVRr3mENTqVu+XcRNc@=G(BKpd9i|%3*0$UxB33&Uy5BmW zL`{95THM!1wv(T*puvgxsq}kI7~$z!A>~I5K;@>}w5FJYfB;|0P!-(rqtycmDV%~V zjf&~}H*2=3xBY{@1Yg?y{eSUl|BK}DK(;l=pmC@AV2930)R0XPTy`>@p5f{dPa z+zH*1FA`BSA!7okH9ft;y1B?qfxP_siJXFh3hf$hn-Cnen*0h>kmY%xP}n!>#E={J z0C9haUWq{CsVQLMa=gX7y8nECj)sEL^Fc&JsCp=TqeKU;njD9uLy1;j2AP*vWdUv9*}VGV4YuQpUXQ~%UWf*4{9#;1w>4HxKT58W~ZPzv9WF-2Wse?nuHL4EZl zg^u)pxBF0-b;B_6GH)bG-~EFdYK-(eD&7$SmBtTxQ_MM6=mRP&>2VL6ul5|wbN;=N zWNP%u859a6Nn>LpP3Bl9u1x@fC&?vDE`MY|f|0!~BgX*yn8(2c;fz_X)XYvduNpKv z)ICc9t8d<&hczZ*km)o-8n!0Qhi;dzsN~(tVCB`$T+6 ziE3DcS_lO>8JS)wF(G4d5$PJONaJBUs=B&5z$h>zK_4jJ!Y*TdYyL$kG%;_+nA!xjboUcqG!|*Fo3!RrwPwE~4-FGz?g| z1mo483gT(Vsv1ylRr^?5Gtgo~gicUiLVjn=B|ru#h&e&SzN~LawowpmmsNGTTrzw_!7xgS3q z)y{-pUJf4}rL8m(>9v{Te4tPZq!&=k0gN`wJZkI601FV|*-6C>u9pB;m)7)W{8*r(24GjqDL~XL|y!T^Kip@%Ueruy19HbhOjrIufgTjIWx&A#y-U0QBo7&0k zOY}B01o!rW4K^myb;JCc3sXjkU{M?eQMiS5{R>S=g(TWH#?lV)T>hs7D}^!0qK# zRb~U?SyO+<<9XO@r0B_f!N$-x;@_rk@1Mc3+&|sj-A%E&fGKtDXrK|o(9HTeY7;II z5bk6O{Z8CTa3I`UrBSLj6zwo1t3{F5T2w^UT$M{#t1J|zFku7!V^sYOV7QbIw&=)d z5ULt}{`4;or1;o#6tod~Zb$z@xjYcRIHx};H@Ql=_la$LfQBf?m|Jh_@`;u`mU zDk9&w>zbRv^4$o5joe9_5(!JJ4k^NAMr4#3fSmEN%2Er3dxqkWs9k&3>tTy1q5Eu? zVLM+&fjrAu=jh||M+#agOzZ&gz-8JWkd1;ULa z@W`;01_E1qkC7_~`>71MAMk9bF+NIj&Ckts2LnulX@-VrNSM@Mo>nAW-;yF2k|8rb z9*UXp36uqJ8H~l2qCBi22u0mp+#58>#LF=1q!P|b_{;IB-wPPIaS?@44&~NUej6B) zD`=F>vp_9J_eQPHQXp6uH$yE9o#O-gO$stnR=iF_y`K18gWilo61Cqb)=rR16(1IS zQKT*6E>OU`&7M>Cxn!_(l6VM+F|v^-mrz;Kns~`Eu*UY=Y?fwNBfBo?L4+5~Pk1;` zPUJJUedFNoUPj%*;V0GnOUemYJtSYL7VVL(2}tvhqpba*R8>`#gQnlQ^>nnfgt@+F zy{$Sgo$E+1#`aJGaiaiAfsjiJBH> z`}G`6-aR~uPE_yVH>#gq0GK2@_&aKcXE62Q=RjiVa;AmXi>r7ziSzTCsQUtirK=knsAVjqU-iLr`_${%whc1u%NS%R^U@cJ(ADAag*70@U~67hOEgP;MxM6ZifyUo=a?Gu z)@~)oE0|oso$~=38?Z4!VV)cvVZcM%b=+e6#vx@IX_V#5yZ*l5ewtyg_!~MnSS+ZG zTm}IWe1Ew%9XYRa+Q0za9(J;L{C4^id*SGTy$y=T-wgIn@Ocbh9;|A}(=OHp;}Q`Q z;==g?6sDMtiVBcw_5Cs+r0*5<>J?xLmpU?%o_W$99j%awYk&Kr+(6jIy}`x2v7_P( zR*sswHj+?YQxh{e`O4|o5`6X`B758YP$Fc+DZyQUf2zCi1iT~jHl%ltVIjuk<&aS^e3X-D#UbbR~o?KU^ARIs(F$f`R}FN^lLS;KWcMN*ixm zpIO{eS_|WRgJoXcd|Dc~Pdja?wmLL%w?1xbx?;QnW=+&iR<>5DATDsr^F@|Z1ZH)7 zVgl-qUorxz|4Vc8-9q%;U1fthzX4}cQzO@HMidI;V<|41rv49cim>9Av09!X!iSi~ z^G~17BgD=3Azkl_LI&+Ro^-sNvzk&i=5`bHu$5B{W>){`q#C4WCT^V%cfF33RiH37 z7&>O3cj%&Rw)jErn8fcNI7Q7nyL5R|c5|V}s%WaBSu@aAMr!n{C##S2l6kH2pZdJY zxPAs=u@QW0%JQpzmhZEI1_u9)Is@LMsVT=dHCT?!8MfPdhW>OeSr>EK{jX?KhijFS zL%yrSIU~L~{WfoEx@k6}J~5EvWWyK~Z`yRcP_=^duY&%NQFz7(J!5Q}7{!DFI+57v z-q^6K?AnAs>U)GtaAMOm;-s8_(IGW8b)M4U-k$T-?(j;JovW)WamB~Q+s_%VUuD?J z8jlPGdt;s$cG6zFqU24NZw@zj1)X!>xWKV>1sHpTkKC$D`!gaIlZ|sXQ)(x!6H&q@*u5fAKRTh_;UDS{!j^J}U~2 zAb_sQZ4mALoQ4E~2ZG&BL{Cl_|6>1QXWLUy7#~v@<)Z+Gj#*IBgjh( z<0nfD{bKK`z)HH#%q-ii3OgO$FNm1FK5|Q1%ed_+8D`?(XnC-`@+kB({pd(qMw*@F zw=V`?&QH(a?vD4JO~|pl2-g(O+cQ39uzX_u#L8Q$CeF9!>gavgSzpb@&mzdqxpnvU zOlhh8NxgyaGz;lEVr+pIl;82?H3BJu(K*Uh-$Q_zRlBQ*7&lwbV16gCRQgl|Iy`M@ zK12M|ln}%Gv#Wb4^W6aq&RFb;UB(*C$4o>4<>`i;&Ho6Wz6(K?*T!|{R^<{ncYZ=9pJ%V)V53(^TO?ZY#n5e& zt-H=HR!pIwu&wyJL=q6wEOp~yJ**GdIKr}0{u=@Rm(*lN97{fDiEmk7U!MpcAA}r_ zPGlOhP^E>3i%a@^>M1fajjWX%zugCW!tRkmuP6=qT`OLrus8s(=(FUQ4E^jZAOT#| z8Owky3Pp|inlL1X8;i@RtNY5xINjO#(b96?v!KFnVFBptN9yZ8x54VewOxFi>1k}_ z_Ia1#Jm0a=8Y;M0xD(dZEzdFFX$wephh1GiIzPGTa(`Y&C>t1|ql%vx*gqcmW+LWj zT@DLQ#mhOdc3kRTE+Xr)H@2ozPKZy@RMS-@E>+UhoELhpvpCNd^mrX_QqQ~MYdWV- zQg&O1d4L)2{g8&sBR&1y^I5m@pdzRf*nx1oKd`S#Jz3AuKuKNn^z<+c9nYs>kvWk) zyV~BtoPy7`S!+wWd9|ljV`}BqhdwoAq26@pvnLZSh5UQPEXLZ#_GsT3c#UKu%II7B zyGJ$SgUF=NHt0QH{5W<8qBz2wRJ$&}t~8rUfhzT+G2!n`O#W~00Q>_S)4=C9xNw37 zR{3x==Ww(31K)Z4&&r>}A1}?6v?NIA7ShX$tDfS+VyCC#-|&cI`QW~$(ZwZFQKZ^n zOkvJ!Ke)|$affjTFq9{*-Ou0n!57FQp)iI=u+z=jGamLvYV7WM9wli?biO$|-_pyL znUL@7RZ04=NSov7oXO^$_yphI!(Ulz>y7-z%*Vxi{G?OuSmcvbX zi2`KA-`rjvT(*n&)0sILdB@QR+uxtKFV-DM2)-FJk8_YsFS3W^qHAli%M4^nW2g8owaypy9M^<1x||K|66@xsnWmxJQ^MK zEsKbNsJZlmth;Y&C@dr|c$!zIT5glx#StqlY|r>1aK1Zy+38)!x;@Mz*DctRz+3Lhz{3V#qW}eYTYHL;FXTyERZJ+kX3&hKH{S3*Bl^Egh|-4S9vv0E6S!BnSG4>CV^Y=g-8;7| zBm=36hQ(A!PXuh=oKH{6tz~FYY@oYS-OKVKUMo!EVo#!S#yaBd(zL*d=`RM&b;7B^ zg*+WYvcBIcC_#p?(b~|`X!|>9%v|K}-|D2*X$*tdp#SHy`=8Q{CC@Q^vu7q;#csh{ zR@TJGFu13y>#CLfBS&CGMW@w_$4*zGA7dst9@D(zCk&vc$r_IdpMi!x{1eI}iJ-D+ zl$o>fGM9*3s(}O%d3~Q#N1Tc+}6v9qnntqP+ceIL;226}kOhlBH znfV)Jk)5^-+wYe#Gwc6JAChS(o z$sz%H>pSQ~C_--V{y|>MdQ)|j|JGF{0)DVCs`SowWcViH%!bBVV@{+3_vz{60ujxs z{aSFJ(qewtP0pCv09nKQyLCfPP;UObJg%SZZ5>Wc?C_~Pi+);_nk zjmsbz807-jd}SQ3bEJ^2<5gkL&x~q@WXL7x&En88gAqi zJIzAq>5-S{*UNO>W{NL9milaA9GY8N5*qeCVQVBKxMFQwNE#I+0sQxEC+2n5a>AG> z_RVGVfZ}m-5>7@TQn9hg*?Vrm8=aVi=FiTW>n%fII-8-7YQ#Yr`wuY)j#NZ~uix(K zYiFv;(>jHQc5N&#xt&Lh*Bdzj0aa$=e>z5#X2Os2Wi_6HC4(oAGkmVwFRv-iymd2E zZLTKm9Wg`rJ3A)QcrNGqi7AWQtE<_Tk#5P5@0r>9$%zH_E@zcx?BkuS&05Ks1ZTT* z+NvfRI@$4mGRFI#lc-I$m zX;X;mn+F}A`E5+}hrX9J-3wds;o$eiLOQdv+n#rIv3$DTIwMyd(M?@w?R@XFbyzNU z`W_s{$|}TaCLJDcF*rbUekAkX2G;+&Sit%C`ozX&XlQt|*4BDtS?8+7lD<2U<&HE1 z7Bm1>NUqK$YFoB<3BgaRtOs@rCyvcq1w&HC&*zdr7&?BhvAkL@52nHrPM+YYxTWiV~-{GD-wHooW zElZCh9R&?kBJ?u)vLF0RHyKv+R+QS0Jx%9;Aa`6&4p5#jGgoXL)wH+&%vju-U0KE^ z1}9=rWn`pl>uDKlc-z`GHo2;4E<{B|QkL#;^pFmdeRuVMtKEd;5E|TlsyfRKaPOwx z0Xb;Zl+3s0a8D~MHz37)zc+lPzUL$^upNwHx6){8j54@c@v7(GJ8*xhk4rSQfKcK? zvUHS2c<8Zr_%Gk@|F0gI2>ZMfR=7;AGBVQhufA_fFajzjH68SiADwQ0QCcdP7UV=l zQCe2Y>{;2^(0nrQZf<^!jctgHJuYXMJpt@K7S0XvgJlzA9Q3Cpzf@Y=G}Dr7t(_L; z#GjuyKYU0{a#7PP#s z#iO&rOV;^xYE#NwGFr6qp)Q&Wved@|sznAu{Sye7u(- z_QC#i(&I0hMC;I~5;Gwln2`^qCN%#?t@uCv1s-f6TGlQ`UlB}ZxxTIT|2c#<3cX3L$V#}C zcs4nQaepwk*iTMOjF2#*7OW0e>EDFzY}1r8tX_f1h#xyy)OYU-IPltf>4%p88L-Ca zsyQhW=VU;`HtK7IBn!pY=JxJeaf@P$81q;yAAXhVMWZ4AVFO6?1H>Xrp28>YKGrG zQV9s0>KF)#!Q7&}pE!O?w`kJ=F5N!zt4h5!G-Qq_;FB+fg_U1i@HZ@5|0NlZ9c7e0 zprWc}Jjlw(9MhoTrXBR{8lR{vFWGHz-y+?!9~ZfplGxjtR@XJq(K~b7;9-#48or*8 znq*?G7?YmFwZT{t+5G|7R89MxU?P;f`&z872Qi`f!aZx2l58xu0#Z#HbKVrsiVCaRT4c?SctyUWDS%dzLHgC&`WqX2)6I`rK9+15 z05?at6OBXFSVlg8I78Sdrm%M?dDlxMv{5jt*31cZBzM<^bH>$znsl=A0$BF2(<97bi z1XaD%_AWa^v99Tb<>~2l*5WKh#nE5oC6-l{2wsP3>B)jzWq;3(C9rqR?m~{vs%Xj> zWaMM6?~VO&VXs#Q zs9|AkFeR}fr>3gp+Fs zkaLx0)LmWudSXq*Y2b1f!T{$-Pd_`8YVZB=V^NTpPLIsWn6ze0BGB_{nwdi}>W+@0 z#P~FKyxvbJNQT75D$cM|!@)v)2Ne3NwbFed`@g#(NGe%4lNnk#Zrr87BAYhePB%T7 z=^_K5QY}67j}5Ku))Zs~$z(}n=T9ReIdHIOcQ7BrsGs0)8sxaU0?eAI6mTLDj-*_h zmLystbQsTfrKbwDX@~h%=OswyO6p=$>}&*9mk?;fP?QPEw!rr1#BcWhfdk?28qhT` z5kuQYr)FmYB_dUYE!L2M$XvcnwPW1o&8x>VjMIp-6kL2OW`SgMN zO<)Usxc1dSr>` zf3X7unLj;wxlCeteFa0HSES}-b26G@roxtr8*A_i@JB|Ls+3M-I)x{(xfd6W$x_DG zPbqPRZ|8U2+_JM509wrIrq1cVV`;6ct63F{s^t*<9yxrP83}bA4Q4tgGpm_ErJdK- zHZKI?9K1O>Z(CY|RVwR9ZtH7*$tiA_|6K!uGX;5AFKwClgCSjAUH&66VF>#I%IPA; zdm6rS@Rp05e7t5iF)_EZ?Z3PP)Y}u0(dkLal+fqz2wZx6 z8g!Me2%K3lv8bzf9g;nR_EfsKSXT+72(Ki>)J%*F`yt<)zPh;o^q4K-UWgGJJY4kQ z;l6w+m3?t)=A2=z-t!&%5J5u0JSKIX{Dz|z!E zIlEff?c?LHsF9`d&!t9SuE91_KvAc{CZ=gj%Iu`@F@kaL^{bPUL7t(Yh{!u7w&L7; zTI)z_TAFnsrYG;}G_ZoBpoK1Jd3N>$$o|k_TnZYn)+dW%jrDG?sWH$T9E$}GE>u+h z&O+-tizNSJTVpdthvVn|owT)N3o}b;mv`^_rY7y9L?Et3qn)2W0EK4i}QU#sbVL0~}xSnCoyT*sZ$h<=!bg==zh zb2}>tT-aF#=x5!jZvy4zRMD~7yk^p^972=Q!>S01KX-p8c15JRR|-W(o@i=7vAT%= z+`h1{LrKfYh6R!VlFSRI_!SFBRA}DtXQCe6y?*dw6|r#Mp*@soyni?D9a7i-qQ?MG zkPrY_mYNJT7Wh>dfP1pE${VTy3Is`l$wkCjkJ zE{#PjC@2wk^MF^I@(N2RDADt^6%KqvdmBb+l2{(z^zjG=1V2Af505@DmX9zoq?D?P z$`0n*7Xct&xs&A?c%5Hr**59^PaXXi&NDFU4&GmFi+;{C@|m1?o60!*7pcy!c zFv)Zp^q+fPZOI-Ouo;~Je8iw5rtG9K7czI&%V$!5ufnUQ(G$Sa)9)?*`y9FP@9xY` z4W!UnXc#|AMi~%j{7kv7TLz0kD#hHwV|&L{PcJp)91*eT1$5Wf`vyyhOe6+TSoHHJ zpx2y8$78Q==v>zW_Pg%PDu1yFF1~r%p8@b@*KE0yNq$2+|HMYut28Z%lR^HHq5?2a z_l0~<&Ax;$VmIur7$5g9`HK0s=VrRGqa_W8(1sQh`bQoO=N-JIv}msgylBAhc4k`a z^TjzT@&2|pcT^PbX)sInf4Cl|Zhx(8zjZjD&2(}&39(&q$;uYp_xaLmZocRu5~Bk~ zPfL~frHgGTz}by$#gTk<1pu1x2#O zA1ld`e~Y96c;H#h7)V`R-VK4f9#2D-K46g%u|Nw-=)?YaU~X!goP=x<-9c5tcx>T0M@OiA|m($P3_Z}L!< zx3v=`Pn9m_;}b5fk``yw=)5ET%{B*DtaRyM>36sAFEyRG^i~sy_UgWzV8GGIZDK5F zX%iKxhQ`|>+6U}6^Qv!gMn^DC58JP9thdId$8OM}%FGFBj%rQA1wbyNGj;)uyOGO6 z^%xqkd3Jqaz|i5x4@KR!g#0q;Nc0f z==+?J;dAtNMN!I-LyhhpNETY$5Q@*r+CN@S%X!Zm_DY3*P7w0^qoQK0b9;Q{0Cc#` zb?nsrQAE4X!&g`578dU;yiY6J+d|LJ>~-GL(>_%dghwY=_eia7$9l)(e8}hG67L;_ zW|a+}Bp4>tOUKCOe{UMbE2R=*)U-B#r8Dz?m8OWCBd{lwA}1FaT0gJ}7B=kyUhh4~4}UC| zyk2CXjJm^X>3V(tT8%aGw5_z|AlVSQov-j=?O-idu3j9#*%7gkTrZgmyF4;?x*e}4uRf&lR6;D6M zaXt^e(aSXwV?x!(t$Ber@kx*|fB<6Ao3D;oP6L6KN@ZzZSof}CUS695dtaAzzCNc+ zDD+L{&&;3_=X7=p=kM%Z8)<7d{p=MA!rWUiB_20p=Jd39eFc6z#`H(CL5 zN~Y<-(aEy`8{%^a7LpzQ^E0pL$}3Wk#`4m7q)MHYh^rQy_q}5VocL)7GWa(uNj}iG35cq!i1;^5lRGIih1j#Ws2=g%4>sItQPzl+xT11iV%m3$5~8rsxKg; zB4>EBk*Nc&_$ei2OO5nOmFx0yJo>VjcnviGWpA-haZPP33jJ9t8yzx-S0jPY*nN81 zXz1c&7HQLY#N!!^6bbA5a(P_7AWT{V7X_j{r#9xOkEnHyss3DZl>G1p~*POPBD< z%5GIv;8aoMl2_y2SZISMqoKA34QEBf+hAtCV~{_oWF~JLO7fPcDr=sMYpHJICzZLo zy_}X^Gc{MMqucdG<839AAMj)3J+nR9VJ3XzkXETFC+UJ8@ogEAp&!iSxxqku$3xF$ zW}0num3O&~cD;?dyNS6&iM~U-sc(GL)}>!tg>7w>e0q)&?5L>lOJS1GNq$=TBi`JM z>f#i6e<$yBui)ZRrMbvbz+n2vk(yJ1QFFvBj#6Te-<8--aU*UE!`~1I3F&%ysW5I@ z@%Z@u`YLU{U50XL;>Kq`z#IC*;P12I!uOhbr{a87u6)2IrLCveYXV6Bb%3c85ErC) z+Ry+Xhez#G0zsYA6QMiy;;b|qyK~>Nlf5l=9>Km6R)NoN--<07*u~4bDr4Ge)c8_`+UKyLQYgOH8p&8 z+@kMk>0v=$x4iQ`HHJo155cBIj8u|hqBAt0GjyQKD(s4-o%VKr7qf{gqz7 zORQoEziT+3-b#g@{UtB)7t*+AFIVxM5BoYp8RR4gw=giU@WXQ^-Z?Wd6#?K#Po#m_ zz}nfmv93*rJ`ES^mWdFKc3;w$=#3B4N1;!_)*;^}{rxvmQxlt;d2*3oGHTkhbBaVe zj#x|IEC_l2D3{OC_a%Nq_Fa^S_8>}PmLX~8u` zW5jW?!ZH7=X@3>&2VXYhq^tXhPFb{CI(OF2pUP9svkZGo9Y<>FV zYV5EsD{c`hbNBGcmF4H1JAw~Fr-zr`3j4Yetro#Z3oBKZ}di5-yha{ zCA59G zoZmJR>yv{aYiU=WG6}iY4h9~t#V$L31!AoSc2}>i60XO_S;c(%lyQA`$DaG;OW}lt zm${WyAZOPQtW{B6y``~ncIxb}8m^DEvFYs{b;Z?d?xq>pPlHclljJI2nQ%Nd_Be`Y z!iF0rv)8h74<6$@$a-_U;Q2gDP4RIUgILyCl-;L6o)n{_Ik|K1Qk=;?8d8!7!TzJ> zy*FAv$I_2d9i20HHs&2K!`{3`vMJl1$qc@gd)xc*)2ENg4lj~(@@RcY(YV&$etHl) zHpXGm<7{__*h*Me?MD1_4CBITYieH6e;NXUkfo)2dwc0X!1jvvG1yeOco1s!i=APc zY9|(ZeVs5(&>O#%`s(M^$@*l=$BMSqHAiu7yIHgrfkWQeg=no^OQPMYzMN|o{#I|nyEXPx&i%Y6K)l;rmu@IWy) zw)vDK;1_@4yB2?^tZ+Q_{d?N@cv_B;O*^a5l6}$Fh=@lYp#>vUXGJ5R1Z5%E`&EDXu;GJUdu263PDv zsdaS!UbJtfIYjl`NcSTJ1sgVIKyVvVS?XqDbkUQgIW_{MG@k?3rjG7ZOvcA|15-{9 z<#5^}urg}p>_4tuzVko54PX+>oXC2|6ymF?fu_)of7 ze0R4ZF-h7HMgMmdz+jB=uem??M?x%a%UYR^=)ptxwK|G2Gc)t#1b4cy<>&N-Tz3^~ z^Mue1RpfQq+S(lz>2yKy{44oiuU^dv^4^mizv0gNR52tFDsi{8=u>@yf3$zDz~qY z=PP}EE0kSbXN`?}&MwQ>^4ZzGloVH8tE+!ZOnsXgJ>+|x^?9-4UtoRC)NcoB@z}dp zt~=+Td&>w3xszx7`BBD2LzDW?xw7+#fz^&~N{apMRBdhB@#$@}R+PzQv z(}o+7WPHdTdfnUa4JY)6CQ+Xks~E`V3S!k??R-75Ke`QYP>$Yqz6YO4T-uNwKWDWp+AB~w0oETD&W1@%joCz_A41ix$2d|1r=1){c&t^Axr3Hy>W@kne6f&Dll{V!uV&PZ;4nU(Lo9MuoF7GZVlb{QLL> zz68o$N5?agcSo?v$yp>7nvu;gXKVo3K3Sm?9!#icoj(+MX2o~*f>hzpiqZfA$K@?> zSMh!OYVApss>)7ub94Rs_=I&^o6#g|hP477KT~_i@zb3ZI@QCB@IO-lL2_xuL`vLbVU_X#y$n@lE`*KKr)_ z>094u!3)Qn4?6S|&2~d0=Rb(Z(dgm-K0qXOFC2cxwwP`&0=91O;q%RHBq^5*qo+wX zjIVMzNS;nPK#cnisIk)1hqfApGxXpU zT8c^W6igskaJlB;@5%Mr!ASl@EHhRHcA9^V```gyEz+?qvK|X=dI(y_=ll@5YbuTX zs5noNEhl&NX2;eR2w*-0(;IY%AgFweE4##S-)@`hv5n6aO>CTTR`IK=^NZ;}6Ryr` z*4SPU=nB3OCBt9ZjW)K&r&1q56hI^S%X&$W*(4up;8a1-XJBogQ{&T#N zk&y|7X7Ir@%DME@Dc})p!-#E9vVGBSyxefCrtQF56U9UAMMHvtj-tj z7LJ1r2)heKtLu{)MwMxqnG-Zn(ij$=<7T!@liEC&s6ALO`w*(}S@P=w1FU?>@?BGQ z5|zY;Eei@cxl$Iq|Gf(+U^ayrGZ?8M9E(*iUC0#XGk?f5JSi+;x=0#7tNNA+o%jmp1f+%bpsriOje8L$cyJ`29b zfWP3Z(a1de_Zj>E{d*3hBBAD#b{Vk&!?Vf3Oh7`z?h0lxU*1JcEkCNYb+v+Ezi;v- zfy*EYn)GR&AMrB0y}YbUo5X&Ppj1*Xisym~0Zx+Nl7npaw(tkbWC;TOu1Mr*yi?%9aKOLXDcoP~K$;ruC zR#0$}3O(CpwmWY8?Rk$g{?fzKF;$xv&dh9-`~3U&)!+~`b_(<5EQ*e<;}sZChHRpYU+*j@# z)&yc(y6oJUnEqdC;*S^jTiwM03+giAKK@vwA z^PdA)MS++5Z@Lh3!>BNn1FwjP%f}CHK2J`r+aF|A*PO&C%pj2v!5gz@AKfS@-lU|A znubED6QFee2`_)2!R7hSr=re))}f#@Ki4fC9-c}GXs#OTYR`Pae-)!}u!K}s4+&H? zHK`O5|0fCm=O=KF5(BT#$H_*fTt_FkcsP`7N3%K9GlNjYPE3R*e^Gngc#H<5+?Y#_ zPW3i^#09ie>2+OJ6p&Zj)gVS8WUWpaAswQ#_`|*F0%RkQ`#XJJ91Rlc2i|_XIZBccZp14l`S>j*eh)?TC|e?fwV!n|aA`H~THQ8rdhxQBhw)0v-58tpwSe`aF8REgKkXXvEZ< z=#>2T0{i#5k!g*?;yo2$&zy1mim=zkfCtJ?t7}r|*|ZJ{F7tq1v!tY0P_X$EL9C{x zh9-(=E%z46}qu_fi-v5O z#koCQ?Ro}Iaf7?eEUZo2PHLpjICwaR2m1%*Ufc8eK6=K;&HhMHi$zE4JrEz4d-eL2 z{F@L?yQQw^KVA;Bf?QHMLa0mSj_P{XI8{>-rIeM8^$6SbzuF{uC_0*WP~A zxIJ%4*vmcW=WpG5X#vNU|GuSvU%}BqP?laPqT%~66xno6xYh_;rn=mq;~>I&cNfw= zG^;_3Jv;)Omw9-i&+FY{GDAs>u9l?5sN1$xr>t$J7tL&AKWnubcn@BFFK|RH`2D1; zg_x@EP3W6%gWsC;y_MT>U&*}!!xejH7tZUQ@9|T*^5KM)XBcN@TqCUb>3lHbhoopK zW4wziY?+fb|7jxrK7+j3jgXIpY6C(43{Loq`7;C@e5UQly*)6TVN_PG8QsTX zVP$Nw(2q~}lunefxIbg+R|l5jIJHu>Imb9z23arE)=MvPYbP!406S-i$N zN5{(F+{OgX@wga2P6jhAysZOdNFQ7NS=4PIw=z|W(Tqun{o^q;G2HvBXQrhpdwaHK zo3+-ZPCh;C;JC8Ey{IyagO9zYx}I6MOb;xsmDUQeaNlk<{aFxj))asUZN4w;VhL{Jr?X`mU#>a>2DD-^ zLR_q=4MhHPJOB@ac5kfn=4M;3d}&j-s(eB6b_Wrbl5 z4q=U+YDm)Ut)0TsLVQW7Ua8)RDK2misS*+M>o%?$>htmQr^Kdl^0G0Q|A~8bl_RJW zSj+PQJ~w@?uCczlib9&0nBcr*F+-)&THB~fS9%{C8)$Nfzj@Xh2SQrP_FqEl>s+NL@nB6BGQF{}4n}V4rW?>` z=NjzuRfoA|>Hmhz|Ky0eE(8>c$;t{{U%%oZ5lL-GO4^E$73Sn*iCdzjF)+6`cl0*& zcF*PJNt}~XXxZ*7_#t(Kl7MHNzYpHlGuMA6wjgF637geQ< zJ~lLuu5Ktu>cxB=Ax}<4wj1LV925*Z{yZB!BO{-2a#jMTpfRN}Lb|Z(IIKMvDI~>Q zNHgcZo6x^GFR*Sk5nmBk?YzI}Xum(Y!znuX?r5ZVxOr2&&^Ivb=H}Wk;}|r=OsF7Y8Jjc0oCzIJW((#6|K}gNP#u+ zIRF}n;@z}4H2iMrYNwSyvl#bde5$EF*KMe*ZN7HH3YEUx`Zjy`g9AaBY?oU^{hkK( zu^55&mjDmTB1`gNiJNvD58Nk#!w4(BzMs=xdasC2YD;@-^6I69#&MZFx{C8Ommgs< zU__&=Q}!XYhJP0~S9cEfjE(&yC@rpv-L{_Nui-lRxFp7-hAWM>F+T1D)m>a!Gj!}a z4X%-sbf0M8+_0IOCDUTtjB^Tr68$&q$shU5yD2=Z*${S*eE1yg3!jyz0)s!^(ksFh zt*DT(T|BvmFwNuSAg)1ilc3Ly*54QpNeM6LC;V_W?|`w7{4_@NQ{CyJXkgbTKbB4{ zjQ6)x@M$2k`*n->KGyzWrDog2w)wa5pSYAX%(Qo} z4Om)YPg7Gr16T7@Ajqd2!T0jz+S9xlZ-*>iK|>#();3!R3Dgo?&j7Vmj#Y+;$irZu zV=ARSm%&2Eu{O6sT~SdB3t8<#@CWCUuklTxdn>VXd@YZo0=mLfRB6dX=HnS{v2MN* z4%de+F@=|2#nf?F+r?I$4fk3xx4N!NvSI?u>sK3ms}GDDMGDW?(r+AYT}Fk zR(sUq^;6Z(5(O$?XG4(DQs7h``l(2TG46^Kf?6*kMjw)P7Sj30fXl<`g{HQ45SLy? z2)n-+@^fmcmzasDwv@EA;+{`er9wRquKD{HSvFNs(b3toC9;ivUMQ5_|7NiuoL?A&ZfNQmS|#dI5;#g4GUZ^h^IR|FXz^Yv>xs~Rc__lg0n zoA4g$#@c$_iyE)<_2*){sEK|Ud3j%Y zrQ%^XhYbzxZUke>lx0h_S{&E)Cr&3>=&38NI_!UqoiucRiG%}iHS>Nl1xA39ey-5W z;`i^&4kAMi7yEHf&;-;oy(HD0HC|7Cz5GhTz8JWVPg;)kLQP%K`@moST`uqAXC(~< zf&waL-n(D21Ky~c8*5o*?Xq}wg@5HKwx+jEd-B!9#>NKKz2~swC!R`$- zP3HeL5&QRZnw#fE>7vN(ot=q3NC*lFYJ^XY{=*2>MC9l78dqABD%J=t}dkNZ2Fch zEa0)eJJ9V)m3Z>KTtlWq&DPeo-VS%gYxzS)ED!|V*>Tg2;ePyBk}dofQ3UeDe-#@$_fe)0EK3+ zEQNTSIIs$RB-$f);&d`Oei;|;Uwy{^FFfaOsoLDsyHWX}@24P#Qe0}B|F5j&ECXeN zBTb$^Za}%ny~A}l)tQ^CuCm$0(l8{uw02Le&8;Y>J}0MMMeDuQ`IuUkfB@>Xp6@Tn z^XJ0*NT2Jk*3y^S1kewvKe}YmE3JGH3 zgmX7kI}*<;OUvY(7MRXnt72CDH;jXk5j%u%TYmoZ6z!BwCI6>hK4xcKv%O27kYkPTjK5F(lI^lW+h7-#>C7FmywbR zrQFrV!?sh?{YA(UHaN@ziJTlC4-UECGvVAW^`2tu=2sQblbKV{#@4a*D{7nFK#l$-%yaq^-fSg8it-B#LAl#S5yzQI8%X%CIY z*nn6D4n}URO>=`~-1Zmpod#(2m`jrZp zIq7=mcam%3K~lIJQ!1|w3&OkYP8|vS z+j4ap@)n0R!^c5GOFJV&ZPj54+lrT6DCuLu@4fY(3ctE<&vHo>vv}#m3GAHOWN$}9 zGKg168X7zj;#Fto>vvbE09+sOorh-}Z9(XaOre`SQ?^O^+DBS(Be##m#$ziX`9_Tl zCuhB(%`e5k*qBJCG}*JnA-+YqU|}_@1AQlT?!CgzBK$z(^8YVg&jV35-GCfB=p*1< zC}rDQJ-jt|5r}YJ;sZbXs>W7(n*u3o`eM3WU#}knRZxt+av`5j8aLM)_ zp|@SnHxs7m!g4=p(j_MamHZy0rCS#@{1^chef8X|8&p&v&SGzt%e$f2w%u@(;+b&^ z2o#@uo9?443N0mXycB_+VrT;EZr|%(-+RBU-hcmQOf-%vzIhj4=CuY4&pb&LQc@;g znVjlZ3D%g5C*xem0`?FcTNiLfd~Qzs0s^}QPH9{(Ud&I*`u9k-R58_<+=JaNq6z1h zmP&Qr-ue`%Fh2O8k zBODdg)yZjgj*oY~`s4-YS-n?oNp1^U+h$=&|@UwolIybQ~^==f#x8)kEnX0*~uchBj$wfb-xaZ&2*dRy`t5icd zatuFoz$G$1}xkzxZ&e-qzdE&^sV)+lD0H^uO~F_Qlu_Wo3T`p0{Z! zDP_IGwP-sU;%__ed5)l;JJT%zj()GlWWc=W{G68+RGSkM6MnDT)j>+9;ph(OissGC z0~Lgbgt|Iev+H{ZDax@7xNhIRl~SK2=~f_KCL|%@6fv{3?BYY@W@XVndsa|hUS3va zdncj%6}4~c*WJx8-}5f&+v^SC;ei1|7n3&?lG4(5Ko{=zd?k7*H2|d=FU+w!uuuVb z|2;VQ(Fm16UjuUGqJp6#^Yd7@m%xT$c;%q_1zOMH(NPCTstusVDTfrHGT!3e?c@F} zJXm3s^pTN~z*oo0HskIh10)VM^f>9C9j-Dpy*HDU{lEhNQeM0#OFG%1MNCX=MhMsKgI>^Ebq0L%?vCpF++h@r+9d|y^fRlISbnxz$X^c&$<9=){i8mUYJQhNQw`DFnRab7(p!x zb%z8mes~WX`j5^hSYIFp<#1-ix|BR3NS`d>kwNEpy+2L>7GP12glEFO1)(kuiXGiN zm$4wj`^iB|D|Xc_Dhui`C#xK>RN#7c%vv43uKxmKpuOBo*?ODPY2p-nGg?4>SaiEQ zy^FTKu`w$*=6)rrURDTOmAIn{fnZ@x4N-x@HgHvTkvBh}W=FycgB9`v#iB2IUV(Jq zz7Yl`F*Q935^IeodQ(~5SJL$3*>4TaHNuBvq!DK)06$7iPgQ;P4&Vqk-mo7Je|L7$ z_8I5sKHUAiW@>};%iPAqC)3tW7D=uqH#9s5i@Ws94N@F!{bJJRsBdF$;h>>bwARqD z{CPT5Iq!5BRnUkaBsX_0IXM`3%iZ4k{rKe2lW$<;M!1k%72DLNtLJQNEhlH_n#cS| zh)meh{F%C(97{7qN9V1NmaJGtaam4&adrz+d$g&AfzM%;Nbxj5Ww*f%!Tds`d8MytV|^}T-x4JH*R z>Ee32Oo>QJPG;xpXenBl0w(V0u)PEK4m$C$a)n1e9iU&dEVPu&GK(EpPmGjXS@|@f zIj4Irlo<@YB3*1x=LI4rh&il)@-<5rl2^)>>zMYse3cXw%6=AP5F7KaXs&7lGe)w# zP#PRoC&O?)TV7MO(^Pr+Apl$LK6(0ofVh_y{N8UuA|iIdBvZ^|#NDr%nfulu!NI9% zX}TcrXWZ{Ct#$w_k?8v5a=VO< zI!P98dJfDS>d%XGZ!pY0(AVR{NUTGs+fhopc!Cq7Qh&LvU<0ZZD3GY1F7moDD;N$3 z3Vuao!sCn$3{ZO0TVi^4id7h&TdZE5Y}*YXg^%i%BE=*Bcx~{PS=`$~^6o-to9*2! zL0u+|XAx$RwMnAug^$%2TncI4-)!fS2}SSIrGHT2p5j3kGnZyz{)~g;aFFNMy@7J1 zc>U#H+ezR=Fvtd-@&BabzDBfE@lmPNJ;k9})ue$n@~X0}6aE26VG1NGT|?TVlF9I-q?Q@^{Db z3P7J^0OIRpQckKtrnUfdzc&%`nb_M)jqjwIXwcnoFakbFNlA$?w$mw4l|(mob(Yi5 zVzLA=X40(Qr_1C*LKMQW!=S={jde6NG_of9@Zb$jzaNldy99Ukk+rwB(0a{=QIS1EOBU_owa&8)k0OfA=EzTTlcn#8jSG?oqLqV%~aqJ8LVw8?35cby%2Q zm{)LIQBOG=Px)>;vx657`#$KrT_h-)pVLUrx9v^6j~CG1g60YtsUIBNa5a4*D>sOB ziYq5KNNc9AZ*FXk-P}JJ17$6UTLB^;oSao}!UvR7WfS97?j4AGH=~eKBu`FFe%v?) zCWPN9DU8KiL|iCut!%JyBb{U#Kc>Ri*LWFho!#TbM|;-RgC`r3daO@c0C_UqhU{3B zvYV2U5>8`j31!&(ogl_@?IKFO=Nm9k6j}>f-_cRQmz^wHj_);X_KZc$9`EjwNOemD z-Va(Djl^aV;Z(8E(~HrxHo<&}yF&U2H$YtZ(~mHWf&CG%kFLr<$lz+@0(FWubn$Sp zad|lUwZ3H~FC;{IN_C2RlEgNxqp5hs3lZgUw)5MDmYw2bJpc)_0k49v4k|?$U=eub-mNmj}F_WvZA8DzhAUkv(BdF`fy<1^MGPuY6|Ts@ep_F z0!W|ZBx;M>op)#fG(y*_fVg?SU^Q==;o(940NWh`2)4=A;i1C_6oTCd&7P(g zG{T8*J!|>11g5_P4A6RrbbFmN-g~Uv>-`Ynd*$W&LWI~=nY5t@fu*Hi&F%!PFQ<{2 znKXQSWX%wM8fr8Dms`dn=!-a0imo)c=~cYYWMovn&>0&QwQvdkXDZ40ALv+^E&+$n zoA*&-puuSw8Pt@Nf%=M6BD7eTlZe}PP?a`|e}$64ESe~_;*O7Wd&HaE1-FjW)+WF3wCF>y71V*(PX5BxWQ^Wr6G@*MC3iT^p-Y#MS7VXa30 z9vb{r&B*@?w5cOSG6sC%VPhrPtgx)z_hsoRDdOpy)e59IY+HN4?!20rg+FeZ(Q9Kfw z#Y`~G93;k<^c7LgBDBG8_D6}sY?Ss5mP_AoNB%8-<)fij8XC=DXgpST$u4GGQX=&A zYgJ*twT&UaixuqP^W76mo0AvKFEFX~!c*+(8!AxKQM9aV?QoxU1!!_-O z_X_H&&w3WBr4>GUuOQBEcJ{VVXP!yDOCp=GXa4}w`N6>}R@a{omX$=}PF+(GbvC6s z%UiPyip)Huv(r1fYZT1rB@6_BVS3^+04aeiEoV6Z#`OMvU*LJpNK9YC`Xtcj+T7%Q z>ba2<7>Dc_J)fqh{v%@l&e~M^tbceYFj&GaT-)*#@9%{7pTi65;OGeUsa-Be7yA!M z`rS;GsV)fn+-MJO8MSWe7CbQDUKL9vCnvv6dx>i0rxuN_mu2g7lwwz|-U9UN6;RRd zzZf}0N1zB@?C-N(>ll%elVjBSmksCy!CVSo>60(qP`AbfMI%*z77`-v3M zhTj`%ukc%;A|gW74Y!}9ux*CYONfaOXcE9L?>41{QNk+Clkm!k!r%xIL9@RqeE{-^ zW_jR$+S#?XHBmG|FuTme26aJ<;S?Gu>nu&cC@HC^@Cmklr(uQ#hWcI{8rS=08meL} z;%hTA( za*L2ghErxfh@s@mmSUjVxn2%`?k`wV^o0hE`_<>sm(@Y<6xB1Ce&_)Im(!^xmyy*~ zdKv7~z)#HREvRsbp3!%oKj`t$JYWS1(UruaxKJ15?sPI^J~=Nd2gj$D%nkmtpKSAo=QHE_BK-VK9Fgr2etv#`TCZ5!u}csbS$Teaq%eQqkDPJ(0i9Te z_9U5e*{vfO1({E)#Yl|3Nq;`D?r0=7e8&Q#{gMFnJ*~;H1f^ zOz12cB5`Y`yowbd{y6hy1ZXTa_5WpTEh-zdx7Kn;hm+(E4tj9@wzZWuQ}b@wTVKp< zo``>UKJCp?vPZ%y)6KQ>p{=5oori~qLx6*xTI%~Px7=*w%a(VBe6Hh@TYw~VlLH^M z>hY0x%{xb{^H#GY4oXi_kYj$%;yChcFt^!Nz9sRVbKTLH4H@uV{92ngMYS{MSlL8% z-Q_&nYuN7JOnc4PIcr{^&ZmxQDz97qqK>24?4I=HTB6UU%hb(RX9@-VI0jY@fv{oB z9yLwPCXqXuavcW)4T;YTz%HIy1*l34Z3Im(ILN$ujmpQ(Rqf-le0)(AJXLIU=onsa z&D#tU3!oDnRAWs6ZKUHJ>lho!zd+7^eGx0{i^6wD!d>=3{1{I>0C;f=j6;LuI0A?C z8vj;T-%CJ#dHd?shv;Y?Hnw)6Mc9`AXFU-;LOT5JkY9lG)9GcdYAF>3`3~$vXo$)& zg&Y+W@HDZ-6QM0FElc^pz_0Scv;AKE2;vFc#*-B9vfVjE$Zi~n?{}n{(!hB!3-)C= zI5;l9skL^l`-9xpX&$mM`~*!*K@^Yj`g&{2ViWf)CGv`9QAjZT-Q;&5}gN2R| z)8MApP*7;+xL4qJE_A*KJAFt!9xFqiDaM;*l{PF+s?fxYTbh@b*9H=(6$PfkJ6Bg8 zCx|q#U(;>#xd|fC5y9UfdRtBM5=N*;Y{<`-MLa_73{*6wPmquL?5}PuQfDVcWv7V; zzctHg`PFW6=GVJ?AXPcC)V(4nPvk;tlGB?5b#eUQz68!9Z#7Oh~Vg`O@cx;cj~w%a~1!U*h2H|o7dj!9UxL~MY?TYXi` z-O~&&|2gR6heu=onmNv}1A_^>fnUG6+C@_1b9q8KhTgiu0=^wPY1V3#DbhmeR^j4mw>q-0kIYvcGg&C*-zIahABR7$9q@YG3#-zRp^%NI) z2HRSkoAowYne6Yr*qUAcIyt}N1-c|T=N2zJCl3o82&QTD)gukfjV}m`FZ|22Z#r4N z))Y))*_SRsnLauJ7^AebxQ4sV(&vJYVF9qmHzwDAthTwwSr;x0AV%=8J|`;E#DAN1 z**AVnWcpTn|8T#>`DjS*ZgIQpMu3h*lRm=U!A_JBkCIe@Ap!?K5bYqqvGT~>uLEE& zh%e)D-#=yjSg=u75-W6&{k=l+ZOf@s01i5FX7jdb*;vRh6GepAhJ7ejX(1W${yfGhe&w+@%$AKg7u}m zwzd_CKSFGl3mRePgTq4<7;Ul(B_5WUv2pIt0w^&e54#s;27gLZFw6j42228Y*$;ihiQlFbo$pv zV}X|<7sY9jmJVk%nqE(&9e*waWr1I$U4xDdCG>v$@`0O7)|q$v?$uQ@>>!5kJJW*? z?S(=S+>v)N6A$4M>Ieg%KKp`c zUT-ok0;yvywS`5PR0whest0v)P}#zR2O98( ze3}n@9H|O$nh^~5EQM~-tI7`J-8AQut#{+eEg^6Ia#ek)u{Il5HtP0vwUc8q>&zr| zbz|b+rJHy^wHD*OJA}H&vCV!v4@+5k%;SjZlS#u&pY>KNT9;4vxiA`k2*o7#E3uDl z4enAgB4q}BNv7sWWR%6bGN9P9k6u)(Xs96Dd?DP%Cdf55GNPh8#r8#EVuE|2yjJc_ zzlC*zZ2lKG+G@@6*V*LRp{Td>n0n?DH`~uMs9J68;b5)5zuT}gKEo8tmA>IszV53 zRIy@E&Kj`HbaZ?an3?F%+D?HLK@ljkD0kA195KVfUWZ2ta%mxsk#jqDrNd+HWq#S{*3t2B0r6Ef5;EM+@J&dH!0!v%3Gyabw7@7NKE< zsBCB;Q(ze9A_%%w`)I3FCkp<}W$ z>nOprK_N2^W2nH)G}BxbO3o>OPqNX+$+gOiMO;=O-H^^=7#mz79iSK`n1$K|!PX<0 z-j{6f@mAcvb^ol$FL`-MPe!nr;YZ6Zi1nxP=|-@6Ug_->0u3boOkobNzyWPjXBQid z4Z#R4DV{D9Bjev*&94B!3DvH|5fP5ve{rB|en5l*oMU6as2rc zNbz(C&Z4_lRa|-gq!u@ya=+3St;h}t4@l!2c}~YdfrZY?$Wj`E8x@S+dEOjTM67Bz zD=Iz_UjsChlczRkQM@krW-dO}vML%C7gc!zMo~aoY;KTqn-v=`g9>B(&qi|+QoPka z6w~A5%fI)S7DJ3o*P^2srvEI&)`9J5qb31}`JBd_MYr=|$D>pETEE+ltWJZTO;QZ+ zZM8oMiK+?l3B$v~Kz|8<3ia-Rzd!o1iI>lIR1=CUB%tU z#|UC$u9S@T(_=$VCgO(5Ww(|;@?68SLsP)Uz!1Y*4v^Ak%_Mk0i}G5!3gwRa1Bm~i za36k?$l7wTp0eor!cPnd31?@twX%{BvSQ6ofF4}rV};hvO`fF>_`oG<`zW3L)*0gq z0shUGA>>VdgK-0O7Ht!YmSk#IEk0_enRONg|8{h_SRADtOmDkD;Yb)ZgbR-d54W_i zn5~kh{TEX86gDI$n{(v$(Z%J;G2n=rgv{7+y||;Otf%LRhv((9-mgU2Vbh!El|L|) z36%BCKCek<%(vM2$u-X_zjSzuiG|hR?ifvd{(>~d`b}U4KbXJ>=|HhhBDuI~cpKbr zCe!9{Y*^D5NfeD_HQ#u;sERroUR^lCfto$ZkgkK16XWv&$j#Dkg2mo41`_Gu@Wz*( zuit$8NICjLsmg7h$r)c+xvF$19drZK%~y&Z9_uq>Buj&rZWkNtt349EJY2O8iC{Ln z9EUs8iry%Qy({m{%%o!ko3TxBNM; z+%>1-yKwJJ@Z~N=RAcVA`Bx~(hT8wf_t6m{qj~1mX4ObFr*~5`r4!JFJM87`3~aDT z(iugtcp)U6VAM9`D!<6)WhfW%dtYVa@R++C7<$TATIwn#Utb2Canqr~yP>}hn+o47YYN`Xe z-SM{W-OIVTDC@EP0o~gNB&aBUK%ZQXz#=a<7nwUEm8s_?2#iFJC1fQ$w@d1Dd@hW+ z69PjBGfC0!dn>qpl)2}2y&5Zz2+K$HIxq9ywUjAMgnp!a-N}sL-5o;U;NU0`|-I=5iojK;!Y=GQd557>m3h5NNysRkz;JUx=vOR7HibFhEsY zW09z|{6U97Im}54Zx(eDw)5A{6}XnF;qz=QB5Tk+D;5*QqOeen4!$uT=8`O#Y(O{4cl{rf(}=W(u0B)=GRS4f^>9hGrZS- z@4b7co|cr(CCJ4o$fc>MQ=n9M-Q2P(Tl&83tTjh2>!*|!(?EFmJ9G2fWN+FiKPXpu zRYPMV{9Q{6tgxt?!`#alpIbL$CZxe)$gqvcotUMT$ zWqA|Mr1a@WoFQX<4XA&lhY+2iW^6Q5p(z$8lM6wXyk2wD8ag_Dw!$0&80Z>08mdvx zo<7Y3AZ+zOV`mSrfz?vi07Q2UO-)^Oow-?sDi&e8e4hH=mw|i^GWD&s9Sx2agAaJD zqTNnxRu)V}{=2N^bq{EaHM$)bczd^~3T|TE5fAZco}fxV%7}IX%-Y$@qsz*khaz?d z;I`BXfSYGIIx&HYbx-h7gUc4x77iZ5*V4=kJ*L^`=B1YvFs5oJVTKVrLMPeaLLouj z=K$mWq7Q&WMe}CLX$PCjZGAsu2K@;WYK(!QAzf_$XAf1#N2?iMw<{V^!fzW#in@y_E+3WjGC_LTL0pQNX5wjXP(ML==)ZUx5o+$c zCnB;V_^q{7s5V3eL;&8-$;kxlu!;)Ka>!f}3O=LN5_hjwvPn;N=!euXNcA{9bwMevI^#5Gr8vCFL^QeXKR{c38s+NoLm ztrWcrRKC&R^U?Tnmn7ai|0zLN9J;o)1{|G^r8aAQDe)lTIH{%T5(am2A;lxbn?Kl? z=Vb4(;hdt;bfK7et6+NvAQ_5qF24?@@F1Ux=`)cMyfc*hV1uv;UKdx@lh5x?U<~?u zmng(PgV1G4S!pXwJ{rxoTS?`2#bF7$77eNv{yX}33?sID6oh*6g8Ndt!6AnF$K3d; z;{}Heae)dq4?hn(dqcrY5amzEQ|F!@8xmF=Y}=MJn?6NC?k7 zy{%hB@RCzv%M|jHlQqr-MD;Q=3y{VZ2Jp|^UleNUoCjrx{dWX@dcXB?fn)LVb7IDY zV?~PC6#>aOM*jQT!*%tGwK(PX|arExVSCI62cz8HD24Dsj<2`!*95$ zEkYFZqHG-7)ue5Lf`URb6&Mt#-ka#@iKGB9AEW;xv5f$s;TSoYBa)`}jsL=F5Kca7 z5qUTyR#jEC@`mekW>kB|!h%kTHIhZij~GdG`G8lOB7+OV(>vm0UwQ=_!Y)WElM%2p z=hK^UTg`&~^~B2^K~?}9hs{lf7x%`@d+ii|)z)&;n>G=(Yi+_2HfB)?

    Wcoa4B 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 /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../prettier/bin/prettier.cjs" "$@" +else + exec node "$basedir/../prettier/bin/prettier.cjs" "$@" +fi diff --git a/node_modules/.bin/prettier.cmd b/node_modules/.bin/prettier.cmd new file mode 100644 index 0000000..e0fa0f7 --- /dev/null +++ b/node_modules/.bin/prettier.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\prettier\bin\prettier.cjs" %* diff --git a/node_modules/.bin/prettier.ps1 b/node_modules/.bin/prettier.ps1 new file mode 100644 index 0000000..8359dd9 --- /dev/null +++ b/node_modules/.bin/prettier.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../prettier/bin/prettier.cjs" $args + } else { + & "$basedir/node$exe" "$basedir/../prettier/bin/prettier.cjs" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../prettier/bin/prettier.cjs" $args + } else { + & "node$exe" "$basedir/../prettier/bin/prettier.cjs" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..44b2ece --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,525 @@ +{ + "name": "srs", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@unified-latex/unified-latex-builder": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-builder/-/unified-latex-builder-1.8.0.tgz", + "integrity": "sha512-1s5MIan/qaYeqJI1Tk3bfUwdkk0jIrQXRJt0dF0j3JWT9RG60WbiXp+593eOJgFYJtn+h3FdM0bvalfa+ZzTXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-ctan": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-ctan/-/unified-latex-ctan-1.8.2.tgz", + "integrity": "sha512-VuOEU3Kzed/b+lm+nypYtV1IiqIuFWpwx92WNtBW1w3S+Ba/Ffolx+/LoAd8uuCcyCmygkQi3eZJNHxarzyVIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.2", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-comments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-replace": "^1.8.2", + "@unified-latex/unified-latex-util-scan": "^1.8.0", + "@unified-latex/unified-latex-util-split": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "color": "^4.2.3" + } + }, + "node_modules/@unified-latex/unified-latex-prettier": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-prettier/-/unified-latex-prettier-2.4.2.tgz", + "integrity": "sha512-gMvlKGiGi9zOWVHXPhzeURhPYwPIJ7MBht42et/sVb4Z2wTjhcn+bU7kookT067ywOptVZNBgJw+iAgSORAd+w==", + "deprecated": "Incorrect version number", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-ctan": "^1.4.1", + "@unified-latex/unified-latex-types": "^1.3.1", + "@unified-latex/unified-latex-util-align": "^1.4.0", + "@unified-latex/unified-latex-util-match": "^1.4.0", + "@unified-latex/unified-latex-util-parse": "^1.4.1", + "@unified-latex/unified-latex-util-pgfkeys": "^1.4.0", + "@unified-latex/unified-latex-util-print-raw": "^1.4.0", + "@unified-latex/unified-latex-util-trim": "^1.4.0", + "@unified-latex/unified-latex-util-visit": "^1.4.0", + "prettier": "^3.0.3", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-types": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-types/-/unified-latex-types-1.8.0.tgz", + "integrity": "sha512-GLJbBmmfDOWtdEbpQCLb7++zPxXin36aC9XOVCuiVNMR9VYv3szOJa+ZdTilVCFHpOeFhKh6zRws96vJgz2tGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@unified-latex/unified-latex-util-align": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-align/-/unified-latex-util-align-1.8.1.tgz", + "integrity": "sha512-csJxLrvziRc5ZkhcRsYI7gSQBGC4fXucPtwNkTscbSIy7PfYF7BfWBPc61sb9jXQg4T4R6MLdG/Tz6Pgb6z1bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-argspec": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-argspec/-/unified-latex-util-argspec-1.8.2.tgz", + "integrity": "sha512-ts+6Ha9JhcMCt+rbajjiG0srxCz2jHcNrIe3zma2HQzmKNOGxpoTdA7+E4sG2wJgQK1+eQ9MrjGeLBCNXH7fGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-arguments": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-arguments/-/unified-latex-util-arguments-1.8.2.tgz", + "integrity": "sha512-81OqsLoVUhVFgp64z7Jrtndgl5fJGvZKV1eipNWH4IH2hFEM8RZ0fmLxyOn7S/NjYuqWeOJ3WhjOvRHtmLLf2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-scan": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-catcode": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-catcode/-/unified-latex-util-catcode-1.8.2.tgz", + "integrity": "sha512-zChzwfcXufJ5tMkBNC06GdMFj3ldWnlL1eLszFNtcWPvB6KyXHjOPRSZ9aILjbZEd2ogBc8lOKc5ug+iBFBVxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-comments": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-comments/-/unified-latex-util-comments-1.8.2.tgz", + "integrity": "sha512-OGeT3BYzLT6hRgyRrPqXTJBpD/JaJl5yIcpQfm5wpcDFBVfcDOCZ8/Xc7UwosOvCjM5EHVTJIxmDQ1epZg3IzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-replace": "^1.8.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-environments": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-environments/-/unified-latex-util-environments-1.8.2.tgz", + "integrity": "sha512-ZaL28+sUtVOSsWv2LfcGXmOJoQJ0Vu4se/7R83awutr2cS3YIZsyCIRFfhz1jYyedWfGLtq+a/2MWJfcIcd7Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-match": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-match/-/unified-latex-util-match-1.8.0.tgz", + "integrity": "sha512-fjuLI1KVhWTHkfWn0kR8/RhM2oD2hxWhzgskUMLJ/IZMye9ESvVo8ItG4y+BtpwGFWpTmCtpMNXHjknIQxza9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-parse": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-parse/-/unified-latex-util-parse-1.8.2.tgz", + "integrity": "sha512-PyHQTZWS7/BCVa8ojBEmVl5a3iXs5ZSOqhp2R/bbroe7+OEmQbqULPq4GigHA6ClEbPmP8uxmgHZDFGH2cfR7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-ctan": "^1.8.2", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-catcode": "^1.8.2", + "@unified-latex/unified-latex-util-environments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-pegjs": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pegjs/-/unified-latex-util-pegjs-1.8.1.tgz", + "integrity": "sha512-1N6WknnzKGACFCmgaEZ2j89j5C2dKhmAOCfy6moD+AMm6nUb69Xp9pJ1jDfqz+Uz9+zRo5I6ksr6q5GgmAJvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-pgfkeys": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pgfkeys/-/unified-latex-util-pgfkeys-1.8.1.tgz", + "integrity": "sha512-VwZeUzmPgKwO2sZ9xx4Ul0Mp82DVdWg32krOlH9dzW4ZQDOBTnRtvx6LQmg9b7Iz3F2pHLYU0LCCaJlvFNBm1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-print-raw": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-print-raw/-/unified-latex-util-print-raw-1.8.0.tgz", + "integrity": "sha512-lMuLqnHXCDNqrjslf6hBAA2McEI+oaaxvjA9zfeAeWZyZh+DUJjkmwiuxYejwHHKbQvqzregNP4wtb9OvaC21g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-render-info": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-render-info/-/unified-latex-util-render-info-1.8.2.tgz", + "integrity": "sha512-Hjqt8Kx2/pYWwd/S3H397zyenLFwoZsmo7BL/Q7mJfj5wNs35ZMdoHQa0O8tLeZjezkWB2eejODVBsu5xDDCjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-replace": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-replace/-/unified-latex-util-replace-1.8.2.tgz", + "integrity": "sha512-89GNj4p5wJmSUGAmdFlGnb/SaV4WykroK85bYbY3Fwppp7kO6sVYSRGfrTEIFob1S4HGL6xrYYUnCueI0+ZzhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-split": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-scan": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-scan/-/unified-latex-util-scan-1.8.0.tgz", + "integrity": "sha512-4WWDTcLOhlkZsGmGl/IZA0Jg2rTitVwGf6ktxs57AyuCEdzHA5ZeNwzSewW8wpHQdLfnPX+LNEnaukwEdWfF1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "trie-prefix-tree": "^1.5.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-split": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-split/-/unified-latex-util-split-1.8.0.tgz", + "integrity": "sha512-gRlRge72wcvLRs6bEoVbh0fDACbkioEPDJOr7XaCuQqjNNu1VTXlcvImZQVXCdMG6CJ4lqiaJRwnUupK4rsmsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-trim": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-trim/-/unified-latex-util-trim-1.8.2.tgz", + "integrity": "sha512-zshEykIuLvngWNl7RnMP86KE3yieVLK2u+byPioh6JVQCwkHoz/UiPzl+fuPw/u+93LPNSJBRa16a03sviqyBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-visit": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.8.2.tgz", + "integrity": "sha512-Xq8516ZTKCfjB/txSIbUWtdIR2NdWO8/LlhjMLljFCEO4IE1KfhCCgKgwxNa7uuCkGG0e0BwVEHQIjH4TQZARQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-latex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-latex/-/prettier-plugin-latex-2.0.1.tgz", + "integrity": "sha512-xIKGN0uWU+JwGHI92ixohngGLpy2nGQhYnmTtVue/jbw+K0fFPddQ3pMXx3fjtmmUhlbZisYXehJtcJ9Ford0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-prettier": "^2.4.2", + "prettier": "^3.0.3" + }, + "engines": { + "node": ">= 18.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/trie-prefix-tree": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/trie-prefix-tree/-/trie-prefix-tree-1.5.1.tgz", + "integrity": "sha512-Jjvj/dA97wXnabG/NLJUgo4IQMj6vucH+Qxm7of/omfWSmZlPqdRU6Ta4GmQqCZH+n3/iYZUwfvUoEhB0Hs83Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + } + } +} diff --git a/node_modules/@types/unist/LICENSE b/node_modules/@types/unist/LICENSE new file mode 100644 index 0000000..9e841e7 --- /dev/null +++ b/node_modules/@types/unist/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/node_modules/@types/unist/README.md b/node_modules/@types/unist/README.md new file mode 100644 index 0000000..c64ed29 --- /dev/null +++ b/node_modules/@types/unist/README.md @@ -0,0 +1,122 @@ +# Installation +> `npm install --save @types/unist` + +# Summary +This package contains type definitions for unist (https://github.com/syntax-tree/unist). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2. +## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist/v2/index.d.ts) +````ts +/** + * Syntactic units in unist syntax trees are called nodes. + * + * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. + */ +export interface Node { + /** + * The variant of a node. + */ + type: string; + + /** + * Information from the ecosystem. + */ + data?: TData | undefined; + + /** + * Location of a node in a source document. + * Must not be present if a node is generated. + */ + position?: Position | undefined; +} + +/** + * Information associated by the ecosystem with the node. + * Space is guaranteed to never be specified by unist or specifications + * implementing unist. + */ +export interface Data { + [key: string]: unknown; +} + +/** + * Location of a node in a source file. + */ +export interface Position { + /** + * Place of the first character of the parsed source region. + */ + start: Point; + + /** + * Place of the first character after the parsed source region. + */ + end: Point; + + /** + * Start column at each index (plus start line) in the source region, + * for elements that span multiple lines. + */ + indent?: number[] | undefined; +} + +/** + * One place in a source file. + */ +export interface Point { + /** + * Line in a source file (1-indexed integer). + */ + line: number; + + /** + * Column in a source file (1-indexed integer). + */ + column: number; + /** + * Character in a source file (0-indexed integer). + */ + offset?: number | undefined; +} + +/** + * Util for extracting type of {@link Node.data} + * + * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. + * + * @example `NodeData>` -> `{ key: string }` + */ +export type NodeData> = TNode extends Node ? TData : never; + +/** + * Nodes containing other nodes. + * + * @typeParam ChildNode Node item of {@link Parent.children} + */ +export interface Parent = Node, TData extends object = NodeData> + extends Node +{ + /** + * List representing the children of a node. + */ + children: ChildNode[]; +} + +/** + * Nodes containing a value. + * + * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node + */ +export interface Literal extends Node { + value: Value; +} + +```` + +### Additional Details + * Last updated: Thu, 15 Aug 2024 02:18:53 GMT + * Dependencies: none + +# Credits +These definitions were written by [bizen241](https://github.com/bizen241), [Jun Lu](https://github.com/lujun2), [Hernan Rajchert](https://github.com/hrajchert), [Titus Wormer](https://github.com/wooorm), [Junyoung Choi](https://github.com/rokt33r), [Ben Moon](https://github.com/GuiltyDolphin), and [JounQin](https://github.com/JounQin). diff --git a/node_modules/@types/unist/index.d.ts b/node_modules/@types/unist/index.d.ts new file mode 100644 index 0000000..b019d38 --- /dev/null +++ b/node_modules/@types/unist/index.d.ts @@ -0,0 +1,103 @@ +/** + * Syntactic units in unist syntax trees are called nodes. + * + * @typeParam TData Information from the ecosystem. Useful for more specific {@link Node.data}. + */ +export interface Node { + /** + * The variant of a node. + */ + type: string; + + /** + * Information from the ecosystem. + */ + data?: TData | undefined; + + /** + * Location of a node in a source document. + * Must not be present if a node is generated. + */ + position?: Position | undefined; +} + +/** + * Information associated by the ecosystem with the node. + * Space is guaranteed to never be specified by unist or specifications + * implementing unist. + */ +export interface Data { + [key: string]: unknown; +} + +/** + * Location of a node in a source file. + */ +export interface Position { + /** + * Place of the first character of the parsed source region. + */ + start: Point; + + /** + * Place of the first character after the parsed source region. + */ + end: Point; + + /** + * Start column at each index (plus start line) in the source region, + * for elements that span multiple lines. + */ + indent?: number[] | undefined; +} + +/** + * One place in a source file. + */ +export interface Point { + /** + * Line in a source file (1-indexed integer). + */ + line: number; + + /** + * Column in a source file (1-indexed integer). + */ + column: number; + /** + * Character in a source file (0-indexed integer). + */ + offset?: number | undefined; +} + +/** + * Util for extracting type of {@link Node.data} + * + * @typeParam TNode Specific node type such as {@link Node} with {@link Data}, {@link Literal}, etc. + * + * @example `NodeData>` -> `{ key: string }` + */ +export type NodeData> = TNode extends Node ? TData : never; + +/** + * Nodes containing other nodes. + * + * @typeParam ChildNode Node item of {@link Parent.children} + */ +export interface Parent = Node, TData extends object = NodeData> + extends Node +{ + /** + * List representing the children of a node. + */ + children: ChildNode[]; +} + +/** + * Nodes containing a value. + * + * @typeParam Value Specific value type of {@link Literal.value} such as `string` for `Text` node + */ +export interface Literal extends Node { + value: Value; +} diff --git a/node_modules/@types/unist/package.json b/node_modules/@types/unist/package.json new file mode 100644 index 0000000..01cb5b0 --- /dev/null +++ b/node_modules/@types/unist/package.json @@ -0,0 +1,55 @@ +{ + "name": "@types/unist", + "version": "2.0.11", + "description": "TypeScript definitions for unist", + "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/unist", + "license": "MIT", + "contributors": [ + { + "name": "bizen241", + "githubUsername": "bizen241", + "url": "https://github.com/bizen241" + }, + { + "name": "Jun Lu", + "githubUsername": "lujun2", + "url": "https://github.com/lujun2" + }, + { + "name": "Hernan Rajchert", + "githubUsername": "hrajchert", + "url": "https://github.com/hrajchert" + }, + { + "name": "Titus Wormer", + "githubUsername": "wooorm", + "url": "https://github.com/wooorm" + }, + { + "name": "Junyoung Choi", + "githubUsername": "rokt33r", + "url": "https://github.com/rokt33r" + }, + { + "name": "Ben Moon", + "githubUsername": "GuiltyDolphin", + "url": "https://github.com/GuiltyDolphin" + }, + { + "name": "JounQin", + "githubUsername": "JounQin", + "url": "https://github.com/JounQin" + } + ], + "main": "", + "types": "index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/unist" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "6e36525a6db49ae5517fe0751796ca8f6c65099098415046d4f1ad6c2ef1a33c", + "typeScriptVersion": "4.8" +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-builder/README.md b/node_modules/@unified-latex/unified-latex-builder/README.md new file mode 100644 index 0000000..15ceb53 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-builder/README.md @@ -0,0 +1,178 @@ + + + + +# unified-latex-builder + +## What is this? + +Functions to help build a `unified-latex` Abstract Syntax Tree (AST) +with [hyperscript](https://github.com/dominictarr/hyperscript)-like syntax. + +## When should I use this? + +If you want to programmatically create `Ast.Node` nodes. + +## Install + +```bash +npm install @unified-latex/unified-latex-builder +``` + +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 + +## `arg(args, special)` + +Create an Argument. `special.braces` can optionally specify +the signature of the open/close marks that each argument uses. For example + + arg("a", { braces: "[]" }); + +will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, `<`, and `(`. + +`null` may be passed as the value of an empty optional argument. If `null` is passed, +the `openBrace` and `closeBrace` of the argument will be set to empty strings and the +contents will be set to an empty array. For example, + + args([null, "b"], { braces: "[]{}" }); + +will produce the same structure as if the the first "optional argument" were omitted in regular parsing. + +```typescript +function arg( + args: CoercibleArgument | Ast.Node[], + special: ArgumentSpecialOptions +): Ast.Argument; +``` + +**Parameters** + +| Param | Type | +| :------ | :-------------------------------- | +| args | Omitted | +| special | `ArgumentSpecialOptions` | + +where + +```typescript +type ArgumentSpecialOptions = { + braces?: string; + openMark?: string; + closeMark?: string; +}; +``` + +## `args(args, special)` + +Create an Argument list. `special.braces` can optionally specify +the signature of the open/close marks that each argument uses. For example + + args(["a", "b"], { braces: "[]{}" }); + +will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, `(`, and `<`. + +`null` may be passed as the value of an empty optional argument. If `null` is passed, +the `openBrace` and `closeBrace` of the argument will be set to empty strings and the +contents will be set to an empty array. For example, + + args([null, "b"], { braces: "[]{}" }); + +will produce the same structure as if the the first "optional argument" were omitted in regular parsing. + +```typescript +function args( + args: CoercibleArgument | CoercibleArgument[], + special: ArgumentsSpecialOptions +): Ast.Argument[]; +``` + +**Parameters** + +| Param | Type | +| :------ | :-------------------------------- | +| args | Omitted | +| special | `ArgumentsSpecialOptions` | + +where + +```typescript +type ArgumentsSpecialOptions = { + braces?: string; + defaultOpenMark?: string; + defaultCloseMark?: string; +}; +``` + +## `env(name, body, envArgs, special)` + +Create an Environment node. + +```typescript +function env( + name: String, + body: CoercibleNode | CoercibleNode[], + envArgs: CoercibleArgument | CoercibleArgument[], + special: {} +): Ast.Environment; +``` + +**Parameters** + +| Param | Type | +| :------ | :-------------------------------- | +| name | `String` | +| body | Omitted | +| envArgs | Omitted | +| special | `{}` | + +## `m(name, marcoArgs, special)` + +Create a Macro with the given `name`. The macro +may be followed by any number of arguments. + +```typescript +function m( + name: String, + marcoArgs: CoercibleArgument | CoercibleArgument[], + special: MacroSpecialOptions +): Ast.Macro; +``` + +**Parameters** + +| Param | Type | +| :-------- | :-------------------------------- | +| name | `String` | +| marcoArgs | Omitted | +| special | `MacroSpecialOptions` | + +where + +```typescript +type MacroSpecialOptions = { + escapeToken?: string; +}; +``` + +## `s(value)` + +Create a String node from `value` + +```typescript +function s(value: string | Ast.String): Ast.String; +``` + +**Parameters** + +| Param | Type | +| :---- | :--------------------- | +| value | `string \| Ast.String` | + +# Constants + +| Name | Type | Description | +| :--- | :--------------- | :--------------- | +| `SP` | `Ast.Whitespace` | Whitespace node. | diff --git a/node_modules/@unified-latex/unified-latex-builder/index.cjs b/node_modules/@unified-latex/unified-latex-builder/index.cjs new file mode 100644 index 0000000..18eb981 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-builder/index.cjs @@ -0,0 +1,142 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +function normalizeNode(node) { + if (typeof node === "string") { + return s(node); + } + return node; +} +function normalizeArgument(arg2, openMark = "{", closeMark = "}") { + if (arg2 == null) { + return { type: "argument", content: [], openMark: "", closeMark: "" }; + } + if (typeof arg2 === "string") { + return { + type: "argument", + openMark, + closeMark, + content: [s(arg2)] + }; + } + if (arg2.type === "argument") { + return arg2; + } + return { type: "argument", openMark, closeMark, content: [arg2] }; +} +function normalizeArgumentsList(args2, openMark = "{", closeMark = "}") { + if (args2 == null) { + return []; + } + if (Array.isArray(args2)) { + return args2.map((arg2) => normalizeArgument(arg2, openMark, closeMark)); + } + return [normalizeArgument(args2, openMark, closeMark)]; +} +const BRACES_MAP = { + "*": { openMark: "", closeMark: "" }, + "{": { openMark: "{", closeMark: "}" }, + "[": { openMark: "[", closeMark: "]" }, + "(": { openMark: "(", closeMark: ")" }, + "<": { openMark: "<", closeMark: ">" } +}; +const CLOSE_BRACES = new Set( + Object.values(BRACES_MAP).map((x) => x.closeMark).filter((x) => x) +); +function bracesToOpenAndCloseMarks(braces) { + const ret = []; + for (const char of braces.split("")) { + if (CLOSE_BRACES.has(char)) { + continue; + } + const braces2 = BRACES_MAP[char]; + if (braces2 == null) { + throw new Error(`Unknown open/close mark type "${char}"`); + } + ret.push(braces2); + } + return ret; +} +function args(args2, special) { + if (!Array.isArray(args2)) { + args2 = [args2]; + } + if (special == null ? void 0 : special.braces) { + const braces = bracesToOpenAndCloseMarks(special.braces); + if (braces.length !== args2.length) { + throw new Error( + `There is a difference between the number of supplied braces and the number of supplied arguments. ${args2.length} supplied with braces signature ${special.braces}` + ); + } + return args2.map( + (arg2, i) => normalizeArgument(arg2, braces[i].openMark, braces[i].closeMark) + ); + } + const openMark = (special == null ? void 0 : special.defaultOpenMark) ?? "{"; + const closeMark = (special == null ? void 0 : special.defaultCloseMark) ?? "}"; + return normalizeArgumentsList(args2, openMark, closeMark); +} +function arg(args2, special) { + if (args2 == null) { + return { type: "argument", content: [], openMark: "", closeMark: "" }; + } + if (typeof args2 === "string") { + args2 = s(args2); + } + if (!Array.isArray(args2) && args2.type === "argument") { + return args2; + } + let openMark = (special == null ? void 0 : special.openMark) ?? "{"; + let closeMark = (special == null ? void 0 : special.closeMark) ?? "}"; + if (special == null ? void 0 : special.braces) { + const braces = bracesToOpenAndCloseMarks(special.braces); + if (braces[0]) { + openMark = braces[0].openMark; + closeMark = braces[0].closeMark; + } + } + if (!Array.isArray(args2)) { + args2 = [args2]; + } + return { type: "argument", content: args2, openMark, closeMark }; +} +function m(name, marcoArgs, special) { + const args2 = normalizeArgumentsList(marcoArgs); + const escapeToken = special == null ? void 0 : special.escapeToken; + const ret = { type: "macro", content: name }; + if (args2.length > 0) { + ret.args = args2; + } + if (escapeToken != null) { + ret.escapeToken = escapeToken; + } + return ret; +} +function s(value) { + if (typeof value === "string") { + return { type: "string", content: value }; + } + return value; +} +function env(name, body, envArgs, special) { + if (!Array.isArray(body)) { + body = [body]; + } + const args2 = normalizeArgumentsList(envArgs, "[", "]"); + const ret = { + type: "environment", + env: name, + content: body.map(normalizeNode) + }; + if (args2.length > 0) { + ret.args = args2; + } + return ret; +} +const SP = { type: "whitespace" }; +exports.SP = SP; +exports.arg = arg; +exports.args = args; +exports.env = env; +exports.m = m; +exports.s = s; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-builder/index.cjs.map b/node_modules/@unified-latex/unified-latex-builder/index.cjs.map new file mode 100644 index 0000000..6cbddc7 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-builder/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/builders.ts"],"sourcesContent":["import type * as Ast from \"@unified-latex/unified-latex-types\";\n\ntype CoercibleNode = string | Ast.Node;\ntype CoercibleArgument = null | CoercibleNode | Ast.Argument;\ntype MacroSpecialOptions = {\n escapeToken?: string;\n};\ntype ArgumentsSpecialOptions = {\n braces?: string;\n defaultOpenMark?: string;\n defaultCloseMark?: string;\n};\ntype ArgumentSpecialOptions = {\n braces?: string;\n openMark?: string;\n closeMark?: string;\n};\n\nfunction normalizeNode(node: CoercibleNode): Ast.Node {\n if (typeof node === \"string\") {\n return s(node);\n }\n return node;\n}\n\nfunction normalizeArgument(\n arg: CoercibleArgument,\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument {\n if (arg == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof arg === \"string\") {\n return {\n type: \"argument\",\n openMark,\n closeMark,\n content: [s(arg)],\n };\n }\n if (arg.type === \"argument\") {\n return arg;\n }\n return { type: \"argument\", openMark, closeMark, content: [arg] };\n}\n\nfunction normalizeArgumentsList(\n args?: CoercibleArgument | CoercibleArgument[],\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument[] {\n if (args == null) {\n return [];\n }\n if (Array.isArray(args)) {\n return args.map((arg) => normalizeArgument(arg, openMark, closeMark));\n }\n return [normalizeArgument(args, openMark, closeMark)];\n}\n\ntype BracesPair = { openMark: string; closeMark: string };\nconst BRACES_MAP: Record = {\n \"*\": { openMark: \"\", closeMark: \"\" },\n \"{\": { openMark: \"{\", closeMark: \"}\" },\n \"[\": { openMark: \"[\", closeMark: \"]\" },\n \"(\": { openMark: \"(\", closeMark: \")\" },\n \"<\": { openMark: \"<\", closeMark: \">\" },\n};\nconst CLOSE_BRACES = new Set(\n Object.values(BRACES_MAP)\n .map((x) => x.closeMark)\n .filter((x) => x)\n);\n\n/**\n * Turn a braces signature into an array of braces.\n */\nfunction bracesToOpenAndCloseMarks(braces: string): BracesPair[] {\n const ret: BracesPair[] = [];\n\n for (const char of braces.split(\"\")) {\n if (CLOSE_BRACES.has(char)) {\n continue;\n }\n const braces = BRACES_MAP[char];\n if (braces == null) {\n throw new Error(`Unknown open/close mark type \"${char}\"`);\n }\n braces;\n ret.push(braces);\n }\n\n return ret;\n}\n\n/**\n * Create an Argument list. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * args([\"a\", \"b\"], { braces: \"[]{}\" });\n * ```\n * will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, `(`, and `<`.\n *\n * `null` may be passed as the value of an empty optional argument. If `null` is passed,\n * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the\n * contents will be set to an empty array. For example,\n * ```\n * args([null, \"b\"], { braces: \"[]{}\" });\n * ```\n * will produce the same structure as if the the first \"optional argument\" were omitted in regular parsing.\n */\nexport function args(\n args: CoercibleArgument | CoercibleArgument[],\n special?: ArgumentsSpecialOptions\n): Ast.Argument[] {\n if (!Array.isArray(args)) {\n args = [args];\n }\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces.length !== args.length) {\n throw new Error(\n `There is a difference between the number of supplied braces and the number of supplied arguments. ${args.length} supplied with braces signature ${special.braces}`\n );\n }\n return args.map((arg, i) =>\n normalizeArgument(arg, braces[i].openMark, braces[i].closeMark)\n );\n }\n\n const openMark = special?.defaultOpenMark ?? \"{\";\n const closeMark = special?.defaultCloseMark ?? \"}\";\n return normalizeArgumentsList(args, openMark, closeMark);\n}\n\n/**\n * Create an Argument. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * arg(\"a\", { braces: \"[]\" });\n * ```\n * will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, `<`, and `(`.\n *\n * `null` may be passed as the value of an empty optional argument. If `null` is passed,\n * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the\n * contents will be set to an empty array. For example,\n * ```\n * args([null, \"b\"], { braces: \"[]{}\" });\n * ```\n * will produce the same structure as if the the first \"optional argument\" were omitted in regular parsing.\n */\nexport function arg(\n args: CoercibleArgument | Ast.Node[],\n special?: ArgumentSpecialOptions\n): Ast.Argument {\n if (args == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof args === \"string\") {\n args = s(args);\n }\n if (!Array.isArray(args) && args.type === \"argument\") {\n return args;\n }\n\n let openMark = special?.openMark ?? \"{\";\n let closeMark = special?.closeMark ?? \"}\";\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces[0]) {\n openMark = braces[0].openMark;\n closeMark = braces[0].closeMark;\n }\n }\n\n if (!Array.isArray(args)) {\n args = [args];\n }\n\n return { type: \"argument\", content: args, openMark, closeMark };\n}\n\n/**\n * Create a Macro with the given `name`. The macro\n * may be followed by any number of arguments.\n */\nexport function m(\n name: string,\n marcoArgs?: CoercibleArgument | CoercibleArgument[],\n special?: MacroSpecialOptions\n): Ast.Macro {\n const args = normalizeArgumentsList(marcoArgs);\n const escapeToken = special?.escapeToken;\n const ret: Ast.Macro = { type: \"macro\", content: name };\n\n if (args.length > 0) {\n ret.args = args;\n }\n if (escapeToken != null) {\n ret.escapeToken = escapeToken;\n }\n\n return ret;\n}\n\n/**\n * Create a String node from `value`\n */\nexport function s(value: string | Ast.String): Ast.String {\n if (typeof value === \"string\") {\n return { type: \"string\", content: value };\n }\n return value;\n}\n\n/**\n * Create an Environment node.\n */\nexport function env(\n name: string,\n body: CoercibleNode | CoercibleNode[],\n envArgs?: CoercibleArgument | CoercibleArgument[],\n special?: unknown\n): Ast.Environment {\n if (!Array.isArray(body)) {\n body = [body];\n }\n const args = normalizeArgumentsList(envArgs, \"[\", \"]\");\n const ret: Ast.Environment = {\n type: \"environment\",\n env: name,\n content: body.map(normalizeNode),\n };\n if (args.length > 0) {\n ret.args = args;\n }\n\n return ret;\n}\n\n/**\n * Whitespace node.\n */\nexport const SP: Ast.Whitespace = { type: \"whitespace\" };\n"],"names":["arg","args","braces"],"mappings":";;AAkBA,SAAS,cAAc,MAA+B;AAC9C,MAAA,OAAO,SAAS,UAAU;AAC1B,WAAO,EAAE,IAAI;AAAA,EACjB;AACO,SAAA;AACX;AAEA,SAAS,kBACLA,MACA,WAAW,KACX,YAAY,KACA;AACZ,MAAIA,QAAO,MAAM;AACN,WAAA,EAAE,MAAM,YAAY,SAAS,CAAA,GAAI,UAAU,IAAI,WAAW;EACrE;AACI,MAAA,OAAOA,SAAQ,UAAU;AAClB,WAAA;AAAA,MACH,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,SAAS,CAAC,EAAEA,IAAG,CAAC;AAAA,IAAA;AAAA,EAExB;AACIA,MAAAA,KAAI,SAAS,YAAY;AAClBA,WAAAA;AAAAA,EACX;AACO,SAAA,EAAE,MAAM,YAAY,UAAU,WAAW,SAAS,CAACA,IAAG;AACjE;AAEA,SAAS,uBACLC,OACA,WAAW,KACX,YAAY,KACE;AACd,MAAIA,SAAQ,MAAM;AACd,WAAO;EACX;AACI,MAAA,MAAM,QAAQA,KAAI,GAAG;AACdA,WAAAA,MAAK,IAAI,CAACD,SAAQ,kBAAkBA,MAAK,UAAU,SAAS,CAAC;AAAA,EACxE;AACA,SAAO,CAAC,kBAAkBC,OAAM,UAAU,SAAS,CAAC;AACxD;AAGA,MAAM,aAAyC;AAAA,EAC3C,KAAK,EAAE,UAAU,IAAI,WAAW,GAAG;AAAA,EACnC,KAAK,EAAE,UAAU,KAAK,WAAW,IAAI;AAAA,EACrC,KAAK,EAAE,UAAU,KAAK,WAAW,IAAI;AAAA,EACrC,KAAK,EAAE,UAAU,KAAK,WAAW,IAAI;AAAA,EACrC,KAAK,EAAE,UAAU,KAAK,WAAW,IAAI;AACzC;AACA,MAAM,eAAe,IAAI;AAAA,EACrB,OAAO,OAAO,UAAU,EACnB,IAAI,CAAC,MAAM,EAAE,SAAS,EACtB,OAAO,CAAC,MAAM,CAAC;AACxB;AAKA,SAAS,0BAA0B,QAA8B;AAC7D,QAAM,MAAoB,CAAA;AAE1B,aAAW,QAAQ,OAAO,MAAM,EAAE,GAAG;AAC7B,QAAA,aAAa,IAAI,IAAI,GAAG;AACxB;AAAA,IACJ;AACMC,UAAAA,UAAS,WAAW,IAAI;AAC9B,QAAIA,WAAU,MAAM;AAChB,YAAM,IAAI,MAAM,iCAAiC,IAAI,GAAG;AAAA,IAC5D;AAEA,QAAI,KAAKA,OAAM;AAAA,EACnB;AAEO,SAAA;AACX;AAkBgB,SAAA,KACZD,OACA,SACc;AACd,MAAI,CAAC,MAAM,QAAQA,KAAI,GAAG;AACtBA,YAAO,CAACA,KAAI;AAAA,EAChB;AACA,MAAI,mCAAS,QAAQ;AACX,UAAA,SAAS,0BAA0B,QAAQ,MAAM;AACnD,QAAA,OAAO,WAAWA,MAAK,QAAQ;AAC/B,YAAM,IAAI;AAAA,QACN,qGAAqGA,MAAK,MAAM,mCAAmC,QAAQ,MAAM;AAAA,MAAA;AAAA,IAEzK;AACA,WAAOA,MAAK;AAAA,MAAI,CAACD,MAAK,MAClB,kBAAkBA,MAAK,OAAO,CAAC,EAAE,UAAU,OAAO,CAAC,EAAE,SAAS;AAAA,IAAA;AAAA,EAEtE;AAEM,QAAA,YAAW,mCAAS,oBAAmB;AACvC,QAAA,aAAY,mCAAS,qBAAoB;AACxC,SAAA,uBAAuBC,OAAM,UAAU,SAAS;AAC3D;AAkBgB,SAAA,IACZA,OACA,SACY;AACZ,MAAIA,SAAQ,MAAM;AACP,WAAA,EAAE,MAAM,YAAY,SAAS,CAAA,GAAI,UAAU,IAAI,WAAW;EACrE;AACI,MAAA,OAAOA,UAAS,UAAU;AAC1BA,YAAO,EAAEA,KAAI;AAAA,EACjB;AACA,MAAI,CAAC,MAAM,QAAQA,KAAI,KAAKA,MAAK,SAAS,YAAY;AAC3CA,WAAAA;AAAAA,EACX;AAEI,MAAA,YAAW,mCAAS,aAAY;AAChC,MAAA,aAAY,mCAAS,cAAa;AACtC,MAAI,mCAAS,QAAQ;AACX,UAAA,SAAS,0BAA0B,QAAQ,MAAM;AACnD,QAAA,OAAO,CAAC,GAAG;AACA,iBAAA,OAAO,CAAC,EAAE;AACT,kBAAA,OAAO,CAAC,EAAE;AAAA,IAC1B;AAAA,EACJ;AAEA,MAAI,CAAC,MAAM,QAAQA,KAAI,GAAG;AACtBA,YAAO,CAACA,KAAI;AAAA,EAChB;AAEA,SAAO,EAAE,MAAM,YAAY,SAASA,OAAM,UAAU;AACxD;AAMgB,SAAA,EACZ,MACA,WACA,SACS;AACHA,QAAAA,QAAO,uBAAuB,SAAS;AAC7C,QAAM,cAAc,mCAAS;AAC7B,QAAM,MAAiB,EAAE,MAAM,SAAS,SAAS,KAAK;AAElDA,MAAAA,MAAK,SAAS,GAAG;AACjB,QAAI,OAAOA;AAAAA,EACf;AACA,MAAI,eAAe,MAAM;AACrB,QAAI,cAAc;AAAA,EACtB;AAEO,SAAA;AACX;AAKO,SAAS,EAAE,OAAwC;AAClD,MAAA,OAAO,UAAU,UAAU;AAC3B,WAAO,EAAE,MAAM,UAAU,SAAS,MAAM;AAAA,EAC5C;AACO,SAAA;AACX;AAKO,SAAS,IACZ,MACA,MACA,SACA,SACe;AACf,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACtB,WAAO,CAAC,IAAI;AAAA,EAChB;AACA,QAAMA,QAAO,uBAAuB,SAAS,KAAK,GAAG;AACrD,QAAM,MAAuB;AAAA,IACzB,MAAM;AAAA,IACN,KAAK;AAAA,IACL,SAAS,KAAK,IAAI,aAAa;AAAA,EAAA;AAE/BA,MAAAA,MAAK,SAAS,GAAG;AACjB,QAAI,OAAOA;AAAAA,EACf;AAEO,SAAA;AACX;AAKa,MAAA,KAAqB,EAAE,MAAM,aAAa;;;;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-builder/index.d.ts b/node_modules/@unified-latex/unified-latex-builder/index.d.ts new file mode 100644 index 0000000..0efa0e9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-builder/index.d.ts @@ -0,0 +1,80 @@ +import type * as Ast from '@unified-latex/unified-latex-types'; + +/** + * Create an Argument. `special.braces` can optionally specify + * the signature of the open/close marks that each argument uses. For example + * ``` + * arg("a", { braces: "[]" }); + * ``` + * will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, `<`, and `(`. + * + * `null` may be passed as the value of an empty optional argument. If `null` is passed, + * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the + * contents will be set to an empty array. For example, + * ``` + * args([null, "b"], { braces: "[]{}" }); + * ``` + * will produce the same structure as if the the first "optional argument" were omitted in regular parsing. + */ +export declare function arg(args: CoercibleArgument | Ast.Node[], special?: ArgumentSpecialOptions): Ast.Argument; + +/** + * Create an Argument list. `special.braces` can optionally specify + * the signature of the open/close marks that each argument uses. For example + * ``` + * args(["a", "b"], { braces: "[]{}" }); + * ``` + * will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, `(`, and `<`. + * + * `null` may be passed as the value of an empty optional argument. If `null` is passed, + * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the + * contents will be set to an empty array. For example, + * ``` + * args([null, "b"], { braces: "[]{}" }); + * ``` + * will produce the same structure as if the the first "optional argument" were omitted in regular parsing. + */ +export declare function args(args: CoercibleArgument | CoercibleArgument[], special?: ArgumentsSpecialOptions): Ast.Argument[]; + +declare type ArgumentSpecialOptions = { + braces?: string; + openMark?: string; + closeMark?: string; +}; + +declare type ArgumentsSpecialOptions = { + braces?: string; + defaultOpenMark?: string; + defaultCloseMark?: string; +}; + +declare type CoercibleArgument = null | CoercibleNode | Ast.Argument; + +declare type CoercibleNode = string | Ast.Node; + +/** + * Create an Environment node. + */ +export declare function env(name: string, body: CoercibleNode | CoercibleNode[], envArgs?: CoercibleArgument | CoercibleArgument[], special?: unknown): Ast.Environment; + +/** + * Create a Macro with the given `name`. The macro + * may be followed by any number of arguments. + */ +export declare function m(name: string, marcoArgs?: CoercibleArgument | CoercibleArgument[], special?: MacroSpecialOptions): Ast.Macro; + +declare type MacroSpecialOptions = { + escapeToken?: string; +}; + +/** + * Create a String node from `value` + */ +export declare function s(value: string | Ast.String): Ast.String; + +/** + * Whitespace node. + */ +export declare const SP: Ast.Whitespace; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-builder/index.js b/node_modules/@unified-latex/unified-latex-builder/index.js new file mode 100644 index 0000000..0ef2294 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-builder/index.js @@ -0,0 +1,142 @@ +function normalizeNode(node) { + if (typeof node === "string") { + return s(node); + } + return node; +} +function normalizeArgument(arg2, openMark = "{", closeMark = "}") { + if (arg2 == null) { + return { type: "argument", content: [], openMark: "", closeMark: "" }; + } + if (typeof arg2 === "string") { + return { + type: "argument", + openMark, + closeMark, + content: [s(arg2)] + }; + } + if (arg2.type === "argument") { + return arg2; + } + return { type: "argument", openMark, closeMark, content: [arg2] }; +} +function normalizeArgumentsList(args2, openMark = "{", closeMark = "}") { + if (args2 == null) { + return []; + } + if (Array.isArray(args2)) { + return args2.map((arg2) => normalizeArgument(arg2, openMark, closeMark)); + } + return [normalizeArgument(args2, openMark, closeMark)]; +} +const BRACES_MAP = { + "*": { openMark: "", closeMark: "" }, + "{": { openMark: "{", closeMark: "}" }, + "[": { openMark: "[", closeMark: "]" }, + "(": { openMark: "(", closeMark: ")" }, + "<": { openMark: "<", closeMark: ">" } +}; +const CLOSE_BRACES = new Set( + Object.values(BRACES_MAP).map((x) => x.closeMark).filter((x) => x) +); +function bracesToOpenAndCloseMarks(braces) { + const ret = []; + for (const char of braces.split("")) { + if (CLOSE_BRACES.has(char)) { + continue; + } + const braces2 = BRACES_MAP[char]; + if (braces2 == null) { + throw new Error(`Unknown open/close mark type "${char}"`); + } + ret.push(braces2); + } + return ret; +} +function args(args2, special) { + if (!Array.isArray(args2)) { + args2 = [args2]; + } + if (special == null ? void 0 : special.braces) { + const braces = bracesToOpenAndCloseMarks(special.braces); + if (braces.length !== args2.length) { + throw new Error( + `There is a difference between the number of supplied braces and the number of supplied arguments. ${args2.length} supplied with braces signature ${special.braces}` + ); + } + return args2.map( + (arg2, i) => normalizeArgument(arg2, braces[i].openMark, braces[i].closeMark) + ); + } + const openMark = (special == null ? void 0 : special.defaultOpenMark) ?? "{"; + const closeMark = (special == null ? void 0 : special.defaultCloseMark) ?? "}"; + return normalizeArgumentsList(args2, openMark, closeMark); +} +function arg(args2, special) { + if (args2 == null) { + return { type: "argument", content: [], openMark: "", closeMark: "" }; + } + if (typeof args2 === "string") { + args2 = s(args2); + } + if (!Array.isArray(args2) && args2.type === "argument") { + return args2; + } + let openMark = (special == null ? void 0 : special.openMark) ?? "{"; + let closeMark = (special == null ? void 0 : special.closeMark) ?? "}"; + if (special == null ? void 0 : special.braces) { + const braces = bracesToOpenAndCloseMarks(special.braces); + if (braces[0]) { + openMark = braces[0].openMark; + closeMark = braces[0].closeMark; + } + } + if (!Array.isArray(args2)) { + args2 = [args2]; + } + return { type: "argument", content: args2, openMark, closeMark }; +} +function m(name, marcoArgs, special) { + const args2 = normalizeArgumentsList(marcoArgs); + const escapeToken = special == null ? void 0 : special.escapeToken; + const ret = { type: "macro", content: name }; + if (args2.length > 0) { + ret.args = args2; + } + if (escapeToken != null) { + ret.escapeToken = escapeToken; + } + return ret; +} +function s(value) { + if (typeof value === "string") { + return { type: "string", content: value }; + } + return value; +} +function env(name, body, envArgs, special) { + if (!Array.isArray(body)) { + body = [body]; + } + const args2 = normalizeArgumentsList(envArgs, "[", "]"); + const ret = { + type: "environment", + env: name, + content: body.map(normalizeNode) + }; + if (args2.length > 0) { + ret.args = args2; + } + return ret; +} +const SP = { type: "whitespace" }; +export { + SP, + arg, + args, + env, + m, + s +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-builder/index.js.map b/node_modules/@unified-latex/unified-latex-builder/index.js.map new file mode 100644 index 0000000..82a9f10 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-builder/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/builders.ts"],"sourcesContent":["import type * as Ast from \"@unified-latex/unified-latex-types\";\n\ntype CoercibleNode = string | Ast.Node;\ntype CoercibleArgument = null | CoercibleNode | Ast.Argument;\ntype MacroSpecialOptions = {\n escapeToken?: string;\n};\ntype ArgumentsSpecialOptions = {\n braces?: string;\n defaultOpenMark?: string;\n defaultCloseMark?: string;\n};\ntype ArgumentSpecialOptions = {\n braces?: string;\n openMark?: string;\n closeMark?: string;\n};\n\nfunction normalizeNode(node: CoercibleNode): Ast.Node {\n if (typeof node === \"string\") {\n return s(node);\n }\n return node;\n}\n\nfunction normalizeArgument(\n arg: CoercibleArgument,\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument {\n if (arg == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof arg === \"string\") {\n return {\n type: \"argument\",\n openMark,\n closeMark,\n content: [s(arg)],\n };\n }\n if (arg.type === \"argument\") {\n return arg;\n }\n return { type: \"argument\", openMark, closeMark, content: [arg] };\n}\n\nfunction normalizeArgumentsList(\n args?: CoercibleArgument | CoercibleArgument[],\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument[] {\n if (args == null) {\n return [];\n }\n if (Array.isArray(args)) {\n return args.map((arg) => normalizeArgument(arg, openMark, closeMark));\n }\n return [normalizeArgument(args, openMark, closeMark)];\n}\n\ntype BracesPair = { openMark: string; closeMark: string };\nconst BRACES_MAP: Record = {\n \"*\": { openMark: \"\", closeMark: \"\" },\n \"{\": { openMark: \"{\", closeMark: \"}\" },\n \"[\": { openMark: \"[\", closeMark: \"]\" },\n \"(\": { openMark: \"(\", closeMark: \")\" },\n \"<\": { openMark: \"<\", closeMark: \">\" },\n};\nconst CLOSE_BRACES = new Set(\n Object.values(BRACES_MAP)\n .map((x) => x.closeMark)\n .filter((x) => x)\n);\n\n/**\n * Turn a braces signature into an array of braces.\n */\nfunction bracesToOpenAndCloseMarks(braces: string): BracesPair[] {\n const ret: BracesPair[] = [];\n\n for (const char of braces.split(\"\")) {\n if (CLOSE_BRACES.has(char)) {\n continue;\n }\n const braces = BRACES_MAP[char];\n if (braces == null) {\n throw new Error(`Unknown open/close mark type \"${char}\"`);\n }\n braces;\n ret.push(braces);\n }\n\n return ret;\n}\n\n/**\n * Create an Argument list. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * args([\"a\", \"b\"], { braces: \"[]{}\" });\n * ```\n * will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, `(`, and `<`.\n *\n * `null` may be passed as the value of an empty optional argument. If `null` is passed,\n * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the\n * contents will be set to an empty array. For example,\n * ```\n * args([null, \"b\"], { braces: \"[]{}\" });\n * ```\n * will produce the same structure as if the the first \"optional argument\" were omitted in regular parsing.\n */\nexport function args(\n args: CoercibleArgument | CoercibleArgument[],\n special?: ArgumentsSpecialOptions\n): Ast.Argument[] {\n if (!Array.isArray(args)) {\n args = [args];\n }\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces.length !== args.length) {\n throw new Error(\n `There is a difference between the number of supplied braces and the number of supplied arguments. ${args.length} supplied with braces signature ${special.braces}`\n );\n }\n return args.map((arg, i) =>\n normalizeArgument(arg, braces[i].openMark, braces[i].closeMark)\n );\n }\n\n const openMark = special?.defaultOpenMark ?? \"{\";\n const closeMark = special?.defaultCloseMark ?? \"}\";\n return normalizeArgumentsList(args, openMark, closeMark);\n}\n\n/**\n * Create an Argument. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * arg(\"a\", { braces: \"[]\" });\n * ```\n * will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, `<`, and `(`.\n *\n * `null` may be passed as the value of an empty optional argument. If `null` is passed,\n * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the\n * contents will be set to an empty array. For example,\n * ```\n * args([null, \"b\"], { braces: \"[]{}\" });\n * ```\n * will produce the same structure as if the the first \"optional argument\" were omitted in regular parsing.\n */\nexport function arg(\n args: CoercibleArgument | Ast.Node[],\n special?: ArgumentSpecialOptions\n): Ast.Argument {\n if (args == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof args === \"string\") {\n args = s(args);\n }\n if (!Array.isArray(args) && args.type === \"argument\") {\n return args;\n }\n\n let openMark = special?.openMark ?? \"{\";\n let closeMark = special?.closeMark ?? \"}\";\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces[0]) {\n openMark = braces[0].openMark;\n closeMark = braces[0].closeMark;\n }\n }\n\n if (!Array.isArray(args)) {\n args = [args];\n }\n\n return { type: \"argument\", content: args, openMark, closeMark };\n}\n\n/**\n * Create a Macro with the given `name`. The macro\n * may be followed by any number of arguments.\n */\nexport function m(\n name: string,\n marcoArgs?: CoercibleArgument | CoercibleArgument[],\n special?: MacroSpecialOptions\n): Ast.Macro {\n const args = normalizeArgumentsList(marcoArgs);\n const escapeToken = special?.escapeToken;\n const ret: Ast.Macro = { type: \"macro\", content: name };\n\n if (args.length > 0) {\n ret.args = args;\n }\n if (escapeToken != null) {\n ret.escapeToken = escapeToken;\n }\n\n return ret;\n}\n\n/**\n * Create a String node from `value`\n */\nexport function s(value: string | Ast.String): Ast.String {\n if (typeof value === \"string\") {\n return { type: \"string\", content: value };\n }\n return value;\n}\n\n/**\n * Create an Environment node.\n */\nexport function env(\n name: string,\n body: CoercibleNode | CoercibleNode[],\n envArgs?: CoercibleArgument | CoercibleArgument[],\n special?: unknown\n): Ast.Environment {\n if (!Array.isArray(body)) {\n body = [body];\n }\n const args = normalizeArgumentsList(envArgs, \"[\", \"]\");\n const ret: Ast.Environment = {\n type: \"environment\",\n env: name,\n content: body.map(normalizeNode),\n };\n if (args.length > 0) {\n ret.args = args;\n }\n\n return ret;\n}\n\n/**\n * Whitespace node.\n */\nexport const SP: Ast.Whitespace = { type: \"whitespace\" };\n"],"names":["arg","args","braces"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-builder/package.json b/node_modules/@unified-latex/unified-latex-builder/package.json new file mode 100644 index 0000000..e6a2471 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-builder/package.json @@ -0,0 +1,51 @@ +{ + "name": "@unified-latex/unified-latex-builder", + "version": "1.8.0", + "description": "Tools for constructing unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/README.md b/node_modules/@unified-latex/unified-latex-ctan/README.md new file mode 100644 index 0000000..52734d5 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/README.md @@ -0,0 +1,46 @@ + + + + +# unified-latex-ctan + +## What is this? + +Macro/environment definitions and utilities for specific LaTeX packages from CTAN. + +Note: basic LaTeX macro/environment definitions come from the `latex2e` package, even though +this is technically not a CTAN "package". + +## When should I use this? + +If you want information about special functions/macros from particular CTAN packages, or +you need to parse special environments. + +## Notes + +By default all macros/environments that are exported get processed. If multiple packages +export a macro with the same name, then the later-exported one takes precedence. If two packages +export a macro/environment of the same name but with conflicting argument signatures, this can +cause issues when another unified-latex package processes arguments positionally. For example, +by default `\textbf` takes one argument, but the beamer version of `\textbf` takes two arguments. +During HTML conversion, if arguments are referenced positionally, this may cause previously-working +code to fail with when beamer macro signatures are used. A workaround is provided: `_renderInfo.namedArguments`. +If `_renderInfo.namedArguments` is specified on both the original macro/environment definition +**and** the conflicting one, other unified-latex commands can reference arguments by name instead +of by position. + +## Install + +```bash +npm install @unified-latex/unified-latex-ctan +``` + +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. + +# Constants + +| Name | Type | Description | +| :---------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- | +| `environmentInfo` | `{ amsart: EnvInfoRecord; cleveref: EnvInfoRecord; exam: EnvInfoRecord; geometry: EnvInfoRecord; hyperref: EnvInfoRecord; ... 11 more ...; multicol: EnvInfoRecord; }` | Info about the environments for available ctan packages. `latex2e` contains the standard environments for LaTeX. | +| `macroInfo` | `{ amsart: MacroInfoRecord; cleveref: MacroInfoRecord; exam: MacroInfoRecord; geometry: MacroInfoRecord; hyperref: MacroInfoRecord; ... 11 more ...; multicol: MacroInfoRecord; }` | Info about the macros for available ctan packages. `latex2e` contains the standard macros for LaTeX. | diff --git a/node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs b/node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs new file mode 100644 index 0000000..1bec2ca --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs @@ -0,0 +1,68 @@ +"use strict"; +const unifiedLatexBuilder = require("@unified-latex/unified-latex-builder"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilRenderInfo = require("@unified-latex/unified-latex-util-render-info"); +const unifiedLatexUtilReplace = require("@unified-latex/unified-latex-util-replace"); +const unifiedLatexUtilSplit = require("@unified-latex/unified-latex-util-split"); +const unifiedLatexUtilTrim = require("@unified-latex/unified-latex-util-trim"); +function cleanEnumerateBody(ast, itemName = "item") { + let { segments, macros } = unifiedLatexUtilSplit.splitOnMacro(ast, itemName); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + if (i === 0) { + unifiedLatexUtilTrim.trimEnd(segment); + } else { + unifiedLatexUtilTrim.trim(segment); + } + if (segment.length > 0 && i > 0) { + segment.unshift({ type: "whitespace" }); + } + } + let insertParbreakBefore = /* @__PURE__ */ new WeakSet(); + let body = macros.flatMap((node, i) => { + var _a; + const segment = segments[i + 1]; + const trailingComments = popTrailingComments(segment); + node.args = node.args || []; + node.args.push(unifiedLatexBuilder.arg(segment, { openMark: "", closeMark: "" })); + unifiedLatexUtilRenderInfo.updateRenderInfo(node, { inParMode: true }); + if (i > 0 || ((_a = segments[0]) == null ? void 0 : _a.length) > 0) { + insertParbreakBefore.add(node); + } + return [node, ...trailingComments]; + }); + body = body.flatMap( + (node) => insertParbreakBefore.has(node) ? [{ type: "parbreak" }, node] : node + ); + body.unshift(...segments[0]); + for (let i = 0; i < body.length - 1; i++) { + const node = body[i]; + const nextNode = body[i + 1]; + if (!unifiedLatexUtilMatch.match.parbreak(nextNode)) { + continue; + } + if (unifiedLatexUtilMatch.match.comment(node)) { + node.suffixParbreak = true; + } + if (unifiedLatexUtilMatch.match.macro(node) && node.args && node.args[node.args.length - 1].closeMark === "") { + const args = node.args[node.args.length - 1].content; + const lastArg = args[args.length - 1]; + if (unifiedLatexUtilMatch.match.comment(lastArg)) { + lastArg.suffixParbreak = true; + } + } + } + return body; +} +function popTrailingComments(nodes) { + let lastNodeIndex = unifiedLatexUtilReplace.lastSignificantNodeIndex(nodes, true); + if (lastNodeIndex === nodes.length - 1 || lastNodeIndex == null && nodes.length === 0) { + return []; + } + if (lastNodeIndex == null) { + lastNodeIndex = -1; + } + return nodes.splice(lastNodeIndex + 1); +} +exports.cleanEnumerateBody = cleanEnumerateBody; +//# sourceMappingURL=enumerate-DSh8p1uS.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs.map new file mode 100644 index 0000000..135f037 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/enumerate-DSh8p1uS.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"enumerate-DSh8p1uS.cjs","sources":["../utils/enumerate.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport {\n lastSignificantNode,\n lastSignificantNodeIndex,\n} from \"@unified-latex/unified-latex-util-replace\";\nimport { splitOnMacro } from \"@unified-latex/unified-latex-util-split\";\nimport { trim, trimEnd } from \"@unified-latex/unified-latex-util-trim\";\n\n/**\n * Clean up any whitespace issues in an enumerate environment. In particular,\n * * Remove any leading or ending whitespace\n * * Ensure there is a par between occurrences of `\\item`\n * * Ensure there is whitespace after each occurrence of `\\item` provided there is content there\n * `itemName` can be used to set what the \"item\" macro is called.\n *\n * This function attaches content following a `\\item` to the `\\item` macro with\n * `openMark` and `closeMark` set to empty. This allows hanging-indents to be rendered.\n */\nexport function cleanEnumerateBody(\n ast: Ast.Node[],\n itemName = \"item\"\n): Ast.Node[] {\n let { segments, macros } = splitOnMacro(ast, itemName);\n // Trim the content of each block, but make sure there is a space\n // between each macro and the content. Since the first segment of content\n // appears *before* any macro, don't add a space there.\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (i === 0) {\n // The very first segment might be comment with leading whitespace. We don't want to trim that off\n trimEnd(segment);\n } else {\n trim(segment);\n }\n // The very first segment comes before any `\\item` macros. It is either\n // blank or contains comments (or is invalid LaTeX). We don't insert a space\n // in this case.\n if (segment.length > 0 && i > 0) {\n segment.unshift({ type: \"whitespace\" });\n }\n }\n\n let insertParbreakBefore: WeakSet = new WeakSet();\n\n // We want a trailing indent for the `\\item` nodes. We will\n // do this with a trick: we will add an argument to the index node\n // with openMark=\" \" and closeMark=\"\"\n let body: Ast.Node[] = macros.flatMap((node, i) => {\n const segment = segments[i + 1];\n const trailingComments = popTrailingComments(segment);\n node.args = node.args || [];\n node.args.push(arg(segment, { openMark: \"\", closeMark: \"\" }));\n updateRenderInfo(node, { inParMode: true });\n\n // The stream contains a mix of `\\item` macros and comments/parbreaks. We only\n // want to insert parbreaks before `\\item` macros, so we record these for later.\n if (i > 0 || segments[0]?.length > 0) {\n insertParbreakBefore.add(node);\n }\n\n return [node, ...trailingComments];\n });\n\n // We want a parbreak between each `\\item` block and the preceding content.\n // We've already logged the `\\item` macros in `insertParbreakBefore`.\n body = body.flatMap((node) =>\n insertParbreakBefore.has(node) ? [{ type: \"parbreak\" }, node] : node\n );\n\n body.unshift(...segments[0]);\n\n // We have inserted parbreaks so some comments need to be told that there is a suffix parbreak\n for (let i = 0; i < body.length - 1; i++) {\n const node = body[i];\n const nextNode = body[i + 1];\n if (!match.parbreak(nextNode)) {\n continue;\n }\n if (match.comment(node)) {\n node.suffixParbreak = true;\n }\n // The heuristic for detecting an `item`-like node is that its last argument has no close mark.\n // Regardless of what it is, if there is no close mark, when rendered we don't want two newlines to\n // appear.\n if (\n match.macro(node) &&\n node.args &&\n node.args[node.args.length - 1].closeMark === \"\"\n ) {\n const args = node.args[node.args.length - 1].content;\n const lastArg = args[args.length - 1];\n if (match.comment(lastArg)) {\n lastArg.suffixParbreak = true;\n }\n }\n }\n\n return body;\n}\n\n/**\n * Removes and returns any number of trailing comments/parbreaks from `nodes`.\n */\nfunction popTrailingComments(nodes: Ast.Node[]): Ast.Node[] {\n let lastNodeIndex = lastSignificantNodeIndex(nodes, true);\n if (\n lastNodeIndex === nodes.length - 1 ||\n (lastNodeIndex == null && nodes.length === 0)\n ) {\n return [];\n }\n\n // If `nodes` has a non-zero length and we didn't find a significant node, everything is comments!\n if (lastNodeIndex == null) {\n lastNodeIndex = -1;\n }\n return nodes.splice(lastNodeIndex + 1);\n}\n"],"names":["splitOnMacro","trimEnd","trim","arg","updateRenderInfo","match","lastSignificantNodeIndex"],"mappings":";;;;;;;AAsBgB,SAAA,mBACZ,KACA,WAAW,QACD;AACV,MAAI,EAAE,UAAU,OAAA,IAAWA,sBAAAA,aAAa,KAAK,QAAQ;AAIrD,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAChC,UAAA,UAAU,SAAS,CAAC;AAC1B,QAAI,MAAM,GAAG;AAETC,2BAAAA,QAAQ,OAAO;AAAA,IAAA,OACZ;AACHC,2BAAAA,KAAK,OAAO;AAAA,IAAA;AAKhB,QAAI,QAAQ,SAAS,KAAK,IAAI,GAAG;AAC7B,cAAQ,QAAQ,EAAE,MAAM,aAAA,CAAc;AAAA,IAAA;AAAA,EAC1C;AAGA,MAAA,2CAA8C,QAAQ;AAK1D,MAAI,OAAmB,OAAO,QAAQ,CAAC,MAAM,MAAM;;AACzC,UAAA,UAAU,SAAS,IAAI,CAAC;AACxB,UAAA,mBAAmB,oBAAoB,OAAO;AAC/C,SAAA,OAAO,KAAK,QAAQ,CAAC;AACrB,SAAA,KAAK,KAAKC,oBAAAA,IAAI,SAAS,EAAE,UAAU,IAAI,WAAW,GAAG,CAAC,CAAC;AAC5DC,+BAAAA,iBAAiB,MAAM,EAAE,WAAW,KAAA,CAAM;AAI1C,QAAI,IAAI,OAAK,cAAS,CAAC,MAAV,mBAAa,UAAS,GAAG;AAClC,2BAAqB,IAAI,IAAI;AAAA,IAAA;AAG1B,WAAA,CAAC,MAAM,GAAG,gBAAgB;AAAA,EAAA,CACpC;AAID,SAAO,KAAK;AAAA,IAAQ,CAAC,SACjB,qBAAqB,IAAI,IAAI,IAAI,CAAC,EAAE,MAAM,cAAc,IAAI,IAAI;AAAA,EACpE;AAEA,OAAK,QAAQ,GAAG,SAAS,CAAC,CAAC;AAG3B,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AAChC,UAAA,OAAO,KAAK,CAAC;AACb,UAAA,WAAW,KAAK,IAAI,CAAC;AAC3B,QAAI,CAACC,sBAAA,MAAM,SAAS,QAAQ,GAAG;AAC3B;AAAA,IAAA;AAEA,QAAAA,sBAAA,MAAM,QAAQ,IAAI,GAAG;AACrB,WAAK,iBAAiB;AAAA,IAAA;AAK1B,QACIA,sBAAAA,MAAM,MAAM,IAAI,KAChB,KAAK,QACL,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE,cAAc,IAChD;AACE,YAAM,OAAO,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE;AAC7C,YAAM,UAAU,KAAK,KAAK,SAAS,CAAC;AAChC,UAAAA,sBAAA,MAAM,QAAQ,OAAO,GAAG;AACxB,gBAAQ,iBAAiB;AAAA,MAAA;AAAA,IAC7B;AAAA,EACJ;AAGG,SAAA;AACX;AAKA,SAAS,oBAAoB,OAA+B;AACpD,MAAA,gBAAgBC,wBAAAA,yBAAyB,OAAO,IAAI;AAEpD,MAAA,kBAAkB,MAAM,SAAS,KAChC,iBAAiB,QAAQ,MAAM,WAAW,GAC7C;AACE,WAAO,CAAC;AAAA,EAAA;AAIZ,MAAI,iBAAiB,MAAM;AACP,oBAAA;AAAA,EAAA;AAEb,SAAA,MAAM,OAAO,gBAAgB,CAAC;AACzC;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js b/node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js new file mode 100644 index 0000000..ec2c0c6 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js @@ -0,0 +1,69 @@ +import { arg } from "@unified-latex/unified-latex-builder"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { updateRenderInfo } from "@unified-latex/unified-latex-util-render-info"; +import { lastSignificantNodeIndex } from "@unified-latex/unified-latex-util-replace"; +import { splitOnMacro } from "@unified-latex/unified-latex-util-split"; +import { trimEnd, trim } from "@unified-latex/unified-latex-util-trim"; +function cleanEnumerateBody(ast, itemName = "item") { + let { segments, macros } = splitOnMacro(ast, itemName); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + if (i === 0) { + trimEnd(segment); + } else { + trim(segment); + } + if (segment.length > 0 && i > 0) { + segment.unshift({ type: "whitespace" }); + } + } + let insertParbreakBefore = /* @__PURE__ */ new WeakSet(); + let body = macros.flatMap((node, i) => { + var _a; + const segment = segments[i + 1]; + const trailingComments = popTrailingComments(segment); + node.args = node.args || []; + node.args.push(arg(segment, { openMark: "", closeMark: "" })); + updateRenderInfo(node, { inParMode: true }); + if (i > 0 || ((_a = segments[0]) == null ? void 0 : _a.length) > 0) { + insertParbreakBefore.add(node); + } + return [node, ...trailingComments]; + }); + body = body.flatMap( + (node) => insertParbreakBefore.has(node) ? [{ type: "parbreak" }, node] : node + ); + body.unshift(...segments[0]); + for (let i = 0; i < body.length - 1; i++) { + const node = body[i]; + const nextNode = body[i + 1]; + if (!match.parbreak(nextNode)) { + continue; + } + if (match.comment(node)) { + node.suffixParbreak = true; + } + if (match.macro(node) && node.args && node.args[node.args.length - 1].closeMark === "") { + const args = node.args[node.args.length - 1].content; + const lastArg = args[args.length - 1]; + if (match.comment(lastArg)) { + lastArg.suffixParbreak = true; + } + } + } + return body; +} +function popTrailingComments(nodes) { + let lastNodeIndex = lastSignificantNodeIndex(nodes, true); + if (lastNodeIndex === nodes.length - 1 || lastNodeIndex == null && nodes.length === 0) { + return []; + } + if (lastNodeIndex == null) { + lastNodeIndex = -1; + } + return nodes.splice(lastNodeIndex + 1); +} +export { + cleanEnumerateBody as c +}; +//# sourceMappingURL=enumerate-wQeKG6-C.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js.map b/node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js.map new file mode 100644 index 0000000..33b778f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/enumerate-wQeKG6-C.js.map @@ -0,0 +1 @@ +{"version":3,"file":"enumerate-wQeKG6-C.js","sources":["../utils/enumerate.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport {\n lastSignificantNode,\n lastSignificantNodeIndex,\n} from \"@unified-latex/unified-latex-util-replace\";\nimport { splitOnMacro } from \"@unified-latex/unified-latex-util-split\";\nimport { trim, trimEnd } from \"@unified-latex/unified-latex-util-trim\";\n\n/**\n * Clean up any whitespace issues in an enumerate environment. In particular,\n * * Remove any leading or ending whitespace\n * * Ensure there is a par between occurrences of `\\item`\n * * Ensure there is whitespace after each occurrence of `\\item` provided there is content there\n * `itemName` can be used to set what the \"item\" macro is called.\n *\n * This function attaches content following a `\\item` to the `\\item` macro with\n * `openMark` and `closeMark` set to empty. This allows hanging-indents to be rendered.\n */\nexport function cleanEnumerateBody(\n ast: Ast.Node[],\n itemName = \"item\"\n): Ast.Node[] {\n let { segments, macros } = splitOnMacro(ast, itemName);\n // Trim the content of each block, but make sure there is a space\n // between each macro and the content. Since the first segment of content\n // appears *before* any macro, don't add a space there.\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (i === 0) {\n // The very first segment might be comment with leading whitespace. We don't want to trim that off\n trimEnd(segment);\n } else {\n trim(segment);\n }\n // The very first segment comes before any `\\item` macros. It is either\n // blank or contains comments (or is invalid LaTeX). We don't insert a space\n // in this case.\n if (segment.length > 0 && i > 0) {\n segment.unshift({ type: \"whitespace\" });\n }\n }\n\n let insertParbreakBefore: WeakSet = new WeakSet();\n\n // We want a trailing indent for the `\\item` nodes. We will\n // do this with a trick: we will add an argument to the index node\n // with openMark=\" \" and closeMark=\"\"\n let body: Ast.Node[] = macros.flatMap((node, i) => {\n const segment = segments[i + 1];\n const trailingComments = popTrailingComments(segment);\n node.args = node.args || [];\n node.args.push(arg(segment, { openMark: \"\", closeMark: \"\" }));\n updateRenderInfo(node, { inParMode: true });\n\n // The stream contains a mix of `\\item` macros and comments/parbreaks. We only\n // want to insert parbreaks before `\\item` macros, so we record these for later.\n if (i > 0 || segments[0]?.length > 0) {\n insertParbreakBefore.add(node);\n }\n\n return [node, ...trailingComments];\n });\n\n // We want a parbreak between each `\\item` block and the preceding content.\n // We've already logged the `\\item` macros in `insertParbreakBefore`.\n body = body.flatMap((node) =>\n insertParbreakBefore.has(node) ? [{ type: \"parbreak\" }, node] : node\n );\n\n body.unshift(...segments[0]);\n\n // We have inserted parbreaks so some comments need to be told that there is a suffix parbreak\n for (let i = 0; i < body.length - 1; i++) {\n const node = body[i];\n const nextNode = body[i + 1];\n if (!match.parbreak(nextNode)) {\n continue;\n }\n if (match.comment(node)) {\n node.suffixParbreak = true;\n }\n // The heuristic for detecting an `item`-like node is that its last argument has no close mark.\n // Regardless of what it is, if there is no close mark, when rendered we don't want two newlines to\n // appear.\n if (\n match.macro(node) &&\n node.args &&\n node.args[node.args.length - 1].closeMark === \"\"\n ) {\n const args = node.args[node.args.length - 1].content;\n const lastArg = args[args.length - 1];\n if (match.comment(lastArg)) {\n lastArg.suffixParbreak = true;\n }\n }\n }\n\n return body;\n}\n\n/**\n * Removes and returns any number of trailing comments/parbreaks from `nodes`.\n */\nfunction popTrailingComments(nodes: Ast.Node[]): Ast.Node[] {\n let lastNodeIndex = lastSignificantNodeIndex(nodes, true);\n if (\n lastNodeIndex === nodes.length - 1 ||\n (lastNodeIndex == null && nodes.length === 0)\n ) {\n return [];\n }\n\n // If `nodes` has a non-zero length and we didn't find a significant node, everything is comments!\n if (lastNodeIndex == null) {\n lastNodeIndex = -1;\n }\n return nodes.splice(lastNodeIndex + 1);\n}\n"],"names":[],"mappings":";;;;;;AAsBgB,SAAA,mBACZ,KACA,WAAW,QACD;AACV,MAAI,EAAE,UAAU,OAAA,IAAW,aAAa,KAAK,QAAQ;AAIrD,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAChC,UAAA,UAAU,SAAS,CAAC;AAC1B,QAAI,MAAM,GAAG;AAET,cAAQ,OAAO;AAAA,IAAA,OACZ;AACH,WAAK,OAAO;AAAA,IAAA;AAKhB,QAAI,QAAQ,SAAS,KAAK,IAAI,GAAG;AAC7B,cAAQ,QAAQ,EAAE,MAAM,aAAA,CAAc;AAAA,IAAA;AAAA,EAC1C;AAGA,MAAA,2CAA8C,QAAQ;AAK1D,MAAI,OAAmB,OAAO,QAAQ,CAAC,MAAM,MAAM;;AACzC,UAAA,UAAU,SAAS,IAAI,CAAC;AACxB,UAAA,mBAAmB,oBAAoB,OAAO;AAC/C,SAAA,OAAO,KAAK,QAAQ,CAAC;AACrB,SAAA,KAAK,KAAK,IAAI,SAAS,EAAE,UAAU,IAAI,WAAW,GAAG,CAAC,CAAC;AAC5D,qBAAiB,MAAM,EAAE,WAAW,KAAA,CAAM;AAI1C,QAAI,IAAI,OAAK,cAAS,CAAC,MAAV,mBAAa,UAAS,GAAG;AAClC,2BAAqB,IAAI,IAAI;AAAA,IAAA;AAG1B,WAAA,CAAC,MAAM,GAAG,gBAAgB;AAAA,EAAA,CACpC;AAID,SAAO,KAAK;AAAA,IAAQ,CAAC,SACjB,qBAAqB,IAAI,IAAI,IAAI,CAAC,EAAE,MAAM,cAAc,IAAI,IAAI;AAAA,EACpE;AAEA,OAAK,QAAQ,GAAG,SAAS,CAAC,CAAC;AAG3B,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AAChC,UAAA,OAAO,KAAK,CAAC;AACb,UAAA,WAAW,KAAK,IAAI,CAAC;AAC3B,QAAI,CAAC,MAAM,SAAS,QAAQ,GAAG;AAC3B;AAAA,IAAA;AAEA,QAAA,MAAM,QAAQ,IAAI,GAAG;AACrB,WAAK,iBAAiB;AAAA,IAAA;AAK1B,QACI,MAAM,MAAM,IAAI,KAChB,KAAK,QACL,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE,cAAc,IAChD;AACE,YAAM,OAAO,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE;AAC7C,YAAM,UAAU,KAAK,KAAK,SAAS,CAAC;AAChC,UAAA,MAAM,QAAQ,OAAO,GAAG;AACxB,gBAAQ,iBAAiB;AAAA,MAAA;AAAA,IAC7B;AAAA,EACJ;AAGG,SAAA;AACX;AAKA,SAAS,oBAAoB,OAA+B;AACpD,MAAA,gBAAgB,yBAAyB,OAAO,IAAI;AAEpD,MAAA,kBAAkB,MAAM,SAAS,KAChC,iBAAiB,QAAQ,MAAM,WAAW,GAC7C;AACE,WAAO,CAAC;AAAA,EAAA;AAIZ,MAAI,iBAAiB,MAAM;AACP,oBAAA;AAAA,EAAA;AAEb,SAAA,MAAM,OAAO,gBAAgB,CAAC;AACzC;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs b/node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs new file mode 100644 index 0000000..b0281e2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs @@ -0,0 +1,21 @@ +"use strict"; +(function() { + if (typeof globalThis === "object") { + return; + } + Object.defineProperty(Object.prototype, "__magic__", { + get: function() { + return this; + }, + configurable: true + // This makes it possible to `delete` the getter later. + }); + __magic__.globalThis = __magic__; + delete Object.prototype.__magic__; +})(); +const clone = typeof globalThis.structuredClone === "function" ? globalThis.structuredClone : (obj) => JSON.parse(JSON.stringify(obj)); +function structuredClone(obj) { + return clone(obj); +} +exports.structuredClone = structuredClone; +//# sourceMappingURL=index-BuqJUpao.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs.map new file mode 100644 index 0000000..05372c1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index-BuqJUpao.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index-BuqJUpao.cjs","sources":["../../structured-clone/index.ts"],"sourcesContent":["// globalThis polyfill from https://mathiasbynens.be/notes/globalthis\n(function () {\n if (typeof globalThis === \"object\") {\n return;\n }\n Object.defineProperty(Object.prototype, \"__magic__\", {\n get: function () {\n return this;\n },\n configurable: true, // This makes it possible to `delete` the getter later.\n });\n __magic__.globalThis = __magic__; // lolwat\n delete Object.prototype.__magic__;\n})();\n\nconst clone =\n typeof globalThis.structuredClone === \"function\"\n ? globalThis.structuredClone\n : (obj: any) => JSON.parse(JSON.stringify(obj));\n\n/**\n * Wrapper around the built-in structured clone. Uses `JSON.parse(JSON.stringify(...))`\n * as a fallback.\n */\nexport function structuredClone(obj: T): T {\n return clone(obj);\n}\n\ndeclare global {\n const __magic__: any;\n interface Object {\n __magic__?: any;\n }\n}\n"],"names":[],"mappings":";CACC,WAAY;AACL,MAAA,OAAO,eAAe,UAAU;AAChC;AAAA,EAAA;AAEG,SAAA,eAAe,OAAO,WAAW,aAAa;AAAA,IACjD,KAAK,WAAY;AACN,aAAA;AAAA,IACX;AAAA,IACA,cAAc;AAAA;AAAA,EAAA,CACjB;AACD,YAAU,aAAa;AACvB,SAAO,OAAO,UAAU;AAC5B,GAAG;AAEH,MAAM,QACF,OAAO,WAAW,oBAAoB,aAChC,WAAW,kBACX,CAAC,QAAa,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAM/C,SAAS,gBAAmB,KAAW;AAC1C,SAAO,MAAM,GAAG;AACpB;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js b/node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js new file mode 100644 index 0000000..2073ad8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js @@ -0,0 +1,22 @@ +(function() { + if (typeof globalThis === "object") { + return; + } + Object.defineProperty(Object.prototype, "__magic__", { + get: function() { + return this; + }, + configurable: true + // This makes it possible to `delete` the getter later. + }); + __magic__.globalThis = __magic__; + delete Object.prototype.__magic__; +})(); +const clone = typeof globalThis.structuredClone === "function" ? globalThis.structuredClone : (obj) => JSON.parse(JSON.stringify(obj)); +function structuredClone(obj) { + return clone(obj); +} +export { + structuredClone as s +}; +//# sourceMappingURL=index-NHd3tQDq.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js.map b/node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js.map new file mode 100644 index 0000000..7e666a2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index-NHd3tQDq.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-NHd3tQDq.js","sources":["../../structured-clone/index.ts"],"sourcesContent":["// globalThis polyfill from https://mathiasbynens.be/notes/globalthis\n(function () {\n if (typeof globalThis === \"object\") {\n return;\n }\n Object.defineProperty(Object.prototype, \"__magic__\", {\n get: function () {\n return this;\n },\n configurable: true, // This makes it possible to `delete` the getter later.\n });\n __magic__.globalThis = __magic__; // lolwat\n delete Object.prototype.__magic__;\n})();\n\nconst clone =\n typeof globalThis.structuredClone === \"function\"\n ? globalThis.structuredClone\n : (obj: any) => JSON.parse(JSON.stringify(obj));\n\n/**\n * Wrapper around the built-in structured clone. Uses `JSON.parse(JSON.stringify(...))`\n * as a fallback.\n */\nexport function structuredClone(obj: T): T {\n return clone(obj);\n}\n\ndeclare global {\n const __magic__: any;\n interface Object {\n __magic__?: any;\n }\n}\n"],"names":[],"mappings":"CACC,WAAY;AACL,MAAA,OAAO,eAAe,UAAU;AAChC;AAAA,EAAA;AAEG,SAAA,eAAe,OAAO,WAAW,aAAa;AAAA,IACjD,KAAK,WAAY;AACN,aAAA;AAAA,IACX;AAAA,IACA,cAAc;AAAA;AAAA,EAAA,CACjB;AACD,YAAU,aAAa;AACvB,SAAO,OAAO,UAAU;AAC5B,GAAG;AAEH,MAAM,QACF,OAAO,WAAW,oBAAoB,aAChC,WAAW,kBACX,CAAC,QAAa,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAM/C,SAAS,gBAAmB,KAAW;AAC1C,SAAO,MAAM,GAAG;AACpB;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/index.cjs new file mode 100644 index 0000000..afb057b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index.cjs @@ -0,0 +1,71 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const index$9 = require("./package/amsart/index.cjs"); +const index$8 = require("./package/cleveref/index.cjs"); +const provides$4 = require("./provides-gOjhEUvC.cjs"); +const index$7 = require("./package/geometry/index.cjs"); +const index$6 = require("./package/hyperref/index.cjs"); +const provides$3 = require("./provides-DdQzqlsT.cjs"); +const provides$2 = require("./provides-BjJALsf_.cjs"); +const index$5 = require("./package/makeidx/index.cjs"); +const index$4 = require("./package/mathtools/index.cjs"); +const provides$1 = require("./provides-Bdw2Aj_V.cjs"); +const index$3 = require("./package/nicematrix/index.cjs"); +const provides = require("./provides-CwtnTL9q.cjs"); +require("@unified-latex/unified-latex-util-match"); +require("@unified-latex/unified-latex-util-pegjs"); +require("@unified-latex/unified-latex-util-print-raw"); +require("@unified-latex/unified-latex-util-split"); +require("./index-BuqJUpao.cjs"); +require("@unified-latex/unified-latex-util-comments"); +require("@unified-latex/unified-latex-util-visit"); +require("@unified-latex/unified-latex-util-render-info"); +require("@unified-latex/unified-latex-util-arguments"); +const parser = require("./parser-9Q3EtimU.cjs"); +require("@unified-latex/unified-latex-util-trim"); +const xcolor = require("./xcolor-BEfsW_1K.cjs"); +require("@unified-latex/unified-latex-builder"); +const index$2 = require("./package/xparse/index.cjs"); +const index$1 = require("./package/beamer/index.cjs"); +const index = require("./package/multicol/index.cjs"); +const macroInfo = { + amsart: index$9.macros, + cleveref: index$8.macros, + exam: provides$4.macros, + geometry: index$7.macros, + hyperref: index$6.macros, + latex2e: provides$3.macros, + listings: provides$2.macros, + makeidx: index$5.macros, + mathtools: index$4.macros, + minted: provides$1.macros, + nicematrix: index$3.macros, + systeme: provides.macros, + tikz: parser.macros, + xcolor: xcolor.macros, + xparse: index$2.macros, + beamer: index$1.macros, + multicol: index.macros +}; +const environmentInfo = { + amsart: index$9.environments, + cleveref: index$8.environments, + exam: provides$4.environments, + geometry: index$7.environments, + hyperref: index$6.environments, + latex2e: provides$3.environments, + listings: provides$2.environments, + makeidx: index$5.environments, + mathtools: index$4.environments, + minted: provides$1.environments, + nicematrix: index$3.environments, + systeme: provides.environments, + tikz: parser.environments, + xcolor: xcolor.environments, + xparse: index$2.environments, + beamer: index$1.environments, + multicol: index.environments +}; +exports.environmentInfo = environmentInfo; +exports.macroInfo = macroInfo; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/index.cjs.map new file mode 100644 index 0000000..39f1564 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../index.ts"],"sourcesContent":["import * as amsart from \"./package/amsart\";\nimport * as cleveref from \"./package/cleveref\";\nimport * as exam from \"./package/exam\";\nimport * as geometry from \"./package/geometry\";\nimport * as hyperref from \"./package/hyperref\";\nimport * as latex2e from \"./package/latex2e\";\nimport * as listings from \"./package/listings\";\nimport * as makeidx from \"./package/makeidx\";\nimport * as mathtools from \"./package/mathtools\";\nimport * as minted from \"./package/minted\";\nimport * as nicematrix from \"./package/nicematrix\";\nimport * as systeme from \"./package/systeme\";\nimport * as tikz from \"./package/tikz\";\nimport * as xcolor from \"./package/xcolor\";\nimport * as xparse from \"./package/xparse\";\nimport * as beamer from \"./package/beamer\";\nimport * as multicol from \"./package/multicol\";\n\n/**\n * Info about the macros for available ctan packages. `latex2e` contains\n * the standard macros for LaTeX.\n */\nexport const macroInfo = {\n amsart: amsart.macros,\n cleveref: cleveref.macros,\n exam: exam.macros,\n geometry: geometry.macros,\n hyperref: hyperref.macros,\n latex2e: latex2e.macros,\n listings: listings.macros,\n makeidx: makeidx.macros,\n mathtools: mathtools.macros,\n minted: minted.macros,\n nicematrix: nicematrix.macros,\n systeme: systeme.macros,\n tikz: tikz.macros,\n xcolor: xcolor.macros,\n xparse: xparse.macros,\n beamer: beamer.macros,\n multicol: multicol.macros,\n};\n\n/**\n * Info about the environments for available ctan packages. `latex2e` contains\n * the standard environments for LaTeX.\n */\nexport const environmentInfo = {\n amsart: amsart.environments,\n cleveref: cleveref.environments,\n exam: exam.environments,\n geometry: geometry.environments,\n hyperref: hyperref.environments,\n latex2e: latex2e.environments,\n listings: listings.environments,\n makeidx: makeidx.environments,\n mathtools: mathtools.environments,\n minted: minted.environments,\n nicematrix: nicematrix.environments,\n systeme: systeme.environments,\n tikz: tikz.environments,\n xcolor: xcolor.environments,\n xparse: xparse.environments,\n beamer: beamer.environments,\n multicol: multicol.environments,\n};\n\n// NOTE: The docstring comment must be the last item in the index.ts file!\n/**\n * ## What is this?\n *\n * Macro/environment definitions and utilities for specific LaTeX packages from CTAN.\n *\n * Note: basic LaTeX macro/environment definitions come from the `latex2e` package, even though\n * this is technically not a CTAN \"package\".\n *\n * ## When should I use this?\n *\n * If you want information about special functions/macros from particular CTAN packages, or\n * you need to parse special environments.\n *\n * ## Notes\n *\n * By default all macros/environments that are exported get processed. If multiple packages\n * export a macro with the same name, then the later-exported one takes precedence. If two packages\n * export a macro/environment of the same name but with conflicting argument signatures, this can\n * cause issues when another unified-latex package processes arguments positionally. For example,\n * by default `\\textbf` takes one argument, but the beamer version of `\\textbf` takes two arguments.\n * During HTML conversion, if arguments are referenced positionally, this may cause previously-working\n * code to fail with when beamer macro signatures are used. A workaround is provided: `_renderInfo.namedArguments`.\n * If `_renderInfo.namedArguments` is specified on both the original macro/environment definition\n * **and** the conflicting one, other unified-latex commands can reference arguments by name instead\n * of by position.\n */\n"],"names":["amsart.macros","cleveref.macros","exam.macros","geometry.macros","hyperref.macros","latex2e.macros","listings.macros","makeidx.macros","mathtools.macros","minted.macros","nicematrix.macros","systeme.macros","tikz.macros","xcolor.macros","xparse.macros","beamer.macros","multicol.macros","amsart.environments","cleveref.environments","exam.environments","geometry.environments","hyperref.environments","latex2e.environments","listings.environments","makeidx.environments","mathtools.environments","minted.environments","nicematrix.environments","systeme.environments","tikz.environments","xcolor.environments","xparse.environments","beamer.environments","multicol.environments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBO,MAAM,YAAY;AAAA,EACrB,QAAQA,QAAO;AAAA,EACf,UAAUC,QAAS;AAAA,EACnB,MAAMC,WAAK;AAAA,EACX,UAAUC,QAAS;AAAA,EACnB,UAAUC,QAAS;AAAA,EACnB,SAASC,WAAQ;AAAA,EACjB,UAAUC,WAAS;AAAA,EACnB,SAASC,QAAQ;AAAA,EACjB,WAAWC,QAAU;AAAA,EACrB,QAAQC,WAAO;AAAA,EACf,YAAYC,QAAW;AAAA,EACvB,SAASC,SAAQ;AAAA,EACjB,MAAMC,OAAK;AAAA,EACX,QAAQC,OAAO;AAAA,EACf,QAAQC,QAAO;AAAA,EACf,QAAQC,QAAO;AAAA,EACf,UAAUC,MAAAA;AACd;AAMO,MAAM,kBAAkB;AAAA,EAC3B,QAAQC,QAAO;AAAA,EACf,UAAUC,QAAS;AAAA,EACnB,MAAMC,WAAK;AAAA,EACX,UAAUC,QAAS;AAAA,EACnB,UAAUC,QAAS;AAAA,EACnB,SAASC,WAAQ;AAAA,EACjB,UAAUC,WAAS;AAAA,EACnB,SAASC,QAAQ;AAAA,EACjB,WAAWC,QAAU;AAAA,EACrB,QAAQC,WAAO;AAAA,EACf,YAAYC,QAAW;AAAA,EACvB,SAASC,SAAQ;AAAA,EACjB,MAAMC,OAAK;AAAA,EACX,QAAQC,OAAO;AAAA,EACf,QAAQC,QAAO;AAAA,EACf,QAAQC,QAAO;AAAA,EACf,UAAUC,MAAAA;AACd;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/index.d.ts new file mode 100644 index 0000000..69a4680 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index.d.ts @@ -0,0 +1,73 @@ +/** + * Info about the macros for available ctan packages. `latex2e` contains + * the standard macros for LaTeX. + */ +export declare const macroInfo: { + amsart: import('@unified-latex/unified-latex-types').MacroInfoRecord; + cleveref: import('@unified-latex/unified-latex-types').MacroInfoRecord; + exam: import('@unified-latex/unified-latex-types').MacroInfoRecord; + geometry: import('@unified-latex/unified-latex-types').MacroInfoRecord; + hyperref: import('@unified-latex/unified-latex-types').MacroInfoRecord; + latex2e: import('@unified-latex/unified-latex-types').MacroInfoRecord; + listings: import('@unified-latex/unified-latex-types').MacroInfoRecord; + makeidx: import('@unified-latex/unified-latex-types').MacroInfoRecord; + mathtools: import('@unified-latex/unified-latex-types').MacroInfoRecord; + minted: import('@unified-latex/unified-latex-types').MacroInfoRecord; + nicematrix: import('@unified-latex/unified-latex-types').MacroInfoRecord; + systeme: import('@unified-latex/unified-latex-types').MacroInfoRecord; + tikz: import('@unified-latex/unified-latex-types').MacroInfoRecord; + xcolor: import('@unified-latex/unified-latex-types').MacroInfoRecord; + xparse: import('@unified-latex/unified-latex-types').MacroInfoRecord; + beamer: import('@unified-latex/unified-latex-types').MacroInfoRecord; + multicol: import('@unified-latex/unified-latex-types').MacroInfoRecord; +}; +/** + * Info about the environments for available ctan packages. `latex2e` contains + * the standard environments for LaTeX. + */ +export declare const environmentInfo: { + amsart: import('@unified-latex/unified-latex-types').EnvInfoRecord; + cleveref: import('@unified-latex/unified-latex-types').EnvInfoRecord; + exam: import('@unified-latex/unified-latex-types').EnvInfoRecord; + geometry: import('@unified-latex/unified-latex-types').EnvInfoRecord; + hyperref: import('@unified-latex/unified-latex-types').EnvInfoRecord; + latex2e: import('@unified-latex/unified-latex-types').EnvInfoRecord; + listings: import('@unified-latex/unified-latex-types').EnvInfoRecord; + makeidx: import('@unified-latex/unified-latex-types').EnvInfoRecord; + mathtools: import('@unified-latex/unified-latex-types').EnvInfoRecord; + minted: import('@unified-latex/unified-latex-types').EnvInfoRecord; + nicematrix: import('@unified-latex/unified-latex-types').EnvInfoRecord; + systeme: import('@unified-latex/unified-latex-types').EnvInfoRecord; + tikz: import('@unified-latex/unified-latex-types').EnvInfoRecord; + xcolor: import('@unified-latex/unified-latex-types').EnvInfoRecord; + xparse: import('@unified-latex/unified-latex-types').EnvInfoRecord; + beamer: import('@unified-latex/unified-latex-types').EnvInfoRecord; + multicol: import('@unified-latex/unified-latex-types').EnvInfoRecord; +}; +/** + * ## What is this? + * + * Macro/environment definitions and utilities for specific LaTeX packages from CTAN. + * + * Note: basic LaTeX macro/environment definitions come from the `latex2e` package, even though + * this is technically not a CTAN "package". + * + * ## When should I use this? + * + * If you want information about special functions/macros from particular CTAN packages, or + * you need to parse special environments. + * + * ## Notes + * + * By default all macros/environments that are exported get processed. If multiple packages + * export a macro with the same name, then the later-exported one takes precedence. If two packages + * export a macro/environment of the same name but with conflicting argument signatures, this can + * cause issues when another unified-latex package processes arguments positionally. For example, + * by default `\textbf` takes one argument, but the beamer version of `\textbf` takes two arguments. + * During HTML conversion, if arguments are referenced positionally, this may cause previously-working + * code to fail with when beamer macro signatures are used. A workaround is provided: `_renderInfo.namedArguments`. + * If `_renderInfo.namedArguments` is specified on both the original macro/environment definition + * **and** the conflicting one, other unified-latex commands can reference arguments by name instead + * of by position. + */ +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/index.js b/node_modules/@unified-latex/unified-latex-ctan/index.js new file mode 100644 index 0000000..d79d4d8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index.js @@ -0,0 +1,71 @@ +import { macros as macros$g, environments as environments$g } from "./package/amsart/index.js"; +import { macros as macros$f, environments as environments$f } from "./package/cleveref/index.js"; +import { m as macros$e, e as environments$e } from "./provides-B-HiB8uu.js"; +import { macros as macros$d, environments as environments$d } from "./package/geometry/index.js"; +import { macros as macros$c, environments as environments$c } from "./package/hyperref/index.js"; +import { m as macros$b, e as environments$b } from "./provides-BUHzyq9A.js"; +import { m as macros$a, e as environments$a } from "./provides-Ch0mvkO_.js"; +import { macros as macros$9, environments as environments$9 } from "./package/makeidx/index.js"; +import { macros as macros$8, environments as environments$8 } from "./package/mathtools/index.js"; +import { m as macros$7, e as environments$7 } from "./provides-sdqk_ZBm.js"; +import { macros as macros$6, environments as environments$6 } from "./package/nicematrix/index.js"; +import { m as macros$5, e as environments$5 } from "./provides-yGf6-zdY.js"; +import "@unified-latex/unified-latex-util-match"; +import "@unified-latex/unified-latex-util-pegjs"; +import "@unified-latex/unified-latex-util-print-raw"; +import "@unified-latex/unified-latex-util-split"; +import "./index-NHd3tQDq.js"; +import "@unified-latex/unified-latex-util-comments"; +import "@unified-latex/unified-latex-util-visit"; +import "@unified-latex/unified-latex-util-render-info"; +import "@unified-latex/unified-latex-util-arguments"; +import { m as macros$4, e as environments$4 } from "./parser-BBXMi7mQ.js"; +import "@unified-latex/unified-latex-util-trim"; +import { m as macros$3, e as environments$3 } from "./xcolor-CIejE3rZ.js"; +import "@unified-latex/unified-latex-builder"; +import { macros as macros$2, environments as environments$2 } from "./package/xparse/index.js"; +import { macros as macros$1, environments as environments$1 } from "./package/beamer/index.js"; +import { macros, environments } from "./package/multicol/index.js"; +const macroInfo = { + amsart: macros$g, + cleveref: macros$f, + exam: macros$e, + geometry: macros$d, + hyperref: macros$c, + latex2e: macros$b, + listings: macros$a, + makeidx: macros$9, + mathtools: macros$8, + minted: macros$7, + nicematrix: macros$6, + systeme: macros$5, + tikz: macros$4, + xcolor: macros$3, + xparse: macros$2, + beamer: macros$1, + multicol: macros +}; +const environmentInfo = { + amsart: environments$g, + cleveref: environments$f, + exam: environments$e, + geometry: environments$d, + hyperref: environments$c, + latex2e: environments$b, + listings: environments$a, + makeidx: environments$9, + mathtools: environments$8, + minted: environments$7, + nicematrix: environments$6, + systeme: environments$5, + tikz: environments$4, + xcolor: environments$3, + xparse: environments$2, + beamer: environments$1, + multicol: environments +}; +export { + environmentInfo, + macroInfo +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/index.js.map new file mode 100644 index 0000000..fac03f2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../index.ts"],"sourcesContent":["import * as amsart from \"./package/amsart\";\nimport * as cleveref from \"./package/cleveref\";\nimport * as exam from \"./package/exam\";\nimport * as geometry from \"./package/geometry\";\nimport * as hyperref from \"./package/hyperref\";\nimport * as latex2e from \"./package/latex2e\";\nimport * as listings from \"./package/listings\";\nimport * as makeidx from \"./package/makeidx\";\nimport * as mathtools from \"./package/mathtools\";\nimport * as minted from \"./package/minted\";\nimport * as nicematrix from \"./package/nicematrix\";\nimport * as systeme from \"./package/systeme\";\nimport * as tikz from \"./package/tikz\";\nimport * as xcolor from \"./package/xcolor\";\nimport * as xparse from \"./package/xparse\";\nimport * as beamer from \"./package/beamer\";\nimport * as multicol from \"./package/multicol\";\n\n/**\n * Info about the macros for available ctan packages. `latex2e` contains\n * the standard macros for LaTeX.\n */\nexport const macroInfo = {\n amsart: amsart.macros,\n cleveref: cleveref.macros,\n exam: exam.macros,\n geometry: geometry.macros,\n hyperref: hyperref.macros,\n latex2e: latex2e.macros,\n listings: listings.macros,\n makeidx: makeidx.macros,\n mathtools: mathtools.macros,\n minted: minted.macros,\n nicematrix: nicematrix.macros,\n systeme: systeme.macros,\n tikz: tikz.macros,\n xcolor: xcolor.macros,\n xparse: xparse.macros,\n beamer: beamer.macros,\n multicol: multicol.macros,\n};\n\n/**\n * Info about the environments for available ctan packages. `latex2e` contains\n * the standard environments for LaTeX.\n */\nexport const environmentInfo = {\n amsart: amsart.environments,\n cleveref: cleveref.environments,\n exam: exam.environments,\n geometry: geometry.environments,\n hyperref: hyperref.environments,\n latex2e: latex2e.environments,\n listings: listings.environments,\n makeidx: makeidx.environments,\n mathtools: mathtools.environments,\n minted: minted.environments,\n nicematrix: nicematrix.environments,\n systeme: systeme.environments,\n tikz: tikz.environments,\n xcolor: xcolor.environments,\n xparse: xparse.environments,\n beamer: beamer.environments,\n multicol: multicol.environments,\n};\n\n// NOTE: The docstring comment must be the last item in the index.ts file!\n/**\n * ## What is this?\n *\n * Macro/environment definitions and utilities for specific LaTeX packages from CTAN.\n *\n * Note: basic LaTeX macro/environment definitions come from the `latex2e` package, even though\n * this is technically not a CTAN \"package\".\n *\n * ## When should I use this?\n *\n * If you want information about special functions/macros from particular CTAN packages, or\n * you need to parse special environments.\n *\n * ## Notes\n *\n * By default all macros/environments that are exported get processed. If multiple packages\n * export a macro with the same name, then the later-exported one takes precedence. If two packages\n * export a macro/environment of the same name but with conflicting argument signatures, this can\n * cause issues when another unified-latex package processes arguments positionally. For example,\n * by default `\\textbf` takes one argument, but the beamer version of `\\textbf` takes two arguments.\n * During HTML conversion, if arguments are referenced positionally, this may cause previously-working\n * code to fail with when beamer macro signatures are used. A workaround is provided: `_renderInfo.namedArguments`.\n * If `_renderInfo.namedArguments` is specified on both the original macro/environment definition\n * **and** the conflicting one, other unified-latex commands can reference arguments by name instead\n * of by position.\n */\n"],"names":["amsart.macros","cleveref.macros","exam.macros","geometry.macros","hyperref.macros","latex2e.macros","listings.macros","makeidx.macros","mathtools.macros","minted.macros","nicematrix.macros","systeme.macros","tikz.macros","xcolor.macros","xparse.macros","beamer.macros","multicol.macros","amsart.environments","cleveref.environments","exam.environments","geometry.environments","hyperref.environments","latex2e.environments","listings.environments","makeidx.environments","mathtools.environments","minted.environments","nicematrix.environments","systeme.environments","tikz.environments","xcolor.environments","xparse.environments","beamer.environments","multicol.environments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBO,MAAM,YAAY;AAAA,EACrB,QAAQA;AAAAA,EACR,UAAUC;AAAAA,EACV,MAAMC;AAAAA,EACN,UAAUC;AAAAA,EACV,UAAUC;AAAAA,EACV,SAASC;AAAAA,EACT,UAAUC;AAAAA,EACV,SAASC;AAAAA,EACT,WAAWC;AAAAA,EACX,QAAQC;AAAAA,EACR,YAAYC;AAAAA,EACZ,SAASC;AAAAA,EACT,MAAMC;AAAAA,EACN,QAAQC;AAAAA,EACR,QAAQC;AAAAA,EACR,QAAQC;AAAAA,EACR,UAAUC;AACd;AAMO,MAAM,kBAAkB;AAAA,EAC3B,QAAQC;AAAAA,EACR,UAAUC;AAAAA,EACV,MAAMC;AAAAA,EACN,UAAUC;AAAAA,EACV,UAAUC;AAAAA,EACV,SAASC;AAAAA,EACT,UAAUC;AAAAA,EACV,SAASC;AAAAA,EACT,WAAWC;AAAAA,EACX,QAAQC;AAAAA,EACR,YAAYC;AAAAA,EACZ,SAASC;AAAAA,EACT,MAAMC;AAAAA,EACN,QAAQC;AAAAA,EACR,QAAQC;AAAAA,EACR,QAAQC;AAAAA,EACR,UAAUC;AACd;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package.json b/node_modules/@unified-latex/unified-latex-ctan/package.json new file mode 100644 index 0000000..05278d4 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package.json @@ -0,0 +1,65 @@ +{ + "name": "@unified-latex/unified-latex-ctan", + "version": "1.8.2", + "description": "unified-latex tools relating to specific CTAN packages", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.2", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-comments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-replace": "^1.8.2", + "@unified-latex/unified-latex-util-scan": "^1.8.0", + "@unified-latex/unified-latex-util-split": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "color": "^4.2.3" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs new file mode 100644 index 0000000..c08772c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + author: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + address: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + curraddr: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + email: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + title: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + urladdr: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs.map new file mode 100644 index 0000000..d9da74f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/amsart/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n author: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n address: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n curraddr: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n email: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n title: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n urladdr: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n }\n}\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,QAAQ;AAAA,IACJ,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,SAAS;AAAA,IACL,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,UAAU;AAAA,IACN,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,OAAO;AAAA,IACH,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,OAAO;AAAA,IACH,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,SAAS;AAAA,IACL,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EAAA;AAEzD;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js new file mode 100644 index 0000000..b3e0666 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js @@ -0,0 +1,32 @@ +const macros = { + author: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + address: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + curraddr: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + email: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + title: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + urladdr: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + } +}; +const environments = {}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js.map new file mode 100644 index 0000000..bc37509 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/amsart/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n author: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n address: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n curraddr: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n email: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n title: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n urladdr: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n }\n}\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,QAAQ;AAAA,IACJ,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,SAAS;AAAA,IACL,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,UAAU;AAAA,IACN,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,OAAO;AAAA,IACH,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,OAAO;AAAA,IACH,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EACrD;AAAA,EACA,SAAS;AAAA,IACL,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,WAAW,KAAK;AAAA,EAAA;AAEzD;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/amsart/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/amsart/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs new file mode 100644 index 0000000..6a12fca --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs @@ -0,0 +1,204 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + mode: { signature: "s d<> d{}", renderInfo: { breakAround: true } }, + insertnavigation: { signature: "m", renderInfo: { breakAround: true } }, + insertsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortdate: { signature: "o", renderInfo: { breakAround: true } }, + insertshortinstitute: { signature: "o", renderInfo: { breakAround: true } }, + insertshortpart: { signature: "o", renderInfo: { breakAround: true } }, + insertshorttitle: { signature: "o", renderInfo: { breakAround: true } }, + insertsubsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsubsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertverticalnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + usebeamercolor: { signature: "s m", renderInfo: { breakAround: true } }, + usebeamertemplate: { signature: "s m", renderInfo: { breakAround: true } }, + setbeamercolor: { + signature: "m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamersize: { + signature: "m o o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamertemplate: { + signature: "m o o d{}", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + newcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + renewcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + newenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + resetcounteronoverlays: { + signature: "m", + renderInfo: { breakAround: true } + }, + resetcountonoverlays: { signature: "m", renderInfo: { breakAround: true } }, + logo: { signature: "m", renderInfo: { breakAround: true } }, + frametitle: { signature: "d<> o m", renderInfo: { breakAround: true } }, + framesubtitle: { signature: "d<> m", renderInfo: { breakAround: true } }, + pause: { signature: "o" }, + onslide: { signature: "t+ t* d<> d{}" }, + only: { signature: "d<> m d<>" }, + uncover: { signature: "d<> m" }, + visible: { signature: "d<> m" }, + invisible: { signature: "d<> m" }, + alt: { signature: "d<> m m d<>" }, + temporal: { signature: "r<> m m m" }, + item: { + signature: "d<> o d<>", + renderInfo: { + hangingIndent: true, + namedArguments: [null, "label", null] + } + }, + label: { signature: "d<> o m" }, + // cleveref adds an optional argument to label; this gives maximum compatibility. + action: { signature: "d<> m" }, + beamerdefaultoverlayspecification: { signature: "m" }, + titlegraphic: { signature: "m", renderInfo: { breakAround: true } }, + subject: { signature: "m", renderInfo: { breakAround: true } }, + keywords: { signature: "m", renderInfo: { breakAround: true } }, + lecture: { signature: "o m m", renderInfo: { breakAround: true } }, + partpage: { renderInfo: { breakAround: true } }, + sectionpage: { renderInfo: { breakAround: true } }, + subsectionpage: { renderInfo: { breakAround: true } }, + AtBeginLecture: { signature: "m", renderInfo: { breakAround: true } }, + AtBeginPart: { signature: "m", renderInfo: { breakAround: true } }, + tableofcontents: { + signature: "o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + againframe: { signature: "d<> o o m", renderInfo: { breakAround: true } }, + framezoom: { + signature: "r<> r<> o r() r()", + renderInfo: { breakAround: true } + }, + column: { signature: "d<> o m", renderInfo: { breakAround: true } }, + animate: { signature: "r<>", renderInfo: { breakAround: true } }, + animatevalue: { signature: "r<> m m m", renderInfo: { breakAround: true } }, + sound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinksound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinkmute: { signature: "m", renderInfo: { breakAround: true } }, + // These signatures conflict with the default signatures. + // Care must be taken when processing an AST. + section: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + part: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + bibitem: { + signature: "s d<> o m", + renderInfo: { + hangingIndent: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + } +}; +const environments = { + frame: { + signature: "!d<> !o !o !d{} !d{}" + }, + block: { + signature: "!d<> !d{} !d<>" + }, + alertblock: { + signature: "!d<> !d{} !d<>" + }, + exampleblock: { + signature: "!d<> !d{} !d<>" + }, + onlyenv: { + signature: "!d<>" + }, + altenv: { + signature: "!d<> m m m m !d<>" + }, + overlayarea: { signature: "m m" }, + overprint: { signature: "o" }, + actionenv: { signature: "!d<>" }, + columns: { signature: "d<> o" }, + column: { signature: "d<> o m" } +}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs.map new file mode 100644 index 0000000..2ea5a5e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/beamer/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n mode: { signature: \"s d<> d{}\", renderInfo: { breakAround: true } },\n insertnavigation: { signature: \"m\", renderInfo: { breakAround: true } },\n insertsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n insertsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n insertauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortdate: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortinstitute: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortpart: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshorttitle: { signature: \"o\", renderInfo: { breakAround: true } },\n insertsubsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n insertsubsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n insertverticalnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n usebeamercolor: { signature: \"s m\", renderInfo: { breakAround: true } },\n usebeamertemplate: { signature: \"s m\", renderInfo: { breakAround: true } },\n setbeamercolor: {\n signature: \"m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n setbeamersize: {\n signature: \"m o o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n setbeamertemplate: {\n signature: \"m o o d{}\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n\n newcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\",\n ],\n },\n },\n renewcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\",\n ],\n },\n },\n newenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true },\n },\n renewenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true },\n },\n resetcounteronoverlays: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n resetcountonoverlays: { signature: \"m\", renderInfo: { breakAround: true } },\n\n logo: { signature: \"m\", renderInfo: { breakAround: true } },\n frametitle: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n framesubtitle: { signature: \"d<> m\", renderInfo: { breakAround: true } },\n pause: { signature: \"o\" },\n onslide: { signature: \"t+ t* d<> d{}\" },\n only: { signature: \"d<> m d<>\" },\n uncover: { signature: \"d<> m\" },\n visible: { signature: \"d<> m\" },\n invisible: { signature: \"d<> m\" },\n alt: { signature: \"d<> m m d<>\" },\n temporal: { signature: \"r<> m m m\" },\n item: {\n signature: \"d<> o d<>\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [null, \"label\", null],\n },\n },\n label: { signature: \"d<> o m\" }, // cleveref adds an optional argument to label; this gives maximum compatibility.\n action: { signature: \"d<> m\" },\n beamerdefaultoverlayspecification: { signature: \"m\" },\n\n titlegraphic: { signature: \"m\", renderInfo: { breakAround: true } },\n subject: { signature: \"m\", renderInfo: { breakAround: true } },\n keywords: { signature: \"m\", renderInfo: { breakAround: true } },\n\n lecture: { signature: \"o m m\", renderInfo: { breakAround: true } },\n partpage: { renderInfo: { breakAround: true } },\n sectionpage: { renderInfo: { breakAround: true } },\n subsectionpage: { renderInfo: { breakAround: true } },\n AtBeginLecture: { signature: \"m\", renderInfo: { breakAround: true } },\n AtBeginPart: { signature: \"m\", renderInfo: { breakAround: true } },\n tableofcontents: {\n signature: \"o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n againframe: { signature: \"d<> o o m\", renderInfo: { breakAround: true } },\n framezoom: {\n signature: \"r<> r<> o r() r()\",\n renderInfo: { breakAround: true },\n },\n column: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n\n animate: { signature: \"r<>\", renderInfo: { breakAround: true } },\n animatevalue: { signature: \"r<> m m m\", renderInfo: { breakAround: true } },\n sound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n hyperlinksound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n hyperlinkmute: { signature: \"m\", renderInfo: { breakAround: true } },\n\n // These signatures conflict with the default signatures.\n // Care must be taken when processing an AST.\n section: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n subsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n subsubsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n part: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n bibitem: {\n signature: \"s d<> o m\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n frame: {\n signature: \"!d<> !o !o !d{} !d{}\",\n },\n block: {\n signature: \"!d<> !d{} !d<>\",\n },\n alertblock: {\n signature: \"!d<> !d{} !d<>\",\n },\n exampleblock: {\n signature: \"!d<> !d{} !d<>\",\n },\n onlyenv: {\n signature: \"!d<>\",\n },\n altenv: {\n signature: \"!d<> m m m m !d<>\",\n },\n overlayarea: { signature: \"m m\" },\n overprint: { signature: \"o\" },\n actionenv: { signature: \"!d<>\" },\n columns: { signature: \"d<> o\" },\n column: { signature: \"d<> o m\" },\n};\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js new file mode 100644 index 0000000..8e723bb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js @@ -0,0 +1,204 @@ +const macros = { + mode: { signature: "s d<> d{}", renderInfo: { breakAround: true } }, + insertnavigation: { signature: "m", renderInfo: { breakAround: true } }, + insertsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortdate: { signature: "o", renderInfo: { breakAround: true } }, + insertshortinstitute: { signature: "o", renderInfo: { breakAround: true } }, + insertshortpart: { signature: "o", renderInfo: { breakAround: true } }, + insertshorttitle: { signature: "o", renderInfo: { breakAround: true } }, + insertsubsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsubsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertverticalnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + usebeamercolor: { signature: "s m", renderInfo: { breakAround: true } }, + usebeamertemplate: { signature: "s m", renderInfo: { breakAround: true } }, + setbeamercolor: { + signature: "m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamersize: { + signature: "m o o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamertemplate: { + signature: "m o o d{}", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + newcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + renewcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + newenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + resetcounteronoverlays: { + signature: "m", + renderInfo: { breakAround: true } + }, + resetcountonoverlays: { signature: "m", renderInfo: { breakAround: true } }, + logo: { signature: "m", renderInfo: { breakAround: true } }, + frametitle: { signature: "d<> o m", renderInfo: { breakAround: true } }, + framesubtitle: { signature: "d<> m", renderInfo: { breakAround: true } }, + pause: { signature: "o" }, + onslide: { signature: "t+ t* d<> d{}" }, + only: { signature: "d<> m d<>" }, + uncover: { signature: "d<> m" }, + visible: { signature: "d<> m" }, + invisible: { signature: "d<> m" }, + alt: { signature: "d<> m m d<>" }, + temporal: { signature: "r<> m m m" }, + item: { + signature: "d<> o d<>", + renderInfo: { + hangingIndent: true, + namedArguments: [null, "label", null] + } + }, + label: { signature: "d<> o m" }, + // cleveref adds an optional argument to label; this gives maximum compatibility. + action: { signature: "d<> m" }, + beamerdefaultoverlayspecification: { signature: "m" }, + titlegraphic: { signature: "m", renderInfo: { breakAround: true } }, + subject: { signature: "m", renderInfo: { breakAround: true } }, + keywords: { signature: "m", renderInfo: { breakAround: true } }, + lecture: { signature: "o m m", renderInfo: { breakAround: true } }, + partpage: { renderInfo: { breakAround: true } }, + sectionpage: { renderInfo: { breakAround: true } }, + subsectionpage: { renderInfo: { breakAround: true } }, + AtBeginLecture: { signature: "m", renderInfo: { breakAround: true } }, + AtBeginPart: { signature: "m", renderInfo: { breakAround: true } }, + tableofcontents: { + signature: "o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + againframe: { signature: "d<> o o m", renderInfo: { breakAround: true } }, + framezoom: { + signature: "r<> r<> o r() r()", + renderInfo: { breakAround: true } + }, + column: { signature: "d<> o m", renderInfo: { breakAround: true } }, + animate: { signature: "r<>", renderInfo: { breakAround: true } }, + animatevalue: { signature: "r<> m m m", renderInfo: { breakAround: true } }, + sound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinksound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinkmute: { signature: "m", renderInfo: { breakAround: true } }, + // These signatures conflict with the default signatures. + // Care must be taken when processing an AST. + section: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + part: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + bibitem: { + signature: "s d<> o m", + renderInfo: { + hangingIndent: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + } +}; +const environments = { + frame: { + signature: "!d<> !o !o !d{} !d{}" + }, + block: { + signature: "!d<> !d{} !d<>" + }, + alertblock: { + signature: "!d<> !d{} !d<>" + }, + exampleblock: { + signature: "!d<> !d{} !d<>" + }, + onlyenv: { + signature: "!d<>" + }, + altenv: { + signature: "!d<> m m m m !d<>" + }, + overlayarea: { signature: "m m" }, + overprint: { signature: "o" }, + actionenv: { signature: "!d<>" }, + columns: { signature: "d<> o" }, + column: { signature: "d<> o m" } +}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js.map new file mode 100644 index 0000000..1abc800 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/beamer/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n mode: { signature: \"s d<> d{}\", renderInfo: { breakAround: true } },\n insertnavigation: { signature: \"m\", renderInfo: { breakAround: true } },\n insertsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n insertsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n insertauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortdate: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortinstitute: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortpart: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshorttitle: { signature: \"o\", renderInfo: { breakAround: true } },\n insertsubsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n insertsubsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n insertverticalnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n usebeamercolor: { signature: \"s m\", renderInfo: { breakAround: true } },\n usebeamertemplate: { signature: \"s m\", renderInfo: { breakAround: true } },\n setbeamercolor: {\n signature: \"m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n setbeamersize: {\n signature: \"m o o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n setbeamertemplate: {\n signature: \"m o o d{}\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n\n newcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\",\n ],\n },\n },\n renewcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\",\n ],\n },\n },\n newenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true },\n },\n renewenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true },\n },\n resetcounteronoverlays: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n resetcountonoverlays: { signature: \"m\", renderInfo: { breakAround: true } },\n\n logo: { signature: \"m\", renderInfo: { breakAround: true } },\n frametitle: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n framesubtitle: { signature: \"d<> m\", renderInfo: { breakAround: true } },\n pause: { signature: \"o\" },\n onslide: { signature: \"t+ t* d<> d{}\" },\n only: { signature: \"d<> m d<>\" },\n uncover: { signature: \"d<> m\" },\n visible: { signature: \"d<> m\" },\n invisible: { signature: \"d<> m\" },\n alt: { signature: \"d<> m m d<>\" },\n temporal: { signature: \"r<> m m m\" },\n item: {\n signature: \"d<> o d<>\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [null, \"label\", null],\n },\n },\n label: { signature: \"d<> o m\" }, // cleveref adds an optional argument to label; this gives maximum compatibility.\n action: { signature: \"d<> m\" },\n beamerdefaultoverlayspecification: { signature: \"m\" },\n\n titlegraphic: { signature: \"m\", renderInfo: { breakAround: true } },\n subject: { signature: \"m\", renderInfo: { breakAround: true } },\n keywords: { signature: \"m\", renderInfo: { breakAround: true } },\n\n lecture: { signature: \"o m m\", renderInfo: { breakAround: true } },\n partpage: { renderInfo: { breakAround: true } },\n sectionpage: { renderInfo: { breakAround: true } },\n subsectionpage: { renderInfo: { breakAround: true } },\n AtBeginLecture: { signature: \"m\", renderInfo: { breakAround: true } },\n AtBeginPart: { signature: \"m\", renderInfo: { breakAround: true } },\n tableofcontents: {\n signature: \"o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n againframe: { signature: \"d<> o o m\", renderInfo: { breakAround: true } },\n framezoom: {\n signature: \"r<> r<> o r() r()\",\n renderInfo: { breakAround: true },\n },\n column: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n\n animate: { signature: \"r<>\", renderInfo: { breakAround: true } },\n animatevalue: { signature: \"r<> m m m\", renderInfo: { breakAround: true } },\n sound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n hyperlinksound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n hyperlinkmute: { signature: \"m\", renderInfo: { breakAround: true } },\n\n // These signatures conflict with the default signatures.\n // Care must be taken when processing an AST.\n section: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n subsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n subsubsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n part: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n bibitem: {\n signature: \"s d<> o m\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n frame: {\n signature: \"!d<> !o !o !d{} !d{}\",\n },\n block: {\n signature: \"!d<> !d{} !d<>\",\n },\n alertblock: {\n signature: \"!d<> !d{} !d<>\",\n },\n exampleblock: {\n signature: \"!d<> !d{} !d<>\",\n },\n onlyenv: {\n signature: \"!d<>\",\n },\n altenv: {\n signature: \"!d<> m m m m !d<>\",\n },\n overlayarea: { signature: \"m m\" },\n overprint: { signature: \"o\" },\n actionenv: { signature: \"!d<>\" },\n columns: { signature: \"d<> o\" },\n column: { signature: \"d<> o m\" },\n};\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/beamer/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/beamer/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs new file mode 100644 index 0000000..05e9ef7 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + cref: { signature: "s m" }, + Cref: { signature: "s m" }, + crefrange: { signature: "s m m" }, + Crefrange: { signature: "s m m" }, + cpageref: { signature: "s m" }, + Cpageref: { signature: "s m" }, + ref: { signature: "m" }, + pageref: { signature: "m" }, + namecref: { signature: "m" }, + nameCref: { signature: "m" }, + lcnamecref: { signature: "m" }, + namecrefs: { signature: "m" }, + nameCrefs: { signature: "m" }, + lcnamecrefs: { signature: "m" }, + labelcref: { signature: "m" }, + labelcpageref: { signature: "m" }, + crefalias: { signature: "m m" }, + crefname: { signature: "m m m" }, + // XXX there are many more obscure commands to add here + // https://ctan.org/pkg/cleveref + crefdefaultlabelformat: { signature: "m" }, + crefrangeconjunction: { signature: "m" } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs.map new file mode 100644 index 0000000..bc55434 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/cleveref/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n cref: { signature: \"s m\" },\n Cref: { signature: \"s m\" },\n crefrange: { signature: \"s m m\" },\n Crefrange: { signature: \"s m m\" },\n cpageref: { signature: \"s m\" },\n Cpageref: { signature: \"s m\" },\n ref: { signature: \"m\" },\n pageref: { signature: \"m\" },\n namecref: { signature: \"m\" },\n nameCref: { signature: \"m\" },\n lcnamecref: { signature: \"m\" },\n namecrefs: { signature: \"m\" },\n nameCrefs: { signature: \"m\" },\n lcnamecrefs: { signature: \"m\" },\n labelcref: { signature: \"m\" },\n labelcpageref: { signature: \"m\" },\n crefalias: { signature: \"m m\" },\n crefname: { signature: \"m m m\" },\n // XXX there are many more obscure commands to add here\n // https://ctan.org/pkg/cleveref\n crefdefaultlabelformat: { signature: \"m\" },\n crefrangeconjunction: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,MAAM,EAAE,WAAW,MAAM;AAAA,EACzB,MAAM,EAAE,WAAW,MAAM;AAAA,EACzB,WAAW,EAAE,WAAW,QAAQ;AAAA,EAChC,WAAW,EAAE,WAAW,QAAQ;AAAA,EAChC,UAAU,EAAE,WAAW,MAAM;AAAA,EAC7B,UAAU,EAAE,WAAW,MAAM;AAAA,EAC7B,KAAK,EAAE,WAAW,IAAI;AAAA,EACtB,SAAS,EAAE,WAAW,IAAI;AAAA,EAC1B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,aAAa,EAAE,WAAW,IAAI;AAAA,EAC9B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,eAAe,EAAE,WAAW,IAAI;AAAA,EAChC,WAAW,EAAE,WAAW,MAAM;AAAA,EAC9B,UAAU,EAAE,WAAW,QAAQ;AAAA;AAAA;AAAA,EAG/B,wBAAwB,EAAE,WAAW,IAAI;AAAA,EACzC,sBAAsB,EAAE,WAAW,IAAI;AAC3C;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js new file mode 100644 index 0000000..2a034ed --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js @@ -0,0 +1,30 @@ +const macros = { + cref: { signature: "s m" }, + Cref: { signature: "s m" }, + crefrange: { signature: "s m m" }, + Crefrange: { signature: "s m m" }, + cpageref: { signature: "s m" }, + Cpageref: { signature: "s m" }, + ref: { signature: "m" }, + pageref: { signature: "m" }, + namecref: { signature: "m" }, + nameCref: { signature: "m" }, + lcnamecref: { signature: "m" }, + namecrefs: { signature: "m" }, + nameCrefs: { signature: "m" }, + lcnamecrefs: { signature: "m" }, + labelcref: { signature: "m" }, + labelcpageref: { signature: "m" }, + crefalias: { signature: "m m" }, + crefname: { signature: "m m m" }, + // XXX there are many more obscure commands to add here + // https://ctan.org/pkg/cleveref + crefdefaultlabelformat: { signature: "m" }, + crefrangeconjunction: { signature: "m" } +}; +const environments = {}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js.map new file mode 100644 index 0000000..5f16d21 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/cleveref/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n cref: { signature: \"s m\" },\n Cref: { signature: \"s m\" },\n crefrange: { signature: \"s m m\" },\n Crefrange: { signature: \"s m m\" },\n cpageref: { signature: \"s m\" },\n Cpageref: { signature: \"s m\" },\n ref: { signature: \"m\" },\n pageref: { signature: \"m\" },\n namecref: { signature: \"m\" },\n nameCref: { signature: \"m\" },\n lcnamecref: { signature: \"m\" },\n namecrefs: { signature: \"m\" },\n nameCrefs: { signature: \"m\" },\n lcnamecrefs: { signature: \"m\" },\n labelcref: { signature: \"m\" },\n labelcpageref: { signature: \"m\" },\n crefalias: { signature: \"m m\" },\n crefname: { signature: \"m m m\" },\n // XXX there are many more obscure commands to add here\n // https://ctan.org/pkg/cleveref\n crefdefaultlabelformat: { signature: \"m\" },\n crefrangeconjunction: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,MAAM,EAAE,WAAW,MAAM;AAAA,EACzB,MAAM,EAAE,WAAW,MAAM;AAAA,EACzB,WAAW,EAAE,WAAW,QAAQ;AAAA,EAChC,WAAW,EAAE,WAAW,QAAQ;AAAA,EAChC,UAAU,EAAE,WAAW,MAAM;AAAA,EAC7B,UAAU,EAAE,WAAW,MAAM;AAAA,EAC7B,KAAK,EAAE,WAAW,IAAI;AAAA,EACtB,SAAS,EAAE,WAAW,IAAI;AAAA,EAC1B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,aAAa,EAAE,WAAW,IAAI;AAAA,EAC9B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,eAAe,EAAE,WAAW,IAAI;AAAA,EAChC,WAAW,EAAE,WAAW,MAAM;AAAA,EAC9B,UAAU,EAAE,WAAW,QAAQ;AAAA;AAAA;AAAA,EAG/B,wBAAwB,EAAE,WAAW,IAAI;AAAA,EACzC,sBAAsB,EAAE,WAAW,IAAI;AAC3C;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/cleveref/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs new file mode 100644 index 0000000..df99273 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const provides = require("../../provides-gOjhEUvC.cjs"); +exports.environments = provides.environments; +exports.macros = provides.macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs.map new file mode 100644 index 0000000..5f0f93e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js new file mode 100644 index 0000000..601fb6e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js @@ -0,0 +1,6 @@ +import { e, m } from "../../provides-B-HiB8uu.js"; +export { + e as environments, + m as macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js.map new file mode 100644 index 0000000..594ae09 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/exam/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/exam/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/exam/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/exam/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs new file mode 100644 index 0000000..f22211f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + geometry: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs.map new file mode 100644 index 0000000..2a24af6 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/geometry/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n geometry: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,UAAU;AAAA,IACN,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EAAA;AAE3D;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js new file mode 100644 index 0000000..fd8b868 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js @@ -0,0 +1,12 @@ +const macros = { + geometry: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + } +}; +const environments = {}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js.map new file mode 100644 index 0000000..ae40216 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/geometry/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n geometry: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,UAAU;AAAA,IACN,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EAAA;AAE3D;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/geometry/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/geometry/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs new file mode 100644 index 0000000..7625d1f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + hypersetup: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + href: { signature: "o m m" }, + url: { signature: "m" }, + nolinkurl: { signature: "m" }, + hyperbaseurl: { signature: "m" }, + hyperimage: { signature: "m m" }, + hyperdef: { signature: "m m m" }, + hyperref: { signature: "o m" }, + hyperlink: { signature: "m m" }, + hypertarget: { signature: "m m" }, + autoref: { signature: "s m" }, + pageref: { signature: "s m" }, + autopageref: { signature: "s m" }, + pdfstringdef: { signature: "m m" }, + pdfbookmark: { signature: "o m m" }, + currentpdfbookmark: { signature: "m m" }, + subpdfbookmark: { signature: "m m" }, + belowpdfbookmark: { signature: "m m" }, + texorpdfstring: { signature: "m m" }, + thispdfpagelabel: { signature: "m" }, + hypercalcbp: { signature: "m" } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs.map new file mode 100644 index 0000000..41356fc --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/hyperref/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n hypersetup: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n href: { signature: \"o m m\" },\n url: { signature: \"m\" },\n nolinkurl: { signature: \"m\" },\n hyperbaseurl: { signature: \"m\" },\n hyperimage: { signature: \"m m\" },\n hyperdef: { signature: \"m m m\" },\n hyperref: { signature: \"o m\" },\n hyperlink: { signature: \"m m\" },\n hypertarget: { signature: \"m m\" },\n autoref: { signature: \"s m\" },\n pageref: { signature: \"s m\" },\n autopageref: { signature: \"s m\" },\n pdfstringdef: { signature: \"m m\" },\n pdfbookmark: { signature: \"o m m\" },\n currentpdfbookmark: { signature: \"m m\" },\n subpdfbookmark: { signature: \"m m\" },\n belowpdfbookmark: { signature: \"m m\" },\n texorpdfstring: { signature: \"m m\" },\n thispdfpagelabel: { signature: \"m\" },\n hypercalcbp: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EACvD;AAAA,EACA,MAAM,EAAE,WAAW,QAAQ;AAAA,EAC3B,KAAK,EAAE,WAAW,IAAI;AAAA,EACtB,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,YAAY,EAAE,WAAW,MAAM;AAAA,EAC/B,UAAU,EAAE,WAAW,QAAQ;AAAA,EAC/B,UAAU,EAAE,WAAW,MAAM;AAAA,EAC7B,WAAW,EAAE,WAAW,MAAM;AAAA,EAC9B,aAAa,EAAE,WAAW,MAAM;AAAA,EAChC,SAAS,EAAE,WAAW,MAAM;AAAA,EAC5B,SAAS,EAAE,WAAW,MAAM;AAAA,EAC5B,aAAa,EAAE,WAAW,MAAM;AAAA,EAChC,cAAc,EAAE,WAAW,MAAM;AAAA,EACjC,aAAa,EAAE,WAAW,QAAQ;AAAA,EAClC,oBAAoB,EAAE,WAAW,MAAM;AAAA,EACvC,gBAAgB,EAAE,WAAW,MAAM;AAAA,EACnC,kBAAkB,EAAE,WAAW,MAAM;AAAA,EACrC,gBAAgB,EAAE,WAAW,MAAM;AAAA,EACnC,kBAAkB,EAAE,WAAW,IAAI;AAAA,EACnC,aAAa,EAAE,WAAW,IAAI;AAClC;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js new file mode 100644 index 0000000..f9352ee --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js @@ -0,0 +1,32 @@ +const macros = { + hypersetup: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + href: { signature: "o m m" }, + url: { signature: "m" }, + nolinkurl: { signature: "m" }, + hyperbaseurl: { signature: "m" }, + hyperimage: { signature: "m m" }, + hyperdef: { signature: "m m m" }, + hyperref: { signature: "o m" }, + hyperlink: { signature: "m m" }, + hypertarget: { signature: "m m" }, + autoref: { signature: "s m" }, + pageref: { signature: "s m" }, + autopageref: { signature: "s m" }, + pdfstringdef: { signature: "m m" }, + pdfbookmark: { signature: "o m m" }, + currentpdfbookmark: { signature: "m m" }, + subpdfbookmark: { signature: "m m" }, + belowpdfbookmark: { signature: "m m" }, + texorpdfstring: { signature: "m m" }, + thispdfpagelabel: { signature: "m" }, + hypercalcbp: { signature: "m" } +}; +const environments = {}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js.map new file mode 100644 index 0000000..d52d9e8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/hyperref/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n hypersetup: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n href: { signature: \"o m m\" },\n url: { signature: \"m\" },\n nolinkurl: { signature: \"m\" },\n hyperbaseurl: { signature: \"m\" },\n hyperimage: { signature: \"m m\" },\n hyperdef: { signature: \"m m m\" },\n hyperref: { signature: \"o m\" },\n hyperlink: { signature: \"m m\" },\n hypertarget: { signature: \"m m\" },\n autoref: { signature: \"s m\" },\n pageref: { signature: \"s m\" },\n autopageref: { signature: \"s m\" },\n pdfstringdef: { signature: \"m m\" },\n pdfbookmark: { signature: \"o m m\" },\n currentpdfbookmark: { signature: \"m m\" },\n subpdfbookmark: { signature: \"m m\" },\n belowpdfbookmark: { signature: \"m m\" },\n texorpdfstring: { signature: \"m m\" },\n thispdfpagelabel: { signature: \"m\" },\n hypercalcbp: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EACvD;AAAA,EACA,MAAM,EAAE,WAAW,QAAQ;AAAA,EAC3B,KAAK,EAAE,WAAW,IAAI;AAAA,EACtB,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,YAAY,EAAE,WAAW,MAAM;AAAA,EAC/B,UAAU,EAAE,WAAW,QAAQ;AAAA,EAC/B,UAAU,EAAE,WAAW,MAAM;AAAA,EAC7B,WAAW,EAAE,WAAW,MAAM;AAAA,EAC9B,aAAa,EAAE,WAAW,MAAM;AAAA,EAChC,SAAS,EAAE,WAAW,MAAM;AAAA,EAC5B,SAAS,EAAE,WAAW,MAAM;AAAA,EAC5B,aAAa,EAAE,WAAW,MAAM;AAAA,EAChC,cAAc,EAAE,WAAW,MAAM;AAAA,EACjC,aAAa,EAAE,WAAW,QAAQ;AAAA,EAClC,oBAAoB,EAAE,WAAW,MAAM;AAAA,EACvC,gBAAgB,EAAE,WAAW,MAAM;AAAA,EACnC,kBAAkB,EAAE,WAAW,MAAM;AAAA,EACrC,gBAAgB,EAAE,WAAW,MAAM;AAAA,EACnC,kBAAkB,EAAE,WAAW,IAAI;AAAA,EACnC,aAAa,EAAE,WAAW,IAAI;AAClC;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/hyperref/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs new file mode 100644 index 0000000..bf0ea17 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const provides = require("../../provides-DdQzqlsT.cjs"); +exports.environments = provides.environments; +exports.macros = provides.macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs.map new file mode 100644 index 0000000..5f0f93e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js new file mode 100644 index 0000000..f0da88c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js @@ -0,0 +1,6 @@ +import { e, m } from "../../provides-BUHzyq9A.js"; +export { + e as environments, + m as macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js.map new file mode 100644 index 0000000..594ae09 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/latex2e/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs new file mode 100644 index 0000000..21808b2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const provides = require("../../provides-BjJALsf_.cjs"); +exports.environments = provides.environments; +exports.macros = provides.macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs.map new file mode 100644 index 0000000..5f0f93e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js new file mode 100644 index 0000000..79a3b6c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js @@ -0,0 +1,6 @@ +import { e, m } from "../../provides-Ch0mvkO_.js"; +export { + e as environments, + m as macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js.map new file mode 100644 index 0000000..594ae09 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/listings/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/listings/libs/argument-parser.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/listings/libs/argument-parser.d.ts new file mode 100644 index 0000000..ef07baa --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/listings/libs/argument-parser.d.ts @@ -0,0 +1,8 @@ +import { ArgumentParser } from '@unified-latex/unified-latex-types'; +/** + * This argument parser parses arguments in the form of + * - [⟨key=value list⟩]⟨character⟩⟨source code⟩⟨same character⟩ + * - [⟨key=value list⟩]{⟨source code⟩} + */ +export declare const argumentParser: ArgumentParser; +//# sourceMappingURL=argument-parser.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/listings/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/listings/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/listings/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs new file mode 100644 index 0000000..a613609 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + see: { signature: "m m" }, + seealso: { signature: "m m" }, + seename: { signature: "m" }, + alsoname: { signature: "m" }, + index: { signature: "m" } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs.map new file mode 100644 index 0000000..8e0feab --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/makeidx/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n see: { signature: \"m m\" },\n seealso: { signature: \"m m\" },\n seename: { signature: \"m\" },\n alsoname: { signature: \"m\" },\n index: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,KAAK,EAAE,WAAW,MAAM;AAAA,EACxB,SAAS,EAAE,WAAW,MAAM;AAAA,EAC5B,SAAS,EAAE,WAAW,IAAI;AAAA,EAC1B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,OAAO,EAAE,WAAW,IAAI;AAC5B;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js new file mode 100644 index 0000000..ba89487 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js @@ -0,0 +1,13 @@ +const macros = { + see: { signature: "m m" }, + seealso: { signature: "m m" }, + seename: { signature: "m" }, + alsoname: { signature: "m" }, + index: { signature: "m" } +}; +const environments = {}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js.map new file mode 100644 index 0000000..d3fcb35 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/makeidx/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n see: { signature: \"m m\" },\n seealso: { signature: \"m m\" },\n seename: { signature: \"m\" },\n alsoname: { signature: \"m\" },\n index: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,KAAK,EAAE,WAAW,MAAM;AAAA,EACxB,SAAS,EAAE,WAAW,MAAM;AAAA,EAC5B,SAAS,EAAE,WAAW,IAAI;AAAA,EAC1B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,OAAO,EAAE,WAAW,IAAI;AAC5B;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/makeidx/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs new file mode 100644 index 0000000..a16f5ce --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs @@ -0,0 +1,217 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + mathtoolsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + mathllap: { + signature: "o m" + }, + mathrlap: { + signature: "o m" + }, + mathclap: { + signature: "o m" + }, + clap: { + signature: "m" + }, + mathmbox: { + signature: "m" + }, + mathmakebox: { + signature: "o o m" + }, + cramped: { + signature: "o m" + }, + crampedllap: { + signature: "o m" + }, + crampedrlap: { + signature: "o m" + }, + crampedclap: { + signature: "o m" + }, + crampedsubstack: { + signature: "o m" + }, + smashoperator: { + signature: "o m" + }, + newtagform: { + signature: "m o m m" + }, + renewtagform: { + signature: "m o m m" + }, + usetagform: { + signature: "m" + }, + xleftrightarrow: { signature: "o m" }, + xLeftarrow: { signature: "o m" }, + xhookleftarrow: { signature: "o m" }, + xmapsto: { signature: "o m" }, + xRightarrow: { signature: "o m" }, + xLeftrightarrow: { signature: "o m" }, + xhookrightarrow: { signature: "o m" }, + underbracket: { signature: "o o m" }, + overbracket: { signature: "o o m" }, + underbrace: { signature: "m" }, + overbrace: { signature: "m" }, + shoveleft: { signature: "o m" }, + shoveright: { signature: "o m" }, + ArrowBetweenLines: { signature: "s o" }, + vdotswithin: { signature: "m" }, + shortdotswithin: { signature: "s m" }, + DeclarePairedDelimiter: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterX: { + signature: "m o m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterXPP: { + signature: "m o m m m m m", + renderInfo: { breakAround: true } + }, + prescript: { signature: "m m m" }, + DeclareMathSizes: { signature: "m m m m" }, + newgathered: { signature: "m m m m" }, + renewgathered: { signature: "m m m m" }, + splitfrac: { signature: "m m" }, + splitdfrac: { signature: "m m" }, + xmathstrut: { signature: "o m" }, + // amsthm + newtheorem: { signature: "s m o m o", renderInfo: { breakAround: true } }, + theoremstyle: { signature: "m", renderInfo: { breakAround: true } }, + newtheoremstyle: { + signature: "m m m m m m m m m", + renderInfo: { breakAround: true } + }, + // amsmath + text: { signature: "m", renderInfo: { inMathMode: false } }, + // amsfonts + mathbb: { signature: "m" }, + mathscr: { signature: "m" }, + mathfrak: { signature: "m" }, + frak: { signature: "m" }, + Bdd: { signature: "m" }, + bold: { signature: "m" }, + // amsopn + operatorname: { signature: "s m" }, + DeclareMathOperator: { + signature: "s m m", + renderInfo: { breakAround: true } + } +}; +const environments = { + crampedsubarray: { + signature: "m", + renderInfo: { alignContent: true, inMathMode: true } + }, + matrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + pmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + "matrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "pmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "smallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "psmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + multilined: { signature: "o o", renderInfo: { inMathMode: true } }, + cases: { renderInfo: { alignContent: true, inMathMode: true } }, + "cases*": { renderInfo: { alignContent: true, inMathMode: true } }, + dcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "dcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + rcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "rcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + drcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "drcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + spreadlines: { signature: "m", renderInfo: { inMathMode: true } }, + lgathered: { signature: "o", renderInfo: { inMathMode: true } }, + rgathered: { signature: "o", renderInfo: { inMathMode: true } }, + // amsmath + "align*": { renderInfo: { inMathMode: true, alignContent: true } }, + align: { renderInfo: { inMathMode: true, alignContent: true } }, + aligned: { renderInfo: { inMathMode: true, alignContent: true } }, + "alignat*": { renderInfo: { inMathMode: true, alignContent: true } }, + alignat: { renderInfo: { inMathMode: true, alignContent: true } }, + "equation*": { renderInfo: { inMathMode: true } }, + equation: { renderInfo: { inMathMode: true } }, + "gather*": { renderInfo: { inMathMode: true } }, + gather: { renderInfo: { inMathMode: true } }, + "multline*": { renderInfo: { inMathMode: true } }, + multline: { renderInfo: { inMathMode: true } }, + "flalign*": { renderInfo: { inMathMode: true, alignContent: true } }, + flalign: { renderInfo: { inMathMode: true, alignContent: true } }, + split: { renderInfo: { inMathMode: true } }, + // Math environments + displaymath: { renderInfo: { inMathMode: true } }, + // Typical amsthm environments + theorem: { signature: "o" }, + lemma: { signature: "o" }, + definition: { signature: "o" }, + proposition: { signature: "o" }, + corollary: { signature: "o" }, + remark: { signature: "!o" }, + example: { signature: "!o" }, + proof: { signature: "o" } +}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs.map new file mode 100644 index 0000000..57d593a --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/mathtools/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n mathtoolsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n mathllap: {\n signature: \"o m\",\n },\n mathrlap: {\n signature: \"o m\",\n },\n mathclap: {\n signature: \"o m\",\n },\n clap: {\n signature: \"m\",\n },\n mathmbox: {\n signature: \"m\",\n },\n mathmakebox: {\n signature: \"o o m\",\n },\n cramped: {\n signature: \"o m\",\n },\n crampedllap: {\n signature: \"o m\",\n },\n crampedrlap: {\n signature: \"o m\",\n },\n crampedclap: {\n signature: \"o m\",\n },\n crampedsubstack: {\n signature: \"o m\",\n },\n smashoperator: {\n signature: \"o m\",\n },\n newtagform: {\n signature: \"m o m m\",\n },\n renewtagform: {\n signature: \"m o m m\",\n },\n usetagform: {\n signature: \"m\",\n },\n xleftrightarrow: { signature: \"o m\" },\n xLeftarrow: { signature: \"o m\" },\n xhookleftarrow: { signature: \"o m\" },\n xmapsto: { signature: \"o m\" },\n xRightarrow: { signature: \"o m\" },\n xLeftrightarrow: { signature: \"o m\" },\n xhookrightarrow: { signature: \"o m\" },\n underbracket: { signature: \"o o m\" },\n overbracket: { signature: \"o o m\" },\n underbrace: { signature: \"m\" },\n overbrace: { signature: \"m\" },\n shoveleft: { signature: \"o m\" },\n shoveright: { signature: \"o m\" },\n ArrowBetweenLines: { signature: \"s o\" },\n vdotswithin: { signature: \"m\" },\n shortdotswithin: { signature: \"s m\" },\n DeclarePairedDelimiter: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclarePairedDelimiterX: {\n signature: \"m o m m m\",\n renderInfo: { breakAround: true },\n },\n DeclarePairedDelimiterXPP: {\n signature: \"m o m m m m m\",\n renderInfo: { breakAround: true },\n },\n prescript: { signature: \"m m m\" },\n DeclareMathSizes: { signature: \"m m m m\" },\n newgathered: { signature: \"m m m m\" },\n renewgathered: { signature: \"m m m m\" },\n splitfrac: { signature: \"m m\" },\n splitdfrac: { signature: \"m m\" },\n xmathstrut: { signature: \"o m\" },\n // amsthm\n newtheorem: { signature: \"s m o m o\", renderInfo: { breakAround: true } },\n theoremstyle: { signature: \"m\", renderInfo: { breakAround: true } },\n newtheoremstyle: {\n signature: \"m m m m m m m m m\",\n renderInfo: { breakAround: true },\n },\n // amsmath\n text: { signature: \"m\", renderInfo: { inMathMode: false } },\n // amsfonts\n mathbb: { signature: \"m\" },\n mathscr: { signature: \"m\" },\n mathfrak: { signature: \"m\" },\n frak: { signature: \"m\" },\n Bdd: { signature: \"m\" },\n bold: { signature: \"m\" },\n // amsopn\n operatorname: { signature: \"s m\" },\n DeclareMathOperator: {\n signature: \"s m m\",\n renderInfo: { breakAround: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n crampedsubarray: {\n signature: \"m\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n matrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n pmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n \"matrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"pmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"smallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"psmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n multilined: { signature: \"o o\", renderInfo: { inMathMode: true } },\n cases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"cases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n dcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"dcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n rcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"rcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n drcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"drcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n spreadlines: { signature: \"m\", renderInfo: { inMathMode: true } },\n lgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n rgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n // amsmath\n \"align*\": { renderInfo: { inMathMode: true, alignContent: true } },\n align: { renderInfo: { inMathMode: true, alignContent: true } },\n aligned: { renderInfo: { inMathMode: true, alignContent: true } },\n \"alignat*\": { renderInfo: { inMathMode: true, alignContent: true } },\n alignat: { renderInfo: { inMathMode: true, alignContent: true } },\n \"equation*\": { renderInfo: { inMathMode: true } },\n equation: { renderInfo: { inMathMode: true } },\n \"gather*\": { renderInfo: { inMathMode: true } },\n gather: { renderInfo: { inMathMode: true } },\n \"multline*\": { renderInfo: { inMathMode: true } },\n multline: { renderInfo: { inMathMode: true } },\n \"flalign*\": { renderInfo: { inMathMode: true, alignContent: true } },\n flalign: { renderInfo: { inMathMode: true, alignContent: true } },\n split: { renderInfo: { inMathMode: true } },\n // Math environments\n displaymath: { renderInfo: { inMathMode: true } },\n // Typical amsthm environments\n theorem: { signature: \"o\" },\n lemma: { signature: \"o\" },\n definition: { signature: \"o\" },\n proposition: { signature: \"o\" },\n corollary: { signature: \"o\" },\n remark: { signature: \"!o\" },\n example: { signature: \"!o\" },\n proof: { signature: \"o\" },\n};\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js new file mode 100644 index 0000000..024649d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js @@ -0,0 +1,217 @@ +const macros = { + mathtoolsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + mathllap: { + signature: "o m" + }, + mathrlap: { + signature: "o m" + }, + mathclap: { + signature: "o m" + }, + clap: { + signature: "m" + }, + mathmbox: { + signature: "m" + }, + mathmakebox: { + signature: "o o m" + }, + cramped: { + signature: "o m" + }, + crampedllap: { + signature: "o m" + }, + crampedrlap: { + signature: "o m" + }, + crampedclap: { + signature: "o m" + }, + crampedsubstack: { + signature: "o m" + }, + smashoperator: { + signature: "o m" + }, + newtagform: { + signature: "m o m m" + }, + renewtagform: { + signature: "m o m m" + }, + usetagform: { + signature: "m" + }, + xleftrightarrow: { signature: "o m" }, + xLeftarrow: { signature: "o m" }, + xhookleftarrow: { signature: "o m" }, + xmapsto: { signature: "o m" }, + xRightarrow: { signature: "o m" }, + xLeftrightarrow: { signature: "o m" }, + xhookrightarrow: { signature: "o m" }, + underbracket: { signature: "o o m" }, + overbracket: { signature: "o o m" }, + underbrace: { signature: "m" }, + overbrace: { signature: "m" }, + shoveleft: { signature: "o m" }, + shoveright: { signature: "o m" }, + ArrowBetweenLines: { signature: "s o" }, + vdotswithin: { signature: "m" }, + shortdotswithin: { signature: "s m" }, + DeclarePairedDelimiter: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterX: { + signature: "m o m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterXPP: { + signature: "m o m m m m m", + renderInfo: { breakAround: true } + }, + prescript: { signature: "m m m" }, + DeclareMathSizes: { signature: "m m m m" }, + newgathered: { signature: "m m m m" }, + renewgathered: { signature: "m m m m" }, + splitfrac: { signature: "m m" }, + splitdfrac: { signature: "m m" }, + xmathstrut: { signature: "o m" }, + // amsthm + newtheorem: { signature: "s m o m o", renderInfo: { breakAround: true } }, + theoremstyle: { signature: "m", renderInfo: { breakAround: true } }, + newtheoremstyle: { + signature: "m m m m m m m m m", + renderInfo: { breakAround: true } + }, + // amsmath + text: { signature: "m", renderInfo: { inMathMode: false } }, + // amsfonts + mathbb: { signature: "m" }, + mathscr: { signature: "m" }, + mathfrak: { signature: "m" }, + frak: { signature: "m" }, + Bdd: { signature: "m" }, + bold: { signature: "m" }, + // amsopn + operatorname: { signature: "s m" }, + DeclareMathOperator: { + signature: "s m m", + renderInfo: { breakAround: true } + } +}; +const environments = { + crampedsubarray: { + signature: "m", + renderInfo: { alignContent: true, inMathMode: true } + }, + matrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + pmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + "matrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "pmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "smallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "psmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + multilined: { signature: "o o", renderInfo: { inMathMode: true } }, + cases: { renderInfo: { alignContent: true, inMathMode: true } }, + "cases*": { renderInfo: { alignContent: true, inMathMode: true } }, + dcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "dcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + rcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "rcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + drcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "drcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + spreadlines: { signature: "m", renderInfo: { inMathMode: true } }, + lgathered: { signature: "o", renderInfo: { inMathMode: true } }, + rgathered: { signature: "o", renderInfo: { inMathMode: true } }, + // amsmath + "align*": { renderInfo: { inMathMode: true, alignContent: true } }, + align: { renderInfo: { inMathMode: true, alignContent: true } }, + aligned: { renderInfo: { inMathMode: true, alignContent: true } }, + "alignat*": { renderInfo: { inMathMode: true, alignContent: true } }, + alignat: { renderInfo: { inMathMode: true, alignContent: true } }, + "equation*": { renderInfo: { inMathMode: true } }, + equation: { renderInfo: { inMathMode: true } }, + "gather*": { renderInfo: { inMathMode: true } }, + gather: { renderInfo: { inMathMode: true } }, + "multline*": { renderInfo: { inMathMode: true } }, + multline: { renderInfo: { inMathMode: true } }, + "flalign*": { renderInfo: { inMathMode: true, alignContent: true } }, + flalign: { renderInfo: { inMathMode: true, alignContent: true } }, + split: { renderInfo: { inMathMode: true } }, + // Math environments + displaymath: { renderInfo: { inMathMode: true } }, + // Typical amsthm environments + theorem: { signature: "o" }, + lemma: { signature: "o" }, + definition: { signature: "o" }, + proposition: { signature: "o" }, + corollary: { signature: "o" }, + remark: { signature: "!o" }, + example: { signature: "!o" }, + proof: { signature: "o" } +}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js.map new file mode 100644 index 0000000..985bce8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/mathtools/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n mathtoolsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n mathllap: {\n signature: \"o m\",\n },\n mathrlap: {\n signature: \"o m\",\n },\n mathclap: {\n signature: \"o m\",\n },\n clap: {\n signature: \"m\",\n },\n mathmbox: {\n signature: \"m\",\n },\n mathmakebox: {\n signature: \"o o m\",\n },\n cramped: {\n signature: \"o m\",\n },\n crampedllap: {\n signature: \"o m\",\n },\n crampedrlap: {\n signature: \"o m\",\n },\n crampedclap: {\n signature: \"o m\",\n },\n crampedsubstack: {\n signature: \"o m\",\n },\n smashoperator: {\n signature: \"o m\",\n },\n newtagform: {\n signature: \"m o m m\",\n },\n renewtagform: {\n signature: \"m o m m\",\n },\n usetagform: {\n signature: \"m\",\n },\n xleftrightarrow: { signature: \"o m\" },\n xLeftarrow: { signature: \"o m\" },\n xhookleftarrow: { signature: \"o m\" },\n xmapsto: { signature: \"o m\" },\n xRightarrow: { signature: \"o m\" },\n xLeftrightarrow: { signature: \"o m\" },\n xhookrightarrow: { signature: \"o m\" },\n underbracket: { signature: \"o o m\" },\n overbracket: { signature: \"o o m\" },\n underbrace: { signature: \"m\" },\n overbrace: { signature: \"m\" },\n shoveleft: { signature: \"o m\" },\n shoveright: { signature: \"o m\" },\n ArrowBetweenLines: { signature: \"s o\" },\n vdotswithin: { signature: \"m\" },\n shortdotswithin: { signature: \"s m\" },\n DeclarePairedDelimiter: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclarePairedDelimiterX: {\n signature: \"m o m m m\",\n renderInfo: { breakAround: true },\n },\n DeclarePairedDelimiterXPP: {\n signature: \"m o m m m m m\",\n renderInfo: { breakAround: true },\n },\n prescript: { signature: \"m m m\" },\n DeclareMathSizes: { signature: \"m m m m\" },\n newgathered: { signature: \"m m m m\" },\n renewgathered: { signature: \"m m m m\" },\n splitfrac: { signature: \"m m\" },\n splitdfrac: { signature: \"m m\" },\n xmathstrut: { signature: \"o m\" },\n // amsthm\n newtheorem: { signature: \"s m o m o\", renderInfo: { breakAround: true } },\n theoremstyle: { signature: \"m\", renderInfo: { breakAround: true } },\n newtheoremstyle: {\n signature: \"m m m m m m m m m\",\n renderInfo: { breakAround: true },\n },\n // amsmath\n text: { signature: \"m\", renderInfo: { inMathMode: false } },\n // amsfonts\n mathbb: { signature: \"m\" },\n mathscr: { signature: \"m\" },\n mathfrak: { signature: \"m\" },\n frak: { signature: \"m\" },\n Bdd: { signature: \"m\" },\n bold: { signature: \"m\" },\n // amsopn\n operatorname: { signature: \"s m\" },\n DeclareMathOperator: {\n signature: \"s m m\",\n renderInfo: { breakAround: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n crampedsubarray: {\n signature: \"m\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n matrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n pmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n \"matrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"pmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"smallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"psmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n multilined: { signature: \"o o\", renderInfo: { inMathMode: true } },\n cases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"cases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n dcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"dcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n rcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"rcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n drcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"drcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n spreadlines: { signature: \"m\", renderInfo: { inMathMode: true } },\n lgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n rgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n // amsmath\n \"align*\": { renderInfo: { inMathMode: true, alignContent: true } },\n align: { renderInfo: { inMathMode: true, alignContent: true } },\n aligned: { renderInfo: { inMathMode: true, alignContent: true } },\n \"alignat*\": { renderInfo: { inMathMode: true, alignContent: true } },\n alignat: { renderInfo: { inMathMode: true, alignContent: true } },\n \"equation*\": { renderInfo: { inMathMode: true } },\n equation: { renderInfo: { inMathMode: true } },\n \"gather*\": { renderInfo: { inMathMode: true } },\n gather: { renderInfo: { inMathMode: true } },\n \"multline*\": { renderInfo: { inMathMode: true } },\n multline: { renderInfo: { inMathMode: true } },\n \"flalign*\": { renderInfo: { inMathMode: true, alignContent: true } },\n flalign: { renderInfo: { inMathMode: true, alignContent: true } },\n split: { renderInfo: { inMathMode: true } },\n // Math environments\n displaymath: { renderInfo: { inMathMode: true } },\n // Typical amsthm environments\n theorem: { signature: \"o\" },\n lemma: { signature: \"o\" },\n definition: { signature: \"o\" },\n proposition: { signature: \"o\" },\n corollary: { signature: \"o\" },\n remark: { signature: \"!o\" },\n example: { signature: \"!o\" },\n proof: { signature: \"o\" },\n};\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/mathtools/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs new file mode 100644 index 0000000..ccba19b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const provides = require("../../provides-Bdw2Aj_V.cjs"); +exports.environments = provides.environments; +exports.macros = provides.macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs.map new file mode 100644 index 0000000..5f0f93e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js new file mode 100644 index 0000000..c90c181 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js @@ -0,0 +1,6 @@ +import { e, m } from "../../provides-sdqk_ZBm.js"; +export { + e as environments, + m as macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js.map new file mode 100644 index 0000000..594ae09 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/minted/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/minted/libs/argument-parser.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/minted/libs/argument-parser.d.ts new file mode 100644 index 0000000..c8aaa27 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/minted/libs/argument-parser.d.ts @@ -0,0 +1,8 @@ +import { ArgumentParser } from '@unified-latex/unified-latex-types'; +/** + * This argument parser parses arguments in the form of + * - [⟨options⟩]{⟨language⟩}⟨delim⟩⟨code⟩⟨delim⟩ + * - [⟨options⟩]{⟨language⟩}{⟨code⟩} + */ +export declare const argumentParser: ArgumentParser; +//# sourceMappingURL=argument-parser.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/minted/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/minted/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/minted/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs new file mode 100644 index 0000000..741b54b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + columnbreak: { renderInfo: { breakAround: true } } +}; +const environments = { + multicols: { + signature: "m o o" + }, + "multicols*": { + signature: "m o o" + } +}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs.map new file mode 100644 index 0000000..50058b1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/multicol/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n columnbreak: { renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n multicols: {\n signature: \"m o o\",\n },\n \"multicols*\": {\n signature: \"m o o\",\n },\n};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,aAAa,EAAE,YAAY,EAAE,aAAa,KAAO,EAAA;AACrD;AAEO,MAAM,eAA8B;AAAA,EACvC,WAAW;AAAA,IACP,WAAW;AAAA,EACf;AAAA,EACA,cAAc;AAAA,IACV,WAAW;AAAA,EAAA;AAEnB;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js new file mode 100644 index 0000000..810d485 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js @@ -0,0 +1,16 @@ +const macros = { + columnbreak: { renderInfo: { breakAround: true } } +}; +const environments = { + multicols: { + signature: "m o o" + }, + "multicols*": { + signature: "m o o" + } +}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js.map new file mode 100644 index 0000000..94fcf4d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/multicol/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n columnbreak: { renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n multicols: {\n signature: \"m o o\",\n },\n \"multicols*\": {\n signature: \"m o o\",\n },\n};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,aAAa,EAAE,YAAY,EAAE,aAAa,KAAO,EAAA;AACrD;AAEO,MAAM,eAA8B;AAAA,EACvC,WAAW;AAAA,IACP,WAAW;AAAA,EACf;AAAA,EACA,cAAc;AAAA,IACV,WAAW;AAAA,EAAA;AAEnB;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/multicol/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/multicol/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs new file mode 100644 index 0000000..a5636b2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs @@ -0,0 +1,73 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + NiceMatrixOptions: { + signature: "m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + } +}; +const environments = { + NiceTabular: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrixBlock: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArrayWithDelims: { + signature: "m m o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + } +}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs.map new file mode 100644 index 0000000..b67a221 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/nicematrix/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n NiceMatrixOptions: {\n signature: \"m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n NiceTabular: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceMatrixBlock: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceArrayWithDelims: {\n signature: \"m m o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n pNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n bNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n BNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n vNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n VNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n pNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n bNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n BNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n vNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n VNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,mBAAmB;AAAA,IACf,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EAAA;AAE3D;AAEO,MAAM,eAA8B;AAAA,EACvC,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,iBAAiB;AAAA,IACb,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,qBAAqB;AAAA,IACjB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,WAAW;AAAA,IACP,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EAAA;AAE5D;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js new file mode 100644 index 0000000..e2515b0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js @@ -0,0 +1,73 @@ +const macros = { + NiceMatrixOptions: { + signature: "m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + } +}; +const environments = { + NiceTabular: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrixBlock: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArrayWithDelims: { + signature: "m m o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + } +}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js.map new file mode 100644 index 0000000..1398453 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/nicematrix/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n NiceMatrixOptions: {\n signature: \"m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n NiceTabular: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceMatrixBlock: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceArrayWithDelims: {\n signature: \"m m o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n pNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n bNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n BNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n vNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n VNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n pNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n bNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n BNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n vNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n VNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,mBAAmB;AAAA,IACf,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EAAA;AAE3D;AAEO,MAAM,eAA8B;AAAA,EACvC,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,iBAAiB;AAAA,IACb,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,qBAAqB;AAAA,IACjB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,WAAW;AAAA,IACP,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EACxD;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,cAAc,KAAK;AAAA,EAAA;AAE5D;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/nicematrix/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs new file mode 100644 index 0000000..2d7ca0d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs @@ -0,0 +1,331 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const provides = require("../../provides-CwtnTL9q.cjs"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +const unifiedLatexUtilSplit = require("@unified-latex/unified-latex-util-split"); +const index = require("../../index-BuqJUpao.cjs"); +const unifiedLatexUtilComments = require("@unified-latex/unified-latex-util-comments"); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +const unifiedLatexUtilRenderInfo = require("@unified-latex/unified-latex-util-render-info"); +const unifiedLatexUtilArguments = require("@unified-latex/unified-latex-util-arguments"); +function createMatchers({ + at = "@", + equals = "=", + equationSeparator = ",", + mathOperations = ["+", "-"], + whitelistedVariables +} = {}) { + let isVar = (node) => unifiedLatexUtilMatch.match.anyString(node) && !!node.content.match(/[a-zA-Z]/); + if (whitelistedVariables) { + whitelistedVariables = whitelistedVariables.map( + (v) => unifiedLatexUtilMatch.match.anyString(v) ? v.content : v + ); + const macros = whitelistedVariables.filter( + (v) => unifiedLatexUtilMatch.match.anyMacro(v) + ); + const strings = whitelistedVariables.filter( + (v) => typeof v === "string" + ); + const macroHash = Object.fromEntries(macros.map((v) => [v.content, v])); + const stringHash = Object.fromEntries(strings.map((s) => [s, s])); + const macroMatcher = unifiedLatexUtilMatch.match.createMacroMatcher(macroHash); + isVar = (node) => macroMatcher(node) || unifiedLatexUtilMatch.match.anyString(node) && !!stringHash[node.content]; + } + return { + isSep: (node) => unifiedLatexUtilMatch.match.string(node, equationSeparator), + isVar, + isOperation: (node) => mathOperations.some((op) => unifiedLatexUtilMatch.match.string(node, op)), + isEquals: (node) => unifiedLatexUtilMatch.match.string(node, equals), + isAt: (node) => unifiedLatexUtilMatch.match.string(node, at), + isSubscript: (node) => unifiedLatexUtilMatch.match.macro(node, "_") && node.escapeToken === "", + isWhitespace: unifiedLatexUtilMatch.match.whitespace, + isSameLineComment: (node) => unifiedLatexUtilMatch.match.comment(node) && node.sameline, + isOwnLineComment: (node) => unifiedLatexUtilMatch.match.comment(node) && !node.sameline + }; +} +function parse(ast, options) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = unifiedLatexUtilPegjs.decorateArrayForPegjs([...ast]); + return unifiedLatexUtilPegjs.SystemePegParser.parse( + ast, + createMatchers(options || {}) + ); +} +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + switch (node.type) { + case "annotation": + return `${unifiedLatexUtilPrintRaw.printRaw(node.marker)}${unifiedLatexUtilPrintRaw.printRaw( + node.content + )}`; + case "item": + return `${node.op ? unifiedLatexUtilPrintRaw.printRaw(node.op) : ""}${unifiedLatexUtilPrintRaw.printRaw( + node.content + )}`; + case "equation": + const left = node.left.map((n) => printRaw(n)).join(""); + const right = unifiedLatexUtilPrintRaw.printRaw(node.right); + const equals = node.equals ? unifiedLatexUtilPrintRaw.printRaw(node.equals) : ""; + return `${left}${equals}${right}`; + case "line": + const equation = node.equation ? printRaw(node.equation) : ""; + const annotation = node.annotation ? printRaw(node.annotation) : ""; + const sep = node.sep ? unifiedLatexUtilPrintRaw.printRaw(node.sep) : ""; + const body = `${equation}${annotation}${sep}`; + if (node.trailingComment) { + return unifiedLatexUtilPrintRaw.printRaw([body, node.trailingComment]); + } + return body; + default: + console.warn( + `Unknown node type "${node.type}" for node`, + node + ); + return ""; + } +} +const AMP = { type: "string", content: "&" }; +const SEP = { type: "macro", content: "\\" }; +const QUAD = { type: "macro", content: "quad" }; +const PLUS = { type: "string", content: "+" }; +const COLUMN_KERN_ADJUSTMENT = [ + { type: "string", content: "@" }, + { + type: "group", + content: [ + { type: "macro", content: "mkern" }, + { type: "string", content: "5mu" } + ] + } +]; +function sortVariables(vars, whitelistedVariables) { + const varMap = new Map(vars.map((v) => [v, unifiedLatexUtilPrintRaw.printRaw(v)])); + const varNames = Array.from(new Set(varMap.values())); + varNames.sort(); + const nameToPos = whitelistedVariables ? new Map(whitelistedVariables.map((v, i) => [unifiedLatexUtilPrintRaw.printRaw(v), i])) : new Map(varNames.map((name, i) => [name, i])); + return new Map( + Array.from(varMap.entries()).map(([variable, name]) => { + return [variable, nameToPos.get(name) ?? -1]; + }) + ); +} +function processLine(line, numVars, varOrder, hasEquals, hasAnnotation) { + const ret = []; + if (line.equation) { + const nonVarItems = line.equation.left.filter( + (item) => item.variable == null + ); + const varItems = line.equation.left.filter( + (item) => item.variable != null + ); + let nonVarTerm = null; + if (nonVarItems.length === 1) { + nonVarTerm = nonVarItems[0]; + } else if (nonVarItems.length > 1) { + nonVarTerm = { + ...nonVarItems[0], + content: nonVarItems[0].content.concat( + nonVarItems.slice(1).flatMap((item) => { + if (item.op) { + return [item.op, ...item.content]; + } + return [PLUS, ...item.content]; + }) + ) + }; + } + const allItems = nonVarTerm ? varItems.concat(nonVarTerm) : varItems; + const indexToItem = new Map( + allItems.map((item) => { + if (item.variable == null) { + return [numVars - 1, item]; + } + return [varOrder.get(item.variable), item]; + }) + ); + let isFirstItem = true; + for (let i = 0; i < numVars; i++) { + const item = indexToItem.get(i); + if (item) { + if (isFirstItem && (unifiedLatexUtilMatch.match.string(item.op, "+") || item.op == null)) { + ret.push([]); + ret.push(item.content); + } else { + ret.push([item.op || PLUS]); + ret.push(item.content); + } + isFirstItem = false; + } else { + ret.push([]); + ret.push([]); + } + } + if (hasEquals) { + const equalsPart = (line.equation.equals ? [line.equation.equals] : []).concat(line.equation.right); + ret.push(equalsPart); + } + } + if (hasAnnotation) { + ret.push(line.annotation ? line.annotation.content : []); + } + return ret; +} +function arraySpecToSpacedArraySpec(spec, hasAnnotation) { + const annotationSpec = hasAnnotation ? spec.charAt(spec.length - 1) : ""; + const bodySpec = hasAnnotation ? spec.slice(0, spec.length - 1) : spec; + const bodyStrings = Array.from(bodySpec).map((x) => [ + { type: "string", content: x } + ]); + const body = unifiedLatexUtilSplit.arrayJoin(bodyStrings, COLUMN_KERN_ADJUSTMENT); + return annotationSpec ? body.concat({ type: "string", content: annotationSpec }) : body; +} +function extractVariables(nodes) { + return nodes.flatMap((node) => { + if (node.type === "line" && node.equation) { + return extractVariables(node.equation.left); + } + if (node.type === "equation") { + return node.left.flatMap( + (item) => item.variable ? [item.variable] : [] + ); + } + if (node.type === "item") { + return node.variable ? [node.variable] : []; + } + return []; + }); +} +function normalizeVariableWhitelist(vars) { + if (!vars) { + return null; + } + const normalized = vars.map( + (v) => typeof v === "string" ? { type: "string", content: v } : v + ); + const ret = normalized.filter( + (v) => (unifiedLatexUtilMatch.match.anyMacro(v) || unifiedLatexUtilMatch.match.anyString(v)) && !unifiedLatexUtilMatch.match.string(v, " ") && !unifiedLatexUtilMatch.match.whitespace(v) + ); + return ret; +} +function systemeContentsToArray(nodes, options) { + nodes = index.structuredClone(nodes); + unifiedLatexUtilComments.deleteComments(nodes); + const { properSpacing = true, whitelistedVariables } = options || {}; + const coercedWhitelistedVariables = normalizeVariableWhitelist(whitelistedVariables); + const systemeAst = parse(nodes, { whitelistedVariables }); + const vars = extractVariables(systemeAst); + const varOrder = sortVariables(vars, coercedWhitelistedVariables); + let numVars = coercedWhitelistedVariables ? coercedWhitelistedVariables.length : Math.max(...Array.from(varOrder.values())) + 1; + if (systemeAst.some((line) => { + if (line.equation) { + return line.equation.left.some((item) => item.variable == null); + } + })) { + numVars += 1; + } + const hasEquals = systemeAst.some( + (line) => line.equation && line.equation.equals + ); + const hasAnnotation = systemeAst.some((line) => line.annotation); + let rows = systemeAst.map( + (line) => processLine(line, numVars, varOrder, hasEquals, hasAnnotation) + ); + const noLeadingOperation = rows.every((row) => row[0].length === 0); + let arraySignature = Array.from({ length: numVars }, () => "cr").join(""); + if (noLeadingOperation) { + arraySignature = arraySignature.slice(1); + rows = rows.map((row) => row.slice(1)); + } + if (hasEquals) { + arraySignature += "l"; + } + if (hasAnnotation) { + arraySignature += "l"; + rows = rows.map((row) => { + if (row[row.length - 1].length === 0) { + return row; + } + return [ + ...row.slice(0, row.length - 1), + [QUAD, { type: "whitespace" }, ...row[row.length - 1]] + ]; + }); + } + const arraySignatureWithSpacing = properSpacing ? arraySpecToSpacedArraySpec(arraySignature, hasAnnotation) : [{ type: "string", content: arraySignature }]; + const bodyRows = rows.map((row) => unifiedLatexUtilSplit.arrayJoin(row, AMP)); + const body = unifiedLatexUtilSplit.arrayJoin(bodyRows, SEP); + const ret = { + type: "environment", + env: "array", + args: [ + { + type: "argument", + openMark: "{", + closeMark: "}", + content: arraySignatureWithSpacing + } + ], + content: body + }; + return ret; +} +function attachSystemeSettingsAsRenderInfo(ast) { + const systemeMatcher = unifiedLatexUtilMatch.match.createMacroMatcher(["systeme", "sysdelim"]); + unifiedLatexUtilVisit.visit( + ast, + (nodes, info) => { + if (!info.context.inMathMode || !nodes.some(systemeMatcher)) { + return; + } + const systemeLocations = nodes.flatMap( + (node, i) => unifiedLatexUtilMatch.match.macro(node, "systeme") ? i : [] + ); + const sysdelimLocations = nodes.flatMap( + (node, i) => unifiedLatexUtilMatch.match.macro(node, "sysdelim") ? i : [] + ); + if (systemeLocations.length === 0 || sysdelimLocations.length === 0) { + return; + } + for (const i of systemeLocations) { + const lastSysdelim = Math.max( + ...sysdelimLocations.filter((loc) => loc < i) + ); + if (lastSysdelim >= 0) { + const node = nodes[i]; + const sysdelimMacro = nodes[lastSysdelim]; + if (!unifiedLatexUtilMatch.match.anyMacro(sysdelimMacro)) { + throw new Error( + `Expecting sysdelim macro but found "${unifiedLatexUtilPrintRaw.printRaw( + sysdelimMacro + )}"` + ); + } + const args = unifiedLatexUtilArguments.getArgsContent(sysdelimMacro); + unifiedLatexUtilRenderInfo.updateRenderInfo(node, { sysdelims: args }); + } + } + }, + { + test: Array.isArray, + includeArrays: true + } + ); +} +exports.environments = provides.environments; +exports.macros = provides.macros; +exports.attachSystemeSettingsAsRenderInfo = attachSystemeSettingsAsRenderInfo; +exports.extractVariables = extractVariables; +exports.parse = parse; +exports.printRaw = printRaw; +exports.systemeContentsToArray = systemeContentsToArray; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs.map new file mode 100644 index 0000000..97a0bbb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/systeme/libs/parser.ts","../../../package/systeme/libs/print-raw.ts","../../../package/systeme/libs/systeme.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as SystemeSpec from \"./types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { SystemePegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\ntype SystemeMatchers = {\n at?: string;\n equals?: string;\n equationSeparator?: string;\n mathOperations?: string[];\n whitelistedVariables?: (string | Ast.String | Ast.Macro)[];\n};\n\nfunction createMatchers({\n at = \"@\",\n equals = \"=\",\n equationSeparator = \",\",\n mathOperations = [\"+\", \"-\"],\n whitelistedVariables,\n}: SystemeMatchers = {}) {\n let isVar: (node: Ast.Node) => boolean = (node: Ast.Node) =>\n match.anyString(node) && !!node.content.match(/[a-zA-Z]/);\n if (whitelistedVariables) {\n // Unwrap all strings\n whitelistedVariables = whitelistedVariables.map((v) =>\n match.anyString(v) ? v.content : v\n );\n const macros = whitelistedVariables.filter((v) =>\n match.anyMacro(v)\n ) as Ast.Macro[];\n const strings = whitelistedVariables.filter(\n (v) => typeof v === \"string\"\n ) as string[];\n const macroHash = Object.fromEntries(macros.map((v) => [v.content, v]));\n const stringHash = Object.fromEntries(strings.map((s) => [s, s]));\n const macroMatcher = match.createMacroMatcher(macroHash);\n isVar = (node: Ast.Node) =>\n macroMatcher(node) ||\n (match.anyString(node) && !!stringHash[node.content]);\n }\n return {\n isSep: (node: Ast.Node) => match.string(node, equationSeparator),\n isVar,\n isOperation: (node: Ast.Node) =>\n mathOperations.some((op) => match.string(node, op)),\n isEquals: (node: Ast.Node) => match.string(node, equals),\n isAt: (node: Ast.Node) => match.string(node, at),\n isSubscript: (node: Ast.Node) =>\n match.macro(node, \"_\") && node.escapeToken === \"\",\n isWhitespace: match.whitespace,\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the contents of the `\\systeme{...}` macro\n */\nexport function parse(\n ast: Ast.Node[],\n options?: SystemeMatchers\n): SystemeSpec.Line[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 SystemePegParser.parse(\n ast,\n createMatchers(options || {})\n ) as SystemeSpec.Line[];\n}\n","import { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport * as SystemeSpec from \"./types\";\n\n/**\n * Print an `systeme` argument specification AST to a string.\n */\nexport function printRaw(node: SystemeSpec.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 \"annotation\":\n return `${latexPrintRaw(node.marker)}${latexPrintRaw(\n node.content\n )}`;\n case \"item\":\n return `${node.op ? latexPrintRaw(node.op) : \"\"}${latexPrintRaw(\n node.content\n )}`;\n case \"equation\":\n const left = node.left.map((n) => printRaw(n)).join(\"\");\n const right = latexPrintRaw(node.right);\n const equals = node.equals ? latexPrintRaw(node.equals) : \"\";\n return `${left}${equals}${right}`;\n case \"line\":\n const equation = node.equation ? printRaw(node.equation) : \"\";\n const annotation = node.annotation ? printRaw(node.annotation) : \"\";\n const sep = node.sep ? latexPrintRaw(node.sep) : \"\";\n\n const body = `${equation}${annotation}${sep}`;\n if (node.trailingComment) {\n return latexPrintRaw([body, node.trailingComment]);\n }\n\n return body;\n\n default:\n console.warn(\n `Unknown node type \"${(node as any).type}\" for node`,\n node\n );\n return \"\";\n }\n}\n","import * as SystemeSpec from \"./types\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { arrayJoin } from \"@unified-latex/unified-latex-util-split\";\nimport { parse } from \"./parser\";\nimport { structuredClone } from \"@unified-latex/structured-clone\";\nimport { deleteComments } from \"@unified-latex/unified-latex-util-comments\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { getArgsContent } from \"@unified-latex/unified-latex-util-arguments\";\n\nconst AMP: Ast.String = { type: \"string\", content: \"&\" };\nconst SEP: Ast.Macro = { type: \"macro\", content: \"\\\\\" };\nconst QUAD: Ast.Macro = { type: \"macro\", content: \"quad\" };\nconst PLUS: Ast.String = { type: \"string\", content: \"+\" };\nconst COLUMN_KERN_ADJUSTMENT: Ast.Node[] = [\n { type: \"string\", content: \"@\" },\n {\n type: \"group\",\n content: [\n { type: \"macro\", content: \"mkern\" },\n { type: \"string\", content: \"5mu\" },\n ],\n },\n];\n\n/**\n * Return a map giving the sorted index of each variable in `vars`. There\n * may be duplicated variables in `vars`. The map will send duplicates to the same index.\n *\n * @param {Ast.Node[][]} vars\n * @returns\n */\nfunction sortVariables(\n vars: Ast.Node[][],\n whitelistedVariables?: Ast.Node[] | null\n) {\n const varMap = new Map(vars.map((v) => [v, printRaw(v)]));\n const varNames = Array.from(new Set(varMap.values()));\n varNames.sort();\n const nameToPos = whitelistedVariables\n ? new Map(whitelistedVariables.map((v, i) => [printRaw(v), i]))\n : new Map(varNames.map((name, i) => [name, i]));\n\n return new Map(\n Array.from(varMap.entries()).map(([variable, name]) => {\n return [variable, nameToPos.get(name) ?? -1];\n })\n );\n}\n\n/**\n * Make an array of arrays representing the operation/content of each item in an equation\n * + the annotation. The return value is suitable to be joined with `&` for the body of an array.\n */\nfunction processLine(\n line: SystemeSpec.Line,\n numVars: number,\n varOrder: Map,\n hasEquals: boolean,\n hasAnnotation: boolean\n) {\n const ret: Ast.Node[][] = [];\n if (line.equation) {\n // We need to combine all non-var items into a single expression\n const nonVarItems = line.equation.left.filter(\n (item) => item.variable == null\n );\n const varItems = line.equation.left.filter(\n (item) => item.variable != null\n );\n let nonVarTerm: SystemeSpec.Item | null = null;\n if (nonVarItems.length === 1) {\n nonVarTerm = nonVarItems[0];\n } else if (nonVarItems.length > 1) {\n // We need to combine all the items. We do so by constructing a new item with the rest of the item's contents\n // added on the back\n nonVarTerm = {\n ...nonVarItems[0],\n content: nonVarItems[0].content.concat(\n nonVarItems.slice(1).flatMap((item) => {\n if (item.op) {\n return [item.op, ...item.content];\n }\n return [PLUS, ...item.content];\n })\n ),\n };\n }\n\n const allItems = nonVarTerm ? varItems.concat(nonVarTerm) : varItems;\n\n const indexToItem = new Map(\n allItems.map((item) => {\n if (item.variable == null) {\n return [numVars - 1, item];\n }\n return [varOrder.get(item.variable), item];\n })\n );\n\n let isFirstItem = true;\n for (let i = 0; i < numVars; i++) {\n const item = indexToItem.get(i);\n if (item) {\n if (\n isFirstItem &&\n (match.string(item.op, \"+\") || item.op == null)\n ) {\n // If the first item starts with a plus or doesn't have a starting operation,\n // we don't use a starting symbol.\n ret.push([]);\n ret.push(item.content);\n } else {\n // If we are not the first item, we always push an operation\n ret.push([item.op || PLUS]);\n ret.push(item.content);\n }\n isFirstItem = false;\n } else {\n // If there is no item for this position, we push a blank operation and content\n ret.push([]);\n ret.push([]);\n }\n }\n // If we have an equals, we need to push its contents\n if (hasEquals) {\n const equalsPart = (\n line.equation.equals ? [line.equation.equals] : []\n ).concat(line.equation.right);\n ret.push(equalsPart);\n }\n }\n // If we have an annotation, we need to push it or a blank\n if (hasAnnotation) {\n ret.push(line.annotation ? line.annotation.content : []);\n }\n\n return ret;\n}\n\n/**\n * Add kerning information to the array specification. E.g. `crl` becomes `c@{\\mkern5mu}r@{\\mkern5mu}l`.\n * This is so the operations when typesetting a system of equations are properly spaced.\n */\nfunction arraySpecToSpacedArraySpec(spec: string, hasAnnotation?: boolean) {\n const annotationSpec = hasAnnotation ? spec.charAt(spec.length - 1) : \"\";\n const bodySpec = hasAnnotation ? spec.slice(0, spec.length - 1) : spec;\n\n const bodyStrings: Ast.Node[][] = Array.from(bodySpec).map((x) => [\n { type: \"string\", content: x },\n ]);\n const body = arrayJoin(bodyStrings, COLUMN_KERN_ADJUSTMENT);\n return annotationSpec\n ? body.concat({ type: \"string\", content: annotationSpec })\n : body;\n}\n\n/**\n * Extract the variables from a systeme system of equations.\n */\nexport function extractVariables(nodes: SystemeSpec.Node[]): Ast.Node[][] {\n return nodes.flatMap((node) => {\n if (node.type === \"line\" && node.equation) {\n return extractVariables(node.equation.left);\n }\n if (node.type === \"equation\") {\n return node.left.flatMap((item) =>\n item.variable ? [item.variable] : []\n );\n }\n if (node.type === \"item\") {\n return node.variable ? [node.variable] : [];\n }\n return [];\n });\n}\n\n/**\n * Remove any whitespace from the variable list (including an explicit \" \" string).\n * As well, filter out any non-macro/non-string items.\n */\nfunction normalizeVariableWhitelist(\n vars: (string | Ast.Node)[] | null | undefined\n) {\n if (!vars) {\n return null;\n }\n const normalized: Ast.Node[] = vars.map((v) =>\n typeof v === \"string\" ? { type: \"string\", content: v } : v\n );\n const ret = normalized.filter(\n (v) =>\n (match.anyMacro(v) || match.anyString(v)) &&\n !match.string(v, \" \") &&\n !match.whitespace(v)\n ) as (Ast.Macro | Ast.String)[];\n return ret;\n}\n\n/**\n * Lays out the contents of a \\systeme{...} macro as an array. This function sorts the variables\n * in alphabetical order and lays out any annotations. An `\\begin{array}...\\end{array}` environment\n * is returned.\n *\n * If `properSpacing=true` then kerning information will be included in the array specification to space\n * the operators correctly. This kerning information will make the specification long (and may make it incompatible\n * with KaTeX).\n *\n * An optional whitelist of variables may be supplied. If supplied, only listed items will count as variables and\n * the order of variable appearance will be the same as the order of the whitelisted variables.\n */\nexport function systemeContentsToArray(\n nodes: Ast.Node[],\n options?: {\n properSpacing?: boolean;\n whitelistedVariables?: (string | Ast.String | Ast.Macro)[];\n }\n) {\n nodes = structuredClone(nodes);\n deleteComments(nodes);\n const { properSpacing = true, whitelistedVariables } = options || {};\n const coercedWhitelistedVariables =\n normalizeVariableWhitelist(whitelistedVariables);\n const systemeAst = parse(nodes, { whitelistedVariables });\n const vars = extractVariables(systemeAst);\n const varOrder = sortVariables(vars, coercedWhitelistedVariables);\n let numVars = coercedWhitelistedVariables\n ? coercedWhitelistedVariables.length\n : Math.max(...Array.from(varOrder.values())) + 1;\n // If there are terms with no variable, we need a spot for them\n if (\n systemeAst.some((line) => {\n if (line.equation) {\n return line.equation.left.some((item) => item.variable == null);\n }\n })\n ) {\n numVars += 1;\n }\n const hasEquals = systemeAst.some(\n (line) => line.equation && line.equation.equals\n );\n const hasAnnotation = systemeAst.some((line) => line.annotation);\n\n let rows = systemeAst.map((line) =>\n processLine(line, numVars, varOrder, hasEquals, hasAnnotation)\n );\n // If we have no leading `-` signs (e.g., only leading `+` or bank signs)\n // We don't need space for the first operation to be stored\n const noLeadingOperation = rows.every((row) => row[0].length === 0);\n\n // Every item in an equation has a centered operation and a right-aligned variable part.\n let arraySignature = Array.from({ length: numVars }, () => \"cr\").join(\"\");\n if (noLeadingOperation) {\n // We might not have a leading operation on the first item(s)\n arraySignature = arraySignature.slice(1);\n rows = rows.map((row) => row.slice(1));\n }\n if (hasEquals) {\n // The part after the equals is left-aligned\n arraySignature += \"l\";\n }\n if (hasAnnotation) {\n // The annotation is left-aligned\n arraySignature += \"l\";\n // We also manually insert space in front of any annotation\n rows = rows.map((row) => {\n if (row[row.length - 1].length === 0) {\n return row;\n }\n return [\n ...row.slice(0, row.length - 1),\n [QUAD, { type: \"whitespace\" }, ...row[row.length - 1]],\n ];\n });\n }\n\n // By default, the array signature will put lots of space between items.\n // We can correct for that manually.\n const arraySignatureWithSpacing: Ast.Node[] = properSpacing\n ? arraySpecToSpacedArraySpec(arraySignature, hasAnnotation)\n : [{ type: \"string\", content: arraySignature }];\n\n const bodyRows = rows.map((row) => arrayJoin(row, AMP));\n const body = arrayJoin(bodyRows, SEP);\n\n const ret: Ast.Environment = {\n type: \"environment\",\n env: \"array\",\n args: [\n {\n type: \"argument\",\n openMark: \"{\",\n closeMark: \"}\",\n content: arraySignatureWithSpacing,\n },\n ],\n content: body,\n };\n\n return ret;\n}\n\n/**\n * Find any systeme definitions, e.g. `\\sysdelim{.}{.}`, and attach their information\n * to the renderInfo of of the systeme macros.\n *\n */\nexport function attachSystemeSettingsAsRenderInfo(ast: Ast.Ast) {\n const systemeMatcher = match.createMacroMatcher([\"systeme\", \"sysdelim\"]);\n\n visit(\n ast,\n (nodes, info) => {\n if (!info.context.inMathMode || !nodes.some(systemeMatcher)) {\n return;\n }\n // Find the positions of the systeme and sysdelim macros\n const systemeLocations = nodes.flatMap((node, i) =>\n match.macro(node, \"systeme\") ? i : []\n );\n const sysdelimLocations = nodes.flatMap((node, i) =>\n match.macro(node, \"sysdelim\") ? i : []\n );\n\n if (\n systemeLocations.length === 0 ||\n sysdelimLocations.length === 0\n ) {\n return;\n }\n\n for (const i of systemeLocations) {\n // Find any sysdelim macros that occur before\n const lastSysdelim = Math.max(\n ...sysdelimLocations.filter((loc) => loc < i)\n );\n if (lastSysdelim >= 0) {\n const node = nodes[i];\n const sysdelimMacro = nodes[lastSysdelim];\n if (!match.anyMacro(sysdelimMacro)) {\n throw new Error(\n `Expecting sysdelim macro but found \"${printRaw(\n sysdelimMacro\n )}\"`\n );\n }\n const args = getArgsContent(sysdelimMacro);\n updateRenderInfo(node, { sysdelims: args });\n }\n }\n },\n {\n test: Array.isArray,\n includeArrays: true,\n }\n );\n}\n"],"names":["match","decorateArrayForPegjs","SystemePegParser","latexPrintRaw","printRaw","arrayJoin","structuredClone","deleteComments","visit","getArgsContent","updateRenderInfo"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.d.ts new file mode 100644 index 0000000..5632dad --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.d.ts @@ -0,0 +1,6 @@ +export * from './provides'; +export * from './libs/parser'; +export * from './libs/print-raw'; +export * from './libs/types'; +export * from './libs/systeme'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js new file mode 100644 index 0000000..c91ca80 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js @@ -0,0 +1,331 @@ +import { e, m } from "../../provides-yGf6-zdY.js"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { decorateArrayForPegjs, SystemePegParser } from "@unified-latex/unified-latex-util-pegjs"; +import { printRaw as printRaw$1 } from "@unified-latex/unified-latex-util-print-raw"; +import { arrayJoin } from "@unified-latex/unified-latex-util-split"; +import { s as structuredClone } from "../../index-NHd3tQDq.js"; +import { deleteComments } from "@unified-latex/unified-latex-util-comments"; +import { visit } from "@unified-latex/unified-latex-util-visit"; +import { updateRenderInfo } from "@unified-latex/unified-latex-util-render-info"; +import { getArgsContent } from "@unified-latex/unified-latex-util-arguments"; +function createMatchers({ + at = "@", + equals = "=", + equationSeparator = ",", + mathOperations = ["+", "-"], + whitelistedVariables +} = {}) { + let isVar = (node) => match.anyString(node) && !!node.content.match(/[a-zA-Z]/); + if (whitelistedVariables) { + whitelistedVariables = whitelistedVariables.map( + (v) => match.anyString(v) ? v.content : v + ); + const macros = whitelistedVariables.filter( + (v) => match.anyMacro(v) + ); + const strings = whitelistedVariables.filter( + (v) => typeof v === "string" + ); + const macroHash = Object.fromEntries(macros.map((v) => [v.content, v])); + const stringHash = Object.fromEntries(strings.map((s) => [s, s])); + const macroMatcher = match.createMacroMatcher(macroHash); + isVar = (node) => macroMatcher(node) || match.anyString(node) && !!stringHash[node.content]; + } + return { + isSep: (node) => match.string(node, equationSeparator), + isVar, + isOperation: (node) => mathOperations.some((op) => match.string(node, op)), + isEquals: (node) => match.string(node, equals), + isAt: (node) => match.string(node, at), + isSubscript: (node) => match.macro(node, "_") && node.escapeToken === "", + isWhitespace: match.whitespace, + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parse(ast, options) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return SystemePegParser.parse( + ast, + createMatchers(options || {}) + ); +} +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + switch (node.type) { + case "annotation": + return `${printRaw$1(node.marker)}${printRaw$1( + node.content + )}`; + case "item": + return `${node.op ? printRaw$1(node.op) : ""}${printRaw$1( + node.content + )}`; + case "equation": + const left = node.left.map((n) => printRaw(n)).join(""); + const right = printRaw$1(node.right); + const equals = node.equals ? printRaw$1(node.equals) : ""; + return `${left}${equals}${right}`; + case "line": + const equation = node.equation ? printRaw(node.equation) : ""; + const annotation = node.annotation ? printRaw(node.annotation) : ""; + const sep = node.sep ? printRaw$1(node.sep) : ""; + const body = `${equation}${annotation}${sep}`; + if (node.trailingComment) { + return printRaw$1([body, node.trailingComment]); + } + return body; + default: + console.warn( + `Unknown node type "${node.type}" for node`, + node + ); + return ""; + } +} +const AMP = { type: "string", content: "&" }; +const SEP = { type: "macro", content: "\\" }; +const QUAD = { type: "macro", content: "quad" }; +const PLUS = { type: "string", content: "+" }; +const COLUMN_KERN_ADJUSTMENT = [ + { type: "string", content: "@" }, + { + type: "group", + content: [ + { type: "macro", content: "mkern" }, + { type: "string", content: "5mu" } + ] + } +]; +function sortVariables(vars, whitelistedVariables) { + const varMap = new Map(vars.map((v) => [v, printRaw$1(v)])); + const varNames = Array.from(new Set(varMap.values())); + varNames.sort(); + const nameToPos = whitelistedVariables ? new Map(whitelistedVariables.map((v, i) => [printRaw$1(v), i])) : new Map(varNames.map((name, i) => [name, i])); + return new Map( + Array.from(varMap.entries()).map(([variable, name]) => { + return [variable, nameToPos.get(name) ?? -1]; + }) + ); +} +function processLine(line, numVars, varOrder, hasEquals, hasAnnotation) { + const ret = []; + if (line.equation) { + const nonVarItems = line.equation.left.filter( + (item) => item.variable == null + ); + const varItems = line.equation.left.filter( + (item) => item.variable != null + ); + let nonVarTerm = null; + if (nonVarItems.length === 1) { + nonVarTerm = nonVarItems[0]; + } else if (nonVarItems.length > 1) { + nonVarTerm = { + ...nonVarItems[0], + content: nonVarItems[0].content.concat( + nonVarItems.slice(1).flatMap((item) => { + if (item.op) { + return [item.op, ...item.content]; + } + return [PLUS, ...item.content]; + }) + ) + }; + } + const allItems = nonVarTerm ? varItems.concat(nonVarTerm) : varItems; + const indexToItem = new Map( + allItems.map((item) => { + if (item.variable == null) { + return [numVars - 1, item]; + } + return [varOrder.get(item.variable), item]; + }) + ); + let isFirstItem = true; + for (let i = 0; i < numVars; i++) { + const item = indexToItem.get(i); + if (item) { + if (isFirstItem && (match.string(item.op, "+") || item.op == null)) { + ret.push([]); + ret.push(item.content); + } else { + ret.push([item.op || PLUS]); + ret.push(item.content); + } + isFirstItem = false; + } else { + ret.push([]); + ret.push([]); + } + } + if (hasEquals) { + const equalsPart = (line.equation.equals ? [line.equation.equals] : []).concat(line.equation.right); + ret.push(equalsPart); + } + } + if (hasAnnotation) { + ret.push(line.annotation ? line.annotation.content : []); + } + return ret; +} +function arraySpecToSpacedArraySpec(spec, hasAnnotation) { + const annotationSpec = hasAnnotation ? spec.charAt(spec.length - 1) : ""; + const bodySpec = hasAnnotation ? spec.slice(0, spec.length - 1) : spec; + const bodyStrings = Array.from(bodySpec).map((x) => [ + { type: "string", content: x } + ]); + const body = arrayJoin(bodyStrings, COLUMN_KERN_ADJUSTMENT); + return annotationSpec ? body.concat({ type: "string", content: annotationSpec }) : body; +} +function extractVariables(nodes) { + return nodes.flatMap((node) => { + if (node.type === "line" && node.equation) { + return extractVariables(node.equation.left); + } + if (node.type === "equation") { + return node.left.flatMap( + (item) => item.variable ? [item.variable] : [] + ); + } + if (node.type === "item") { + return node.variable ? [node.variable] : []; + } + return []; + }); +} +function normalizeVariableWhitelist(vars) { + if (!vars) { + return null; + } + const normalized = vars.map( + (v) => typeof v === "string" ? { type: "string", content: v } : v + ); + const ret = normalized.filter( + (v) => (match.anyMacro(v) || match.anyString(v)) && !match.string(v, " ") && !match.whitespace(v) + ); + return ret; +} +function systemeContentsToArray(nodes, options) { + nodes = structuredClone(nodes); + deleteComments(nodes); + const { properSpacing = true, whitelistedVariables } = options || {}; + const coercedWhitelistedVariables = normalizeVariableWhitelist(whitelistedVariables); + const systemeAst = parse(nodes, { whitelistedVariables }); + const vars = extractVariables(systemeAst); + const varOrder = sortVariables(vars, coercedWhitelistedVariables); + let numVars = coercedWhitelistedVariables ? coercedWhitelistedVariables.length : Math.max(...Array.from(varOrder.values())) + 1; + if (systemeAst.some((line) => { + if (line.equation) { + return line.equation.left.some((item) => item.variable == null); + } + })) { + numVars += 1; + } + const hasEquals = systemeAst.some( + (line) => line.equation && line.equation.equals + ); + const hasAnnotation = systemeAst.some((line) => line.annotation); + let rows = systemeAst.map( + (line) => processLine(line, numVars, varOrder, hasEquals, hasAnnotation) + ); + const noLeadingOperation = rows.every((row) => row[0].length === 0); + let arraySignature = Array.from({ length: numVars }, () => "cr").join(""); + if (noLeadingOperation) { + arraySignature = arraySignature.slice(1); + rows = rows.map((row) => row.slice(1)); + } + if (hasEquals) { + arraySignature += "l"; + } + if (hasAnnotation) { + arraySignature += "l"; + rows = rows.map((row) => { + if (row[row.length - 1].length === 0) { + return row; + } + return [ + ...row.slice(0, row.length - 1), + [QUAD, { type: "whitespace" }, ...row[row.length - 1]] + ]; + }); + } + const arraySignatureWithSpacing = properSpacing ? arraySpecToSpacedArraySpec(arraySignature, hasAnnotation) : [{ type: "string", content: arraySignature }]; + const bodyRows = rows.map((row) => arrayJoin(row, AMP)); + const body = arrayJoin(bodyRows, SEP); + const ret = { + type: "environment", + env: "array", + args: [ + { + type: "argument", + openMark: "{", + closeMark: "}", + content: arraySignatureWithSpacing + } + ], + content: body + }; + return ret; +} +function attachSystemeSettingsAsRenderInfo(ast) { + const systemeMatcher = match.createMacroMatcher(["systeme", "sysdelim"]); + visit( + ast, + (nodes, info) => { + if (!info.context.inMathMode || !nodes.some(systemeMatcher)) { + return; + } + const systemeLocations = nodes.flatMap( + (node, i) => match.macro(node, "systeme") ? i : [] + ); + const sysdelimLocations = nodes.flatMap( + (node, i) => match.macro(node, "sysdelim") ? i : [] + ); + if (systemeLocations.length === 0 || sysdelimLocations.length === 0) { + return; + } + for (const i of systemeLocations) { + const lastSysdelim = Math.max( + ...sysdelimLocations.filter((loc) => loc < i) + ); + if (lastSysdelim >= 0) { + const node = nodes[i]; + const sysdelimMacro = nodes[lastSysdelim]; + if (!match.anyMacro(sysdelimMacro)) { + throw new Error( + `Expecting sysdelim macro but found "${printRaw$1( + sysdelimMacro + )}"` + ); + } + const args = getArgsContent(sysdelimMacro); + updateRenderInfo(node, { sysdelims: args }); + } + } + }, + { + test: Array.isArray, + includeArrays: true + } + ); +} +export { + attachSystemeSettingsAsRenderInfo, + e as environments, + extractVariables, + m as macros, + parse, + printRaw, + systemeContentsToArray +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js.map new file mode 100644 index 0000000..f2db1f1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/systeme/libs/parser.ts","../../../package/systeme/libs/print-raw.ts","../../../package/systeme/libs/systeme.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as SystemeSpec from \"./types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { SystemePegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\ntype SystemeMatchers = {\n at?: string;\n equals?: string;\n equationSeparator?: string;\n mathOperations?: string[];\n whitelistedVariables?: (string | Ast.String | Ast.Macro)[];\n};\n\nfunction createMatchers({\n at = \"@\",\n equals = \"=\",\n equationSeparator = \",\",\n mathOperations = [\"+\", \"-\"],\n whitelistedVariables,\n}: SystemeMatchers = {}) {\n let isVar: (node: Ast.Node) => boolean = (node: Ast.Node) =>\n match.anyString(node) && !!node.content.match(/[a-zA-Z]/);\n if (whitelistedVariables) {\n // Unwrap all strings\n whitelistedVariables = whitelistedVariables.map((v) =>\n match.anyString(v) ? v.content : v\n );\n const macros = whitelistedVariables.filter((v) =>\n match.anyMacro(v)\n ) as Ast.Macro[];\n const strings = whitelistedVariables.filter(\n (v) => typeof v === \"string\"\n ) as string[];\n const macroHash = Object.fromEntries(macros.map((v) => [v.content, v]));\n const stringHash = Object.fromEntries(strings.map((s) => [s, s]));\n const macroMatcher = match.createMacroMatcher(macroHash);\n isVar = (node: Ast.Node) =>\n macroMatcher(node) ||\n (match.anyString(node) && !!stringHash[node.content]);\n }\n return {\n isSep: (node: Ast.Node) => match.string(node, equationSeparator),\n isVar,\n isOperation: (node: Ast.Node) =>\n mathOperations.some((op) => match.string(node, op)),\n isEquals: (node: Ast.Node) => match.string(node, equals),\n isAt: (node: Ast.Node) => match.string(node, at),\n isSubscript: (node: Ast.Node) =>\n match.macro(node, \"_\") && node.escapeToken === \"\",\n isWhitespace: match.whitespace,\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the contents of the `\\systeme{...}` macro\n */\nexport function parse(\n ast: Ast.Node[],\n options?: SystemeMatchers\n): SystemeSpec.Line[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 SystemePegParser.parse(\n ast,\n createMatchers(options || {})\n ) as SystemeSpec.Line[];\n}\n","import { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport * as SystemeSpec from \"./types\";\n\n/**\n * Print an `systeme` argument specification AST to a string.\n */\nexport function printRaw(node: SystemeSpec.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 \"annotation\":\n return `${latexPrintRaw(node.marker)}${latexPrintRaw(\n node.content\n )}`;\n case \"item\":\n return `${node.op ? latexPrintRaw(node.op) : \"\"}${latexPrintRaw(\n node.content\n )}`;\n case \"equation\":\n const left = node.left.map((n) => printRaw(n)).join(\"\");\n const right = latexPrintRaw(node.right);\n const equals = node.equals ? latexPrintRaw(node.equals) : \"\";\n return `${left}${equals}${right}`;\n case \"line\":\n const equation = node.equation ? printRaw(node.equation) : \"\";\n const annotation = node.annotation ? printRaw(node.annotation) : \"\";\n const sep = node.sep ? latexPrintRaw(node.sep) : \"\";\n\n const body = `${equation}${annotation}${sep}`;\n if (node.trailingComment) {\n return latexPrintRaw([body, node.trailingComment]);\n }\n\n return body;\n\n default:\n console.warn(\n `Unknown node type \"${(node as any).type}\" for node`,\n node\n );\n return \"\";\n }\n}\n","import * as SystemeSpec from \"./types\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { arrayJoin } from \"@unified-latex/unified-latex-util-split\";\nimport { parse } from \"./parser\";\nimport { structuredClone } from \"@unified-latex/structured-clone\";\nimport { deleteComments } from \"@unified-latex/unified-latex-util-comments\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { getArgsContent } from \"@unified-latex/unified-latex-util-arguments\";\n\nconst AMP: Ast.String = { type: \"string\", content: \"&\" };\nconst SEP: Ast.Macro = { type: \"macro\", content: \"\\\\\" };\nconst QUAD: Ast.Macro = { type: \"macro\", content: \"quad\" };\nconst PLUS: Ast.String = { type: \"string\", content: \"+\" };\nconst COLUMN_KERN_ADJUSTMENT: Ast.Node[] = [\n { type: \"string\", content: \"@\" },\n {\n type: \"group\",\n content: [\n { type: \"macro\", content: \"mkern\" },\n { type: \"string\", content: \"5mu\" },\n ],\n },\n];\n\n/**\n * Return a map giving the sorted index of each variable in `vars`. There\n * may be duplicated variables in `vars`. The map will send duplicates to the same index.\n *\n * @param {Ast.Node[][]} vars\n * @returns\n */\nfunction sortVariables(\n vars: Ast.Node[][],\n whitelistedVariables?: Ast.Node[] | null\n) {\n const varMap = new Map(vars.map((v) => [v, printRaw(v)]));\n const varNames = Array.from(new Set(varMap.values()));\n varNames.sort();\n const nameToPos = whitelistedVariables\n ? new Map(whitelistedVariables.map((v, i) => [printRaw(v), i]))\n : new Map(varNames.map((name, i) => [name, i]));\n\n return new Map(\n Array.from(varMap.entries()).map(([variable, name]) => {\n return [variable, nameToPos.get(name) ?? -1];\n })\n );\n}\n\n/**\n * Make an array of arrays representing the operation/content of each item in an equation\n * + the annotation. The return value is suitable to be joined with `&` for the body of an array.\n */\nfunction processLine(\n line: SystemeSpec.Line,\n numVars: number,\n varOrder: Map,\n hasEquals: boolean,\n hasAnnotation: boolean\n) {\n const ret: Ast.Node[][] = [];\n if (line.equation) {\n // We need to combine all non-var items into a single expression\n const nonVarItems = line.equation.left.filter(\n (item) => item.variable == null\n );\n const varItems = line.equation.left.filter(\n (item) => item.variable != null\n );\n let nonVarTerm: SystemeSpec.Item | null = null;\n if (nonVarItems.length === 1) {\n nonVarTerm = nonVarItems[0];\n } else if (nonVarItems.length > 1) {\n // We need to combine all the items. We do so by constructing a new item with the rest of the item's contents\n // added on the back\n nonVarTerm = {\n ...nonVarItems[0],\n content: nonVarItems[0].content.concat(\n nonVarItems.slice(1).flatMap((item) => {\n if (item.op) {\n return [item.op, ...item.content];\n }\n return [PLUS, ...item.content];\n })\n ),\n };\n }\n\n const allItems = nonVarTerm ? varItems.concat(nonVarTerm) : varItems;\n\n const indexToItem = new Map(\n allItems.map((item) => {\n if (item.variable == null) {\n return [numVars - 1, item];\n }\n return [varOrder.get(item.variable), item];\n })\n );\n\n let isFirstItem = true;\n for (let i = 0; i < numVars; i++) {\n const item = indexToItem.get(i);\n if (item) {\n if (\n isFirstItem &&\n (match.string(item.op, \"+\") || item.op == null)\n ) {\n // If the first item starts with a plus or doesn't have a starting operation,\n // we don't use a starting symbol.\n ret.push([]);\n ret.push(item.content);\n } else {\n // If we are not the first item, we always push an operation\n ret.push([item.op || PLUS]);\n ret.push(item.content);\n }\n isFirstItem = false;\n } else {\n // If there is no item for this position, we push a blank operation and content\n ret.push([]);\n ret.push([]);\n }\n }\n // If we have an equals, we need to push its contents\n if (hasEquals) {\n const equalsPart = (\n line.equation.equals ? [line.equation.equals] : []\n ).concat(line.equation.right);\n ret.push(equalsPart);\n }\n }\n // If we have an annotation, we need to push it or a blank\n if (hasAnnotation) {\n ret.push(line.annotation ? line.annotation.content : []);\n }\n\n return ret;\n}\n\n/**\n * Add kerning information to the array specification. E.g. `crl` becomes `c@{\\mkern5mu}r@{\\mkern5mu}l`.\n * This is so the operations when typesetting a system of equations are properly spaced.\n */\nfunction arraySpecToSpacedArraySpec(spec: string, hasAnnotation?: boolean) {\n const annotationSpec = hasAnnotation ? spec.charAt(spec.length - 1) : \"\";\n const bodySpec = hasAnnotation ? spec.slice(0, spec.length - 1) : spec;\n\n const bodyStrings: Ast.Node[][] = Array.from(bodySpec).map((x) => [\n { type: \"string\", content: x },\n ]);\n const body = arrayJoin(bodyStrings, COLUMN_KERN_ADJUSTMENT);\n return annotationSpec\n ? body.concat({ type: \"string\", content: annotationSpec })\n : body;\n}\n\n/**\n * Extract the variables from a systeme system of equations.\n */\nexport function extractVariables(nodes: SystemeSpec.Node[]): Ast.Node[][] {\n return nodes.flatMap((node) => {\n if (node.type === \"line\" && node.equation) {\n return extractVariables(node.equation.left);\n }\n if (node.type === \"equation\") {\n return node.left.flatMap((item) =>\n item.variable ? [item.variable] : []\n );\n }\n if (node.type === \"item\") {\n return node.variable ? [node.variable] : [];\n }\n return [];\n });\n}\n\n/**\n * Remove any whitespace from the variable list (including an explicit \" \" string).\n * As well, filter out any non-macro/non-string items.\n */\nfunction normalizeVariableWhitelist(\n vars: (string | Ast.Node)[] | null | undefined\n) {\n if (!vars) {\n return null;\n }\n const normalized: Ast.Node[] = vars.map((v) =>\n typeof v === \"string\" ? { type: \"string\", content: v } : v\n );\n const ret = normalized.filter(\n (v) =>\n (match.anyMacro(v) || match.anyString(v)) &&\n !match.string(v, \" \") &&\n !match.whitespace(v)\n ) as (Ast.Macro | Ast.String)[];\n return ret;\n}\n\n/**\n * Lays out the contents of a \\systeme{...} macro as an array. This function sorts the variables\n * in alphabetical order and lays out any annotations. An `\\begin{array}...\\end{array}` environment\n * is returned.\n *\n * If `properSpacing=true` then kerning information will be included in the array specification to space\n * the operators correctly. This kerning information will make the specification long (and may make it incompatible\n * with KaTeX).\n *\n * An optional whitelist of variables may be supplied. If supplied, only listed items will count as variables and\n * the order of variable appearance will be the same as the order of the whitelisted variables.\n */\nexport function systemeContentsToArray(\n nodes: Ast.Node[],\n options?: {\n properSpacing?: boolean;\n whitelistedVariables?: (string | Ast.String | Ast.Macro)[];\n }\n) {\n nodes = structuredClone(nodes);\n deleteComments(nodes);\n const { properSpacing = true, whitelistedVariables } = options || {};\n const coercedWhitelistedVariables =\n normalizeVariableWhitelist(whitelistedVariables);\n const systemeAst = parse(nodes, { whitelistedVariables });\n const vars = extractVariables(systemeAst);\n const varOrder = sortVariables(vars, coercedWhitelistedVariables);\n let numVars = coercedWhitelistedVariables\n ? coercedWhitelistedVariables.length\n : Math.max(...Array.from(varOrder.values())) + 1;\n // If there are terms with no variable, we need a spot for them\n if (\n systemeAst.some((line) => {\n if (line.equation) {\n return line.equation.left.some((item) => item.variable == null);\n }\n })\n ) {\n numVars += 1;\n }\n const hasEquals = systemeAst.some(\n (line) => line.equation && line.equation.equals\n );\n const hasAnnotation = systemeAst.some((line) => line.annotation);\n\n let rows = systemeAst.map((line) =>\n processLine(line, numVars, varOrder, hasEquals, hasAnnotation)\n );\n // If we have no leading `-` signs (e.g., only leading `+` or bank signs)\n // We don't need space for the first operation to be stored\n const noLeadingOperation = rows.every((row) => row[0].length === 0);\n\n // Every item in an equation has a centered operation and a right-aligned variable part.\n let arraySignature = Array.from({ length: numVars }, () => \"cr\").join(\"\");\n if (noLeadingOperation) {\n // We might not have a leading operation on the first item(s)\n arraySignature = arraySignature.slice(1);\n rows = rows.map((row) => row.slice(1));\n }\n if (hasEquals) {\n // The part after the equals is left-aligned\n arraySignature += \"l\";\n }\n if (hasAnnotation) {\n // The annotation is left-aligned\n arraySignature += \"l\";\n // We also manually insert space in front of any annotation\n rows = rows.map((row) => {\n if (row[row.length - 1].length === 0) {\n return row;\n }\n return [\n ...row.slice(0, row.length - 1),\n [QUAD, { type: \"whitespace\" }, ...row[row.length - 1]],\n ];\n });\n }\n\n // By default, the array signature will put lots of space between items.\n // We can correct for that manually.\n const arraySignatureWithSpacing: Ast.Node[] = properSpacing\n ? arraySpecToSpacedArraySpec(arraySignature, hasAnnotation)\n : [{ type: \"string\", content: arraySignature }];\n\n const bodyRows = rows.map((row) => arrayJoin(row, AMP));\n const body = arrayJoin(bodyRows, SEP);\n\n const ret: Ast.Environment = {\n type: \"environment\",\n env: \"array\",\n args: [\n {\n type: \"argument\",\n openMark: \"{\",\n closeMark: \"}\",\n content: arraySignatureWithSpacing,\n },\n ],\n content: body,\n };\n\n return ret;\n}\n\n/**\n * Find any systeme definitions, e.g. `\\sysdelim{.}{.}`, and attach their information\n * to the renderInfo of of the systeme macros.\n *\n */\nexport function attachSystemeSettingsAsRenderInfo(ast: Ast.Ast) {\n const systemeMatcher = match.createMacroMatcher([\"systeme\", \"sysdelim\"]);\n\n visit(\n ast,\n (nodes, info) => {\n if (!info.context.inMathMode || !nodes.some(systemeMatcher)) {\n return;\n }\n // Find the positions of the systeme and sysdelim macros\n const systemeLocations = nodes.flatMap((node, i) =>\n match.macro(node, \"systeme\") ? i : []\n );\n const sysdelimLocations = nodes.flatMap((node, i) =>\n match.macro(node, \"sysdelim\") ? i : []\n );\n\n if (\n systemeLocations.length === 0 ||\n sysdelimLocations.length === 0\n ) {\n return;\n }\n\n for (const i of systemeLocations) {\n // Find any sysdelim macros that occur before\n const lastSysdelim = Math.max(\n ...sysdelimLocations.filter((loc) => loc < i)\n );\n if (lastSysdelim >= 0) {\n const node = nodes[i];\n const sysdelimMacro = nodes[lastSysdelim];\n if (!match.anyMacro(sysdelimMacro)) {\n throw new Error(\n `Expecting sysdelim macro but found \"${printRaw(\n sysdelimMacro\n )}\"`\n );\n }\n const args = getArgsContent(sysdelimMacro);\n updateRenderInfo(node, { sysdelims: args });\n }\n }\n },\n {\n test: Array.isArray,\n includeArrays: true,\n }\n );\n}\n"],"names":["latexPrintRaw","printRaw"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/parser.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/parser.d.ts new file mode 100644 index 0000000..b483900 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/parser.d.ts @@ -0,0 +1,15 @@ +import * as Ast from "@unified-latex/unified-latex-types"; +import * as SystemeSpec from "./types"; +type SystemeMatchers = { + at?: string; + equals?: string; + equationSeparator?: string; + mathOperations?: string[]; + whitelistedVariables?: (string | Ast.String | Ast.Macro)[]; +}; +/** + * Parse the contents of the `\systeme{...}` macro + */ +export declare function parse(ast: Ast.Node[], options?: SystemeMatchers): SystemeSpec.Line[]; +export {}; +//# sourceMappingURL=parser.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/print-raw.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/print-raw.d.ts new file mode 100644 index 0000000..fc7ab3b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/print-raw.d.ts @@ -0,0 +1,6 @@ +import * as SystemeSpec from "./types"; +/** + * Print an `systeme` argument specification AST to a string. + */ +export declare function printRaw(node: SystemeSpec.Ast, root?: boolean): string; +//# sourceMappingURL=print-raw.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/systeme.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/systeme.d.ts new file mode 100644 index 0000000..c3362f0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/systeme.d.ts @@ -0,0 +1,29 @@ +import * as SystemeSpec from "./types"; +import * as Ast from "@unified-latex/unified-latex-types"; +/** + * Extract the variables from a systeme system of equations. + */ +export declare function extractVariables(nodes: SystemeSpec.Node[]): Ast.Node[][]; +/** + * Lays out the contents of a \systeme{...} macro as an array. This function sorts the variables + * in alphabetical order and lays out any annotations. An `\begin{array}...\end{array}` environment + * is returned. + * + * If `properSpacing=true` then kerning information will be included in the array specification to space + * the operators correctly. This kerning information will make the specification long (and may make it incompatible + * with KaTeX). + * + * An optional whitelist of variables may be supplied. If supplied, only listed items will count as variables and + * the order of variable appearance will be the same as the order of the whitelisted variables. + */ +export declare function systemeContentsToArray(nodes: Ast.Node[], options?: { + properSpacing?: boolean; + whitelistedVariables?: (string | Ast.String | Ast.Macro)[]; +}): Ast.Environment; +/** + * Find any systeme definitions, e.g. `\sysdelim{.}{.}`, and attach their information + * to the renderInfo of of the systeme macros. + * + */ +export declare function attachSystemeSettingsAsRenderInfo(ast: Ast.Ast): void; +//# sourceMappingURL=systeme.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/types.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/types.d.ts new file mode 100644 index 0000000..4343c81 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/libs/types.d.ts @@ -0,0 +1,33 @@ +import * as LatexAst from "@unified-latex/unified-latex-types"; +export type Ast = Node | Node[]; +export type Node = Line | Equation | Item | Annotation; +export type SystemeNode = Node; +interface AstNode { + type: string; +} +export interface Line extends AstNode { + type: "line"; + equation?: Equation | null; + annotation?: Annotation | null; + sep?: LatexAst.Node[] | null; + trailingComment: LatexAst.Comment | null; +} +interface Equation extends AstNode { + type: "equation"; + left: Item[]; + right: LatexAst.Node[]; + equals?: LatexAst.Node | null; +} +export interface Item extends AstNode { + type: "item"; + op: LatexAst.Node | null; + variable: LatexAst.Node[] | null; + content: LatexAst.Node[]; +} +interface Annotation extends AstNode { + type: "annotation"; + marker: LatexAst.Node; + content: LatexAst.Node[]; +} +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/systeme/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/systeme/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs new file mode 100644 index 0000000..3776886 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +const macros = {}; +const environments = { + tabularx: { signature: "m o m", renderInfo: { alignContent: true } } +}; +function createMatchers() { + return { + matchChar: (node, char) => unifiedLatexUtilMatch.match.string(node, char), + isWhitespace: unifiedLatexUtilMatch.match.whitespace, + isGroup: unifiedLatexUtilMatch.match.group + }; +} +function parseTabularSpec(ast) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = unifiedLatexUtilPegjs.splitStringsIntoSingleChars(ast); + ast = unifiedLatexUtilPegjs.decorateArrayForPegjs([...ast]); + return unifiedLatexUtilPegjs.TabularPegParser.parse(ast, createMatchers()); +} +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + switch (node.type) { + case "vert_divider": + return "|"; + case "at_divider": + return `@{${unifiedLatexUtilPrintRaw.printRaw(node.content)}}`; + case "bang_divider": + return `!{${unifiedLatexUtilPrintRaw.printRaw(node.content)}}`; + case "alignment": + if (node.alignment === "left") { + return "l"; + } + if (node.alignment === "right") { + return "r"; + } + if (node.alignment === "center") { + return "c"; + } + if (node.alignment === "X") { + return "X"; + } + if (node.alignment === "parbox") { + if (node.baseline === "top") { + return `p{${unifiedLatexUtilPrintRaw.printRaw(node.size)}}`; + } + if (node.baseline === "default") { + return `m{${unifiedLatexUtilPrintRaw.printRaw(node.size)}}`; + } + if (node.baseline === "bottom") { + return `b{${unifiedLatexUtilPrintRaw.printRaw(node.size)}}`; + } + return `w{${unifiedLatexUtilPrintRaw.printRaw(node.baseline)}}{${unifiedLatexUtilPrintRaw.printRaw( + node.size + )}}`; + } + break; + case "decl_code": + return unifiedLatexUtilPrintRaw.printRaw(node.code); + case "column": + const end_code = node.before_end_code ? `<{${printRaw(node.before_end_code)}}` : ""; + const start_code = node.before_start_code ? `>{${printRaw(node.before_start_code)}}` : ""; + return [ + printRaw(node.pre_dividers), + start_code, + printRaw(node.alignment), + end_code, + printRaw(node.post_dividers) + ].join(""); + default: + console.warn( + `Unknown node type "${node.type}" for node`, + node + ); + return ""; + } + return ""; +} +exports.environments = environments; +exports.macros = macros; +exports.parseTabularSpec = parseTabularSpec; +exports.printRaw = printRaw; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs.map new file mode 100644 index 0000000..3f76d3d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","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"],"names":["match","splitStringsIntoSingleChars","decorateArrayForPegjs","TabularPegParser","latexPrintRaw"],"mappings":";;;;;AAKO,MAAM,SAA0B,CAAA;AAEhC,MAAM,eAA8B;AAAA,EACvC,UAAU,EAAE,WAAW,SAAS,YAAY,EAAE,cAAc,KAAO,EAAA;AACvE;ACAA,SAAS,iBAAiB;AACf,SAAA;AAAA,IACH,WAAW,CAAC,MAAgB,SAAiBA,sBAAM,MAAA,OAAO,MAAM,IAAI;AAAA,IACpE,cAAcA,sBAAM,MAAA;AAAA,IACpB,SAASA,sBAAAA,MAAM;AAAA,EACnB;AACJ;AAMO,SAAS,iBAAiB,KAA8C;AAC3E,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACf,UAAA,IAAI,MAAM,iCAAiC;AAAA,EAAA;AAIrD,QAAMC,kDAA4B,GAAG;AAGrC,QAAMC,sBAAsB,sBAAA,CAAC,GAAG,GAAG,CAAC;AAGpC,SAAOC,uCAAiB,MAAM,KAAK,eAAA,CAAgB;AACvD;AC5BgB,SAAA,SAAS,MAAuB,OAAO,OAAe;AAC9D,MAAA,OAAO,SAAS,UAAU;AACnB,WAAA;AAAA,EAAA;AAGP,MAAA,MAAM,QAAQ,IAAI,GAAG;AACf,UAAA,WAAW,OAAO,MAAM;AACvB,WAAA,KAAK,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAAE,KAAK,QAAQ;AAAA,EAAA;AAGzD,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACM,aAAA;AAAA,IACX,KAAK;AACD,aAAO,KAAKC,yBAAA,SAAc,KAAK,OAAO,CAAC;AAAA,IAC3C,KAAK;AACD,aAAO,KAAKA,yBAAA,SAAc,KAAK,OAAO,CAAC;AAAA,IAC3C,KAAK;AACG,UAAA,KAAK,cAAc,QAAQ;AACpB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,SAAS;AACrB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,UAAU;AACtB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,KAAK;AACjB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,UAAU;AACzB,YAAA,KAAK,aAAa,OAAO;AACzB,iBAAO,KAAKA,yBAAA,SAAc,KAAK,IAAI,CAAC;AAAA,QAAA;AAEpC,YAAA,KAAK,aAAa,WAAW;AAC7B,iBAAO,KAAKA,yBAAA,SAAc,KAAK,IAAI,CAAC;AAAA,QAAA;AAEpC,YAAA,KAAK,aAAa,UAAU;AAC5B,iBAAO,KAAKA,yBAAA,SAAc,KAAK,IAAI,CAAC;AAAA,QAAA;AAExC,eAAO,KAAKA,yBAAA,SAAc,KAAK,QAAQ,CAAC,KAAKA,yBAAA;AAAA,UACzC,KAAK;AAAA,QACR,CAAA;AAAA,MAAA;AAEL;AAAA,IACJ,KAAK;AACM,aAAAA,yBAAA,SAAc,KAAK,IAAI;AAAA,IAElC,KAAK;AACK,YAAA,WAAW,KAAK,kBAChB,KAAK,SAAS,KAAK,eAAe,CAAC,MACnC;AACA,YAAA,aAAa,KAAK,oBAClB,KAAK,SAAS,KAAK,iBAAiB,CAAC,MACrC;AACC,aAAA;AAAA,QACH,SAAS,KAAK,YAAY;AAAA,QAC1B;AAAA,QACA,SAAS,KAAK,SAAS;AAAA,QACvB;AAAA,QACA,SAAS,KAAK,aAAa;AAAA,MAAA,EAC7B,KAAK,EAAE;AAAA,IAEb;AACY,cAAA;AAAA,QACJ,sBAAuB,KAAa,IAAI;AAAA,QACxC;AAAA,MACJ;AACO,aAAA;AAAA,EAAA;AAER,SAAA;AACX;;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.d.ts new file mode 100644 index 0000000..671bac1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.d.ts @@ -0,0 +1,5 @@ +export * from './provides'; +export * from './libs/types'; +export * from './libs/parser'; +export * from './libs/print-raw'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js new file mode 100644 index 0000000..e3c3a20 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js @@ -0,0 +1,93 @@ +import { splitStringsIntoSingleChars, decorateArrayForPegjs, TabularPegParser } from "@unified-latex/unified-latex-util-pegjs"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { printRaw as printRaw$1 } from "@unified-latex/unified-latex-util-print-raw"; +const macros = {}; +const environments = { + tabularx: { signature: "m o m", renderInfo: { alignContent: true } } +}; +function createMatchers() { + return { + matchChar: (node, char) => match.string(node, char), + isWhitespace: match.whitespace, + isGroup: match.group + }; +} +function parseTabularSpec(ast) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = splitStringsIntoSingleChars(ast); + ast = decorateArrayForPegjs([...ast]); + return TabularPegParser.parse(ast, createMatchers()); +} +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + switch (node.type) { + case "vert_divider": + return "|"; + case "at_divider": + return `@{${printRaw$1(node.content)}}`; + case "bang_divider": + return `!{${printRaw$1(node.content)}}`; + case "alignment": + if (node.alignment === "left") { + return "l"; + } + if (node.alignment === "right") { + return "r"; + } + if (node.alignment === "center") { + return "c"; + } + if (node.alignment === "X") { + return "X"; + } + if (node.alignment === "parbox") { + if (node.baseline === "top") { + return `p{${printRaw$1(node.size)}}`; + } + if (node.baseline === "default") { + return `m{${printRaw$1(node.size)}}`; + } + if (node.baseline === "bottom") { + return `b{${printRaw$1(node.size)}}`; + } + return `w{${printRaw$1(node.baseline)}}{${printRaw$1( + node.size + )}}`; + } + break; + case "decl_code": + return printRaw$1(node.code); + case "column": + const end_code = node.before_end_code ? `<{${printRaw(node.before_end_code)}}` : ""; + const start_code = node.before_start_code ? `>{${printRaw(node.before_start_code)}}` : ""; + return [ + printRaw(node.pre_dividers), + start_code, + printRaw(node.alignment), + end_code, + printRaw(node.post_dividers) + ].join(""); + default: + console.warn( + `Unknown node type "${node.type}" for node`, + node + ); + return ""; + } + return ""; +} +export { + environments, + macros, + parseTabularSpec, + printRaw +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js.map new file mode 100644 index 0000000..8f75273 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","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"],"names":["latexPrintRaw"],"mappings":";;;AAKO,MAAM,SAA0B,CAAA;AAEhC,MAAM,eAA8B;AAAA,EACvC,UAAU,EAAE,WAAW,SAAS,YAAY,EAAE,cAAc,KAAO,EAAA;AACvE;ACAA,SAAS,iBAAiB;AACf,SAAA;AAAA,IACH,WAAW,CAAC,MAAgB,SAAiB,MAAM,OAAO,MAAM,IAAI;AAAA,IACpE,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AAAA,EACnB;AACJ;AAMO,SAAS,iBAAiB,KAA8C;AAC3E,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACf,UAAA,IAAI,MAAM,iCAAiC;AAAA,EAAA;AAIrD,QAAM,4BAA4B,GAAG;AAGrC,QAAM,sBAAsB,CAAC,GAAG,GAAG,CAAC;AAGpC,SAAO,iBAAiB,MAAM,KAAK,eAAA,CAAgB;AACvD;AC5BgB,SAAA,SAAS,MAAuB,OAAO,OAAe;AAC9D,MAAA,OAAO,SAAS,UAAU;AACnB,WAAA;AAAA,EAAA;AAGP,MAAA,MAAM,QAAQ,IAAI,GAAG;AACf,UAAA,WAAW,OAAO,MAAM;AACvB,WAAA,KAAK,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAAE,KAAK,QAAQ;AAAA,EAAA;AAGzD,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACM,aAAA;AAAA,IACX,KAAK;AACD,aAAO,KAAKA,WAAc,KAAK,OAAO,CAAC;AAAA,IAC3C,KAAK;AACD,aAAO,KAAKA,WAAc,KAAK,OAAO,CAAC;AAAA,IAC3C,KAAK;AACG,UAAA,KAAK,cAAc,QAAQ;AACpB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,SAAS;AACrB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,UAAU;AACtB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,KAAK;AACjB,eAAA;AAAA,MAAA;AAEP,UAAA,KAAK,cAAc,UAAU;AACzB,YAAA,KAAK,aAAa,OAAO;AACzB,iBAAO,KAAKA,WAAc,KAAK,IAAI,CAAC;AAAA,QAAA;AAEpC,YAAA,KAAK,aAAa,WAAW;AAC7B,iBAAO,KAAKA,WAAc,KAAK,IAAI,CAAC;AAAA,QAAA;AAEpC,YAAA,KAAK,aAAa,UAAU;AAC5B,iBAAO,KAAKA,WAAc,KAAK,IAAI,CAAC;AAAA,QAAA;AAExC,eAAO,KAAKA,WAAc,KAAK,QAAQ,CAAC,KAAKA;AAAAA,UACzC,KAAK;AAAA,QACR,CAAA;AAAA,MAAA;AAEL;AAAA,IACJ,KAAK;AACM,aAAAA,WAAc,KAAK,IAAI;AAAA,IAElC,KAAK;AACK,YAAA,WAAW,KAAK,kBAChB,KAAK,SAAS,KAAK,eAAe,CAAC,MACnC;AACA,YAAA,aAAa,KAAK,oBAClB,KAAK,SAAS,KAAK,iBAAiB,CAAC,MACrC;AACC,aAAA;AAAA,QACH,SAAS,KAAK,YAAY;AAAA,QAC1B;AAAA,QACA,SAAS,KAAK,SAAS;AAAA,QACvB;AAAA,QACA,SAAS,KAAK,aAAa;AAAA,MAAA,EAC7B,KAAK,EAAE;AAAA,IAEb;AACY,cAAA;AAAA,QACJ,sBAAuB,KAAa,IAAI;AAAA,QACxC;AAAA,MACJ;AACO,aAAA;AAAA,EAAA;AAER,SAAA;AACX;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/parser.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/parser.d.ts new file mode 100644 index 0000000..16f01ab --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/parser.d.ts @@ -0,0 +1,8 @@ +import * as Ast from "@unified-latex/unified-latex-types"; +import * as TabularSpec from "./types"; +/** + * Parse a tabular/tabularx specification, e.g. `"|c|r|r|"`. This parser assumes the specification has + * already been parsed as LaTeX. + */ +export declare function parseTabularSpec(ast: Ast.Node[]): TabularSpec.TabularColumn[]; +//# sourceMappingURL=parser.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/print-raw.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/print-raw.d.ts new file mode 100644 index 0000000..b3bbbd3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/print-raw.d.ts @@ -0,0 +1,6 @@ +import * as TabularSpec from "./types"; +/** + * Print a tabular/tabularx argument specification AST to a string. + */ +export declare function printRaw(node: TabularSpec.Ast, root?: boolean): string; +//# sourceMappingURL=print-raw.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/types.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/types.d.ts new file mode 100644 index 0000000..012b07e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/libs/types.d.ts @@ -0,0 +1,40 @@ +import * as LatexAst from "@unified-latex/unified-latex-types"; +export type Ast = Node | Node[]; +export type Node = Column | BasicAlignment | ParboxAlignment | Code | Divider; +export type TabularColumn = Column; +interface AstNode { + type: string; +} +interface Column extends AstNode { + type: "column"; + pre_dividers: Divider[]; + post_dividers: Divider[]; + before_start_code: Code | null; + before_end_code: Code | null; + alignment: BasicAlignment | ParboxAlignment; +} +interface BasicAlignment extends AstNode { + type: "alignment"; + alignment: "left" | "right" | "center" | "X"; +} +interface ParboxAlignment extends AstNode { + type: "alignment"; + alignment: "parbox"; + baseline: LatexAst.Node[] | "top" | "default" | "bottom"; + size: LatexAst.Node[]; +} +interface Code extends AstNode { + type: "decl_code"; + code: LatexAst.Node[]; +} +type Divider = { + type: "vert_divider"; +} | { + type: "bang_divider"; + content: LatexAst.Node[]; +} | { + type: "at_divider"; + content: LatexAst.Node[]; +}; +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tabularx/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs new file mode 100644 index 0000000..0eed9cd --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const parser = require("../../parser-9Q3EtimU.cjs"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +const unifiedLatexUtilTrim = require("@unified-latex/unified-latex-util-trim"); +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + const printed = []; + for (let i = 0; i < node.length; i++) { + const tok = node[i]; + const prevTok = node[i - 1]; + if (!prevTok) { + printed.push(printRaw(tok)); + continue; + } + if (prevTok.type === "comment") { + printed.push(printRaw(tok)); + continue; + } + if (tok.type !== "comment") { + printed.push(sepToken); + } + printed.push(printRaw(tok)); + } + return printed.join(""); + } + const type = node.type; + switch (type) { + case "path_spec": + return printRaw(node.content, root = true); + case "coordinate": + return `${unifiedLatexUtilPrintRaw.printRaw(node.prefix)}(${unifiedLatexUtilPrintRaw.printRaw( + node.content + )})`; + case "operation": + return unifiedLatexUtilPrintRaw.printRaw(node.content); + case "comment": + return unifiedLatexUtilPrintRaw.printRaw(node); + case "line_to": + return node.command; + case "curve_to": { + const comments = node.comments.map((c) => unifiedLatexUtilPrintRaw.printRaw({ ...c, leadingWhitespace: false })).join(""); + if (node.controls.length === 1) { + return `${comments}.. controls ${printRaw( + node.controls[0] + )} ..`; + } else { + return `${comments}.. controls ${printRaw( + node.controls[0] + )} and ${printRaw(node.controls[1])} ..`; + } + } + case "unknown": + return unifiedLatexUtilPrintRaw.printRaw(node.content); + case "square_brace_group": + return `[${unifiedLatexUtilPrintRaw.printRaw(node.content)}]`; + case "foreach": { + const comments = node.comments.map((c) => unifiedLatexUtilPrintRaw.printRaw({ ...c, leadingWhitespace: false })).join(""); + let options = ""; + if (node.options) { + options = ` [${unifiedLatexUtilPrintRaw.printRaw(node.options)}]`; + } + const start = unifiedLatexUtilPrintRaw.printRaw(node.start); + const variables = [...node.variables]; + unifiedLatexUtilTrim.trim(variables); + let printedVariables = unifiedLatexUtilPrintRaw.printRaw(variables); + if (printedVariables.length > 0) { + printedVariables = " " + printedVariables; + } + const command = node.command.type === "foreach" ? printRaw(node.command) : unifiedLatexUtilPrintRaw.printRaw(node.command); + return `${comments}${start}${printedVariables}${options} in ${unifiedLatexUtilPrintRaw.printRaw( + node.list + )} ${command}`; + } + case "svg_operation": { + const comments = node.comments.map((c) => unifiedLatexUtilPrintRaw.printRaw({ ...c, leadingWhitespace: false })).join(""); + let options = ""; + if (node.options) { + options = `[${unifiedLatexUtilPrintRaw.printRaw(node.options)}]`; + } + return `${comments}svg${options} ${unifiedLatexUtilPrintRaw.printRaw(node.content)}`; + } + case "animation": { + const comments = node.comments.map((c) => unifiedLatexUtilPrintRaw.printRaw({ ...c, leadingWhitespace: false })).join(""); + return `${comments}:${node.attribute} = {${unifiedLatexUtilPrintRaw.printRaw( + node.content + )}}`; + } + default: + const unprintedType = type; + console.warn(`Unknown node type "${unprintedType}" for node`, node); + return ""; + } +} +exports.conditionalMacros = parser.conditionalMacros; +exports.environments = parser.environments; +exports.macros = parser.macros; +exports.parse = parser.parse; +exports.printRaw = printRaw; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs.map new file mode 100644 index 0000000..bf9aef3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/tikz/libs/print-raw.ts"],"sourcesContent":["import { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport * as TikzSpec from \"./types\";\n\n/**\n * Print an `systeme` argument specification AST to a string.\n */\nexport function printRaw(node: TikzSpec.Ast, root = false): string {\n if (typeof node === \"string\") {\n return node;\n }\n\n if (Array.isArray(node)) {\n const sepToken = root ? \" \" : \"\";\n const printed: string[] = [];\n for (let i = 0; i < node.length; i++) {\n const tok = node[i];\n const prevTok = node[i - 1];\n if (!prevTok) {\n printed.push(printRaw(tok));\n continue;\n }\n if (prevTok.type === \"comment\") {\n printed.push(printRaw(tok));\n continue;\n }\n if (tok.type !== \"comment\") {\n printed.push(sepToken);\n }\n printed.push(printRaw(tok));\n }\n return printed.join(\"\");\n }\n const type = node.type;\n\n switch (type) {\n case \"path_spec\":\n return printRaw(node.content, (root = true));\n case \"coordinate\":\n return `${latexPrintRaw(node.prefix)}(${latexPrintRaw(\n node.content\n )})`;\n case \"operation\":\n return latexPrintRaw(node.content);\n case \"comment\":\n return latexPrintRaw(node);\n case \"line_to\":\n return node.command;\n case \"curve_to\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n if (node.controls.length === 1) {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} ..`;\n } else {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} and ${printRaw(node.controls[1])} ..`;\n }\n }\n case \"unknown\":\n return latexPrintRaw(node.content);\n case \"square_brace_group\":\n return `[${latexPrintRaw(node.content)}]`;\n case \"foreach\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n let options = \"\";\n if (node.options) {\n options = ` [${latexPrintRaw(node.options)}]`;\n }\n const start = latexPrintRaw(node.start);\n const variables = [...node.variables];\n trim(variables);\n let printedVariables = latexPrintRaw(variables);\n // It is possible that the variables are specified as `[var=\\p]`, in the optional argument, instead of as `\\p`\n // In this case, `node.variables` will be empty and we don't want an extra space showing up.\n if (printedVariables.length > 0) {\n printedVariables = \" \" + printedVariables;\n }\n\n const command =\n node.command.type === \"foreach\"\n ? printRaw(node.command)\n : latexPrintRaw(node.command);\n\n return `${comments}${start}${printedVariables}${options} in ${latexPrintRaw(\n node.list\n )} ${command}`;\n }\n case \"svg_operation\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n let options = \"\";\n if (node.options) {\n options = `[${latexPrintRaw(node.options)}]`;\n }\n\n return `${comments}svg${options} ${latexPrintRaw(node.content)}`;\n }\n case \"animation\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n\n return `${comments}:${node.attribute} = {${latexPrintRaw(\n node.content\n )}}`;\n }\n\n default:\n const unprintedType: void = type;\n console.warn(`Unknown node type \"${unprintedType}\" for node`, node);\n return \"\";\n }\n}\n"],"names":["latexPrintRaw","trim"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.d.ts new file mode 100644 index 0000000..9ff2358 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.d.ts @@ -0,0 +1,5 @@ +export * from './provides'; +export * from './libs/types'; +export * from './libs/print-raw'; +export * from './libs/parser'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js new file mode 100644 index 0000000..369f959 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js @@ -0,0 +1,104 @@ +import { c, e, m, p } from "../../parser-BBXMi7mQ.js"; +import { printRaw as printRaw$1 } from "@unified-latex/unified-latex-util-print-raw"; +import { trim } from "@unified-latex/unified-latex-util-trim"; +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + const printed = []; + for (let i = 0; i < node.length; i++) { + const tok = node[i]; + const prevTok = node[i - 1]; + if (!prevTok) { + printed.push(printRaw(tok)); + continue; + } + if (prevTok.type === "comment") { + printed.push(printRaw(tok)); + continue; + } + if (tok.type !== "comment") { + printed.push(sepToken); + } + printed.push(printRaw(tok)); + } + return printed.join(""); + } + const type = node.type; + switch (type) { + case "path_spec": + return printRaw(node.content, root = true); + case "coordinate": + return `${printRaw$1(node.prefix)}(${printRaw$1( + node.content + )})`; + case "operation": + return printRaw$1(node.content); + case "comment": + return printRaw$1(node); + case "line_to": + return node.command; + case "curve_to": { + const comments = node.comments.map((c2) => printRaw$1({ ...c2, leadingWhitespace: false })).join(""); + if (node.controls.length === 1) { + return `${comments}.. controls ${printRaw( + node.controls[0] + )} ..`; + } else { + return `${comments}.. controls ${printRaw( + node.controls[0] + )} and ${printRaw(node.controls[1])} ..`; + } + } + case "unknown": + return printRaw$1(node.content); + case "square_brace_group": + return `[${printRaw$1(node.content)}]`; + case "foreach": { + const comments = node.comments.map((c2) => printRaw$1({ ...c2, leadingWhitespace: false })).join(""); + let options = ""; + if (node.options) { + options = ` [${printRaw$1(node.options)}]`; + } + const start = printRaw$1(node.start); + const variables = [...node.variables]; + trim(variables); + let printedVariables = printRaw$1(variables); + if (printedVariables.length > 0) { + printedVariables = " " + printedVariables; + } + const command = node.command.type === "foreach" ? printRaw(node.command) : printRaw$1(node.command); + return `${comments}${start}${printedVariables}${options} in ${printRaw$1( + node.list + )} ${command}`; + } + case "svg_operation": { + const comments = node.comments.map((c2) => printRaw$1({ ...c2, leadingWhitespace: false })).join(""); + let options = ""; + if (node.options) { + options = `[${printRaw$1(node.options)}]`; + } + return `${comments}svg${options} ${printRaw$1(node.content)}`; + } + case "animation": { + const comments = node.comments.map((c2) => printRaw$1({ ...c2, leadingWhitespace: false })).join(""); + return `${comments}:${node.attribute} = {${printRaw$1( + node.content + )}}`; + } + default: + const unprintedType = type; + console.warn(`Unknown node type "${unprintedType}" for node`, node); + return ""; + } +} +export { + c as conditionalMacros, + e as environments, + m as macros, + p as parse, + printRaw +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js.map new file mode 100644 index 0000000..18ebcf4 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/tikz/libs/print-raw.ts"],"sourcesContent":["import { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport * as TikzSpec from \"./types\";\n\n/**\n * Print an `systeme` argument specification AST to a string.\n */\nexport function printRaw(node: TikzSpec.Ast, root = false): string {\n if (typeof node === \"string\") {\n return node;\n }\n\n if (Array.isArray(node)) {\n const sepToken = root ? \" \" : \"\";\n const printed: string[] = [];\n for (let i = 0; i < node.length; i++) {\n const tok = node[i];\n const prevTok = node[i - 1];\n if (!prevTok) {\n printed.push(printRaw(tok));\n continue;\n }\n if (prevTok.type === \"comment\") {\n printed.push(printRaw(tok));\n continue;\n }\n if (tok.type !== \"comment\") {\n printed.push(sepToken);\n }\n printed.push(printRaw(tok));\n }\n return printed.join(\"\");\n }\n const type = node.type;\n\n switch (type) {\n case \"path_spec\":\n return printRaw(node.content, (root = true));\n case \"coordinate\":\n return `${latexPrintRaw(node.prefix)}(${latexPrintRaw(\n node.content\n )})`;\n case \"operation\":\n return latexPrintRaw(node.content);\n case \"comment\":\n return latexPrintRaw(node);\n case \"line_to\":\n return node.command;\n case \"curve_to\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n if (node.controls.length === 1) {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} ..`;\n } else {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} and ${printRaw(node.controls[1])} ..`;\n }\n }\n case \"unknown\":\n return latexPrintRaw(node.content);\n case \"square_brace_group\":\n return `[${latexPrintRaw(node.content)}]`;\n case \"foreach\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n let options = \"\";\n if (node.options) {\n options = ` [${latexPrintRaw(node.options)}]`;\n }\n const start = latexPrintRaw(node.start);\n const variables = [...node.variables];\n trim(variables);\n let printedVariables = latexPrintRaw(variables);\n // It is possible that the variables are specified as `[var=\\p]`, in the optional argument, instead of as `\\p`\n // In this case, `node.variables` will be empty and we don't want an extra space showing up.\n if (printedVariables.length > 0) {\n printedVariables = \" \" + printedVariables;\n }\n\n const command =\n node.command.type === \"foreach\"\n ? printRaw(node.command)\n : latexPrintRaw(node.command);\n\n return `${comments}${start}${printedVariables}${options} in ${latexPrintRaw(\n node.list\n )} ${command}`;\n }\n case \"svg_operation\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n let options = \"\";\n if (node.options) {\n options = `[${latexPrintRaw(node.options)}]`;\n }\n\n return `${comments}svg${options} ${latexPrintRaw(node.content)}`;\n }\n case \"animation\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n\n return `${comments}:${node.attribute} = {${latexPrintRaw(\n node.content\n )}}`;\n }\n\n default:\n const unprintedType: void = type;\n console.warn(`Unknown node type \"${unprintedType}\" for node`, node);\n return \"\";\n }\n}\n"],"names":["latexPrintRaw","c"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/parser.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/parser.d.ts new file mode 100644 index 0000000..6c3b30f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/parser.d.ts @@ -0,0 +1,13 @@ +import * as Ast from "@unified-latex/unified-latex-types"; +import * as TikzSpec from "./types"; +type TikzParseOptions = { + startRule?: "path_spec" | "foreach_body"; +}; +/** + * Parse the contents of the `\systeme{...}` macro + */ +export declare function parse(ast: Ast.Node[], options?: Options): Options extends { + startRule: infer R; +} ? R extends "path_spec" ? TikzSpec.PathSpec : TikzSpec.ForeachBody : TikzSpec.PathSpec; +export {}; +//# sourceMappingURL=parser.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/print-raw.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/print-raw.d.ts new file mode 100644 index 0000000..2541df3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/print-raw.d.ts @@ -0,0 +1,6 @@ +import * as TikzSpec from "./types"; +/** + * Print an `systeme` argument specification AST to a string. + */ +export declare function printRaw(node: TikzSpec.Ast, root?: boolean): string; +//# sourceMappingURL=print-raw.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/tikz-command-argument-parser.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/tikz-command-argument-parser.d.ts new file mode 100644 index 0000000..70c7016 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/tikz-command-argument-parser.d.ts @@ -0,0 +1,10 @@ +import { ArgumentParser } from '@unified-latex/unified-latex-types'; +/** + * Find the arguments of a tikz command. Many tikz commands accept either + * the a group as their only argument, or they scan their arguments until the first + * `;` is found. + * + * This behavior cannot be achieved via a standard xparse spec. + */ +export declare const tikzCommandArgumentParser: ArgumentParser; +//# sourceMappingURL=tikz-command-argument-parser.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/types.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/types.d.ts new file mode 100644 index 0000000..971a2ae --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/libs/types.d.ts @@ -0,0 +1,63 @@ +import * as LatexAst from "@unified-latex/unified-latex-types"; +export type Ast = Node | Node[]; +export type Node = PathSpecNode | PathSpec; +export type PathSpecNode = SquareBraceGroup | Coordinate | CurveTo | LineTo | Foreach | Operation | Unknown | Svg | Animation | LatexAst.Comment; +interface AstNode { + type: string; +} +export interface PathSpec extends AstNode { + type: "path_spec"; + content: PathSpecNode[]; +} +export interface SquareBraceGroup extends AstNode { + type: "square_brace_group"; + content: LatexAst.Node[]; +} +export interface Coordinate extends AstNode { + type: "coordinate"; + content: LatexAst.Node[]; + prefix: LatexAst.String[]; +} +export interface CurveTo extends AstNode { + type: "curve_to"; + controls: [Coordinate] | [Coordinate, Coordinate]; + comments: LatexAst.Comment[]; +} +export interface LineTo extends AstNode { + type: "line_to"; + command: "--" | "|-" | "-|"; +} +export interface Svg extends AstNode { + type: "svg_operation"; + options: null | LatexAst.Node[]; + content: LatexAst.Group; + comments: LatexAst.Comment[]; +} +export interface ForeachBody extends AstNode { + type: "foreach_body"; + variables: LatexAst.Node[]; + options: null | LatexAst.Node[]; + list: LatexAst.Group | LatexAst.Macro; + command: LatexAst.Group | LatexAst.Macro | Foreach; + comments: LatexAst.Comment[]; +} +export interface Foreach extends Omit { + type: "foreach"; + start: LatexAst.String | LatexAst.Macro; +} +export interface Operation extends AstNode { + type: "operation"; + content: LatexAst.String; +} +export interface Unknown extends AstNode { + type: "unknown"; + content: LatexAst.Node; +} +export interface Animation extends AstNode { + type: "animation"; + content: LatexAst.Node[]; + comments: LatexAst.Comment[]; + attribute: string; +} +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/tikz/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/provides.d.ts new file mode 100644 index 0000000..648c708 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/tikz/provides.d.ts @@ -0,0 +1,8 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +/** + * Macros that are only parsed inside a tikz environment. + */ +export declare const conditionalMacros: MacroInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs new file mode 100644 index 0000000..0024afc --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs @@ -0,0 +1,92 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const xcolor = require("../../xcolor-BEfsW_1K.cjs"); +const unifiedLatexUtilArguments = require("@unified-latex/unified-latex-util-arguments"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +const index = require("../../index-BuqJUpao.cjs"); +const unifiedLatexUtilComments = require("@unified-latex/unified-latex-util-comments"); +const unifiedLatexBuilder = require("@unified-latex/unified-latex-builder"); +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + if (node.type === "invalid_spec") { + return node.content; + } + switch (node.type) { + case "postfix": + if (node.plusses != null) { + return `!!${node.plusses}`; + } else { + return `!![${node.num}]`; + } + case "complete_mix": + return `!${node.mix_percent}!${node.name}`; + case "partial_mix": + return `!${node.mix_percent}`; + case "expr": + return `${node.prefix || ""}${node.name}${node.mix_expr.map((mix) => printRaw(mix)).join("")}${node.postfix ? printRaw(node.postfix) : ""}`; + case "weighted_expr": + return `${printRaw(node.color)},${node.weight}`; + case "extended_expr": + let prefix = node.core_model; + if (node.div) { + prefix += `,${node.div}`; + } + return `${prefix}:${node.expressions.map((expr) => printRaw(expr)).join(";")}`; + case "function": + return `>${node.name},${node.args.map((a) => "" + a).join(",")}`; + case "color": + return printRaw(node.color) + node.functions.map((f) => printRaw(f)).join(""); + default: + console.warn( + `Unknown node type "${node.type}" for node`, + node + ); + return ""; + } +} +function xcolorMacroToHex(node) { + node = index.structuredClone(node); + unifiedLatexUtilComments.deleteComments(node); + const args = unifiedLatexUtilArguments.getArgsContent(node); + const model = args[0] && unifiedLatexUtilPrintRaw.printRaw(args[0]); + const colorStr = unifiedLatexUtilPrintRaw.printRaw(args[1] || []); + let hex = null; + try { + hex = xcolor.xcolorColorToHex(colorStr, model); + } catch (e) { + } + const cssVarName = "--" + colorStr.replace(/[^a-zA-Z0-9-_]/g, "-"); + return { hex, cssVarName }; +} +function colorToTextcolorMacro(content, origMacro) { + if (!Array.isArray(content)) { + content = [content]; + } + const args = (origMacro.args ? origMacro.args : [unifiedLatexBuilder.arg([], { closeMark: "", openMark: "" }), unifiedLatexBuilder.arg([])]).concat(unifiedLatexBuilder.arg(content)); + return { + type: "macro", + content: "textcolor", + args, + _renderInfo: { inParMode: true } + }; +} +exports.DVI_PS_NAMES = xcolor.DVI_PS_NAMES; +exports.PREDEFINED_XCOLOR_COLORS = xcolor.PREDEFINED_XCOLOR_COLORS; +exports.SVG_NAMES = xcolor.SVG_NAMES; +exports.X11_NAMES = xcolor.X11_NAMES; +exports.XColorCoreModelToColor = xcolor.XColorCoreModelToColor; +exports.computeColor = xcolor.computeColor; +exports.environments = xcolor.environments; +exports.macros = xcolor.macros; +exports.parse = xcolor.parse; +exports.xcolorColorToHex = xcolor.xcolorColorToHex; +exports.colorToTextcolorMacro = colorToTextcolorMacro; +exports.printRaw = printRaw; +exports.xcolorMacroToHex = xcolorMacroToHex; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs.map new file mode 100644 index 0000000..1942de9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/xcolor/libs/print-raw.ts","../../../package/xcolor/libs/xcolor-macro-to-hex.ts","../../../package/xcolor/libs/color-to-textcolor-macro.ts"],"sourcesContent":["import * as XColorSpec from \"./types\";\n\n/**\n * Print an `xcolor` argument specification AST to a string.\n */\nexport function printRaw(node: XColorSpec.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 if (node.type === \"invalid_spec\") {\n return node.content;\n }\n\n switch (node.type) {\n case \"postfix\":\n if (node.plusses != null) {\n return `!!${node.plusses}`;\n } else {\n return `!![${node.num}]`;\n }\n case \"complete_mix\":\n return `!${node.mix_percent}!${node.name}`;\n case \"partial_mix\":\n return `!${node.mix_percent}`;\n case \"expr\":\n return `${node.prefix || \"\"}${node.name}${node.mix_expr\n .map((mix) => printRaw(mix))\n .join(\"\")}${node.postfix ? printRaw(node.postfix) : \"\"}`;\n case \"weighted_expr\":\n return `${printRaw(node.color)},${node.weight}`;\n case \"extended_expr\":\n let prefix = node.core_model;\n if (node.div) {\n prefix += `,${node.div}`;\n }\n return `${prefix}:${node.expressions\n .map((expr) => printRaw(expr))\n .join(\";\")}`;\n case \"function\":\n return `>${node.name},${node.args.map((a) => \"\" + a).join(\",\")}`;\n case \"color\":\n return (\n printRaw(node.color) +\n node.functions.map((f) => printRaw(f)).join(\"\")\n );\n\n default:\n console.warn(\n `Unknown node type \"${(node as any).type}\" for node`,\n node\n );\n return \"\";\n }\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { getArgsContent } from \"@unified-latex/unified-latex-util-arguments\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { xcolorColorToHex } from \"./xcolor\";\nimport { structuredClone } from \"@unified-latex/structured-clone\";\nimport { deleteComments } from \"@unified-latex/unified-latex-util-comments\";\n\n/**\n * Compute the hex representation of a color specified by an xcolor color command.\n * For example `\\color[rgb]{1 .5 .5}` or `\\textcolor{red}{foo}`. If the color cannot be parsed,\n * `null` is returned for the hex value. In all cases a css variable name (prefixed with \"--\"\")\n * is returned. This can be used to set up CSS for custom colors.\n */\nexport function xcolorMacroToHex(node: Ast.Macro): {\n hex: string | null;\n cssVarName: string;\n} {\n // We do some destructive operations on the node, so clone it first.\n node = structuredClone(node);\n deleteComments(node);\n\n // We assume the node has signature \"o m\" where o is the model and\n // m is the color spec.\n\n const args = getArgsContent(node);\n const model = args[0] && printRaw(args[0]);\n const colorStr = printRaw(args[1] || []);\n let hex: string | null = null;\n try {\n hex = xcolorColorToHex(colorStr, model);\n } catch (e) {}\n\n const cssVarName = \"--\" + colorStr.replace(/[^a-zA-Z0-9-_]/g, \"-\");\n\n return { hex, cssVarName };\n}\n","import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Create a `\\textcolor` macro. Color arguments are taken from `origMacro`.\n */\nexport function colorToTextcolorMacro(\n content: Ast.Node | Ast.Node[],\n origMacro: Ast.Macro\n): Ast.Macro {\n if (!Array.isArray(content)) {\n content = [content];\n }\n // Signature of \\color is \"o m\".\n // We want to carry through the same arguments\n const args = (\n origMacro.args\n ? origMacro.args\n : [arg([], { closeMark: \"\", openMark: \"\" }), arg([])]\n ).concat(arg(content));\n\n return {\n type: \"macro\",\n content: \"textcolor\",\n args,\n _renderInfo: { inParMode: true },\n };\n}\n"],"names":["structuredClone","deleteComments","getArgsContent","printRaw","xcolorColorToHex","arg"],"mappings":";;;;;;;;AAKgB,SAAA,SAAS,MAAsB,OAAO,OAAe;AAC7D,MAAA,OAAO,SAAS,UAAU;AACnB,WAAA;AAAA,EAAA;AAGP,MAAA,MAAM,QAAQ,IAAI,GAAG;AACf,UAAA,WAAW,OAAO,MAAM;AACvB,WAAA,KAAK,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAAE,KAAK,QAAQ;AAAA,EAAA;AAGrD,MAAA,KAAK,SAAS,gBAAgB;AAC9B,WAAO,KAAK;AAAA,EAAA;AAGhB,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACG,UAAA,KAAK,WAAW,MAAM;AACf,eAAA,KAAK,KAAK,OAAO;AAAA,MAAA,OACrB;AACI,eAAA,MAAM,KAAK,GAAG;AAAA,MAAA;AAAA,IAE7B,KAAK;AACD,aAAO,IAAI,KAAK,WAAW,IAAI,KAAK,IAAI;AAAA,IAC5C,KAAK;AACM,aAAA,IAAI,KAAK,WAAW;AAAA,IAC/B,KAAK;AACM,aAAA,GAAG,KAAK,UAAU,EAAE,GAAG,KAAK,IAAI,GAAG,KAAK,SAC1C,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,KAAK,UAAU,SAAS,KAAK,OAAO,IAAI,EAAE;AAAA,IAC9D,KAAK;AACD,aAAO,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM;AAAA,IACjD,KAAK;AACD,UAAI,SAAS,KAAK;AAClB,UAAI,KAAK,KAAK;AACA,kBAAA,IAAI,KAAK,GAAG;AAAA,MAAA;AAE1B,aAAO,GAAG,MAAM,IAAI,KAAK,YACpB,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,EAC5B,KAAK,GAAG,CAAC;AAAA,IAClB,KAAK;AACD,aAAO,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,IAClE,KAAK;AACD,aACI,SAAS,KAAK,KAAK,IACnB,KAAK,UAAU,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE;AAAA,IAGtD;AACY,cAAA;AAAA,QACJ,sBAAuB,KAAa,IAAI;AAAA,QACxC;AAAA,MACJ;AACO,aAAA;AAAA,EAAA;AAEnB;AC9CO,SAAS,iBAAiB,MAG/B;AAEE,SAAOA,sBAAgB,IAAI;AAC3BC,2BAAAA,eAAe,IAAI;AAKb,QAAA,OAAOC,yCAAe,IAAI;AAChC,QAAM,QAAQ,KAAK,CAAC,KAAKC,yBAAAA,SAAS,KAAK,CAAC,CAAC;AACzC,QAAM,WAAWA,yBAAS,SAAA,KAAK,CAAC,KAAK,CAAA,CAAE;AACvC,MAAI,MAAqB;AACrB,MAAA;AACM,UAAAC,OAAAA,iBAAiB,UAAU,KAAK;AAAA,WACjC,GAAG;AAAA,EAAA;AAEZ,QAAM,aAAa,OAAO,SAAS,QAAQ,mBAAmB,GAAG;AAE1D,SAAA,EAAE,KAAK,WAAW;AAC7B;AC7BgB,SAAA,sBACZ,SACA,WACS;AACT,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACzB,cAAU,CAAC,OAAO;AAAA,EAAA;AAIhB,QAAA,QACF,UAAU,OACJ,UAAU,OACV,CAACC,oBAAAA,IAAI,CAAI,GAAA,EAAE,WAAW,IAAI,UAAU,IAAI,GAAGA,wBAAI,CAAA,CAAE,CAAC,GAC1D,OAAOA,wBAAI,OAAO,CAAC;AAEd,SAAA;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,aAAa,EAAE,WAAW,KAAK;AAAA,EACnC;AACJ;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.d.ts new file mode 100644 index 0000000..d8cfcdf --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.d.ts @@ -0,0 +1,9 @@ +export * from './provides'; +export * from './libs/xcolor'; +export * from './libs/types'; +export * from './libs/parser'; +export * from './libs/print-raw'; +export * from './libs/predefined-colors'; +export * from './libs/xcolor-macro-to-hex'; +export * from './libs/color-to-textcolor-macro'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js new file mode 100644 index 0000000..8b20cec --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js @@ -0,0 +1,93 @@ +import { x as xcolorColorToHex } from "../../xcolor-CIejE3rZ.js"; +import { D, P, S, a, X, c, e, m, p } from "../../xcolor-CIejE3rZ.js"; +import { getArgsContent } from "@unified-latex/unified-latex-util-arguments"; +import { printRaw as printRaw$1 } from "@unified-latex/unified-latex-util-print-raw"; +import { s as structuredClone } from "../../index-NHd3tQDq.js"; +import { deleteComments } from "@unified-latex/unified-latex-util-comments"; +import { arg } from "@unified-latex/unified-latex-builder"; +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + if (node.type === "invalid_spec") { + return node.content; + } + switch (node.type) { + case "postfix": + if (node.plusses != null) { + return `!!${node.plusses}`; + } else { + return `!![${node.num}]`; + } + case "complete_mix": + return `!${node.mix_percent}!${node.name}`; + case "partial_mix": + return `!${node.mix_percent}`; + case "expr": + return `${node.prefix || ""}${node.name}${node.mix_expr.map((mix) => printRaw(mix)).join("")}${node.postfix ? printRaw(node.postfix) : ""}`; + case "weighted_expr": + return `${printRaw(node.color)},${node.weight}`; + case "extended_expr": + let prefix = node.core_model; + if (node.div) { + prefix += `,${node.div}`; + } + return `${prefix}:${node.expressions.map((expr) => printRaw(expr)).join(";")}`; + case "function": + return `>${node.name},${node.args.map((a2) => "" + a2).join(",")}`; + case "color": + return printRaw(node.color) + node.functions.map((f) => printRaw(f)).join(""); + default: + console.warn( + `Unknown node type "${node.type}" for node`, + node + ); + return ""; + } +} +function xcolorMacroToHex(node) { + node = structuredClone(node); + deleteComments(node); + const args = getArgsContent(node); + const model = args[0] && printRaw$1(args[0]); + const colorStr = printRaw$1(args[1] || []); + let hex = null; + try { + hex = xcolorColorToHex(colorStr, model); + } catch (e2) { + } + const cssVarName = "--" + colorStr.replace(/[^a-zA-Z0-9-_]/g, "-"); + return { hex, cssVarName }; +} +function colorToTextcolorMacro(content, origMacro) { + if (!Array.isArray(content)) { + content = [content]; + } + const args = (origMacro.args ? origMacro.args : [arg([], { closeMark: "", openMark: "" }), arg([])]).concat(arg(content)); + return { + type: "macro", + content: "textcolor", + args, + _renderInfo: { inParMode: true } + }; +} +export { + D as DVI_PS_NAMES, + P as PREDEFINED_XCOLOR_COLORS, + S as SVG_NAMES, + a as X11_NAMES, + X as XColorCoreModelToColor, + colorToTextcolorMacro, + c as computeColor, + e as environments, + m as macros, + p as parse, + printRaw, + xcolorColorToHex, + xcolorMacroToHex +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js.map new file mode 100644 index 0000000..a515675 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/xcolor/libs/print-raw.ts","../../../package/xcolor/libs/xcolor-macro-to-hex.ts","../../../package/xcolor/libs/color-to-textcolor-macro.ts"],"sourcesContent":["import * as XColorSpec from \"./types\";\n\n/**\n * Print an `xcolor` argument specification AST to a string.\n */\nexport function printRaw(node: XColorSpec.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 if (node.type === \"invalid_spec\") {\n return node.content;\n }\n\n switch (node.type) {\n case \"postfix\":\n if (node.plusses != null) {\n return `!!${node.plusses}`;\n } else {\n return `!![${node.num}]`;\n }\n case \"complete_mix\":\n return `!${node.mix_percent}!${node.name}`;\n case \"partial_mix\":\n return `!${node.mix_percent}`;\n case \"expr\":\n return `${node.prefix || \"\"}${node.name}${node.mix_expr\n .map((mix) => printRaw(mix))\n .join(\"\")}${node.postfix ? printRaw(node.postfix) : \"\"}`;\n case \"weighted_expr\":\n return `${printRaw(node.color)},${node.weight}`;\n case \"extended_expr\":\n let prefix = node.core_model;\n if (node.div) {\n prefix += `,${node.div}`;\n }\n return `${prefix}:${node.expressions\n .map((expr) => printRaw(expr))\n .join(\";\")}`;\n case \"function\":\n return `>${node.name},${node.args.map((a) => \"\" + a).join(\",\")}`;\n case \"color\":\n return (\n printRaw(node.color) +\n node.functions.map((f) => printRaw(f)).join(\"\")\n );\n\n default:\n console.warn(\n `Unknown node type \"${(node as any).type}\" for node`,\n node\n );\n return \"\";\n }\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { getArgsContent } from \"@unified-latex/unified-latex-util-arguments\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { xcolorColorToHex } from \"./xcolor\";\nimport { structuredClone } from \"@unified-latex/structured-clone\";\nimport { deleteComments } from \"@unified-latex/unified-latex-util-comments\";\n\n/**\n * Compute the hex representation of a color specified by an xcolor color command.\n * For example `\\color[rgb]{1 .5 .5}` or `\\textcolor{red}{foo}`. If the color cannot be parsed,\n * `null` is returned for the hex value. In all cases a css variable name (prefixed with \"--\"\")\n * is returned. This can be used to set up CSS for custom colors.\n */\nexport function xcolorMacroToHex(node: Ast.Macro): {\n hex: string | null;\n cssVarName: string;\n} {\n // We do some destructive operations on the node, so clone it first.\n node = structuredClone(node);\n deleteComments(node);\n\n // We assume the node has signature \"o m\" where o is the model and\n // m is the color spec.\n\n const args = getArgsContent(node);\n const model = args[0] && printRaw(args[0]);\n const colorStr = printRaw(args[1] || []);\n let hex: string | null = null;\n try {\n hex = xcolorColorToHex(colorStr, model);\n } catch (e) {}\n\n const cssVarName = \"--\" + colorStr.replace(/[^a-zA-Z0-9-_]/g, \"-\");\n\n return { hex, cssVarName };\n}\n","import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Create a `\\textcolor` macro. Color arguments are taken from `origMacro`.\n */\nexport function colorToTextcolorMacro(\n content: Ast.Node | Ast.Node[],\n origMacro: Ast.Macro\n): Ast.Macro {\n if (!Array.isArray(content)) {\n content = [content];\n }\n // Signature of \\color is \"o m\".\n // We want to carry through the same arguments\n const args = (\n origMacro.args\n ? origMacro.args\n : [arg([], { closeMark: \"\", openMark: \"\" }), arg([])]\n ).concat(arg(content));\n\n return {\n type: \"macro\",\n content: \"textcolor\",\n args,\n _renderInfo: { inParMode: true },\n };\n}\n"],"names":["a","printRaw","e"],"mappings":";;;;;;;AAKgB,SAAA,SAAS,MAAsB,OAAO,OAAe;AAC7D,MAAA,OAAO,SAAS,UAAU;AACnB,WAAA;AAAA,EAAA;AAGP,MAAA,MAAM,QAAQ,IAAI,GAAG;AACf,UAAA,WAAW,OAAO,MAAM;AACvB,WAAA,KAAK,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAAE,KAAK,QAAQ;AAAA,EAAA;AAGrD,MAAA,KAAK,SAAS,gBAAgB;AAC9B,WAAO,KAAK;AAAA,EAAA;AAGhB,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACG,UAAA,KAAK,WAAW,MAAM;AACf,eAAA,KAAK,KAAK,OAAO;AAAA,MAAA,OACrB;AACI,eAAA,MAAM,KAAK,GAAG;AAAA,MAAA;AAAA,IAE7B,KAAK;AACD,aAAO,IAAI,KAAK,WAAW,IAAI,KAAK,IAAI;AAAA,IAC5C,KAAK;AACM,aAAA,IAAI,KAAK,WAAW;AAAA,IAC/B,KAAK;AACM,aAAA,GAAG,KAAK,UAAU,EAAE,GAAG,KAAK,IAAI,GAAG,KAAK,SAC1C,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,KAAK,UAAU,SAAS,KAAK,OAAO,IAAI,EAAE;AAAA,IAC9D,KAAK;AACD,aAAO,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM;AAAA,IACjD,KAAK;AACD,UAAI,SAAS,KAAK;AAClB,UAAI,KAAK,KAAK;AACA,kBAAA,IAAI,KAAK,GAAG;AAAA,MAAA;AAE1B,aAAO,GAAG,MAAM,IAAI,KAAK,YACpB,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,EAC5B,KAAK,GAAG,CAAC;AAAA,IAClB,KAAK;AACD,aAAO,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAACA,OAAM,KAAKA,EAAC,EAAE,KAAK,GAAG,CAAC;AAAA,IAClE,KAAK;AACD,aACI,SAAS,KAAK,KAAK,IACnB,KAAK,UAAU,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE;AAAA,IAGtD;AACY,cAAA;AAAA,QACJ,sBAAuB,KAAa,IAAI;AAAA,QACxC;AAAA,MACJ;AACO,aAAA;AAAA,EAAA;AAEnB;AC9CO,SAAS,iBAAiB,MAG/B;AAEE,SAAO,gBAAgB,IAAI;AAC3B,iBAAe,IAAI;AAKb,QAAA,OAAO,eAAe,IAAI;AAChC,QAAM,QAAQ,KAAK,CAAC,KAAKC,WAAS,KAAK,CAAC,CAAC;AACzC,QAAM,WAAWA,WAAS,KAAK,CAAC,KAAK,CAAA,CAAE;AACvC,MAAI,MAAqB;AACrB,MAAA;AACM,UAAA,iBAAiB,UAAU,KAAK;AAAA,WACjCC,IAAG;AAAA,EAAA;AAEZ,QAAM,aAAa,OAAO,SAAS,QAAQ,mBAAmB,GAAG;AAE1D,SAAA,EAAE,KAAK,WAAW;AAC7B;AC7BgB,SAAA,sBACZ,SACA,WACS;AACT,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACzB,cAAU,CAAC,OAAO;AAAA,EAAA;AAIhB,QAAA,QACF,UAAU,OACJ,UAAU,OACV,CAAC,IAAI,CAAI,GAAA,EAAE,WAAW,IAAI,UAAU,IAAI,GAAG,IAAI,CAAA,CAAE,CAAC,GAC1D,OAAO,IAAI,OAAO,CAAC;AAEd,SAAA;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,aAAa,EAAE,WAAW,KAAK;AAAA,EACnC;AACJ;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/color-to-textcolor-macro.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/color-to-textcolor-macro.d.ts new file mode 100644 index 0000000..068ced1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/color-to-textcolor-macro.d.ts @@ -0,0 +1,6 @@ +import * as Ast from "@unified-latex/unified-latex-types"; +/** + * Create a `\textcolor` macro. Color arguments are taken from `origMacro`. + */ +export declare function colorToTextcolorMacro(content: Ast.Node | Ast.Node[], origMacro: Ast.Macro): Ast.Macro; +//# sourceMappingURL=color-to-textcolor-macro.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/parser.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/parser.d.ts new file mode 100644 index 0000000..f67dfbd --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/parser.d.ts @@ -0,0 +1,10 @@ +import * as XColorSpec from "./types"; +/** + * Parse an `xparse` argument specification string to an AST. + * This function caches results. Don't mutate the returned AST! + * + * @param {string} [str=""] - LaTeX string input + * @returns - AST for LaTeX string + */ +export declare function parse(str?: string): XColorSpec.Ast; +//# sourceMappingURL=parser.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/predefined-colors.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/predefined-colors.d.ts new file mode 100644 index 0000000..2099952 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/predefined-colors.d.ts @@ -0,0 +1,544 @@ +import { default as Color } from 'color'; +export declare const DVI_PS_NAMES: { + Apricot: Color<"#FBB982">; + Aquamarine: Color<"#00B5BE">; + Bittersweet: Color<"#C04F17">; + Black: Color<"#221E1F">; + Blue: Color<"#2D2F92">; + BlueGreen: Color<"#00B3B8">; + BlueViolet: Color<"#473992">; + BrickRed: Color<"#B6321C">; + Brown: Color<"#792500">; + BurntOrange: Color<"#F7921D">; + CadetBlue: Color<"#74729A">; + CarnationPink: Color<"#F282B4">; + Cerulean: Color<"#00A2E3">; + CornflowerBlue: Color<"#41B0E4">; + Cyan: Color<"#00AEEF">; + Dandelion: Color<"#FDBC42">; + DarkOrchid: Color<"#A4538A">; + Emerald: Color<"#00A99D">; + ForestGreen: Color<"#009B55">; + Fuchsia: Color<"#8C368C">; + Goldenrod: Color<"#FFDF42">; + Gray: Color<"#949698">; + Green: Color<"#00A64F">; + GreenYellow: Color<"#DFE674">; + JungleGreen: Color<"#00A99A">; + Lavender: Color<"#F49EC4">; + LimeGreen: Color<"#8DC73E">; + Magenta: Color<"#EC008C">; + Mahogany: Color<"#A9341F">; + Maroon: Color<"#AF3235">; + Melon: Color<"#F89E7B">; + MidnightBlue: Color<"#006795">; + Mulberry: Color<"#A93C93">; + NavyBlue: Color<"#006EB8">; + OliveGreen: Color<"#3C8031">; + Orange: Color<"#F58137">; + OrangeRed: Color<"#ED135A">; + Orchid: Color<"#AF72B0">; + Peach: Color<"#F7965A">; + Periwinkle: Color<"#7977B8">; + PineGreen: Color<"#008B72">; + Plum: Color<"#92268F">; + ProcessBlue: Color<"#00B0F0">; + Purple: Color<"#99479B">; + RawSienna: Color<"#974006">; + Red: Color<"#ED1B23">; + RedOrange: Color<"#F26035">; + RedViolet: Color<"#A1246B">; + Rhodamine: Color<"#EF559F">; + RoyalBlue: Color<"#0071BC">; + RoyalPurple: Color<"#613F99">; + RubineRed: Color<"#ED017D">; + Salmon: Color<"#F69289">; + SeaGreen: Color<"#3FBC9D">; + Sepia: Color<"#671800">; + SkyBlue: Color<"#46C5DD">; + SpringGreen: Color<"#C6DC67">; + Tan: Color<"#DA9D76">; + TealBlue: Color<"#00AEB3">; + Thistle: Color<"#D883B7">; + Turquoise: Color<"#00B4CE">; + Violet: Color<"#58429B">; + VioletRed: Color<"#EF58A0">; + White: Color<"#FFFFFF">; + WildStrawberry: Color<"#EE2967">; + Yellow: Color<"#FFF200">; + YellowGreen: Color<"#98CC70">; + YellowOrange: Color<"#FAA21A">; +}; +export declare const SVG_NAMES: { + AliceBlue: Color; + AntiqueWhite: Color; + Aqua: Color; + Aquamarine: Color; + Azure: Color; + Beige: Color; + Bisque: Color; + Black: Color; + BlanchedAlmond: Color; + Blue: Color; + BlueViolet: Color; + Brown: Color; + BurlyWood: Color; + CadetBlue: Color; + Chartreuse: Color; + Chocolate: Color; + Coral: Color; + CornflowerBlue: Color; + Cornsilk: Color; + Crimson: Color; + Cyan: Color; + DarkBlue: Color; + DarkCyan: Color; + DarkGoldenrod: Color; + DarkGray: Color; + DarkGreen: Color; + DarkGrey: Color; + DarkKhaki: Color; + DarkMagenta: Color; + DarkOliveGreen: Color; + DarkOrange: Color; + DarkOrchid: Color; + DarkRed: Color; + DarkSalmon: Color; + DarkSeaGreen: Color; + DarkSlateBlue: Color; + DarkSlateGray: Color; + DarkSlateGrey: Color; + DarkTurquoise: Color; + DarkViolet: Color; + DeepPink: Color; + DeepSkyBlue: Color; + DimGray: Color; + DimGrey: Color; + DodgerBlue: Color; + FireBrick: Color; + FloralWhite: Color; + ForestGreen: Color; + Fuchsia: Color; + Gainsboro: Color; + GhostWhite: Color; + Gold: Color; + Goldenrod: Color; + Gray: Color; + Green: Color; + GreenYellow: Color; + Grey: Color; + Honeydew: Color; + HotPink: Color; + IndianRed: Color; + Indigo: Color; + Ivory: Color; + Khaki: Color; + Lavender: Color; + LavenderBlush: Color; + LawnGreen: Color; + LemonChiffon: Color; + LightBlue: Color; + LightCoral: Color; + LightCyan: Color; + LightGoldenrod: Color; + LightGoldenrodYellow: Color; + LightGray: Color; + LightGreen: Color; + LightGrey: Color; + LightPink: Color; + LightSalmon: Color; + LightSeaGreen: Color; + LightSkyBlue: Color; + LightSlateBlue: Color; + LightSlateGray: Color; + LightSlateGrey: Color; + LightSteelBlue: Color; + LightYellow: Color; + Lime: Color; + LimeGreen: Color; + Linen: Color; + Magenta: Color; + Maroon: Color; + MediumAquamarine: Color; + MediumBlue: Color; + MediumOrchid: Color; + MediumPurple: Color; + MediumSeaGreen: Color; + MediumSlateBlue: Color; + MediumSpringGreen: Color; + MediumTurquoise: Color; + MediumVioletRed: Color; + MidnightBlue: Color; + MintCream: Color; + MistyRose: Color; + Moccasin: Color; + NavajoWhite: Color; + Navy: Color; + NavyBlue: Color; + OldLace: Color; + Olive: Color; + OliveDrab: Color; + Orange: Color; + OrangeRed: Color; + Orchid: Color; + PaleGoldenrod: Color; + PaleGreen: Color; + PaleTurquoise: Color; + PaleVioletRed: Color; + PapayaWhip: Color; + PeachPuff: Color; + Peru: Color; + Pink: Color; + Plum: Color; + PowderBlue: Color; + Purple: Color; + Red: Color; + RosyBrown: Color; + RoyalBlue: Color; + SaddleBrown: Color; + Salmon: Color; + SandyBrown: Color; + SeaGreen: Color; + Seashell: Color; + Sienna: Color; + Silver: Color; + SkyBlue: Color; + SlateBlue: Color; + SlateGray: Color; + SlateGrey: Color; + Snow: Color; + SpringGreen: Color; + SteelBlue: Color; + Tan: Color; + Teal: Color; + Thistle: Color; + Tomato: Color; + Turquoise: Color; + Violet: Color; + VioletRed: Color; + Wheat: Color; + White: Color; + WhiteSmoke: Color; + Yellow: Color; + YellowGreen: Color; +}; +export declare const X11_NAMES: { + AntiqueWhite1: Color; + AntiqueWhite2: Color; + AntiqueWhite3: Color; + AntiqueWhite4: Color; + Aquamarine1: Color; + Aquamarine2: Color; + Aquamarine3: Color; + Aquamarine4: Color; + Azure1: Color; + Azure2: Color; + Azure3: Color; + Azure4: Color; + Bisque1: Color; + Bisque2: Color; + Bisque3: Color; + Bisque4: Color; + Blue1: Color; + Blue2: Color; + Blue3: Color; + Blue4: Color; + Brown1: Color; + Brown2: Color; + Brown3: Color; + Brown4: Color; + Burlywood1: Color; + Burlywood2: Color; + Burlywood3: Color; + Burlywood4: Color; + CadetBlue1: Color; + CadetBlue2: Color; + CadetBlue3: Color; + CadetBlue4: Color; + Chartreuse1: Color; + Chartreuse2: Color; + Chartreuse3: Color; + Chartreuse4: Color; + Chocolate1: Color; + Chocolate2: Color; + Chocolate3: Color; + Chocolate4: Color; + Coral1: Color; + Coral2: Color; + Coral3: Color; + Coral4: Color; + Cornsilk1: Color; + Cornsilk2: Color; + Cornsilk3: Color; + Cornsilk4: Color; + Cyan1: Color; + Cyan2: Color; + Cyan3: Color; + Cyan4: Color; + DarkGoldenrod1: Color; + DarkGoldenrod2: Color; + DarkGoldenrod3: Color; + DarkGoldenrod4: Color; + DarkOliveGreen1: Color; + DarkOliveGreen2: Color; + DarkOliveGreen3: Color; + DarkOliveGreen4: Color; + DarkOrange1: Color; + DarkOrange2: Color; + DarkOrange3: Color; + DarkOrange4: Color; + DarkOrchid1: Color; + DarkOrchid2: Color; + DarkOrchid3: Color; + DarkOrchid4: Color; + DarkSeaGreen1: Color; + DarkSeaGreen2: Color; + DarkSeaGreen3: Color; + DarkSeaGreen4: Color; + DarkSlateGray1: Color; + DarkSlateGray2: Color; + DarkSlateGray3: Color; + DarkSlateGray4: Color; + DeepPink1: Color; + DeepPink2: Color; + DeepPink3: Color; + DeepPink4: Color; + DeepSkyBlue1: Color; + DeepSkyBlue2: Color; + DeepSkyBlue3: Color; + DeepSkyBlue4: Color; + DodgerBlue1: Color; + DodgerBlue2: Color; + DodgerBlue3: Color; + DodgerBlue4: Color; + Firebrick1: Color; + Firebrick2: Color; + Firebrick3: Color; + Firebrick4: Color; + Gold1: Color; + Gold2: Color; + Gold3: Color; + Gold4: Color; + Goldenrod1: Color; + Goldenrod2: Color; + Goldenrod3: Color; + Goldenrod4: Color; + Green1: Color; + Green2: Color; + Green3: Color; + Green4: Color; + Honeydew1: Color; + Honeydew2: Color; + Honeydew3: Color; + Honeydew4: Color; + HotPink1: Color; + HotPink2: Color; + HotPink3: Color; + HotPink4: Color; + IndianRed1: Color; + IndianRed2: Color; + IndianRed3: Color; + IndianRed4: Color; + Ivory1: Color; + Ivory2: Color; + Ivory3: Color; + Ivory4: Color; + Khaki1: Color; + Khaki2: Color; + Khaki3: Color; + Khaki4: Color; + LavenderBlush1: Color; + LavenderBlush2: Color; + LavenderBlush3: Color; + LavenderBlush4: Color; + LemonChiffon1: Color; + LemonChiffon2: Color; + LemonChiffon3: Color; + LemonChiffon4: Color; + LightBlue1: Color; + LightBlue2: Color; + LightBlue3: Color; + LightBlue4: Color; + LightCyan1: Color; + LightCyan2: Color; + LightCyan3: Color; + LightCyan4: Color; + LightGoldenrod1: Color; + LightGoldenrod2: Color; + LightGoldenrod3: Color; + LightGoldenrod4: Color; + LightPink1: Color; + LightPink2: Color; + LightPink3: Color; + LightPink4: Color; + LightSalmon1: Color; + LightSalmon2: Color; + LightSalmon3: Color; + LightSalmon4: Color; + LightSkyBlue1: Color; + LightSkyBlue2: Color; + LightSkyBlue3: Color; + LightSkyBlue4: Color; + LightSteelBlue1: Color; + LightSteelBlue2: Color; + LightSteelBlue3: Color; + LightSteelBlue4: Color; + LightYellow1: Color; + LightYellow2: Color; + LightYellow3: Color; + LightYellow4: Color; + Magenta1: Color; + Magenta2: Color; + Magenta3: Color; + Magenta4: Color; + Maroon1: Color; + Maroon2: Color; + Maroon3: Color; + Maroon4: Color; + MediumOrchid1: Color; + MediumOrchid2: Color; + MediumOrchid3: Color; + MediumOrchid4: Color; + MediumPurple1: Color; + MediumPurple2: Color; + MediumPurple3: Color; + MediumPurple4: Color; + MistyRose1: Color; + MistyRose2: Color; + MistyRose3: Color; + MistyRose4: Color; + NavajoWhite1: Color; + NavajoWhite2: Color; + NavajoWhite3: Color; + NavajoWhite4: Color; + OliveDrab1: Color; + OliveDrab2: Color; + OliveDrab3: Color; + OliveDrab4: Color; + Orange1: Color; + Orange2: Color; + Orange3: Color; + Orange4: Color; + OrangeRed1: Color; + OrangeRed2: Color; + OrangeRed3: Color; + OrangeRed4: Color; + Orchid1: Color; + Orchid2: Color; + Orchid3: Color; + Orchid4: Color; + PaleGreen1: Color; + PaleGreen2: Color; + PaleGreen3: Color; + PaleGreen4: Color; + PaleTurquoise1: Color; + PaleTurquoise2: Color; + PaleTurquoise3: Color; + PaleTurquoise4: Color; + PaleVioletRed1: Color; + PaleVioletRed2: Color; + PaleVioletRed3: Color; + PaleVioletRed4: Color; + PeachPuff1: Color; + PeachPuff2: Color; + PeachPuff3: Color; + PeachPuff4: Color; + Pink1: Color; + Pink2: Color; + Pink3: Color; + Pink4: Color; + Plum1: Color; + Plum2: Color; + Plum3: Color; + Plum4: Color; + Purple1: Color; + Purple2: Color; + Purple3: Color; + Purple4: Color; + Red1: Color; + Red2: Color; + Red3: Color; + Red4: Color; + RosyBrown1: Color; + RosyBrown2: Color; + RosyBrown3: Color; + RosyBrown4: Color; + RoyalBlue1: Color; + RoyalBlue2: Color; + RoyalBlue3: Color; + RoyalBlue4: Color; + Salmon1: Color; + Salmon2: Color; + Salmon3: Color; + Salmon4: Color; + SeaGreen1: Color; + SeaGreen2: Color; + SeaGreen3: Color; + SeaGreen4: Color; + Seashell1: Color; + Seashell2: Color; + Seashell3: Color; + Seashell4: Color; + Sienna1: Color; + Sienna2: Color; + Sienna3: Color; + Sienna4: Color; + SkyBlue1: Color; + SkyBlue2: Color; + SkyBlue3: Color; + SkyBlue4: Color; + SlateBlue1: Color; + SlateBlue2: Color; + SlateBlue3: Color; + SlateBlue4: Color; + SlateGray1: Color; + SlateGray2: Color; + SlateGray3: Color; + SlateGray4: Color; + Snow1: Color; + Snow2: Color; + Snow3: Color; + Snow4: Color; + SpringGreen1: Color; + SpringGreen2: Color; + SpringGreen3: Color; + SpringGreen4: Color; + SteelBlue1: Color; + SteelBlue2: Color; + SteelBlue3: Color; + SteelBlue4: Color; + Tan1: Color; + Tan2: Color; + Tan3: Color; + Tan4: Color; + Thistle1: Color; + Thistle2: Color; + Thistle3: Color; + Thistle4: Color; + Tomato1: Color; + Tomato2: Color; + Tomato3: Color; + Tomato4: Color; + Turquoise1: Color; + Turquoise2: Color; + Turquoise3: Color; + Turquoise4: Color; + VioletRed1: Color; + VioletRed2: Color; + VioletRed3: Color; + VioletRed4: Color; + Wheat1: Color; + Wheat2: Color; + Wheat3: Color; + Wheat4: Color; + Yellow1: Color; + Yellow2: Color; + Yellow3: Color; + Yellow4: Color; + Gray0: Color; + Green0: Color; + Grey0: Color; + Maroon0: Color; + Purple0: Color; +}; +//# sourceMappingURL=predefined-colors.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/print-raw.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/print-raw.d.ts new file mode 100644 index 0000000..f787558 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/print-raw.d.ts @@ -0,0 +1,6 @@ +import * as XColorSpec from "./types"; +/** + * Print an `xcolor` argument specification AST to a string. + */ +export declare function printRaw(node: XColorSpec.Ast, root?: boolean): string; +//# sourceMappingURL=print-raw.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/types.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/types.d.ts new file mode 100644 index 0000000..4f84b3c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/types.d.ts @@ -0,0 +1,66 @@ +export type Ast = Node; +export type Node = Color | InvalidSpec | ColorFunction | ColorExpr | ColorExtExpr | ColorMixExpr | WeightedColorExpr | Postfix | ColorSpec | ColorSpecList; +export type XColor = Color | ColorSpec | ColorSpecList; +interface AstNode { + type: string; +} +interface HexColorSpec extends AstNode { + type: "hex_spec"; + content: [string]; +} +interface NumColorSpec extends AstNode { + type: "num_spec"; + content: number[]; +} +type ColorSpec = HexColorSpec | NumColorSpec; +interface ColorSpecList extends AstNode { + type: "spec_list"; + content: ColorSpec[]; +} +interface InvalidSpec extends AstNode { + type: "invalid_spec"; + content: string; +} +interface Color extends AstNode { + type: "color"; + color: ColorExpr | ColorExtExpr; + functions: ColorFunction[]; +} +interface ColorFunction extends AstNode { + type: "function"; + name: string; + args: number[]; +} +interface ColorExtExpr extends AstNode { + type: "extended_expr"; + core_model: string; + div: number | null; + expressions: WeightedColorExpr[]; +} +interface WeightedColorExpr extends AstNode { + type: "weighted_expr"; + weight: number; + color: ColorExpr; +} +interface ColorExpr extends AstNode { + type: "expr"; + prefix: string | null; + postfix: Postfix | null; + name: string; + mix_expr: ColorMixExpr[]; +} +type ColorMixExpr = { + type: "complete_mix"; + mix_percent: number; + name: string; +} | { + type: "partial_mix"; + mix_percent: number; +}; +interface Postfix extends AstNode { + type: "postfix"; + plusses?: string; + num?: number; +} +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor-macro-to-hex.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor-macro-to-hex.d.ts new file mode 100644 index 0000000..94833ea --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor-macro-to-hex.d.ts @@ -0,0 +1,12 @@ +import * as Ast from "@unified-latex/unified-latex-types"; +/** + * Compute the hex representation of a color specified by an xcolor color command. + * For example `\color[rgb]{1 .5 .5}` or `\textcolor{red}{foo}`. If the color cannot be parsed, + * `null` is returned for the hex value. In all cases a css variable name (prefixed with "--"") + * is returned. This can be used to set up CSS for custom colors. + */ +export declare function xcolorMacroToHex(node: Ast.Macro): { + hex: string | null; + cssVarName: string; +}; +//# sourceMappingURL=xcolor-macro-to-hex.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor.d.ts new file mode 100644 index 0000000..e608aab --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/libs/xcolor.d.ts @@ -0,0 +1,28 @@ +import { default as Color } from 'color'; +import { XColor } from './types'; +export declare const XColorCoreModelToColor: { + rgb: ([r, g, b]: number[]) => Color; + cmy: ([c, m, y]: number[]) => Color; + cmyk: ([c, m, y, k]: number[]) => Color; + hsb: ([h, s, b]: number[]) => Color; + gray: ([v]: number[]) => Color; +}; +export declare const PREDEFINED_XCOLOR_COLORS: Record>; +/** + * Given a parsed `XColor`, compute the color and return a `Color` object + * (that can be used in CSS, for example). + */ +export declare function computeColor(expr: XColor, predefinedColors?: Record>): Color; +/** + * Convert the xcolor defined color to RGB Hex representation. + * If the color is unknown or cannot be computed, `null` is returned. + * + * If `model` is supplied, + * + * The most likely reason a color will be `null` is if the color is defined + * using a pre-defined color that wasn't supplied as an argument. + */ +export declare function xcolorColorToHex(color: string, model?: string | null, options?: { + predefinedColors?: Record>; +}): string | null; +//# sourceMappingURL=xcolor.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xcolor/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs new file mode 100644 index 0000000..c052def --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs @@ -0,0 +1,61 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const macros = { + NewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + NewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + NewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RequirePackage: { + signature: "o m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + }, + DeclareOption: { signature: "m m", renderInfo: { breakAround: true } } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs.map new file mode 100644 index 0000000..dfb5c5e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../../../package/xparse/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n NewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RenewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n NewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n RenewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n NewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RenewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RequirePackage: {\n signature: \"o m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true },\n },\n DeclareOption: { signature: \"m m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":";;AAKO,MAAM,SAA0B;AAAA,EACnC,oBAAoB;AAAA,IAChB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,sBAAsB;AAAA,IAClB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,wBAAwB;AAAA,IACpB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,wBAAwB;AAAA,IACpB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,wBAAwB;AAAA,IACpB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,0BAA0B;AAAA,IACtB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,4BAA4B;AAAA,IACxB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,4BAA4B;AAAA,IACxB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,8BAA8B;AAAA,IAC1B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,gCAAgC;AAAA,IAC5B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,kCAAkC;AAAA,IAC9B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,kCAAkC;AAAA,IAC9B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,gBAAgB;AAAA,IACZ,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EACvD;AAAA,EACA,eAAe,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,KAAO,EAAA;AACzE;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.d.ts new file mode 100644 index 0000000..981b287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.d.ts @@ -0,0 +1,2 @@ +export * from './provides'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js new file mode 100644 index 0000000..ac50984 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js @@ -0,0 +1,61 @@ +const macros = { + NewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + NewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + NewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RequirePackage: { + signature: "o m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + }, + DeclareOption: { signature: "m m", renderInfo: { breakAround: true } } +}; +const environments = {}; +export { + environments, + macros +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js.map b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js.map new file mode 100644 index 0000000..6d341b2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../../package/xparse/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n NewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RenewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n NewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n RenewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n NewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RenewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RequirePackage: {\n signature: \"o m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true },\n },\n DeclareOption: { signature: \"m m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,oBAAoB;AAAA,IAChB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,sBAAsB;AAAA,IAClB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,wBAAwB;AAAA,IACpB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,wBAAwB;AAAA,IACpB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,wBAAwB;AAAA,IACpB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,0BAA0B;AAAA,IACtB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,4BAA4B;AAAA,IACxB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,4BAA4B;AAAA,IACxB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,8BAA8B;AAAA,IAC1B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,gCAAgC;AAAA,IAC5B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,kCAAkC;AAAA,IAC9B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,kCAAkC;AAAA,IAC9B,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,gBAAgB;AAAA,IACZ,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,MAAM,aAAa,KAAK;AAAA,EACvD;AAAA,EACA,eAAe,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,KAAO,EAAA;AACzE;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/package/xparse/provides.d.ts b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/provides.d.ts new file mode 100644 index 0000000..88c6521 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/package/xparse/provides.d.ts @@ -0,0 +1,4 @@ +import { MacroInfoRecord, EnvInfoRecord } from '@unified-latex/unified-latex-types'; +export declare const macros: MacroInfoRecord; +export declare const environments: EnvInfoRecord; +//# sourceMappingURL=provides.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs b/node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs new file mode 100644 index 0000000..fa43997 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs @@ -0,0 +1,503 @@ +"use strict"; +const unifiedLatexUtilArguments = require("@unified-latex/unified-latex-util-arguments"); +const unifiedLatexBuilder = require("@unified-latex/unified-latex-builder"); +const unifiedLatexUtilArgspec = require("@unified-latex/unified-latex-util-argspec"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilScan = require("@unified-latex/unified-latex-util-scan"); +const unifiedLatexUtilTrim = require("@unified-latex/unified-latex-util-trim"); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +const OPTIONAL_ARGUMENT_ARG_SPEC = unifiedLatexUtilArgspec.parse("o")[0]; +function blankArg() { + return unifiedLatexBuilder.arg([], { openMark: "", closeMark: "" }); +} +const tikzCommandArgumentParser = (nodes, startPos) => { + const origStartPos = startPos; + let pos = startPos; + let nodesRemoved = 0; + const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos); + let animationArg = blankArg(); + if (cursorPosAfterAnimations !== pos) { + const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos); + unifiedLatexUtilTrim.trim(argContent); + animationArg = unifiedLatexBuilder.arg(argContent, { + openMark: " ", + closeMark: " " + }); + } + nodesRemoved += cursorPosAfterAnimations - pos; + const { + argument: _optionalArgument, + nodesRemoved: optionalArgumentNodesRemoved + } = unifiedLatexUtilArguments.gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos); + nodesRemoved += optionalArgumentNodesRemoved; + const optionalArg = _optionalArgument || blankArg(); + while (unifiedLatexUtilMatch.match.whitespace(nodes[pos])) { + pos++; + } + const firstNode = nodes[pos]; + if (!firstNode) { + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; + } + if (unifiedLatexUtilMatch.match.group(firstNode)) { + const args = [animationArg, optionalArg, unifiedLatexBuilder.arg(firstNode.content)]; + nodes.splice(origStartPos, pos - origStartPos + 1); + return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved }; + } + const semicolonPosition = unifiedLatexUtilScan.scan(nodes, ";", { startIndex: pos }); + if (semicolonPosition != null) { + const argNodes = nodes.splice( + origStartPos, + semicolonPosition - origStartPos + 1 + ); + unifiedLatexUtilTrim.trim(argNodes); + const args = [animationArg, optionalArg, unifiedLatexBuilder.arg(argNodes)]; + return { + args, + nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved + }; + } + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; +}; +function eatAllAnimationSpecs(nodes, startPos) { + const colonPos = unifiedLatexUtilScan.scan(nodes, ":", { + startIndex: startPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (!colonPos) { + return startPos; + } + let lastMatchPos = startPos; + let i = colonPos + 1; + for (; i < nodes.length; i++) { + const node = nodes[i]; + if (unifiedLatexUtilMatch.match.string(node, "[")) { + break; + } + if (unifiedLatexUtilMatch.match.string(node, "=")) { + i++; + while (unifiedLatexUtilMatch.match.whitespace(nodes[i]) || unifiedLatexUtilMatch.match.comment(nodes[i])) { + i++; + } + if (!unifiedLatexUtilMatch.match.group(nodes[i])) { + break; + } + lastMatchPos = i + 1; + const colonPos2 = unifiedLatexUtilScan.scan(nodes, ":", { + startIndex: lastMatchPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (colonPos2 == null) { + break; + } + i = colonPos2 + 1; + } + } + return lastMatchPos; +} +const macros = { + pgfkeys: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzoption: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzstyle: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usetikzlibrary: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepgfmodule: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + usepgflibrary: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfplotsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + pgfplotstabletypeset: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikz: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { namedArguments: ["animation", "options", "command"] } + } +}; +const environments = { + tikzpicture: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + axis: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + scope: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfonlayer: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgflowlevelscope: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfviewboxscope: { + signature: "m m m m m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgftransparencygroup: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + behindforegroundpath: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + pgfmetadecoration: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + colormixin: { signature: "m", renderInfo: { pgfkeysArgs: true } } +}; +function processTikzEnvironmentContent(nodes) { + unifiedLatexUtilArguments.attachMacroArgsInArray(nodes, conditionalMacros); + return nodes; +} +const conditionalMacros = { + pgfextra: { signature: "m" }, + beginpgfgraphicnamed: { signature: "m" }, + pgfrealjobname: { signature: "m" }, + pgfplotstreampoint: { signature: "m" }, + pgfplotstreampointoutlier: { signature: "m" }, + pgfplotstreamspecial: { signature: "m" }, + pgfplotxyfile: { signature: "m" }, + pgfplotxyzfile: { signature: "m" }, + pgfplotfunction: { signature: "mmm" }, + pgfplotgnuplot: { signature: "o m" }, + pgfplothandlerrecord: { signature: "m" }, + pgfdeclareplothandler: { signature: "m m m" }, + pgfdeclarelayer: { signature: "m" }, + pgfsetlayers: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfonlayer: { signature: "m" }, + startpgfonlayer: { signature: "m" }, + pgfdeclarehorizontalshading: { signature: "o m m m " }, + pgfdeclareradialshading: { signature: "o m m m" }, + pgfdeclarefunctionalshading: { signature: "o m m m m m" }, + pgfshadecolortorgb: { signature: "m m" }, + pgfshadecolortocmyk: { signature: "m m" }, + pgfshadecolortogray: { signature: "m m" }, + pgfuseshading: { signature: "m" }, + pgfshadepath: { signature: "m m" }, + pgfsetadditionalshadetransform: { signature: "m" }, + pgfsetstrokeopacity: { signature: "m" }, + pgfsetfillopacity: { signature: "m" }, + pgfsetblendmode: { signature: "m" }, + pgfdeclarefading: { signature: "m m" }, + pgfsetfading: { signature: "m m" }, + pgfsetfadingforcurrentpath: { signature: "m m" }, + pgfsetfadingforcurrentpathstroked: { signature: "m m" }, + pgfanimateattribute: { signature: "m m" }, + pgfsnapshot: { signature: "m" }, + pgfqpoint: { signature: "m m" }, + pgfqpointxy: { signature: "m m" }, + pgfqpointxyz: { signature: "m m m" }, + pgfqpointscale: { signature: "m m" }, + pgfpathqmoveto: { signature: "m m" }, + pgfpathqlineto: { signature: "m m" }, + pgfpathqcurveto: { signature: "m m m m m m" }, + pgfpathqcircle: { signature: "m" }, + pgfqbox: { signature: "m" }, + pgfqboxsynced: { signature: "m" }, + pgfaliasimage: { signature: "m m" }, + pgfuseimage: { signature: "m" }, + pgfimage: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclaremask: { signature: "o m m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclarepatternformonly: { signature: "o m m m m m" }, + pgfdeclarepatterninherentlycolored: { signature: "o m m m m m" }, + pgfsetfillpattern: { signature: "m m" }, + // Coordinate canvas and nonlinear transformations + pgftransformshift: { signature: "m" }, + pgftransformxshift: { signature: "m" }, + pgftransformyshift: { signature: "m" }, + pgftransformscale: { signature: "m" }, + pgftransformxscale: { signature: "m" }, + pgftransformyscale: { signature: "m" }, + pgftransformxslant: { signature: "m" }, + pgftransformyslant: { signature: "m" }, + pgftransformrotate: { signature: "m" }, + pgftransformtriangle: { signature: "m m m" }, + pgftransformcm: { signature: "m m m m m" }, + pgftransformarrow: { signature: "m m" }, + pgftransformlineattime: { signature: "m m m" }, + pgftransformcurveattime: { signature: "m m m m m" }, + pgftransformarcaxesattime: { signature: "m m m m m m" }, + pgfgettransform: { signature: "m" }, + pgfsettransform: { signature: "m" }, + pgfgettransformentries: { signature: "m m m m m m" }, + pgfsettransformentries: { signature: "m m m m m m" }, + pgfpointtransformed: { signature: "m" }, + pgflowlevel: { signature: "m" }, + pgflowlevelobj: { signature: "m m" }, + pgflowlevelscope: { signature: "m" }, + startpgflowlevelscope: { signature: "m" }, + pgfviewboxscope: { signature: "m m m m m" }, + startpgfviewboxscope: { signature: "m m m m m" }, + pgftransformnonlinear: { signature: "m" }, + pgfpointtransformednonlinear: { signature: "m" }, + pgfsetcurvilinearbeziercurve: { signature: "m m m m" }, + pgfcurvilineardistancetotime: { signature: "m" }, + pgfpointcurvilinearbezierorthogonal: { signature: "m m" }, + pgfpointcurvilinearbezierpolar: { signature: "m m" }, + // Matrices + pgfmatrix: { signature: "m m m m m m m" }, + pgfsetmatrixcolumnsep: { signature: "m" }, + pgfmatrixnextcell: { signature: "o" }, + pgfsetmatrixrowsep: { signature: "m" }, + pgfmatrixendrow: { signature: "o" }, + // Nodes and shapes + pgfnode: { signature: "m m m m m" }, + pgfmultipartnode: { signature: "m m m m" }, + pgfcoordinate: { signature: "m m" }, + pgfnodealias: { signature: "m m" }, + pgfnoderename: { signature: "m m" }, + pgfpositionnodelater: { signature: "m" }, + pgfpositionnodenow: { signature: "m" }, + pgfnodepostsetupcode: { signature: "m m" }, + pgfpointanchor: { signature: "m m" }, + pgfpointshapeborder: { signature: "m m" }, + pgfdeclareshape: { signature: "m m" }, + saveddimen: { signature: "m m" }, + savedmacro: { signature: " m" }, + anchor: { signature: "m m" }, + deferredanchor: { signature: "m m" }, + anchorborder: { signature: "m" }, + backgroundpath: { signature: "m" }, + foregroundpath: { signature: "m" }, + behindbackgroundpath: { signature: "m" }, + beforebackgroundpath: { signature: "m" }, + beforeforegroundpath: { signature: "m" }, + behindforegroundpath: { signature: "m" }, + // Arrows + pgfdeclarearrow: { signature: "m" }, + pgfarrowssettipend: { signature: "m" }, + pgfarrowssetbackend: { signature: "m" }, + pgfarrowssetlineend: { signature: "m" }, + pgfarrowssetvisualbackend: { signature: "m" }, + pgfarrowssetvisualtipend: { signature: "m" }, + pgfarrowshullpoint: { signature: "m m" }, + pgfarrowsupperhullpoint: { signature: "m m" }, + pgfarrowssave: { signature: "m" }, + pgfarrowssavethe: { signature: "m" }, + pgfarrowsaddtooptions: { signature: "m" }, + pgfarrowsaddtolateoptions: { signature: "m" }, + pgfarrowsaddtolengthscalelist: { signature: "m" }, + pgfarrowsaddtowidthscalelist: { signature: "m" }, + pgfarrowsthreeparameters: { signature: "m" }, + pgfarrowslinewidthdependent: { signature: "m m m" }, + pgfarrowslengthdependent: { signature: "m" }, + // Path + pgfusepath: { signature: "m" }, + pgfsetlinewidth: { signature: "m" }, + pgfsetmiterlimit: { signature: "m" }, + pgfsetdash: { signature: "m m" }, + pgfsetstrokecolor: { signature: "m" }, + pgfsetcolor: { signature: "m" }, + pgfsetinnerlinewidth: { signature: "m" }, + pgfsetinnerstrokecolor: { signature: "m" }, + pgfsetarrowsstart: { signature: "m" }, + pgfsetarrowsend: { signature: "m" }, + pgfsetarrows: { signature: "m" }, + pgfsetshortenstart: { signature: "m" }, + pgfsetshortenend: { signature: "m" }, + pgfsetfillcolor: { signature: "m" }, + // Decorations + pgfdeclaredecoration: { signature: "m m m" }, + state: { signature: "m o m" }, + pgfdecoratepath: { signature: "m m" }, + startpgfdecoration: { signature: "m" }, + pgfdecoration: { signature: "m" }, + pgfdecoratecurrentpath: { signature: "m" }, + pgfsetdecorationsegmenttransformation: { signature: "m" }, + pgfdeclaremetadecorate: { signature: "m m m" }, + pgfmetadecoration: { signature: "m" }, + startpgfmetadecoration: { signature: "m" }, + // Constructing paths + pgfpathmoveto: { signature: "m" }, + pgfpathlineto: { signature: "m" }, + pgfpathcurveto: { signature: "m m m" }, + pgfpathquadraticcurveto: { signature: "m m" }, + pgfpathcurvebetweentime: { signature: "m m m m m m" }, + pgfpathcurvebetweentimecontinue: { signature: "m m m m m m" }, + pgfpatharc: { signature: "m m m" }, + pgfpatharcaxes: { signature: "m m m m" }, + pgfpatharcto: { signature: "m m m m m m" }, + pgfpatharctoprecomputed: { signature: "m m m m m m m m" }, + pgfpathellipse: { signature: "m m m" }, + pgfpathcircle: { signature: "m m" }, + pgfpathrectangle: { signature: "m m" }, + pgfpathrectanglecorners: { signature: "m m" }, + pgfpathgrid: { signature: " o m m" }, + pgfpathparabola: { signature: "m m" }, + pgfpathsine: { signature: "m" }, + pgfpathcosine: { signature: "m" }, + pgfsetcornersarced: { signature: "m" }, + "pgf@protocolsizes": { signature: "m m" }, + // Specifying coordinates + pgfpoint: { signature: "m m" }, + pgfpointpolar: { signature: "m m m" }, + pgfpointxy: { signature: "m m" }, + pgfsetxvec: { signature: "m" }, + pgfsetyvec: { signature: "m" }, + pgfpointpolarxy: { signature: "m m" }, + pgfpointxyz: { signature: "m m m" }, + pgfsetzvec: { signature: "m" }, + pgfpointcylindrical: { signature: "m m m" }, + pgfpointspherical: { signature: "m m m" }, + pgfpointadd: { signature: "m m" }, + pgfpointscale: { signature: "m m" }, + pgfpointdiff: { signature: "m m" }, + pgfpointnormalised: { signature: "m" }, + pgfpointlineattime: { signature: "m m m" }, + pgfpointlineatdistance: { signature: "m m m" }, + pgfpointarcaxesattime: { signature: "m m m m m m" }, + pgfpointcurveattime: { signature: "m m m m m" }, + pgfpointborderrectangle: { signature: "m m" }, + pgfpointborderellipse: { signature: "m m" }, + pgfpointintersectionoflines: { signature: "m m m m" }, + pgfpointintersectionofcircles: { signature: "m m m m m" }, + pgfintersectionofpaths: { signature: "m m" }, + pgfpointintersectionsolution: { signature: "m" }, + pgfextractx: { signature: "m m" }, + pgfextracty: { signature: "m m" }, + pgfgetlastxy: { signature: "m m" }, + "pgf@process": { signature: "m" }, + // Heirarchical structres ... + pgfsetbaseline: { signature: "m" }, + pgfsetbaselinepointnow: { signature: "m" }, + pgfsetbaselinepointlater: { signature: "m" }, + pgftext: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfuseid: { signature: "m" }, + pgfusetype: { signature: "m" }, + pgfidrefnextuse: { signature: "m m" }, + pgfidrefprevuse: { signature: "m m" }, + pgfaliasid: { signature: "m m" }, + pgfgaliasid: { signature: "m m" }, + pgfifidreferenced: { signature: "m m m" }, + pgfrdfabout: { signature: "m" }, + pgfrdfcontent: { signature: "m" }, + pgfrdfdatatype: { signature: "m" }, + pgfrdfhref: { signature: "m" }, + pgfrdfprefix: { signature: "m" }, + pgfrdfproperty: { signature: "m" }, + pgfrdfrel: { signature: "m" }, + pgfrdfresource: { signature: "m" }, + pgfrdfrev: { signature: "m" }, + pgfrdfsrc: { signature: "m" }, + pgfrdftypeof: { signature: "m" }, + pgfrdfvocab: { signature: "m" }, + pgferror: { signature: "m" }, + pgfwarning: { signature: "m" }, + path: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + draw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + fill: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + filldraw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + pattern: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + shade: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + clip: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + useasboundingbox: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + node: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + coordinate: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + graph: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + scoped: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { + namedArguments: ["animation", "options", "command"], + breakAround: true + } + } +}; +function createMatchers() { + return { + isChar: unifiedLatexUtilMatch.match.string, + isTerminal: (node) => unifiedLatexUtilMatch.match.string(node, ";"), + isOperation: (node) => unifiedLatexUtilMatch.match.anyString(node) && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => unifiedLatexUtilMatch.match.whitespace(node) || unifiedLatexUtilMatch.match.parbreak(node), + isComment: unifiedLatexUtilMatch.match.comment, + isGroup: unifiedLatexUtilMatch.match.group, + isMacro: unifiedLatexUtilMatch.match.macro, + isAnyMacro: unifiedLatexUtilMatch.match.anyMacro + }; +} +const matchers = createMatchers(); +function parse(ast, options) { + const { startRule = "path_spec" } = options || {}; + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = unifiedLatexUtilPegjs.decorateArrayForPegjs([...ast]); + return unifiedLatexUtilPegjs.TikzPegParser.parse(ast, { + ...matchers, + startRule + }); +} +exports.conditionalMacros = conditionalMacros; +exports.environments = environments; +exports.macros = macros; +exports.parse = parse; +//# sourceMappingURL=parser-9Q3EtimU.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs.map new file mode 100644 index 0000000..a677e39 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/parser-9Q3EtimU.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"parser-9Q3EtimU.cjs","sources":["../package/tikz/libs/tikz-command-argument-parser.ts","../package/tikz/provides.ts","../package/tikz/libs/parser.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n parse as parseArgspec,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\nconst OPTIONAL_ARGUMENT_ARG_SPEC = parseArgspec(\"o\")[0];\n\nfunction blankArg() {\n return arg([], { openMark: \"\", closeMark: \"\" });\n}\n\n/**\n * Find the arguments of a tikz command. Many tikz commands accept either\n * the a group as their only argument, or they scan their arguments until the first\n * `;` is found.\n *\n * This behavior cannot be achieved via a standard xparse spec.\n */\nexport const tikzCommandArgumentParser: ArgumentParser = (nodes, startPos) => {\n const origStartPos = startPos;\n let pos = startPos;\n let nodesRemoved = 0;\n\n const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos);\n let animationArg = blankArg();\n if (cursorPosAfterAnimations !== pos) {\n const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos);\n trim(argContent);\n animationArg = arg(argContent, {\n openMark: \" \",\n closeMark: \" \",\n });\n }\n nodesRemoved += cursorPosAfterAnimations - pos;\n\n const {\n argument: _optionalArgument,\n nodesRemoved: optionalArgumentNodesRemoved,\n } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos) as {\n argument: Argument;\n nodesRemoved: number;\n };\n nodesRemoved += optionalArgumentNodesRemoved;\n const optionalArg = _optionalArgument || blankArg();\n\n // Eat whitespace\n while (match.whitespace(nodes[pos])) {\n pos++;\n }\n const firstNode = nodes[pos];\n\n // If we're past the end of the array, give up.\n if (!firstNode) {\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n }\n\n // If we're a group, grab the contents and call it good.\n if (match.group(firstNode)) {\n const args = [animationArg, optionalArg, arg(firstNode.content)];\n nodes.splice(origStartPos, pos - origStartPos + 1);\n return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved };\n }\n\n // No group, so scan for a semicolon.\n const semicolonPosition = scan(nodes, \";\", { startIndex: pos });\n if (semicolonPosition != null) {\n const argNodes = nodes.splice(\n origStartPos,\n semicolonPosition - origStartPos + 1\n );\n trim(argNodes);\n const args = [animationArg, optionalArg, arg(argNodes)];\n return {\n args,\n nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved,\n };\n }\n\n // If there was no semicolon, give up.\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n};\n\n/**\n * Find the next index after all animation specs. If no animation specs are present,\n * return `startPos`.\n *\n * An animation spec looks like\n * ```\n * :rotate = { 0s=\"0\", 2s=\"90\", begin on=click }\n * ```\n * Any number can be listed. They start with a colon and have an equals sign followed by a group.\n */\nfunction eatAllAnimationSpecs(nodes: Ast.Node[], startPos: number): number {\n const colonPos = scan(nodes, \":\", {\n startIndex: startPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n\n if (!colonPos) {\n return startPos;\n }\n\n let lastMatchPos = startPos;\n let i = colonPos + 1;\n for (; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.string(node, \"[\")) {\n // XXX As per the tikz manual, we stop scanning if we find an open square brace.\n break;\n }\n if (match.string(node, \"=\")) {\n i++;\n // Look for a group next\n while (match.whitespace(nodes[i]) || match.comment(nodes[i])) {\n i++;\n }\n if (!match.group(nodes[i])) {\n break;\n }\n // We have a match!\n lastMatchPos = i + 1;\n\n // Start the process again\n const colonPos = scan(nodes, \":\", {\n startIndex: lastMatchPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n if (colonPos == null) {\n break;\n }\n i = colonPos + 1;\n }\n }\n\n return lastMatchPos;\n}\n","import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\nimport { tikzCommandArgumentParser } from \"./libs/tikz-command-argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n pgfkeys: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikzoption: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikzstyle: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usetikzlibrary: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usepgfmodule: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n usepgflibrary: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfplotsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n pgfplotstabletypeset: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikz: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: { namedArguments: [\"animation\", \"options\", \"command\"] },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n tikzpicture: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n axis: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n scope: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgfonlayer: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgflowlevelscope: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgfviewboxscope: {\n signature: \"m m m m m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgftransparencygroup: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n behindforegroundpath: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent,\n },\n pgfmetadecoration: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent,\n },\n colormixin: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n};\n\n/**\n * Attach macro arguments for all macros that are only available within a tikz environment.\n */\nfunction processTikzEnvironmentContent(nodes: Ast.Node[]): Ast.Node[] {\n attachMacroArgsInArray(nodes, conditionalMacros);\n return nodes;\n}\n\n/**\n * Macros that are only parsed inside a tikz environment.\n */\nexport const conditionalMacros: MacroInfoRecord = {\n pgfextra: { signature: \"m\" },\n beginpgfgraphicnamed: { signature: \"m\" },\n pgfrealjobname: { signature: \"m\" },\n pgfplotstreampoint: { signature: \"m\" },\n pgfplotstreampointoutlier: { signature: \"m\" },\n pgfplotstreamspecial: { signature: \"m\" },\n pgfplotxyfile: { signature: \"m\" },\n pgfplotxyzfile: { signature: \"m\" },\n pgfplotfunction: { signature: \"mmm\" },\n pgfplotgnuplot: { signature: \"o m\" },\n pgfplothandlerrecord: { signature: \"m\" },\n pgfdeclareplothandler: { signature: \"m m m\" },\n pgfdeclarelayer: { signature: \"m\" },\n pgfsetlayers: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfonlayer: { signature: \"m\" },\n startpgfonlayer: { signature: \"m\" },\n pgfdeclarehorizontalshading: { signature: \"o m m m \" },\n pgfdeclareradialshading: { signature: \"o m m m\" },\n pgfdeclarefunctionalshading: { signature: \"o m m m m m\" },\n pgfshadecolortorgb: { signature: \"m m\" },\n pgfshadecolortocmyk: { signature: \"m m\" },\n pgfshadecolortogray: { signature: \"m m\" },\n pgfuseshading: { signature: \"m\" },\n pgfshadepath: { signature: \"m m\" },\n pgfsetadditionalshadetransform: { signature: \"m\" },\n pgfsetstrokeopacity: { signature: \"m\" },\n pgfsetfillopacity: { signature: \"m\" },\n pgfsetblendmode: { signature: \"m\" },\n pgfdeclarefading: { signature: \"m m\" },\n pgfsetfading: { signature: \"m m\" },\n pgfsetfadingforcurrentpath: { signature: \"m m\" },\n pgfsetfadingforcurrentpathstroked: { signature: \"m m\" },\n pgfanimateattribute: { signature: \"m m\" },\n pgfsnapshot: { signature: \"m\" },\n pgfqpoint: { signature: \"m m\" },\n pgfqpointxy: { signature: \"m m\" },\n pgfqpointxyz: { signature: \"m m m\" },\n pgfqpointscale: { signature: \"m m\" },\n pgfpathqmoveto: { signature: \"m m\" },\n pgfpathqlineto: { signature: \"m m\" },\n pgfpathqcurveto: { signature: \"m m m m m m\" },\n pgfpathqcircle: { signature: \"m\" },\n pgfqbox: { signature: \"m\" },\n pgfqboxsynced: { signature: \"m\" },\n pgfaliasimage: { signature: \"m m\" },\n pgfuseimage: { signature: \"m\" },\n pgfimage: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclaremask: { signature: \"o m m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclarepatternformonly: { signature: \"o m m m m m\" },\n pgfdeclarepatterninherentlycolored: { signature: \"o m m m m m\" },\n pgfsetfillpattern: { signature: \"m m\" },\n // Coordinate canvas and nonlinear transformations\n pgftransformshift: { signature: \"m\" },\n pgftransformxshift: { signature: \"m\" },\n pgftransformyshift: { signature: \"m\" },\n pgftransformscale: { signature: \"m\" },\n pgftransformxscale: { signature: \"m\" },\n pgftransformyscale: { signature: \"m\" },\n pgftransformxslant: { signature: \"m\" },\n pgftransformyslant: { signature: \"m\" },\n pgftransformrotate: { signature: \"m\" },\n pgftransformtriangle: { signature: \"m m m\" },\n pgftransformcm: { signature: \"m m m m m\" },\n pgftransformarrow: { signature: \"m m\" },\n pgftransformlineattime: { signature: \"m m m\" },\n pgftransformcurveattime: { signature: \"m m m m m\" },\n pgftransformarcaxesattime: { signature: \"m m m m m m\" },\n pgfgettransform: { signature: \"m\" },\n pgfsettransform: { signature: \"m\" },\n pgfgettransformentries: { signature: \"m m m m m m\" },\n pgfsettransformentries: { signature: \"m m m m m m\" },\n pgfpointtransformed: { signature: \"m\" },\n pgflowlevel: { signature: \"m\" },\n pgflowlevelobj: { signature: \"m m\" },\n pgflowlevelscope: { signature: \"m\" },\n startpgflowlevelscope: { signature: \"m\" },\n pgfviewboxscope: { signature: \"m m m m m\" },\n startpgfviewboxscope: { signature: \"m m m m m\" },\n pgftransformnonlinear: { signature: \"m\" },\n pgfpointtransformednonlinear: { signature: \"m\" },\n pgfsetcurvilinearbeziercurve: { signature: \"m m m m\" },\n pgfcurvilineardistancetotime: { signature: \"m\" },\n pgfpointcurvilinearbezierorthogonal: { signature: \"m m\" },\n pgfpointcurvilinearbezierpolar: { signature: \"m m\" },\n // Matrices\n pgfmatrix: { signature: \"m m m m m m m\" },\n pgfsetmatrixcolumnsep: { signature: \"m\" },\n pgfmatrixnextcell: { signature: \"o\" },\n pgfsetmatrixrowsep: { signature: \"m\" },\n pgfmatrixendrow: { signature: \"o\" },\n // Nodes and shapes\n pgfnode: { signature: \"m m m m m\" },\n pgfmultipartnode: { signature: \"m m m m\" },\n pgfcoordinate: { signature: \"m m\" },\n pgfnodealias: { signature: \"m m\" },\n pgfnoderename: { signature: \"m m\" },\n pgfpositionnodelater: { signature: \"m\" },\n pgfpositionnodenow: { signature: \"m\" },\n pgfnodepostsetupcode: { signature: \"m m\" },\n pgfpointanchor: { signature: \"m m\" },\n pgfpointshapeborder: { signature: \"m m\" },\n pgfdeclareshape: { signature: \"m m\" },\n saveddimen: { signature: \"m m\" },\n savedmacro: { signature: \" m\" },\n anchor: { signature: \"m m\" },\n deferredanchor: { signature: \"m m\" },\n anchorborder: { signature: \"m\" },\n backgroundpath: { signature: \"m\" },\n foregroundpath: { signature: \"m\" },\n behindbackgroundpath: { signature: \"m\" },\n beforebackgroundpath: { signature: \"m\" },\n beforeforegroundpath: { signature: \"m\" },\n behindforegroundpath: { signature: \"m\" },\n // Arrows\n pgfdeclarearrow: { signature: \"m\" },\n pgfarrowssettipend: { signature: \"m\" },\n pgfarrowssetbackend: { signature: \"m\" },\n pgfarrowssetlineend: { signature: \"m\" },\n pgfarrowssetvisualbackend: { signature: \"m\" },\n pgfarrowssetvisualtipend: { signature: \"m\" },\n pgfarrowshullpoint: { signature: \"m m\" },\n pgfarrowsupperhullpoint: { signature: \"m m\" },\n pgfarrowssave: { signature: \"m\" },\n pgfarrowssavethe: { signature: \"m\" },\n pgfarrowsaddtooptions: { signature: \"m\" },\n pgfarrowsaddtolateoptions: { signature: \"m\" },\n pgfarrowsaddtolengthscalelist: { signature: \"m\" },\n pgfarrowsaddtowidthscalelist: { signature: \"m\" },\n pgfarrowsthreeparameters: { signature: \"m\" },\n pgfarrowslinewidthdependent: { signature: \"m m m\" },\n pgfarrowslengthdependent: { signature: \"m\" },\n // Path\n pgfusepath: { signature: \"m\" },\n pgfsetlinewidth: { signature: \"m\" },\n pgfsetmiterlimit: { signature: \"m\" },\n pgfsetdash: { signature: \"m m\" },\n pgfsetstrokecolor: { signature: \"m\" },\n pgfsetcolor: { signature: \"m\" },\n pgfsetinnerlinewidth: { signature: \"m\" },\n pgfsetinnerstrokecolor: { signature: \"m\" },\n pgfsetarrowsstart: { signature: \"m\" },\n pgfsetarrowsend: { signature: \"m\" },\n pgfsetarrows: { signature: \"m\" },\n pgfsetshortenstart: { signature: \"m\" },\n pgfsetshortenend: { signature: \"m\" },\n pgfsetfillcolor: { signature: \"m\" },\n // Decorations\n pgfdeclaredecoration: { signature: \"m m m\" },\n state: { signature: \"m o m\" },\n pgfdecoratepath: { signature: \"m m\" },\n startpgfdecoration: { signature: \"m\" },\n pgfdecoration: { signature: \"m\" },\n pgfdecoratecurrentpath: { signature: \"m\" },\n pgfsetdecorationsegmenttransformation: { signature: \"m\" },\n pgfdeclaremetadecorate: { signature: \"m m m\" },\n pgfmetadecoration: { signature: \"m\" },\n startpgfmetadecoration: { signature: \"m\" },\n // Constructing paths\n pgfpathmoveto: { signature: \"m\" },\n pgfpathlineto: { signature: \"m\" },\n pgfpathcurveto: { signature: \"m m m\" },\n pgfpathquadraticcurveto: { signature: \"m m\" },\n pgfpathcurvebetweentime: { signature: \"m m m m m m\" },\n pgfpathcurvebetweentimecontinue: { signature: \"m m m m m m\" },\n pgfpatharc: { signature: \"m m m\" },\n pgfpatharcaxes: { signature: \"m m m m\" },\n pgfpatharcto: { signature: \"m m m m m m\" },\n pgfpatharctoprecomputed: { signature: \"m m m m m m m m\" },\n pgfpathellipse: { signature: \"m m m\" },\n pgfpathcircle: { signature: \"m m\" },\n pgfpathrectangle: { signature: \"m m\" },\n pgfpathrectanglecorners: { signature: \"m m\" },\n pgfpathgrid: { signature: \" o m m\" },\n pgfpathparabola: { signature: \"m m\" },\n pgfpathsine: { signature: \"m\" },\n pgfpathcosine: { signature: \"m\" },\n pgfsetcornersarced: { signature: \"m\" },\n \"pgf@protocolsizes\": { signature: \"m m\" },\n // Specifying coordinates\n pgfpoint: { signature: \"m m\" },\n pgfpointpolar: { signature: \"m m m\" },\n pgfpointxy: { signature: \"m m\" },\n pgfsetxvec: { signature: \"m\" },\n pgfsetyvec: { signature: \"m\" },\n pgfpointpolarxy: { signature: \"m m\" },\n pgfpointxyz: { signature: \"m m m\" },\n pgfsetzvec: { signature: \"m\" },\n pgfpointcylindrical: { signature: \"m m m\" },\n pgfpointspherical: { signature: \"m m m\" },\n pgfpointadd: { signature: \"m m\" },\n pgfpointscale: { signature: \"m m\" },\n pgfpointdiff: { signature: \"m m\" },\n pgfpointnormalised: { signature: \"m\" },\n pgfpointlineattime: { signature: \"m m m\" },\n pgfpointlineatdistance: { signature: \"m m m\" },\n pgfpointarcaxesattime: { signature: \"m m m m m m\" },\n pgfpointcurveattime: { signature: \"m m m m m\" },\n pgfpointborderrectangle: { signature: \"m m\" },\n pgfpointborderellipse: { signature: \"m m\" },\n pgfpointintersectionoflines: { signature: \"m m m m\" },\n pgfpointintersectionofcircles: { signature: \"m m m m m\" },\n pgfintersectionofpaths: { signature: \"m m\" },\n pgfpointintersectionsolution: { signature: \"m\" },\n pgfextractx: { signature: \"m m\" },\n pgfextracty: { signature: \"m m\" },\n pgfgetlastxy: { signature: \"m m\" },\n \"pgf@process\": { signature: \"m\" },\n // Heirarchical structres ...\n pgfsetbaseline: { signature: \"m\" },\n pgfsetbaselinepointnow: { signature: \"m\" },\n pgfsetbaselinepointlater: { signature: \"m\" },\n pgftext: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfuseid: { signature: \"m\" },\n pgfusetype: { signature: \"m\" },\n pgfidrefnextuse: { signature: \"m m\" },\n pgfidrefprevuse: { signature: \"m m\" },\n pgfaliasid: { signature: \"m m\" },\n pgfgaliasid: { signature: \"m m\" },\n pgfifidreferenced: { signature: \"m m m\" },\n pgfrdfabout: { signature: \"m\" },\n pgfrdfcontent: { signature: \"m\" },\n pgfrdfdatatype: { signature: \"m\" },\n pgfrdfhref: { signature: \"m\" },\n pgfrdfprefix: { signature: \"m\" },\n pgfrdfproperty: { signature: \"m\" },\n pgfrdfrel: { signature: \"m\" },\n pgfrdfresource: { signature: \"m\" },\n pgfrdfrev: { signature: \"m\" },\n pgfrdfsrc: { signature: \"m\" },\n pgfrdftypeof: { signature: \"m\" },\n pgfrdfvocab: { signature: \"m\" },\n pgferror: { signature: \"m\" },\n pgfwarning: { signature: \"m\" },\n path: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n draw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n fill: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n filldraw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n pattern: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n shade: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n clip: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n useasboundingbox: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n node: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n coordinate: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n graph: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n scoped: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: {\n namedArguments: [\"animation\", \"options\", \"command\"],\n breakAround: true,\n },\n },\n};\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as TikzSpec from \"./types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { TikzPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\ntype TikzParseOptions = {\n startRule?: \"path_spec\" | \"foreach_body\";\n};\n\nfunction createMatchers() {\n return {\n isChar: match.string,\n isTerminal: (node: any) => match.string(node, \";\"),\n isOperation: (node: any) =>\n match.anyString(node) && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node: any) =>\n match.whitespace(node) || match.parbreak(node),\n isComment: match.comment,\n isGroup: match.group,\n isMacro: match.macro,\n isAnyMacro: match.anyMacro,\n };\n}\n\nconst matchers = createMatchers();\n\n/**\n * Parse the contents of the `\\systeme{...}` macro\n */\nexport function parse(\n ast: Ast.Node[],\n options?: Options\n): Options extends { startRule: infer R }\n ? R extends \"path_spec\"\n ? TikzSpec.PathSpec\n : TikzSpec.ForeachBody\n : TikzSpec.PathSpec {\n const { startRule = \"path_spec\" } = options || {};\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 TikzPegParser.parse(ast, {\n ...matchers,\n startRule,\n });\n}\n"],"names":["parseArgspec","arg","trim","gobbleSingleArgument","match","scan","colonPos","attachMacroArgsInArray","decorateArrayForPegjs","TikzPegParser"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js b/node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js new file mode 100644 index 0000000..e5d6dd4 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js @@ -0,0 +1,504 @@ +import { gobbleSingleArgument, attachMacroArgsInArray } from "@unified-latex/unified-latex-util-arguments"; +import { arg } from "@unified-latex/unified-latex-builder"; +import { parse as parse$1 } from "@unified-latex/unified-latex-util-argspec"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { scan } from "@unified-latex/unified-latex-util-scan"; +import { trim } from "@unified-latex/unified-latex-util-trim"; +import { decorateArrayForPegjs, TikzPegParser } from "@unified-latex/unified-latex-util-pegjs"; +const OPTIONAL_ARGUMENT_ARG_SPEC = parse$1("o")[0]; +function blankArg() { + return arg([], { openMark: "", closeMark: "" }); +} +const tikzCommandArgumentParser = (nodes, startPos) => { + const origStartPos = startPos; + let pos = startPos; + let nodesRemoved = 0; + const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos); + let animationArg = blankArg(); + if (cursorPosAfterAnimations !== pos) { + const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos); + trim(argContent); + animationArg = arg(argContent, { + openMark: " ", + closeMark: " " + }); + } + nodesRemoved += cursorPosAfterAnimations - pos; + const { + argument: _optionalArgument, + nodesRemoved: optionalArgumentNodesRemoved + } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos); + nodesRemoved += optionalArgumentNodesRemoved; + const optionalArg = _optionalArgument || blankArg(); + while (match.whitespace(nodes[pos])) { + pos++; + } + const firstNode = nodes[pos]; + if (!firstNode) { + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; + } + if (match.group(firstNode)) { + const args = [animationArg, optionalArg, arg(firstNode.content)]; + nodes.splice(origStartPos, pos - origStartPos + 1); + return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved }; + } + const semicolonPosition = scan(nodes, ";", { startIndex: pos }); + if (semicolonPosition != null) { + const argNodes = nodes.splice( + origStartPos, + semicolonPosition - origStartPos + 1 + ); + trim(argNodes); + const args = [animationArg, optionalArg, arg(argNodes)]; + return { + args, + nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved + }; + } + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; +}; +function eatAllAnimationSpecs(nodes, startPos) { + const colonPos = scan(nodes, ":", { + startIndex: startPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (!colonPos) { + return startPos; + } + let lastMatchPos = startPos; + let i = colonPos + 1; + for (; i < nodes.length; i++) { + const node = nodes[i]; + if (match.string(node, "[")) { + break; + } + if (match.string(node, "=")) { + i++; + while (match.whitespace(nodes[i]) || match.comment(nodes[i])) { + i++; + } + if (!match.group(nodes[i])) { + break; + } + lastMatchPos = i + 1; + const colonPos2 = scan(nodes, ":", { + startIndex: lastMatchPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (colonPos2 == null) { + break; + } + i = colonPos2 + 1; + } + } + return lastMatchPos; +} +const macros = { + pgfkeys: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzoption: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzstyle: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usetikzlibrary: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepgfmodule: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + usepgflibrary: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfplotsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + pgfplotstabletypeset: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikz: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { namedArguments: ["animation", "options", "command"] } + } +}; +const environments = { + tikzpicture: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + axis: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + scope: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfonlayer: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgflowlevelscope: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfviewboxscope: { + signature: "m m m m m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgftransparencygroup: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + behindforegroundpath: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + pgfmetadecoration: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + colormixin: { signature: "m", renderInfo: { pgfkeysArgs: true } } +}; +function processTikzEnvironmentContent(nodes) { + attachMacroArgsInArray(nodes, conditionalMacros); + return nodes; +} +const conditionalMacros = { + pgfextra: { signature: "m" }, + beginpgfgraphicnamed: { signature: "m" }, + pgfrealjobname: { signature: "m" }, + pgfplotstreampoint: { signature: "m" }, + pgfplotstreampointoutlier: { signature: "m" }, + pgfplotstreamspecial: { signature: "m" }, + pgfplotxyfile: { signature: "m" }, + pgfplotxyzfile: { signature: "m" }, + pgfplotfunction: { signature: "mmm" }, + pgfplotgnuplot: { signature: "o m" }, + pgfplothandlerrecord: { signature: "m" }, + pgfdeclareplothandler: { signature: "m m m" }, + pgfdeclarelayer: { signature: "m" }, + pgfsetlayers: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfonlayer: { signature: "m" }, + startpgfonlayer: { signature: "m" }, + pgfdeclarehorizontalshading: { signature: "o m m m " }, + pgfdeclareradialshading: { signature: "o m m m" }, + pgfdeclarefunctionalshading: { signature: "o m m m m m" }, + pgfshadecolortorgb: { signature: "m m" }, + pgfshadecolortocmyk: { signature: "m m" }, + pgfshadecolortogray: { signature: "m m" }, + pgfuseshading: { signature: "m" }, + pgfshadepath: { signature: "m m" }, + pgfsetadditionalshadetransform: { signature: "m" }, + pgfsetstrokeopacity: { signature: "m" }, + pgfsetfillopacity: { signature: "m" }, + pgfsetblendmode: { signature: "m" }, + pgfdeclarefading: { signature: "m m" }, + pgfsetfading: { signature: "m m" }, + pgfsetfadingforcurrentpath: { signature: "m m" }, + pgfsetfadingforcurrentpathstroked: { signature: "m m" }, + pgfanimateattribute: { signature: "m m" }, + pgfsnapshot: { signature: "m" }, + pgfqpoint: { signature: "m m" }, + pgfqpointxy: { signature: "m m" }, + pgfqpointxyz: { signature: "m m m" }, + pgfqpointscale: { signature: "m m" }, + pgfpathqmoveto: { signature: "m m" }, + pgfpathqlineto: { signature: "m m" }, + pgfpathqcurveto: { signature: "m m m m m m" }, + pgfpathqcircle: { signature: "m" }, + pgfqbox: { signature: "m" }, + pgfqboxsynced: { signature: "m" }, + pgfaliasimage: { signature: "m m" }, + pgfuseimage: { signature: "m" }, + pgfimage: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclaremask: { signature: "o m m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclarepatternformonly: { signature: "o m m m m m" }, + pgfdeclarepatterninherentlycolored: { signature: "o m m m m m" }, + pgfsetfillpattern: { signature: "m m" }, + // Coordinate canvas and nonlinear transformations + pgftransformshift: { signature: "m" }, + pgftransformxshift: { signature: "m" }, + pgftransformyshift: { signature: "m" }, + pgftransformscale: { signature: "m" }, + pgftransformxscale: { signature: "m" }, + pgftransformyscale: { signature: "m" }, + pgftransformxslant: { signature: "m" }, + pgftransformyslant: { signature: "m" }, + pgftransformrotate: { signature: "m" }, + pgftransformtriangle: { signature: "m m m" }, + pgftransformcm: { signature: "m m m m m" }, + pgftransformarrow: { signature: "m m" }, + pgftransformlineattime: { signature: "m m m" }, + pgftransformcurveattime: { signature: "m m m m m" }, + pgftransformarcaxesattime: { signature: "m m m m m m" }, + pgfgettransform: { signature: "m" }, + pgfsettransform: { signature: "m" }, + pgfgettransformentries: { signature: "m m m m m m" }, + pgfsettransformentries: { signature: "m m m m m m" }, + pgfpointtransformed: { signature: "m" }, + pgflowlevel: { signature: "m" }, + pgflowlevelobj: { signature: "m m" }, + pgflowlevelscope: { signature: "m" }, + startpgflowlevelscope: { signature: "m" }, + pgfviewboxscope: { signature: "m m m m m" }, + startpgfviewboxscope: { signature: "m m m m m" }, + pgftransformnonlinear: { signature: "m" }, + pgfpointtransformednonlinear: { signature: "m" }, + pgfsetcurvilinearbeziercurve: { signature: "m m m m" }, + pgfcurvilineardistancetotime: { signature: "m" }, + pgfpointcurvilinearbezierorthogonal: { signature: "m m" }, + pgfpointcurvilinearbezierpolar: { signature: "m m" }, + // Matrices + pgfmatrix: { signature: "m m m m m m m" }, + pgfsetmatrixcolumnsep: { signature: "m" }, + pgfmatrixnextcell: { signature: "o" }, + pgfsetmatrixrowsep: { signature: "m" }, + pgfmatrixendrow: { signature: "o" }, + // Nodes and shapes + pgfnode: { signature: "m m m m m" }, + pgfmultipartnode: { signature: "m m m m" }, + pgfcoordinate: { signature: "m m" }, + pgfnodealias: { signature: "m m" }, + pgfnoderename: { signature: "m m" }, + pgfpositionnodelater: { signature: "m" }, + pgfpositionnodenow: { signature: "m" }, + pgfnodepostsetupcode: { signature: "m m" }, + pgfpointanchor: { signature: "m m" }, + pgfpointshapeborder: { signature: "m m" }, + pgfdeclareshape: { signature: "m m" }, + saveddimen: { signature: "m m" }, + savedmacro: { signature: " m" }, + anchor: { signature: "m m" }, + deferredanchor: { signature: "m m" }, + anchorborder: { signature: "m" }, + backgroundpath: { signature: "m" }, + foregroundpath: { signature: "m" }, + behindbackgroundpath: { signature: "m" }, + beforebackgroundpath: { signature: "m" }, + beforeforegroundpath: { signature: "m" }, + behindforegroundpath: { signature: "m" }, + // Arrows + pgfdeclarearrow: { signature: "m" }, + pgfarrowssettipend: { signature: "m" }, + pgfarrowssetbackend: { signature: "m" }, + pgfarrowssetlineend: { signature: "m" }, + pgfarrowssetvisualbackend: { signature: "m" }, + pgfarrowssetvisualtipend: { signature: "m" }, + pgfarrowshullpoint: { signature: "m m" }, + pgfarrowsupperhullpoint: { signature: "m m" }, + pgfarrowssave: { signature: "m" }, + pgfarrowssavethe: { signature: "m" }, + pgfarrowsaddtooptions: { signature: "m" }, + pgfarrowsaddtolateoptions: { signature: "m" }, + pgfarrowsaddtolengthscalelist: { signature: "m" }, + pgfarrowsaddtowidthscalelist: { signature: "m" }, + pgfarrowsthreeparameters: { signature: "m" }, + pgfarrowslinewidthdependent: { signature: "m m m" }, + pgfarrowslengthdependent: { signature: "m" }, + // Path + pgfusepath: { signature: "m" }, + pgfsetlinewidth: { signature: "m" }, + pgfsetmiterlimit: { signature: "m" }, + pgfsetdash: { signature: "m m" }, + pgfsetstrokecolor: { signature: "m" }, + pgfsetcolor: { signature: "m" }, + pgfsetinnerlinewidth: { signature: "m" }, + pgfsetinnerstrokecolor: { signature: "m" }, + pgfsetarrowsstart: { signature: "m" }, + pgfsetarrowsend: { signature: "m" }, + pgfsetarrows: { signature: "m" }, + pgfsetshortenstart: { signature: "m" }, + pgfsetshortenend: { signature: "m" }, + pgfsetfillcolor: { signature: "m" }, + // Decorations + pgfdeclaredecoration: { signature: "m m m" }, + state: { signature: "m o m" }, + pgfdecoratepath: { signature: "m m" }, + startpgfdecoration: { signature: "m" }, + pgfdecoration: { signature: "m" }, + pgfdecoratecurrentpath: { signature: "m" }, + pgfsetdecorationsegmenttransformation: { signature: "m" }, + pgfdeclaremetadecorate: { signature: "m m m" }, + pgfmetadecoration: { signature: "m" }, + startpgfmetadecoration: { signature: "m" }, + // Constructing paths + pgfpathmoveto: { signature: "m" }, + pgfpathlineto: { signature: "m" }, + pgfpathcurveto: { signature: "m m m" }, + pgfpathquadraticcurveto: { signature: "m m" }, + pgfpathcurvebetweentime: { signature: "m m m m m m" }, + pgfpathcurvebetweentimecontinue: { signature: "m m m m m m" }, + pgfpatharc: { signature: "m m m" }, + pgfpatharcaxes: { signature: "m m m m" }, + pgfpatharcto: { signature: "m m m m m m" }, + pgfpatharctoprecomputed: { signature: "m m m m m m m m" }, + pgfpathellipse: { signature: "m m m" }, + pgfpathcircle: { signature: "m m" }, + pgfpathrectangle: { signature: "m m" }, + pgfpathrectanglecorners: { signature: "m m" }, + pgfpathgrid: { signature: " o m m" }, + pgfpathparabola: { signature: "m m" }, + pgfpathsine: { signature: "m" }, + pgfpathcosine: { signature: "m" }, + pgfsetcornersarced: { signature: "m" }, + "pgf@protocolsizes": { signature: "m m" }, + // Specifying coordinates + pgfpoint: { signature: "m m" }, + pgfpointpolar: { signature: "m m m" }, + pgfpointxy: { signature: "m m" }, + pgfsetxvec: { signature: "m" }, + pgfsetyvec: { signature: "m" }, + pgfpointpolarxy: { signature: "m m" }, + pgfpointxyz: { signature: "m m m" }, + pgfsetzvec: { signature: "m" }, + pgfpointcylindrical: { signature: "m m m" }, + pgfpointspherical: { signature: "m m m" }, + pgfpointadd: { signature: "m m" }, + pgfpointscale: { signature: "m m" }, + pgfpointdiff: { signature: "m m" }, + pgfpointnormalised: { signature: "m" }, + pgfpointlineattime: { signature: "m m m" }, + pgfpointlineatdistance: { signature: "m m m" }, + pgfpointarcaxesattime: { signature: "m m m m m m" }, + pgfpointcurveattime: { signature: "m m m m m" }, + pgfpointborderrectangle: { signature: "m m" }, + pgfpointborderellipse: { signature: "m m" }, + pgfpointintersectionoflines: { signature: "m m m m" }, + pgfpointintersectionofcircles: { signature: "m m m m m" }, + pgfintersectionofpaths: { signature: "m m" }, + pgfpointintersectionsolution: { signature: "m" }, + pgfextractx: { signature: "m m" }, + pgfextracty: { signature: "m m" }, + pgfgetlastxy: { signature: "m m" }, + "pgf@process": { signature: "m" }, + // Heirarchical structres ... + pgfsetbaseline: { signature: "m" }, + pgfsetbaselinepointnow: { signature: "m" }, + pgfsetbaselinepointlater: { signature: "m" }, + pgftext: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfuseid: { signature: "m" }, + pgfusetype: { signature: "m" }, + pgfidrefnextuse: { signature: "m m" }, + pgfidrefprevuse: { signature: "m m" }, + pgfaliasid: { signature: "m m" }, + pgfgaliasid: { signature: "m m" }, + pgfifidreferenced: { signature: "m m m" }, + pgfrdfabout: { signature: "m" }, + pgfrdfcontent: { signature: "m" }, + pgfrdfdatatype: { signature: "m" }, + pgfrdfhref: { signature: "m" }, + pgfrdfprefix: { signature: "m" }, + pgfrdfproperty: { signature: "m" }, + pgfrdfrel: { signature: "m" }, + pgfrdfresource: { signature: "m" }, + pgfrdfrev: { signature: "m" }, + pgfrdfsrc: { signature: "m" }, + pgfrdftypeof: { signature: "m" }, + pgfrdfvocab: { signature: "m" }, + pgferror: { signature: "m" }, + pgfwarning: { signature: "m" }, + path: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + draw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + fill: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + filldraw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + pattern: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + shade: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + clip: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + useasboundingbox: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + node: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + coordinate: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + graph: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + scoped: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { + namedArguments: ["animation", "options", "command"], + breakAround: true + } + } +}; +function createMatchers() { + return { + isChar: match.string, + isTerminal: (node) => match.string(node, ";"), + isOperation: (node) => match.anyString(node) && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => match.whitespace(node) || match.parbreak(node), + isComment: match.comment, + isGroup: match.group, + isMacro: match.macro, + isAnyMacro: match.anyMacro + }; +} +const matchers = createMatchers(); +function parse(ast, options) { + const { startRule = "path_spec" } = options || {}; + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return TikzPegParser.parse(ast, { + ...matchers, + startRule + }); +} +export { + conditionalMacros as c, + environments as e, + macros as m, + parse as p +}; +//# sourceMappingURL=parser-BBXMi7mQ.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js.map b/node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js.map new file mode 100644 index 0000000..d418a6c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/parser-BBXMi7mQ.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parser-BBXMi7mQ.js","sources":["../package/tikz/libs/tikz-command-argument-parser.ts","../package/tikz/provides.ts","../package/tikz/libs/parser.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n parse as parseArgspec,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\nconst OPTIONAL_ARGUMENT_ARG_SPEC = parseArgspec(\"o\")[0];\n\nfunction blankArg() {\n return arg([], { openMark: \"\", closeMark: \"\" });\n}\n\n/**\n * Find the arguments of a tikz command. Many tikz commands accept either\n * the a group as their only argument, or they scan their arguments until the first\n * `;` is found.\n *\n * This behavior cannot be achieved via a standard xparse spec.\n */\nexport const tikzCommandArgumentParser: ArgumentParser = (nodes, startPos) => {\n const origStartPos = startPos;\n let pos = startPos;\n let nodesRemoved = 0;\n\n const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos);\n let animationArg = blankArg();\n if (cursorPosAfterAnimations !== pos) {\n const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos);\n trim(argContent);\n animationArg = arg(argContent, {\n openMark: \" \",\n closeMark: \" \",\n });\n }\n nodesRemoved += cursorPosAfterAnimations - pos;\n\n const {\n argument: _optionalArgument,\n nodesRemoved: optionalArgumentNodesRemoved,\n } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos) as {\n argument: Argument;\n nodesRemoved: number;\n };\n nodesRemoved += optionalArgumentNodesRemoved;\n const optionalArg = _optionalArgument || blankArg();\n\n // Eat whitespace\n while (match.whitespace(nodes[pos])) {\n pos++;\n }\n const firstNode = nodes[pos];\n\n // If we're past the end of the array, give up.\n if (!firstNode) {\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n }\n\n // If we're a group, grab the contents and call it good.\n if (match.group(firstNode)) {\n const args = [animationArg, optionalArg, arg(firstNode.content)];\n nodes.splice(origStartPos, pos - origStartPos + 1);\n return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved };\n }\n\n // No group, so scan for a semicolon.\n const semicolonPosition = scan(nodes, \";\", { startIndex: pos });\n if (semicolonPosition != null) {\n const argNodes = nodes.splice(\n origStartPos,\n semicolonPosition - origStartPos + 1\n );\n trim(argNodes);\n const args = [animationArg, optionalArg, arg(argNodes)];\n return {\n args,\n nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved,\n };\n }\n\n // If there was no semicolon, give up.\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n};\n\n/**\n * Find the next index after all animation specs. If no animation specs are present,\n * return `startPos`.\n *\n * An animation spec looks like\n * ```\n * :rotate = { 0s=\"0\", 2s=\"90\", begin on=click }\n * ```\n * Any number can be listed. They start with a colon and have an equals sign followed by a group.\n */\nfunction eatAllAnimationSpecs(nodes: Ast.Node[], startPos: number): number {\n const colonPos = scan(nodes, \":\", {\n startIndex: startPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n\n if (!colonPos) {\n return startPos;\n }\n\n let lastMatchPos = startPos;\n let i = colonPos + 1;\n for (; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.string(node, \"[\")) {\n // XXX As per the tikz manual, we stop scanning if we find an open square brace.\n break;\n }\n if (match.string(node, \"=\")) {\n i++;\n // Look for a group next\n while (match.whitespace(nodes[i]) || match.comment(nodes[i])) {\n i++;\n }\n if (!match.group(nodes[i])) {\n break;\n }\n // We have a match!\n lastMatchPos = i + 1;\n\n // Start the process again\n const colonPos = scan(nodes, \":\", {\n startIndex: lastMatchPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n if (colonPos == null) {\n break;\n }\n i = colonPos + 1;\n }\n }\n\n return lastMatchPos;\n}\n","import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\nimport { tikzCommandArgumentParser } from \"./libs/tikz-command-argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n pgfkeys: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikzoption: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikzstyle: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usetikzlibrary: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usepgfmodule: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n usepgflibrary: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfplotsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n pgfplotstabletypeset: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikz: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: { namedArguments: [\"animation\", \"options\", \"command\"] },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n tikzpicture: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n axis: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n scope: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgfonlayer: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgflowlevelscope: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgfviewboxscope: {\n signature: \"m m m m m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgftransparencygroup: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n behindforegroundpath: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent,\n },\n pgfmetadecoration: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent,\n },\n colormixin: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n};\n\n/**\n * Attach macro arguments for all macros that are only available within a tikz environment.\n */\nfunction processTikzEnvironmentContent(nodes: Ast.Node[]): Ast.Node[] {\n attachMacroArgsInArray(nodes, conditionalMacros);\n return nodes;\n}\n\n/**\n * Macros that are only parsed inside a tikz environment.\n */\nexport const conditionalMacros: MacroInfoRecord = {\n pgfextra: { signature: \"m\" },\n beginpgfgraphicnamed: { signature: \"m\" },\n pgfrealjobname: { signature: \"m\" },\n pgfplotstreampoint: { signature: \"m\" },\n pgfplotstreampointoutlier: { signature: \"m\" },\n pgfplotstreamspecial: { signature: \"m\" },\n pgfplotxyfile: { signature: \"m\" },\n pgfplotxyzfile: { signature: \"m\" },\n pgfplotfunction: { signature: \"mmm\" },\n pgfplotgnuplot: { signature: \"o m\" },\n pgfplothandlerrecord: { signature: \"m\" },\n pgfdeclareplothandler: { signature: \"m m m\" },\n pgfdeclarelayer: { signature: \"m\" },\n pgfsetlayers: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfonlayer: { signature: \"m\" },\n startpgfonlayer: { signature: \"m\" },\n pgfdeclarehorizontalshading: { signature: \"o m m m \" },\n pgfdeclareradialshading: { signature: \"o m m m\" },\n pgfdeclarefunctionalshading: { signature: \"o m m m m m\" },\n pgfshadecolortorgb: { signature: \"m m\" },\n pgfshadecolortocmyk: { signature: \"m m\" },\n pgfshadecolortogray: { signature: \"m m\" },\n pgfuseshading: { signature: \"m\" },\n pgfshadepath: { signature: \"m m\" },\n pgfsetadditionalshadetransform: { signature: \"m\" },\n pgfsetstrokeopacity: { signature: \"m\" },\n pgfsetfillopacity: { signature: \"m\" },\n pgfsetblendmode: { signature: \"m\" },\n pgfdeclarefading: { signature: \"m m\" },\n pgfsetfading: { signature: \"m m\" },\n pgfsetfadingforcurrentpath: { signature: \"m m\" },\n pgfsetfadingforcurrentpathstroked: { signature: \"m m\" },\n pgfanimateattribute: { signature: \"m m\" },\n pgfsnapshot: { signature: \"m\" },\n pgfqpoint: { signature: \"m m\" },\n pgfqpointxy: { signature: \"m m\" },\n pgfqpointxyz: { signature: \"m m m\" },\n pgfqpointscale: { signature: \"m m\" },\n pgfpathqmoveto: { signature: \"m m\" },\n pgfpathqlineto: { signature: \"m m\" },\n pgfpathqcurveto: { signature: \"m m m m m m\" },\n pgfpathqcircle: { signature: \"m\" },\n pgfqbox: { signature: \"m\" },\n pgfqboxsynced: { signature: \"m\" },\n pgfaliasimage: { signature: \"m m\" },\n pgfuseimage: { signature: \"m\" },\n pgfimage: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclaremask: { signature: \"o m m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclarepatternformonly: { signature: \"o m m m m m\" },\n pgfdeclarepatterninherentlycolored: { signature: \"o m m m m m\" },\n pgfsetfillpattern: { signature: \"m m\" },\n // Coordinate canvas and nonlinear transformations\n pgftransformshift: { signature: \"m\" },\n pgftransformxshift: { signature: \"m\" },\n pgftransformyshift: { signature: \"m\" },\n pgftransformscale: { signature: \"m\" },\n pgftransformxscale: { signature: \"m\" },\n pgftransformyscale: { signature: \"m\" },\n pgftransformxslant: { signature: \"m\" },\n pgftransformyslant: { signature: \"m\" },\n pgftransformrotate: { signature: \"m\" },\n pgftransformtriangle: { signature: \"m m m\" },\n pgftransformcm: { signature: \"m m m m m\" },\n pgftransformarrow: { signature: \"m m\" },\n pgftransformlineattime: { signature: \"m m m\" },\n pgftransformcurveattime: { signature: \"m m m m m\" },\n pgftransformarcaxesattime: { signature: \"m m m m m m\" },\n pgfgettransform: { signature: \"m\" },\n pgfsettransform: { signature: \"m\" },\n pgfgettransformentries: { signature: \"m m m m m m\" },\n pgfsettransformentries: { signature: \"m m m m m m\" },\n pgfpointtransformed: { signature: \"m\" },\n pgflowlevel: { signature: \"m\" },\n pgflowlevelobj: { signature: \"m m\" },\n pgflowlevelscope: { signature: \"m\" },\n startpgflowlevelscope: { signature: \"m\" },\n pgfviewboxscope: { signature: \"m m m m m\" },\n startpgfviewboxscope: { signature: \"m m m m m\" },\n pgftransformnonlinear: { signature: \"m\" },\n pgfpointtransformednonlinear: { signature: \"m\" },\n pgfsetcurvilinearbeziercurve: { signature: \"m m m m\" },\n pgfcurvilineardistancetotime: { signature: \"m\" },\n pgfpointcurvilinearbezierorthogonal: { signature: \"m m\" },\n pgfpointcurvilinearbezierpolar: { signature: \"m m\" },\n // Matrices\n pgfmatrix: { signature: \"m m m m m m m\" },\n pgfsetmatrixcolumnsep: { signature: \"m\" },\n pgfmatrixnextcell: { signature: \"o\" },\n pgfsetmatrixrowsep: { signature: \"m\" },\n pgfmatrixendrow: { signature: \"o\" },\n // Nodes and shapes\n pgfnode: { signature: \"m m m m m\" },\n pgfmultipartnode: { signature: \"m m m m\" },\n pgfcoordinate: { signature: \"m m\" },\n pgfnodealias: { signature: \"m m\" },\n pgfnoderename: { signature: \"m m\" },\n pgfpositionnodelater: { signature: \"m\" },\n pgfpositionnodenow: { signature: \"m\" },\n pgfnodepostsetupcode: { signature: \"m m\" },\n pgfpointanchor: { signature: \"m m\" },\n pgfpointshapeborder: { signature: \"m m\" },\n pgfdeclareshape: { signature: \"m m\" },\n saveddimen: { signature: \"m m\" },\n savedmacro: { signature: \" m\" },\n anchor: { signature: \"m m\" },\n deferredanchor: { signature: \"m m\" },\n anchorborder: { signature: \"m\" },\n backgroundpath: { signature: \"m\" },\n foregroundpath: { signature: \"m\" },\n behindbackgroundpath: { signature: \"m\" },\n beforebackgroundpath: { signature: \"m\" },\n beforeforegroundpath: { signature: \"m\" },\n behindforegroundpath: { signature: \"m\" },\n // Arrows\n pgfdeclarearrow: { signature: \"m\" },\n pgfarrowssettipend: { signature: \"m\" },\n pgfarrowssetbackend: { signature: \"m\" },\n pgfarrowssetlineend: { signature: \"m\" },\n pgfarrowssetvisualbackend: { signature: \"m\" },\n pgfarrowssetvisualtipend: { signature: \"m\" },\n pgfarrowshullpoint: { signature: \"m m\" },\n pgfarrowsupperhullpoint: { signature: \"m m\" },\n pgfarrowssave: { signature: \"m\" },\n pgfarrowssavethe: { signature: \"m\" },\n pgfarrowsaddtooptions: { signature: \"m\" },\n pgfarrowsaddtolateoptions: { signature: \"m\" },\n pgfarrowsaddtolengthscalelist: { signature: \"m\" },\n pgfarrowsaddtowidthscalelist: { signature: \"m\" },\n pgfarrowsthreeparameters: { signature: \"m\" },\n pgfarrowslinewidthdependent: { signature: \"m m m\" },\n pgfarrowslengthdependent: { signature: \"m\" },\n // Path\n pgfusepath: { signature: \"m\" },\n pgfsetlinewidth: { signature: \"m\" },\n pgfsetmiterlimit: { signature: \"m\" },\n pgfsetdash: { signature: \"m m\" },\n pgfsetstrokecolor: { signature: \"m\" },\n pgfsetcolor: { signature: \"m\" },\n pgfsetinnerlinewidth: { signature: \"m\" },\n pgfsetinnerstrokecolor: { signature: \"m\" },\n pgfsetarrowsstart: { signature: \"m\" },\n pgfsetarrowsend: { signature: \"m\" },\n pgfsetarrows: { signature: \"m\" },\n pgfsetshortenstart: { signature: \"m\" },\n pgfsetshortenend: { signature: \"m\" },\n pgfsetfillcolor: { signature: \"m\" },\n // Decorations\n pgfdeclaredecoration: { signature: \"m m m\" },\n state: { signature: \"m o m\" },\n pgfdecoratepath: { signature: \"m m\" },\n startpgfdecoration: { signature: \"m\" },\n pgfdecoration: { signature: \"m\" },\n pgfdecoratecurrentpath: { signature: \"m\" },\n pgfsetdecorationsegmenttransformation: { signature: \"m\" },\n pgfdeclaremetadecorate: { signature: \"m m m\" },\n pgfmetadecoration: { signature: \"m\" },\n startpgfmetadecoration: { signature: \"m\" },\n // Constructing paths\n pgfpathmoveto: { signature: \"m\" },\n pgfpathlineto: { signature: \"m\" },\n pgfpathcurveto: { signature: \"m m m\" },\n pgfpathquadraticcurveto: { signature: \"m m\" },\n pgfpathcurvebetweentime: { signature: \"m m m m m m\" },\n pgfpathcurvebetweentimecontinue: { signature: \"m m m m m m\" },\n pgfpatharc: { signature: \"m m m\" },\n pgfpatharcaxes: { signature: \"m m m m\" },\n pgfpatharcto: { signature: \"m m m m m m\" },\n pgfpatharctoprecomputed: { signature: \"m m m m m m m m\" },\n pgfpathellipse: { signature: \"m m m\" },\n pgfpathcircle: { signature: \"m m\" },\n pgfpathrectangle: { signature: \"m m\" },\n pgfpathrectanglecorners: { signature: \"m m\" },\n pgfpathgrid: { signature: \" o m m\" },\n pgfpathparabola: { signature: \"m m\" },\n pgfpathsine: { signature: \"m\" },\n pgfpathcosine: { signature: \"m\" },\n pgfsetcornersarced: { signature: \"m\" },\n \"pgf@protocolsizes\": { signature: \"m m\" },\n // Specifying coordinates\n pgfpoint: { signature: \"m m\" },\n pgfpointpolar: { signature: \"m m m\" },\n pgfpointxy: { signature: \"m m\" },\n pgfsetxvec: { signature: \"m\" },\n pgfsetyvec: { signature: \"m\" },\n pgfpointpolarxy: { signature: \"m m\" },\n pgfpointxyz: { signature: \"m m m\" },\n pgfsetzvec: { signature: \"m\" },\n pgfpointcylindrical: { signature: \"m m m\" },\n pgfpointspherical: { signature: \"m m m\" },\n pgfpointadd: { signature: \"m m\" },\n pgfpointscale: { signature: \"m m\" },\n pgfpointdiff: { signature: \"m m\" },\n pgfpointnormalised: { signature: \"m\" },\n pgfpointlineattime: { signature: \"m m m\" },\n pgfpointlineatdistance: { signature: \"m m m\" },\n pgfpointarcaxesattime: { signature: \"m m m m m m\" },\n pgfpointcurveattime: { signature: \"m m m m m\" },\n pgfpointborderrectangle: { signature: \"m m\" },\n pgfpointborderellipse: { signature: \"m m\" },\n pgfpointintersectionoflines: { signature: \"m m m m\" },\n pgfpointintersectionofcircles: { signature: \"m m m m m\" },\n pgfintersectionofpaths: { signature: \"m m\" },\n pgfpointintersectionsolution: { signature: \"m\" },\n pgfextractx: { signature: \"m m\" },\n pgfextracty: { signature: \"m m\" },\n pgfgetlastxy: { signature: \"m m\" },\n \"pgf@process\": { signature: \"m\" },\n // Heirarchical structres ...\n pgfsetbaseline: { signature: \"m\" },\n pgfsetbaselinepointnow: { signature: \"m\" },\n pgfsetbaselinepointlater: { signature: \"m\" },\n pgftext: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfuseid: { signature: \"m\" },\n pgfusetype: { signature: \"m\" },\n pgfidrefnextuse: { signature: \"m m\" },\n pgfidrefprevuse: { signature: \"m m\" },\n pgfaliasid: { signature: \"m m\" },\n pgfgaliasid: { signature: \"m m\" },\n pgfifidreferenced: { signature: \"m m m\" },\n pgfrdfabout: { signature: \"m\" },\n pgfrdfcontent: { signature: \"m\" },\n pgfrdfdatatype: { signature: \"m\" },\n pgfrdfhref: { signature: \"m\" },\n pgfrdfprefix: { signature: \"m\" },\n pgfrdfproperty: { signature: \"m\" },\n pgfrdfrel: { signature: \"m\" },\n pgfrdfresource: { signature: \"m\" },\n pgfrdfrev: { signature: \"m\" },\n pgfrdfsrc: { signature: \"m\" },\n pgfrdftypeof: { signature: \"m\" },\n pgfrdfvocab: { signature: \"m\" },\n pgferror: { signature: \"m\" },\n pgfwarning: { signature: \"m\" },\n path: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n draw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n fill: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n filldraw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n pattern: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n shade: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n clip: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n useasboundingbox: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n node: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n coordinate: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n graph: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n scoped: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: {\n namedArguments: [\"animation\", \"options\", \"command\"],\n breakAround: true,\n },\n },\n};\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as TikzSpec from \"./types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { TikzPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\ntype TikzParseOptions = {\n startRule?: \"path_spec\" | \"foreach_body\";\n};\n\nfunction createMatchers() {\n return {\n isChar: match.string,\n isTerminal: (node: any) => match.string(node, \";\"),\n isOperation: (node: any) =>\n match.anyString(node) && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node: any) =>\n match.whitespace(node) || match.parbreak(node),\n isComment: match.comment,\n isGroup: match.group,\n isMacro: match.macro,\n isAnyMacro: match.anyMacro,\n };\n}\n\nconst matchers = createMatchers();\n\n/**\n * Parse the contents of the `\\systeme{...}` macro\n */\nexport function parse(\n ast: Ast.Node[],\n options?: Options\n): Options extends { startRule: infer R }\n ? R extends \"path_spec\"\n ? TikzSpec.PathSpec\n : TikzSpec.ForeachBody\n : TikzSpec.PathSpec {\n const { startRule = \"path_spec\" } = options || {};\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 TikzPegParser.parse(ast, {\n ...matchers,\n startRule,\n });\n}\n"],"names":["parseArgspec","colonPos"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js b/node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js new file mode 100644 index 0000000..d2333b1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js @@ -0,0 +1,67 @@ +import { c as cleanEnumerateBody } from "./enumerate-wQeKG6-C.js"; +const macros = { + answerline: { signature: "o" }, + fillin: { signature: "o o" }, + fullwidth: { signature: "m" }, + fillwidthlines: { signature: "m" }, + fillwidthdottedlines: { signature: "m" }, + fillwidthgrid: { signature: "m" }, + makeemptybox: { signature: "m" }, + CorrectChoiceEmphasis: { + signature: "m", + renderInfo: { breakAround: true } + }, + SolutionEmphasis: { signature: "m", renderInfo: { breakAround: true } }, + uplevel: { signature: "m", renderInfo: { breakAround: true } }, + checkboxchar: { signature: "m", renderInfo: { breakAround: true } }, + checkedchar: { signature: "m", renderInfo: { breakAround: true } }, + pointname: { signature: "m", renderInfo: { breakAround: true } }, + marginpointname: { signature: "m", renderInfo: { breakAround: true } }, + extrawidth: { signature: "m", renderInfo: { breakAround: true } }, + pointformat: { signature: "m", renderInfo: { breakAround: true } }, + bonuspointformat: { signature: "m", renderInfo: { breakAround: true } }, + totalformat: { signature: "m", renderInfo: { breakAround: true } }, + qformat: { signature: "m", renderInfo: { breakAround: true } }, + titledquestion: { signature: "m o", renderInfo: { breakAround: true } }, + pointpoints: { signature: "m m", renderInfo: { breakAround: true } }, + bonuspointpoints: { signature: "m m", renderInfo: { breakAround: true } } +}; +const environments = { + choices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + checkboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparchoices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparcheckboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + parts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "part") + }, + subparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subpart") + }, + subsubparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subsubpart") + }, + questions: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "question") + } +}; +export { + environments as e, + macros as m +}; +//# sourceMappingURL=provides-B-HiB8uu.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js.map b/node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js.map new file mode 100644 index 0000000..1ce7fe8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-B-HiB8uu.js.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-B-HiB8uu.js","sources":["../package/exam/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { cleanEnumerateBody } from \"../../utils/enumerate\";\n\nexport const macros: MacroInfoRecord = {\n answerline: { signature: \"o\" },\n fillin: { signature: \"o o\" },\n fullwidth: { signature: \"m\" },\n fillwidthlines: { signature: \"m\" },\n fillwidthdottedlines: { signature: \"m\" },\n fillwidthgrid: { signature: \"m\" },\n makeemptybox: { signature: \"m\" },\n CorrectChoiceEmphasis: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n SolutionEmphasis: { signature: \"m\", renderInfo: { breakAround: true } },\n uplevel: { signature: \"m\", renderInfo: { breakAround: true } },\n checkboxchar: { signature: \"m\", renderInfo: { breakAround: true } },\n checkedchar: { signature: \"m\", renderInfo: { breakAround: true } },\n pointname: { signature: \"m\", renderInfo: { breakAround: true } },\n marginpointname: { signature: \"m\", renderInfo: { breakAround: true } },\n extrawidth: { signature: \"m\", renderInfo: { breakAround: true } },\n pointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n bonuspointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n totalformat: { signature: \"m\", renderInfo: { breakAround: true } },\n qformat: { signature: \"m\", renderInfo: { breakAround: true } },\n titledquestion: { signature: \"m o\", renderInfo: { breakAround: true } },\n pointpoints: { signature: \"m m\", renderInfo: { breakAround: true } },\n bonuspointpoints: { signature: \"m m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n choices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n checkboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n oneparchoices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n oneparcheckboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n parts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"part\"),\n },\n subparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subpart\"),\n },\n subsubparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subsubpart\"),\n },\n questions: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"question\"),\n },\n};\n"],"names":[],"mappings":";AAMO,MAAM,SAA0B;AAAA,EACnC,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,QAAQ,EAAE,WAAW,MAAM;AAAA,EAC3B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,gBAAgB,EAAE,WAAW,IAAI;AAAA,EACjC,sBAAsB,EAAE,WAAW,IAAI;AAAA,EACvC,eAAe,EAAE,WAAW,IAAI;AAAA,EAChC,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,uBAAuB;AAAA,IACnB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,kBAAkB,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACtE,SAAS,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAC7D,cAAc,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAClE,aAAa,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACjE,WAAW,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAC/D,iBAAiB,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACrE,YAAY,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAChE,aAAa,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACjE,kBAAkB,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACtE,aAAa,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACjE,SAAS,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAC7D,gBAAgB,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,OAAO;AAAA,EACtE,aAAa,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,OAAO;AAAA,EACnE,kBAAkB,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,KAAO,EAAA;AAC5E;AAEO,MAAM,eAA8B;AAAA,EACvC,SAAS;AAAA,IACL,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,eAAe;AAAA,IACX,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,kBAAkB;AAAA,IACd,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,OAAO;AAAA,IACH,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,MAAM;AAAA,EAC/D;AAAA,EACA,UAAU;AAAA,IACN,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,SAAS;AAAA,EAClE;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,YAAY;AAAA,EACrE;AAAA,EACA,WAAW;AAAA,IACP,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAU,mBAAmB,OAAO,UAAU;AAAA,EAAA;AAEvE;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js b/node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js new file mode 100644 index 0000000..2671845 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js @@ -0,0 +1,346 @@ +import { trim } from "@unified-latex/unified-latex-util-trim"; +import { c as cleanEnumerateBody } from "./enumerate-wQeKG6-C.js"; +const macros = { + // Special + "\\": { signature: "!s !o", renderInfo: { breakAfter: true } }, + _: { signature: "m", escapeToken: "" }, + "^": { signature: "m", escapeToken: "" }, + // \newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands + // List can be found in latex2e.pdf "An unofficial reference manual" + newcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + renewcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + providecommand: { + signature: "s +m o +o +m", + renderInfo: { breakAround: true } + }, + // Counters + newcounter: { + signature: "m o", + renderInfo: { breakAround: true } + }, + usecounter: { + signature: "m" + }, + setcounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + addtocounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + stepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + refstepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + // Lengths + newlength: { + signature: "m", + renderInfo: { breakAround: true } + }, + addtolength: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settodepth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settoheight: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settowidth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Spaces + stretch: { signature: "m" }, + hspace: { signature: "s m" }, + vspace: { signature: "s m", renderInfo: { breakAround: true } }, + vfill: { renderInfo: { breakAround: true } }, + indent: { renderInfo: { breakAround: true } }, + phantom: { signature: "m" }, + vphantom: { signature: "m" }, + hphantom: { signature: "m" }, + noindent: { renderInfo: { breakAround: true } }, + smallskip: { renderInfo: { breakAround: true } }, + medskip: { renderInfo: { breakAround: true } }, + bigskip: { renderInfo: { breakAround: true } }, + smallbreak: { renderInfo: { breakAround: true } }, + medbreak: { renderInfo: { breakAround: true } }, + bigbreak: { renderInfo: { breakAround: true } }, + newline: { renderInfo: { breakAround: true } }, + linebreak: { signature: "o", renderInfo: { breakAround: true } }, + nolinebreak: { signature: "o", renderInfo: { breakAround: true } }, + clearpage: { renderInfo: { breakAround: true } }, + cleardoublepage: { renderInfo: { breakAround: true } }, + newpage: { renderInfo: { breakAround: true } }, + enlargethispage: { signature: "s", renderInfo: { breakAround: true } }, + pagebreak: { signature: "o", renderInfo: { breakAround: true } }, + nopagebreak: { signature: "o", renderInfo: { breakAround: true } }, + // Boxes + newsavebox: { + signature: "m", + renderInfo: { breakAround: true } + }, + sbox: { + signature: "m m", + renderInfo: { breakAround: true } + }, + savebox: { + signature: "m o o m", + renderInfo: { breakAround: true } + }, + mbox: { signature: "m" }, + makebox: { signature: "d() o o m", renderInfo: { breakAround: true } }, + fbox: { signature: "m" }, + framebox: { signature: "o o m", renderInfo: { breakAround: true } }, + frame: { signature: "m", renderInfo: { breakAround: true } }, + parbox: { signature: "o o o m m", renderInfo: { breakAround: true } }, + raisebox: { signature: "m o o m" }, + marginpar: { signature: "o m", renderInfo: { breakAround: true } }, + colorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + fcolorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + rotatebox: { signature: "o m m" }, + scalebox: { signature: "m o m" }, + reflectbox: { signature: "m" }, + resizebox: { signature: "s m m m" }, + // Define environments + newenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + newtheorem: { + signature: "s m o m o", + renderInfo: { breakAround: true } + }, + newfont: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Counters + alph: { signature: "m" }, + Alph: { signature: "m" }, + arabic: { signature: "m" }, + roman: { signature: "m" }, + Roman: { signature: "m" }, + fnsymbol: { signature: "m" }, + // Other + documentclass: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepackage: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + item: { + signature: "o", + renderInfo: { hangingIndent: true, namedArguments: ["label"] } + }, + value: { signature: "m" }, + centering: { renderInfo: { breakAround: true } }, + input: { signature: "m", renderInfo: { breakAround: true } }, + include: { signature: "m", renderInfo: { breakAround: true } }, + includeonly: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + discretionary: { signature: "m m m" }, + hyphenation: { signature: "m" }, + footnote: { signature: "o m", renderInfo: { inParMode: true } }, + footnotemark: { signature: "o" }, + footnotetext: { signature: "o m", renderInfo: { inParMode: true } }, + caption: { + signature: "o m", + renderInfo: { inParMode: true, breakAround: true } + }, + // Math Commands + sqrt: { signature: "o m", renderInfo: { inMathMode: true } }, + frac: { signature: "m m", renderInfo: { inMathMode: true } }, + stackrel: { signature: "m m" }, + ensuremath: { signature: "m", renderInfo: { inMathMode: true } }, + // Layout commands + abstract: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + maketitle: { renderInfo: { breakAround: true } }, + doublespacing: { renderInfo: { breakAround: true } }, + singlespacing: { renderInfo: { breakAround: true } }, + date: { signature: "o m", renderInfo: { breakAround: true } }, + thanks: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + pagenumbering: { signature: "m", renderInfo: { breakAround: true } }, + pagestyle: { signature: "m", renderInfo: { breakAround: true } }, + thispagestyle: { signature: "m", renderInfo: { breakAround: true } }, + // Colors + definecolor: { signature: "m m m", renderInfo: { breakAround: true } }, + pagecolor: { signature: "o m", renderInfo: { breakAround: true } }, + nopagecolor: { renderInfo: { breakAround: true } }, + multicolumn: { signature: "m m m" }, + // Graphics + includegraphics: { + signature: "s o o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + rule: { signature: "o m m" }, + // Sectioning + part: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + chapter: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + section: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + paragraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subparagraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + appendix: { renderInfo: { breakAround: true, inParMode: true } }, + frontmatter: { renderInfo: { breakAround: true, inParMode: true } }, + mainmatter: { renderInfo: { breakAround: true, inParMode: true } }, + backmatter: { renderInfo: { breakAround: true, inParMode: true } }, + // Citing and references + bibitem: { signature: "o m", renderInfo: { hangingIndent: true } }, + cite: { signature: "o m" }, + // Fonts + textrm: { signature: "m", renderInfo: { inParMode: true } }, + textit: { signature: "m", renderInfo: { inParMode: true } }, + textmd: { signature: "m", renderInfo: { inParMode: true } }, + textbf: { signature: "m", renderInfo: { inParMode: true } }, + textup: { signature: "m", renderInfo: { inParMode: true } }, + textsl: { signature: "m", renderInfo: { inParMode: true } }, + textsf: { signature: "m", renderInfo: { inParMode: true } }, + textsc: { signature: "m", renderInfo: { inParMode: true } }, + texttt: { signature: "m", renderInfo: { inParMode: true } }, + underline: { signature: "m", renderInfo: { inParMode: true } }, + emph: { signature: "m", renderInfo: { inParMode: true } }, + textnormal: { signature: "m", renderInfo: { inParMode: true } }, + uppercase: { signature: "m", renderInfo: { inParMode: true } }, + mathbf: { signature: "m" }, + mathsf: { signature: "m" }, + mathtt: { signature: "m" }, + mathit: { signature: "m" }, + mathnormal: { signature: "m" }, + mathcal: { signature: "m" }, + mathrm: { signature: "m" }, + // Other + setlength: { signature: "m m", renderInfo: { breakAround: true } }, + ref: { signature: "s m" }, + label: { signature: "o m" }, + // cleveref changes \label to have this signature + printbibliography: { renderInfo: { breakAround: true } }, + addtocontents: { signature: "m m", renderInfo: { breakAround: true } }, + addcontentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + contentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + bibliography: { signature: "m", renderInfo: { breakAround: true } }, + bibliographystyle: { signature: "m", renderInfo: { breakAround: true } } +}; +const environments = { + document: { + processContent: (nodes) => { + trim(nodes); + return nodes; + } + }, + array: { signature: "o m", renderInfo: { alignContent: true } }, + description: { signature: "o", processContent: cleanEnumerateBody }, + enumerate: { + signature: "o", + processContent: cleanEnumerateBody, + renderInfo: { pgfkeysArgs: true } + }, + itemize: { signature: "o", processContent: cleanEnumerateBody }, + trivlist: { signature: "o", processContent: cleanEnumerateBody }, + list: { signature: "m m", processContent: cleanEnumerateBody }, + figure: { signature: "o" }, + "figure*": { signature: "o" }, + filecontents: { signature: "o m" }, + "filecontents*": { signature: "o m" }, + minipage: { signature: "o o o m" }, + picture: { signature: "r() d()" }, + tabbing: { renderInfo: { alignContent: true } }, + table: { signature: "o" }, + tabular: { signature: "o m", renderInfo: { alignContent: true } }, + "tabular*": { signature: "m o m", renderInfo: { alignContent: true } }, + thebibliography: { + signature: "m", + processContent: (nodes) => cleanEnumerateBody(nodes, "bibitem") + }, + // Math + math: { renderInfo: { inMathMode: true } } +}; +export { + environments as e, + macros as m +}; +//# sourceMappingURL=provides-BUHzyq9A.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js.map b/node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js.map new file mode 100644 index 0000000..ca134de --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-BUHzyq9A.js.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-BUHzyq9A.js","sources":["../package/latex2e/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { cleanEnumerateBody } from \"../../utils/enumerate\";\n\nexport const macros: MacroInfoRecord = {\n // Special\n \"\\\\\": { signature: \"!s !o\", renderInfo: { breakAfter: true } },\n _: { signature: \"m\", escapeToken: \"\" },\n \"^\": { signature: \"m\", escapeToken: \"\" },\n // \\newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands\n // List can be found in latex2e.pdf \"An unofficial reference manual\"\n newcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"],\n },\n },\n renewcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"],\n },\n },\n providecommand: {\n signature: \"s +m o +o +m\",\n renderInfo: { breakAround: true },\n },\n // Counters\n newcounter: {\n signature: \"m o\",\n renderInfo: { breakAround: true },\n },\n usecounter: {\n signature: \"m\",\n },\n setcounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n addtocounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n stepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n refstepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n // Lengths\n newlength: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n addtolength: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settodepth: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settoheight: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settowidth: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n // Spaces\n stretch: { signature: \"m\" },\n hspace: { signature: \"s m\" },\n vspace: { signature: \"s m\", renderInfo: { breakAround: true } },\n vfill: { renderInfo: { breakAround: true } },\n indent: { renderInfo: { breakAround: true } },\n phantom: { signature: \"m\" },\n vphantom: { signature: \"m\" },\n hphantom: { signature: \"m\" },\n noindent: { renderInfo: { breakAround: true } },\n smallskip: { renderInfo: { breakAround: true } },\n medskip: { renderInfo: { breakAround: true } },\n bigskip: { renderInfo: { breakAround: true } },\n smallbreak: { renderInfo: { breakAround: true } },\n medbreak: { renderInfo: { breakAround: true } },\n bigbreak: { renderInfo: { breakAround: true } },\n newline: { renderInfo: { breakAround: true } },\n linebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nolinebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n clearpage: { renderInfo: { breakAround: true } },\n cleardoublepage: { renderInfo: { breakAround: true } },\n newpage: { renderInfo: { breakAround: true } },\n enlargethispage: { signature: \"s\", renderInfo: { breakAround: true } },\n pagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nopagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n // Boxes\n newsavebox: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n sbox: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n savebox: {\n signature: \"m o o m\",\n renderInfo: { breakAround: true },\n },\n mbox: { signature: \"m\" },\n makebox: { signature: \"d() o o m\", renderInfo: { breakAround: true } },\n fbox: { signature: \"m\" },\n framebox: { signature: \"o o m\", renderInfo: { breakAround: true } },\n frame: { signature: \"m\", renderInfo: { breakAround: true } },\n parbox: { signature: \"o o o m m\", renderInfo: { breakAround: true } },\n raisebox: { signature: \"m o o m\" },\n marginpar: { signature: \"o m\", renderInfo: { breakAround: true } },\n colorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n fcolorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n rotatebox: { signature: \"o m m\" },\n scalebox: { signature: \"m o m\" },\n reflectbox: { signature: \"m\" },\n resizebox: { signature: \"s m m m\" },\n // Define environments\n newenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true },\n },\n renewenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true },\n },\n newtheorem: {\n signature: \"s m o m o\",\n renderInfo: { breakAround: true },\n },\n newfont: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n // Counters\n alph: { signature: \"m\" },\n Alph: { signature: \"m\" },\n arabic: { signature: \"m\" },\n roman: { signature: \"m\" },\n Roman: { signature: \"m\" },\n fnsymbol: { signature: \"m\" },\n // Other\n documentclass: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usepackage: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n item: {\n signature: \"o\",\n renderInfo: { hangingIndent: true, namedArguments: [\"label\"] },\n },\n value: { signature: \"m\" },\n centering: { renderInfo: { breakAround: true } },\n input: { signature: \"m\", renderInfo: { breakAround: true } },\n include: { signature: \"m\", renderInfo: { breakAround: true } },\n includeonly: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n discretionary: { signature: \"m m m\" },\n hyphenation: { signature: \"m\" },\n footnote: { signature: \"o m\", renderInfo: { inParMode: true } },\n footnotemark: { signature: \"o\" },\n footnotetext: { signature: \"o m\", renderInfo: { inParMode: true } },\n caption: {\n signature: \"o m\",\n renderInfo: { inParMode: true, breakAround: true },\n },\n // Math Commands\n sqrt: { signature: \"o m\", renderInfo: { inMathMode: true } },\n frac: { signature: \"m m\", renderInfo: { inMathMode: true } },\n stackrel: { signature: \"m m\" },\n ensuremath: { signature: \"m\", renderInfo: { inMathMode: true } },\n // Layout commands\n abstract: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n maketitle: { renderInfo: { breakAround: true } },\n doublespacing: { renderInfo: { breakAround: true } },\n singlespacing: { renderInfo: { breakAround: true } },\n date: { signature: \"o m\", renderInfo: { breakAround: true } },\n thanks: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n pagenumbering: { signature: \"m\", renderInfo: { breakAround: true } },\n pagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n thispagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n // Colors\n definecolor: { signature: \"m m m\", renderInfo: { breakAround: true } },\n pagecolor: { signature: \"o m\", renderInfo: { breakAround: true } },\n nopagecolor: { renderInfo: { breakAround: true } },\n multicolumn: { signature: \"m m m\" },\n // Graphics\n includegraphics: {\n signature: \"s o o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n rule: { signature: \"o m m\" },\n // Sectioning\n part: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n chapter: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n section: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subsubsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n paragraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subparagraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n appendix: { renderInfo: { breakAround: true, inParMode: true } },\n frontmatter: { renderInfo: { breakAround: true, inParMode: true } },\n mainmatter: { renderInfo: { breakAround: true, inParMode: true } },\n backmatter: { renderInfo: { breakAround: true, inParMode: true } },\n // Citing and references\n bibitem: { signature: \"o m\", renderInfo: { hangingIndent: true } },\n cite: { signature: \"o m\" },\n // Fonts\n textrm: { signature: \"m\", renderInfo: { inParMode: true } },\n textit: { signature: \"m\", renderInfo: { inParMode: true } },\n textmd: { signature: \"m\", renderInfo: { inParMode: true } },\n textbf: { signature: \"m\", renderInfo: { inParMode: true } },\n textup: { signature: \"m\", renderInfo: { inParMode: true } },\n textsl: { signature: \"m\", renderInfo: { inParMode: true } },\n textsf: { signature: \"m\", renderInfo: { inParMode: true } },\n textsc: { signature: \"m\", renderInfo: { inParMode: true } },\n texttt: { signature: \"m\", renderInfo: { inParMode: true } },\n underline: { signature: \"m\", renderInfo: { inParMode: true } },\n emph: { signature: \"m\", renderInfo: { inParMode: true } },\n textnormal: { signature: \"m\", renderInfo: { inParMode: true } },\n uppercase: { signature: \"m\", renderInfo: { inParMode: true } },\n mathbf: { signature: \"m\" },\n mathsf: { signature: \"m\" },\n mathtt: { signature: \"m\" },\n mathit: { signature: \"m\" },\n mathnormal: { signature: \"m\" },\n mathcal: { signature: \"m\" },\n mathrm: { signature: \"m\" },\n // Other\n setlength: { signature: \"m m\", renderInfo: { breakAround: true } },\n ref: { signature: \"s m\" },\n label: { signature: \"o m\" }, // cleveref changes \\label to have this signature\n printbibliography: { renderInfo: { breakAround: true } },\n addtocontents: { signature: \"m m\", renderInfo: { breakAround: true } },\n addcontentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n contentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n bibliography: { signature: \"m\", renderInfo: { breakAround: true } },\n bibliographystyle: { signature: \"m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n document: {\n processContent: (nodes) => {\n trim(nodes);\n return nodes;\n },\n },\n array: { signature: \"o m\", renderInfo: { alignContent: true } },\n description: { signature: \"o\", processContent: cleanEnumerateBody },\n enumerate: {\n signature: \"o\",\n processContent: cleanEnumerateBody,\n renderInfo: { pgfkeysArgs: true },\n },\n itemize: { signature: \"o\", processContent: cleanEnumerateBody },\n trivlist: { signature: \"o\", processContent: cleanEnumerateBody },\n list: { signature: \"m m\", processContent: cleanEnumerateBody },\n figure: { signature: \"o\" },\n \"figure*\": { signature: \"o\" },\n filecontents: { signature: \"o m\" },\n \"filecontents*\": { signature: \"o m\" },\n minipage: { signature: \"o o o m\" },\n picture: { signature: \"r() d()\" },\n tabbing: { renderInfo: { alignContent: true } },\n table: { signature: \"o\" },\n tabular: { signature: \"o m\", renderInfo: { alignContent: true } },\n \"tabular*\": { signature: \"m o m\", renderInfo: { alignContent: true } },\n thebibliography: {\n signature: \"m\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"bibitem\"),\n },\n // Math\n math: { renderInfo: { inMathMode: true } },\n};\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs b/node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs new file mode 100644 index 0000000..a23e6cc --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs @@ -0,0 +1,56 @@ +"use strict"; +const unifiedLatexBuilder = require("@unified-latex/unified-latex-builder"); +const unifiedLatexUtilArgspec = require("@unified-latex/unified-latex-util-argspec"); +const unifiedLatexUtilArguments = require("@unified-latex/unified-latex-util-arguments"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const argSpecM = unifiedLatexUtilArgspec.parse("m")[0]; +const argSpecO = unifiedLatexUtilArgspec.parse("o")[0]; +const argSpecRDelim = {}; +const argumentParser = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = unifiedLatexUtilArguments.gobbleSingleArgument(nodes, argSpecO, startPos); + const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } = unifiedLatexUtilArguments.gobbleSingleArgument(nodes, argSpecM, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (unifiedLatexUtilMatch.match.group(nextNode)) { + const mandatoryArg = unifiedLatexUtilArguments.gobbleSingleArgument(nodes, argSpecM, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (unifiedLatexUtilMatch.match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim[delim] = argSpecRDelim[delim] || unifiedLatexUtilArgspec.parse(`r${delim}${delim}`)[0]; + const delimArg = unifiedLatexUtilArguments.gobbleSingleArgument( + nodes, + argSpecRDelim[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [ + optionalArg || unifiedLatexBuilder.arg(null), + languageArg || unifiedLatexBuilder.arg(null), + codeArg || unifiedLatexBuilder.arg(null) + ], + nodesRemoved: optionalArgNodesRemoved + languageArgNodesRemoved + codeArgNodesRemoved + }; +}; +const macros = { + mint: { argumentParser }, + mintinline: { argumentParser }, + inputminted: { argumentParser }, + usemintedstyle: { signature: "m" }, + setminted: { signature: "o m" }, + setmintedinline: { signature: "o m" }, + newmint: { signature: "o m m" }, + newminted: { signature: "o m m" }, + newmintinline: { signature: "o m m" }, + newmintedfile: { signature: "o m m" } +}; +const environments = { + minted: { signature: "o m" } +}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=provides-Bdw2Aj_V.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs.map new file mode 100644 index 0000000..671717a --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-Bdw2Aj_V.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-Bdw2Aj_V.cjs","sources":["../package/minted/libs/argument-parser.ts","../package/minted/provides.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { parse as parseArgspec } from \"@unified-latex/unified-latex-util-argspec\";\nimport { Node } from \"@unified-latex/unified-latex-util-argspec/libs/argspec-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nconst argSpecM = parseArgspec(\"m\")[0];\nconst argSpecO = parseArgspec(\"o\")[0];\nconst argSpecRDelim: { [delim: string]: Node } = {};\n\n/**\n * This argument parser parses arguments in the form of\n * - [⟨options⟩]{⟨language⟩}⟨delim⟩⟨code⟩⟨delim⟩\n * - [⟨options⟩]{⟨language⟩}{⟨code⟩}\n */\nexport const argumentParser: ArgumentParser = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecO, startPos);\n\n const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecM, startPos);\n\n let codeArg: Argument | Argument[] | null = null;\n let codeArgNodesRemoved: number = 0;\n const nextNode = nodes[startPos];\n if (match.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim[delim] =\n argSpecRDelim[delim] || parseArgspec(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument(\n nodes,\n argSpecRDelim[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n\n return {\n args: [\n optionalArg || arg(null),\n languageArg || arg(null),\n codeArg || arg(null),\n ],\n nodesRemoved:\n optionalArgNodesRemoved +\n languageArgNodesRemoved +\n codeArgNodesRemoved,\n };\n};\n","import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { argumentParser } from \"./libs/argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n mint: { argumentParser: argumentParser },\n mintinline: { argumentParser: argumentParser },\n inputminted: { argumentParser: argumentParser },\n usemintedstyle: { signature: \"m\" },\n setminted: { signature: \"o m\" },\n setmintedinline: { signature: \"o m\" },\n newmint: { signature: \"o m m\" },\n newminted: { signature: \"o m m\" },\n newmintinline: { signature: \"o m m\" },\n newmintedfile: { signature: \"o m m\" },\n};\n\nexport const environments: EnvInfoRecord = {\n minted: { signature: \"o m\" },\n};\n"],"names":["parseArgspec","gobbleSingleArgument","match","arg"],"mappings":";;;;;AAOA,MAAM,WAAWA,wBAAA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,WAAWA,wBAAA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,gBAA2C,CAAC;AAOrC,MAAA,iBAAiC,CAAC,OAAO,aAAa;AACzD,QAAA,EAAE,UAAU,aAAa,cAAc,wBACzC,IAAAC,+CAAqB,OAAO,UAAU,QAAQ;AAE5C,QAAA,EAAE,UAAU,aAAa,cAAc,wBACzC,IAAAA,+CAAqB,OAAO,UAAU,QAAQ;AAElD,MAAI,UAAwC;AAC5C,MAAI,sBAA8B;AAC5B,QAAA,WAAW,MAAM,QAAQ;AAC3B,MAAAC,sBAAA,MAAM,MAAM,QAAQ,GAAG;AACvB,UAAM,eAAeD,0BAAA,qBAAqB,OAAO,UAAU,QAAQ;AACnE,cAAU,aAAa;AACvB,0BAAsB,aAAa;AAAA,EAAA,WAC5BC,sBAAAA,MAAM,OAAO,QAAQ,KAAK,SAAS,QAAQ,WAAW,GAAG;AAChE,UAAM,QAAQ,SAAS;AACvB,kBAAc,KAAK,IACf,cAAc,KAAK,KAAKF,wBAAA,MAAa,IAAI,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC;AAC/D,UAAM,WAAWC,0BAAA;AAAA,MACb;AAAA,MACA,cAAc,KAAK;AAAA,MACnB;AAAA,IACJ;AACA,cAAU,SAAS;AACnB,0BAAsB,SAAS;AAAA,EAAA;AAG5B,SAAA;AAAA,IACH,MAAM;AAAA,MACF,eAAeE,wBAAI,IAAI;AAAA,MACvB,eAAeA,wBAAI,IAAI;AAAA,MACvB,WAAWA,wBAAI,IAAI;AAAA,IACvB;AAAA,IACA,cACI,0BACA,0BACA;AAAA,EACR;AACJ;AChDO,MAAM,SAA0B;AAAA,EACnC,MAAM,EAAE,eAA+B;AAAA,EACvC,YAAY,EAAE,eAA+B;AAAA,EAC7C,aAAa,EAAE,eAA+B;AAAA,EAC9C,gBAAgB,EAAE,WAAW,IAAI;AAAA,EACjC,WAAW,EAAE,WAAW,MAAM;AAAA,EAC9B,iBAAiB,EAAE,WAAW,MAAM;AAAA,EACpC,SAAS,EAAE,WAAW,QAAQ;AAAA,EAC9B,WAAW,EAAE,WAAW,QAAQ;AAAA,EAChC,eAAe,EAAE,WAAW,QAAQ;AAAA,EACpC,eAAe,EAAE,WAAW,QAAQ;AACxC;AAEO,MAAM,eAA8B;AAAA,EACvC,QAAQ,EAAE,WAAW,MAAM;AAC/B;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs b/node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs new file mode 100644 index 0000000..e4713f5 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs @@ -0,0 +1,50 @@ +"use strict"; +const unifiedLatexBuilder = require("@unified-latex/unified-latex-builder"); +const unifiedLatexUtilArgspec = require("@unified-latex/unified-latex-util-argspec"); +const unifiedLatexUtilArguments = require("@unified-latex/unified-latex-util-arguments"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const argSpecM = unifiedLatexUtilArgspec.parse("m")[0]; +const argSpecO = unifiedLatexUtilArgspec.parse("o")[0]; +const argSpecRDelim = {}; +const argumentParser = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = unifiedLatexUtilArguments.gobbleSingleArgument(nodes, argSpecO, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (unifiedLatexUtilMatch.match.group(nextNode)) { + const mandatoryArg = unifiedLatexUtilArguments.gobbleSingleArgument(nodes, argSpecM, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (unifiedLatexUtilMatch.match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim[delim] = argSpecRDelim[delim] || unifiedLatexUtilArgspec.parse(`r${delim}${delim}`)[0]; + const delimArg = unifiedLatexUtilArguments.gobbleSingleArgument( + nodes, + argSpecRDelim[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [optionalArg || unifiedLatexBuilder.arg(null), codeArg || unifiedLatexBuilder.arg(null)], + nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved + }; +}; +const macros = { + lstset: { signature: "m" }, + lstinline: { argumentParser }, + lstinputlisting: { signature: "o m" }, + lstdefinestyle: { signature: "m m" }, + lstnewenvironment: { signature: "m o o m m" }, + lstMakeShortInline: { signature: "o m" }, + lstDeleteShortInline: { signature: "m" }, + lstdefineformat: { signature: "m m" }, + lstdefinelanguage: { signature: "o m o m o" }, + lstalias: { signature: "o m o m" }, + lstloadlanguages: { signature: "m" } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=provides-BjJALsf_.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs.map new file mode 100644 index 0000000..4920337 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-BjJALsf_.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-BjJALsf_.cjs","sources":["../package/listings/libs/argument-parser.ts","../package/listings/provides.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { parse as parseArgspec } from \"@unified-latex/unified-latex-util-argspec\";\nimport { Node } from \"@unified-latex/unified-latex-util-argspec/libs/argspec-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nconst argSpecM = parseArgspec(\"m\")[0];\nconst argSpecO = parseArgspec(\"o\")[0];\nconst argSpecRDelim: { [delim: string]: Node } = {};\n\n/**\n * This argument parser parses arguments in the form of\n * - [⟨key=value list⟩]⟨character⟩⟨source code⟩⟨same character⟩\n * - [⟨key=value list⟩]{⟨source code⟩}\n */\nexport const argumentParser: ArgumentParser = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecO, startPos);\n\n let codeArg: Argument | Argument[] | null = null;\n let codeArgNodesRemoved: number = 0;\n const nextNode = nodes[startPos];\n if (match.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim[delim] =\n argSpecRDelim[delim] || parseArgspec(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument(\n nodes,\n argSpecRDelim[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n\n return {\n args: [optionalArg || arg(null), codeArg || arg(null)],\n nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved,\n };\n};\n","import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { argumentParser } from \"./libs/argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n lstset: { signature: \"m\" },\n lstinline: { argumentParser: argumentParser },\n lstinputlisting: { signature: \"o m\" },\n lstdefinestyle: { signature: \"m m\" },\n lstnewenvironment: { signature: \"m o o m m\" },\n lstMakeShortInline: { signature: \"o m\" },\n lstDeleteShortInline: { signature: \"m\" },\n lstdefineformat: { signature: \"m m\" },\n lstdefinelanguage: { signature: \"o m o m o\" },\n lstalias: { signature: \"o m o m\" },\n lstloadlanguages: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":["parseArgspec","gobbleSingleArgument","match","arg"],"mappings":";;;;;AAOA,MAAM,WAAWA,wBAAA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,WAAWA,wBAAA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,gBAA2C,CAAC;AAOrC,MAAA,iBAAiC,CAAC,OAAO,aAAa;AACzD,QAAA,EAAE,UAAU,aAAa,cAAc,wBACzC,IAAAC,+CAAqB,OAAO,UAAU,QAAQ;AAElD,MAAI,UAAwC;AAC5C,MAAI,sBAA8B;AAC5B,QAAA,WAAW,MAAM,QAAQ;AAC3B,MAAAC,sBAAA,MAAM,MAAM,QAAQ,GAAG;AACvB,UAAM,eAAeD,0BAAA,qBAAqB,OAAO,UAAU,QAAQ;AACnE,cAAU,aAAa;AACvB,0BAAsB,aAAa;AAAA,EAAA,WAC5BC,sBAAAA,MAAM,OAAO,QAAQ,KAAK,SAAS,QAAQ,WAAW,GAAG;AAChE,UAAM,QAAQ,SAAS;AACvB,kBAAc,KAAK,IACf,cAAc,KAAK,KAAKF,wBAAA,MAAa,IAAI,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC;AAC/D,UAAM,WAAWC,0BAAA;AAAA,MACb;AAAA,MACA,cAAc,KAAK;AAAA,MACnB;AAAA,IACJ;AACA,cAAU,SAAS;AACnB,0BAAsB,SAAS;AAAA,EAAA;AAG5B,SAAA;AAAA,IACH,MAAM,CAAC,eAAeE,wBAAI,IAAI,GAAG,WAAWA,oBAAAA,IAAI,IAAI,CAAC;AAAA,IACrD,cAAc,0BAA0B;AAAA,EAC5C;AACJ;ACtCO,MAAM,SAA0B;AAAA,EACnC,QAAQ,EAAE,WAAW,IAAI;AAAA,EACzB,WAAW,EAAE,eAA+B;AAAA,EAC5C,iBAAiB,EAAE,WAAW,MAAM;AAAA,EACpC,gBAAgB,EAAE,WAAW,MAAM;AAAA,EACnC,mBAAmB,EAAE,WAAW,YAAY;AAAA,EAC5C,oBAAoB,EAAE,WAAW,MAAM;AAAA,EACvC,sBAAsB,EAAE,WAAW,IAAI;AAAA,EACvC,iBAAiB,EAAE,WAAW,MAAM;AAAA,EACpC,mBAAmB,EAAE,WAAW,YAAY;AAAA,EAC5C,UAAU,EAAE,WAAW,UAAU;AAAA,EACjC,kBAAkB,EAAE,WAAW,IAAI;AACvC;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js b/node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js new file mode 100644 index 0000000..2da9d9a --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js @@ -0,0 +1,51 @@ +import { arg } from "@unified-latex/unified-latex-builder"; +import { parse } from "@unified-latex/unified-latex-util-argspec"; +import { gobbleSingleArgument } from "@unified-latex/unified-latex-util-arguments"; +import { match } from "@unified-latex/unified-latex-util-match"; +const argSpecM = parse("m")[0]; +const argSpecO = parse("o")[0]; +const argSpecRDelim = {}; +const argumentParser = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim[delim] = argSpecRDelim[delim] || parse(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [optionalArg || arg(null), codeArg || arg(null)], + nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved + }; +}; +const macros = { + lstset: { signature: "m" }, + lstinline: { argumentParser }, + lstinputlisting: { signature: "o m" }, + lstdefinestyle: { signature: "m m" }, + lstnewenvironment: { signature: "m o o m m" }, + lstMakeShortInline: { signature: "o m" }, + lstDeleteShortInline: { signature: "m" }, + lstdefineformat: { signature: "m m" }, + lstdefinelanguage: { signature: "o m o m o" }, + lstalias: { signature: "o m o m" }, + lstloadlanguages: { signature: "m" } +}; +const environments = {}; +export { + environments as e, + macros as m +}; +//# sourceMappingURL=provides-Ch0mvkO_.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js.map b/node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js.map new file mode 100644 index 0000000..0368d19 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-Ch0mvkO_.js.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-Ch0mvkO_.js","sources":["../package/listings/libs/argument-parser.ts","../package/listings/provides.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { parse as parseArgspec } from \"@unified-latex/unified-latex-util-argspec\";\nimport { Node } from \"@unified-latex/unified-latex-util-argspec/libs/argspec-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nconst argSpecM = parseArgspec(\"m\")[0];\nconst argSpecO = parseArgspec(\"o\")[0];\nconst argSpecRDelim: { [delim: string]: Node } = {};\n\n/**\n * This argument parser parses arguments in the form of\n * - [⟨key=value list⟩]⟨character⟩⟨source code⟩⟨same character⟩\n * - [⟨key=value list⟩]{⟨source code⟩}\n */\nexport const argumentParser: ArgumentParser = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecO, startPos);\n\n let codeArg: Argument | Argument[] | null = null;\n let codeArgNodesRemoved: number = 0;\n const nextNode = nodes[startPos];\n if (match.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim[delim] =\n argSpecRDelim[delim] || parseArgspec(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument(\n nodes,\n argSpecRDelim[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n\n return {\n args: [optionalArg || arg(null), codeArg || arg(null)],\n nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved,\n };\n};\n","import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { argumentParser } from \"./libs/argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n lstset: { signature: \"m\" },\n lstinline: { argumentParser: argumentParser },\n lstinputlisting: { signature: \"o m\" },\n lstdefinestyle: { signature: \"m m\" },\n lstnewenvironment: { signature: \"m o o m m\" },\n lstMakeShortInline: { signature: \"o m\" },\n lstDeleteShortInline: { signature: \"m\" },\n lstdefineformat: { signature: \"m m\" },\n lstdefinelanguage: { signature: \"o m o m o\" },\n lstalias: { signature: \"o m o m\" },\n lstloadlanguages: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":["parseArgspec"],"mappings":";;;;AAOA,MAAM,WAAWA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,WAAWA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,gBAA2C,CAAC;AAOrC,MAAA,iBAAiC,CAAC,OAAO,aAAa;AACzD,QAAA,EAAE,UAAU,aAAa,cAAc,wBACzC,IAAA,qBAAqB,OAAO,UAAU,QAAQ;AAElD,MAAI,UAAwC;AAC5C,MAAI,sBAA8B;AAC5B,QAAA,WAAW,MAAM,QAAQ;AAC3B,MAAA,MAAM,MAAM,QAAQ,GAAG;AACvB,UAAM,eAAe,qBAAqB,OAAO,UAAU,QAAQ;AACnE,cAAU,aAAa;AACvB,0BAAsB,aAAa;AAAA,EAAA,WAC5B,MAAM,OAAO,QAAQ,KAAK,SAAS,QAAQ,WAAW,GAAG;AAChE,UAAM,QAAQ,SAAS;AACvB,kBAAc,KAAK,IACf,cAAc,KAAK,KAAKA,MAAa,IAAI,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC;AAC/D,UAAM,WAAW;AAAA,MACb;AAAA,MACA,cAAc,KAAK;AAAA,MACnB;AAAA,IACJ;AACA,cAAU,SAAS;AACnB,0BAAsB,SAAS;AAAA,EAAA;AAG5B,SAAA;AAAA,IACH,MAAM,CAAC,eAAe,IAAI,IAAI,GAAG,WAAW,IAAI,IAAI,CAAC;AAAA,IACrD,cAAc,0BAA0B;AAAA,EAC5C;AACJ;ACtCO,MAAM,SAA0B;AAAA,EACnC,QAAQ,EAAE,WAAW,IAAI;AAAA,EACzB,WAAW,EAAE,eAA+B;AAAA,EAC5C,iBAAiB,EAAE,WAAW,MAAM;AAAA,EACpC,gBAAgB,EAAE,WAAW,MAAM;AAAA,EACnC,mBAAmB,EAAE,WAAW,YAAY;AAAA,EAC5C,oBAAoB,EAAE,WAAW,MAAM;AAAA,EACvC,sBAAsB,EAAE,WAAW,IAAI;AAAA,EACvC,iBAAiB,EAAE,WAAW,MAAM;AAAA,EACpC,mBAAmB,EAAE,WAAW,YAAY;AAAA,EAC5C,UAAU,EAAE,WAAW,UAAU;AAAA,EACjC,kBAAkB,EAAE,WAAW,IAAI;AACvC;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs b/node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs new file mode 100644 index 0000000..466e261 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs @@ -0,0 +1,26 @@ +"use strict"; +const macros = { + systeme: { + signature: "s o o m", + renderInfo: { inMathMode: true } + }, + sysdelim: { + signature: "m m" + }, + syseqsep: { signature: "m" }, + sysalign: { signature: "m" }, + syssignspace: { signature: "m" }, + syseqspace: { signature: "m" }, + syslineskipcoeff: { signature: "m" }, + syseqivsign: { signature: "m" }, + sysaddeqsign: { signature: "m" }, + sysremoveeqsign: { signature: "m" }, + sysextracolonsign: { signature: "m" }, + syscodeextracol: { signature: "m" }, + sysautonum: { signature: "m" }, + syssubstitute: { signature: "m" } +}; +const environments = {}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=provides-CwtnTL9q.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs.map new file mode 100644 index 0000000..877fcb1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-CwtnTL9q.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-CwtnTL9q.cjs","sources":["../package/systeme/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n systeme: {\n signature: \"s o o m\",\n renderInfo: { inMathMode: true },\n },\n sysdelim: {\n signature: \"m m\",\n },\n syseqsep: { signature: \"m\" },\n sysalign: { signature: \"m\" },\n syssignspace: { signature: \"m\" },\n syseqspace: { signature: \"m\" },\n syslineskipcoeff: { signature: \"m\" },\n syseqivsign: { signature: \"m\" },\n sysaddeqsign: { signature: \"m\" },\n sysremoveeqsign: { signature: \"m\" },\n sysextracolonsign: { signature: \"m\" },\n syscodeextracol: { signature: \"m\" },\n sysautonum: { signature: \"m\" },\n syssubstitute: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":";AAKO,MAAM,SAA0B;AAAA,EACnC,SAAS;AAAA,IACL,WAAW;AAAA,IACX,YAAY,EAAE,YAAY,KAAK;AAAA,EACnC;AAAA,EACA,UAAU;AAAA,IACN,WAAW;AAAA,EACf;AAAA,EACA,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,kBAAkB,EAAE,WAAW,IAAI;AAAA,EACnC,aAAa,EAAE,WAAW,IAAI;AAAA,EAC9B,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,iBAAiB,EAAE,WAAW,IAAI;AAAA,EAClC,mBAAmB,EAAE,WAAW,IAAI;AAAA,EACpC,iBAAiB,EAAE,WAAW,IAAI;AAAA,EAClC,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,eAAe,EAAE,WAAW,IAAI;AACpC;AAEO,MAAM,eAA8B,CAAA;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs b/node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs new file mode 100644 index 0000000..ec95142 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs @@ -0,0 +1,345 @@ +"use strict"; +const unifiedLatexUtilTrim = require("@unified-latex/unified-latex-util-trim"); +const enumerate = require("./enumerate-DSh8p1uS.cjs"); +const macros = { + // Special + "\\": { signature: "!s !o", renderInfo: { breakAfter: true } }, + _: { signature: "m", escapeToken: "" }, + "^": { signature: "m", escapeToken: "" }, + // \newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands + // List can be found in latex2e.pdf "An unofficial reference manual" + newcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + renewcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + providecommand: { + signature: "s +m o +o +m", + renderInfo: { breakAround: true } + }, + // Counters + newcounter: { + signature: "m o", + renderInfo: { breakAround: true } + }, + usecounter: { + signature: "m" + }, + setcounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + addtocounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + stepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + refstepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + // Lengths + newlength: { + signature: "m", + renderInfo: { breakAround: true } + }, + addtolength: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settodepth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settoheight: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settowidth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Spaces + stretch: { signature: "m" }, + hspace: { signature: "s m" }, + vspace: { signature: "s m", renderInfo: { breakAround: true } }, + vfill: { renderInfo: { breakAround: true } }, + indent: { renderInfo: { breakAround: true } }, + phantom: { signature: "m" }, + vphantom: { signature: "m" }, + hphantom: { signature: "m" }, + noindent: { renderInfo: { breakAround: true } }, + smallskip: { renderInfo: { breakAround: true } }, + medskip: { renderInfo: { breakAround: true } }, + bigskip: { renderInfo: { breakAround: true } }, + smallbreak: { renderInfo: { breakAround: true } }, + medbreak: { renderInfo: { breakAround: true } }, + bigbreak: { renderInfo: { breakAround: true } }, + newline: { renderInfo: { breakAround: true } }, + linebreak: { signature: "o", renderInfo: { breakAround: true } }, + nolinebreak: { signature: "o", renderInfo: { breakAround: true } }, + clearpage: { renderInfo: { breakAround: true } }, + cleardoublepage: { renderInfo: { breakAround: true } }, + newpage: { renderInfo: { breakAround: true } }, + enlargethispage: { signature: "s", renderInfo: { breakAround: true } }, + pagebreak: { signature: "o", renderInfo: { breakAround: true } }, + nopagebreak: { signature: "o", renderInfo: { breakAround: true } }, + // Boxes + newsavebox: { + signature: "m", + renderInfo: { breakAround: true } + }, + sbox: { + signature: "m m", + renderInfo: { breakAround: true } + }, + savebox: { + signature: "m o o m", + renderInfo: { breakAround: true } + }, + mbox: { signature: "m" }, + makebox: { signature: "d() o o m", renderInfo: { breakAround: true } }, + fbox: { signature: "m" }, + framebox: { signature: "o o m", renderInfo: { breakAround: true } }, + frame: { signature: "m", renderInfo: { breakAround: true } }, + parbox: { signature: "o o o m m", renderInfo: { breakAround: true } }, + raisebox: { signature: "m o o m" }, + marginpar: { signature: "o m", renderInfo: { breakAround: true } }, + colorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + fcolorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + rotatebox: { signature: "o m m" }, + scalebox: { signature: "m o m" }, + reflectbox: { signature: "m" }, + resizebox: { signature: "s m m m" }, + // Define environments + newenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + newtheorem: { + signature: "s m o m o", + renderInfo: { breakAround: true } + }, + newfont: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Counters + alph: { signature: "m" }, + Alph: { signature: "m" }, + arabic: { signature: "m" }, + roman: { signature: "m" }, + Roman: { signature: "m" }, + fnsymbol: { signature: "m" }, + // Other + documentclass: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepackage: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + item: { + signature: "o", + renderInfo: { hangingIndent: true, namedArguments: ["label"] } + }, + value: { signature: "m" }, + centering: { renderInfo: { breakAround: true } }, + input: { signature: "m", renderInfo: { breakAround: true } }, + include: { signature: "m", renderInfo: { breakAround: true } }, + includeonly: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + discretionary: { signature: "m m m" }, + hyphenation: { signature: "m" }, + footnote: { signature: "o m", renderInfo: { inParMode: true } }, + footnotemark: { signature: "o" }, + footnotetext: { signature: "o m", renderInfo: { inParMode: true } }, + caption: { + signature: "o m", + renderInfo: { inParMode: true, breakAround: true } + }, + // Math Commands + sqrt: { signature: "o m", renderInfo: { inMathMode: true } }, + frac: { signature: "m m", renderInfo: { inMathMode: true } }, + stackrel: { signature: "m m" }, + ensuremath: { signature: "m", renderInfo: { inMathMode: true } }, + // Layout commands + abstract: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + maketitle: { renderInfo: { breakAround: true } }, + doublespacing: { renderInfo: { breakAround: true } }, + singlespacing: { renderInfo: { breakAround: true } }, + date: { signature: "o m", renderInfo: { breakAround: true } }, + thanks: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + pagenumbering: { signature: "m", renderInfo: { breakAround: true } }, + pagestyle: { signature: "m", renderInfo: { breakAround: true } }, + thispagestyle: { signature: "m", renderInfo: { breakAround: true } }, + // Colors + definecolor: { signature: "m m m", renderInfo: { breakAround: true } }, + pagecolor: { signature: "o m", renderInfo: { breakAround: true } }, + nopagecolor: { renderInfo: { breakAround: true } }, + multicolumn: { signature: "m m m" }, + // Graphics + includegraphics: { + signature: "s o o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + rule: { signature: "o m m" }, + // Sectioning + part: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + chapter: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + section: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + paragraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subparagraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + appendix: { renderInfo: { breakAround: true, inParMode: true } }, + frontmatter: { renderInfo: { breakAround: true, inParMode: true } }, + mainmatter: { renderInfo: { breakAround: true, inParMode: true } }, + backmatter: { renderInfo: { breakAround: true, inParMode: true } }, + // Citing and references + bibitem: { signature: "o m", renderInfo: { hangingIndent: true } }, + cite: { signature: "o m" }, + // Fonts + textrm: { signature: "m", renderInfo: { inParMode: true } }, + textit: { signature: "m", renderInfo: { inParMode: true } }, + textmd: { signature: "m", renderInfo: { inParMode: true } }, + textbf: { signature: "m", renderInfo: { inParMode: true } }, + textup: { signature: "m", renderInfo: { inParMode: true } }, + textsl: { signature: "m", renderInfo: { inParMode: true } }, + textsf: { signature: "m", renderInfo: { inParMode: true } }, + textsc: { signature: "m", renderInfo: { inParMode: true } }, + texttt: { signature: "m", renderInfo: { inParMode: true } }, + underline: { signature: "m", renderInfo: { inParMode: true } }, + emph: { signature: "m", renderInfo: { inParMode: true } }, + textnormal: { signature: "m", renderInfo: { inParMode: true } }, + uppercase: { signature: "m", renderInfo: { inParMode: true } }, + mathbf: { signature: "m" }, + mathsf: { signature: "m" }, + mathtt: { signature: "m" }, + mathit: { signature: "m" }, + mathnormal: { signature: "m" }, + mathcal: { signature: "m" }, + mathrm: { signature: "m" }, + // Other + setlength: { signature: "m m", renderInfo: { breakAround: true } }, + ref: { signature: "s m" }, + label: { signature: "o m" }, + // cleveref changes \label to have this signature + printbibliography: { renderInfo: { breakAround: true } }, + addtocontents: { signature: "m m", renderInfo: { breakAround: true } }, + addcontentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + contentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + bibliography: { signature: "m", renderInfo: { breakAround: true } }, + bibliographystyle: { signature: "m", renderInfo: { breakAround: true } } +}; +const environments = { + document: { + processContent: (nodes) => { + unifiedLatexUtilTrim.trim(nodes); + return nodes; + } + }, + array: { signature: "o m", renderInfo: { alignContent: true } }, + description: { signature: "o", processContent: enumerate.cleanEnumerateBody }, + enumerate: { + signature: "o", + processContent: enumerate.cleanEnumerateBody, + renderInfo: { pgfkeysArgs: true } + }, + itemize: { signature: "o", processContent: enumerate.cleanEnumerateBody }, + trivlist: { signature: "o", processContent: enumerate.cleanEnumerateBody }, + list: { signature: "m m", processContent: enumerate.cleanEnumerateBody }, + figure: { signature: "o" }, + "figure*": { signature: "o" }, + filecontents: { signature: "o m" }, + "filecontents*": { signature: "o m" }, + minipage: { signature: "o o o m" }, + picture: { signature: "r() d()" }, + tabbing: { renderInfo: { alignContent: true } }, + table: { signature: "o" }, + tabular: { signature: "o m", renderInfo: { alignContent: true } }, + "tabular*": { signature: "m o m", renderInfo: { alignContent: true } }, + thebibliography: { + signature: "m", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "bibitem") + }, + // Math + math: { renderInfo: { inMathMode: true } } +}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=provides-DdQzqlsT.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs.map new file mode 100644 index 0000000..128d975 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-DdQzqlsT.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-DdQzqlsT.cjs","sources":["../package/latex2e/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { cleanEnumerateBody } from \"../../utils/enumerate\";\n\nexport const macros: MacroInfoRecord = {\n // Special\n \"\\\\\": { signature: \"!s !o\", renderInfo: { breakAfter: true } },\n _: { signature: \"m\", escapeToken: \"\" },\n \"^\": { signature: \"m\", escapeToken: \"\" },\n // \\newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands\n // List can be found in latex2e.pdf \"An unofficial reference manual\"\n newcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"],\n },\n },\n renewcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"],\n },\n },\n providecommand: {\n signature: \"s +m o +o +m\",\n renderInfo: { breakAround: true },\n },\n // Counters\n newcounter: {\n signature: \"m o\",\n renderInfo: { breakAround: true },\n },\n usecounter: {\n signature: \"m\",\n },\n setcounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n addtocounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n stepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n refstepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n // Lengths\n newlength: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n addtolength: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settodepth: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settoheight: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settowidth: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n // Spaces\n stretch: { signature: \"m\" },\n hspace: { signature: \"s m\" },\n vspace: { signature: \"s m\", renderInfo: { breakAround: true } },\n vfill: { renderInfo: { breakAround: true } },\n indent: { renderInfo: { breakAround: true } },\n phantom: { signature: \"m\" },\n vphantom: { signature: \"m\" },\n hphantom: { signature: \"m\" },\n noindent: { renderInfo: { breakAround: true } },\n smallskip: { renderInfo: { breakAround: true } },\n medskip: { renderInfo: { breakAround: true } },\n bigskip: { renderInfo: { breakAround: true } },\n smallbreak: { renderInfo: { breakAround: true } },\n medbreak: { renderInfo: { breakAround: true } },\n bigbreak: { renderInfo: { breakAround: true } },\n newline: { renderInfo: { breakAround: true } },\n linebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nolinebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n clearpage: { renderInfo: { breakAround: true } },\n cleardoublepage: { renderInfo: { breakAround: true } },\n newpage: { renderInfo: { breakAround: true } },\n enlargethispage: { signature: \"s\", renderInfo: { breakAround: true } },\n pagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nopagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n // Boxes\n newsavebox: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n sbox: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n savebox: {\n signature: \"m o o m\",\n renderInfo: { breakAround: true },\n },\n mbox: { signature: \"m\" },\n makebox: { signature: \"d() o o m\", renderInfo: { breakAround: true } },\n fbox: { signature: \"m\" },\n framebox: { signature: \"o o m\", renderInfo: { breakAround: true } },\n frame: { signature: \"m\", renderInfo: { breakAround: true } },\n parbox: { signature: \"o o o m m\", renderInfo: { breakAround: true } },\n raisebox: { signature: \"m o o m\" },\n marginpar: { signature: \"o m\", renderInfo: { breakAround: true } },\n colorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n fcolorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n rotatebox: { signature: \"o m m\" },\n scalebox: { signature: \"m o m\" },\n reflectbox: { signature: \"m\" },\n resizebox: { signature: \"s m m m\" },\n // Define environments\n newenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true },\n },\n renewenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true },\n },\n newtheorem: {\n signature: \"s m o m o\",\n renderInfo: { breakAround: true },\n },\n newfont: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n // Counters\n alph: { signature: \"m\" },\n Alph: { signature: \"m\" },\n arabic: { signature: \"m\" },\n roman: { signature: \"m\" },\n Roman: { signature: \"m\" },\n fnsymbol: { signature: \"m\" },\n // Other\n documentclass: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usepackage: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n item: {\n signature: \"o\",\n renderInfo: { hangingIndent: true, namedArguments: [\"label\"] },\n },\n value: { signature: \"m\" },\n centering: { renderInfo: { breakAround: true } },\n input: { signature: \"m\", renderInfo: { breakAround: true } },\n include: { signature: \"m\", renderInfo: { breakAround: true } },\n includeonly: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n discretionary: { signature: \"m m m\" },\n hyphenation: { signature: \"m\" },\n footnote: { signature: \"o m\", renderInfo: { inParMode: true } },\n footnotemark: { signature: \"o\" },\n footnotetext: { signature: \"o m\", renderInfo: { inParMode: true } },\n caption: {\n signature: \"o m\",\n renderInfo: { inParMode: true, breakAround: true },\n },\n // Math Commands\n sqrt: { signature: \"o m\", renderInfo: { inMathMode: true } },\n frac: { signature: \"m m\", renderInfo: { inMathMode: true } },\n stackrel: { signature: \"m m\" },\n ensuremath: { signature: \"m\", renderInfo: { inMathMode: true } },\n // Layout commands\n abstract: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n maketitle: { renderInfo: { breakAround: true } },\n doublespacing: { renderInfo: { breakAround: true } },\n singlespacing: { renderInfo: { breakAround: true } },\n date: { signature: \"o m\", renderInfo: { breakAround: true } },\n thanks: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n pagenumbering: { signature: \"m\", renderInfo: { breakAround: true } },\n pagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n thispagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n // Colors\n definecolor: { signature: \"m m m\", renderInfo: { breakAround: true } },\n pagecolor: { signature: \"o m\", renderInfo: { breakAround: true } },\n nopagecolor: { renderInfo: { breakAround: true } },\n multicolumn: { signature: \"m m m\" },\n // Graphics\n includegraphics: {\n signature: \"s o o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n rule: { signature: \"o m m\" },\n // Sectioning\n part: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n chapter: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n section: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subsubsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n paragraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subparagraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n appendix: { renderInfo: { breakAround: true, inParMode: true } },\n frontmatter: { renderInfo: { breakAround: true, inParMode: true } },\n mainmatter: { renderInfo: { breakAround: true, inParMode: true } },\n backmatter: { renderInfo: { breakAround: true, inParMode: true } },\n // Citing and references\n bibitem: { signature: \"o m\", renderInfo: { hangingIndent: true } },\n cite: { signature: \"o m\" },\n // Fonts\n textrm: { signature: \"m\", renderInfo: { inParMode: true } },\n textit: { signature: \"m\", renderInfo: { inParMode: true } },\n textmd: { signature: \"m\", renderInfo: { inParMode: true } },\n textbf: { signature: \"m\", renderInfo: { inParMode: true } },\n textup: { signature: \"m\", renderInfo: { inParMode: true } },\n textsl: { signature: \"m\", renderInfo: { inParMode: true } },\n textsf: { signature: \"m\", renderInfo: { inParMode: true } },\n textsc: { signature: \"m\", renderInfo: { inParMode: true } },\n texttt: { signature: \"m\", renderInfo: { inParMode: true } },\n underline: { signature: \"m\", renderInfo: { inParMode: true } },\n emph: { signature: \"m\", renderInfo: { inParMode: true } },\n textnormal: { signature: \"m\", renderInfo: { inParMode: true } },\n uppercase: { signature: \"m\", renderInfo: { inParMode: true } },\n mathbf: { signature: \"m\" },\n mathsf: { signature: \"m\" },\n mathtt: { signature: \"m\" },\n mathit: { signature: \"m\" },\n mathnormal: { signature: \"m\" },\n mathcal: { signature: \"m\" },\n mathrm: { signature: \"m\" },\n // Other\n setlength: { signature: \"m m\", renderInfo: { breakAround: true } },\n ref: { signature: \"s m\" },\n label: { signature: \"o m\" }, // cleveref changes \\label to have this signature\n printbibliography: { renderInfo: { breakAround: true } },\n addtocontents: { signature: \"m m\", renderInfo: { breakAround: true } },\n addcontentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n contentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n bibliography: { signature: \"m\", renderInfo: { breakAround: true } },\n bibliographystyle: { signature: \"m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n document: {\n processContent: (nodes) => {\n trim(nodes);\n return nodes;\n },\n },\n array: { signature: \"o m\", renderInfo: { alignContent: true } },\n description: { signature: \"o\", processContent: cleanEnumerateBody },\n enumerate: {\n signature: \"o\",\n processContent: cleanEnumerateBody,\n renderInfo: { pgfkeysArgs: true },\n },\n itemize: { signature: \"o\", processContent: cleanEnumerateBody },\n trivlist: { signature: \"o\", processContent: cleanEnumerateBody },\n list: { signature: \"m m\", processContent: cleanEnumerateBody },\n figure: { signature: \"o\" },\n \"figure*\": { signature: \"o\" },\n filecontents: { signature: \"o m\" },\n \"filecontents*\": { signature: \"o m\" },\n minipage: { signature: \"o o o m\" },\n picture: { signature: \"r() d()\" },\n tabbing: { renderInfo: { alignContent: true } },\n table: { signature: \"o\" },\n tabular: { signature: \"o m\", renderInfo: { alignContent: true } },\n \"tabular*\": { signature: \"m o m\", renderInfo: { alignContent: true } },\n thebibliography: {\n signature: \"m\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"bibitem\"),\n },\n // Math\n math: { renderInfo: { inMathMode: true } },\n};\n"],"names":["trim","cleanEnumerateBody"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs b/node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs new file mode 100644 index 0000000..d3083f0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs @@ -0,0 +1,66 @@ +"use strict"; +const enumerate = require("./enumerate-DSh8p1uS.cjs"); +const macros = { + answerline: { signature: "o" }, + fillin: { signature: "o o" }, + fullwidth: { signature: "m" }, + fillwidthlines: { signature: "m" }, + fillwidthdottedlines: { signature: "m" }, + fillwidthgrid: { signature: "m" }, + makeemptybox: { signature: "m" }, + CorrectChoiceEmphasis: { + signature: "m", + renderInfo: { breakAround: true } + }, + SolutionEmphasis: { signature: "m", renderInfo: { breakAround: true } }, + uplevel: { signature: "m", renderInfo: { breakAround: true } }, + checkboxchar: { signature: "m", renderInfo: { breakAround: true } }, + checkedchar: { signature: "m", renderInfo: { breakAround: true } }, + pointname: { signature: "m", renderInfo: { breakAround: true } }, + marginpointname: { signature: "m", renderInfo: { breakAround: true } }, + extrawidth: { signature: "m", renderInfo: { breakAround: true } }, + pointformat: { signature: "m", renderInfo: { breakAround: true } }, + bonuspointformat: { signature: "m", renderInfo: { breakAround: true } }, + totalformat: { signature: "m", renderInfo: { breakAround: true } }, + qformat: { signature: "m", renderInfo: { breakAround: true } }, + titledquestion: { signature: "m o", renderInfo: { breakAround: true } }, + pointpoints: { signature: "m m", renderInfo: { breakAround: true } }, + bonuspointpoints: { signature: "m m", renderInfo: { breakAround: true } } +}; +const environments = { + choices: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "choice") + }, + checkboxes: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "choice") + }, + oneparchoices: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "choice") + }, + oneparcheckboxes: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "choice") + }, + parts: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "part") + }, + subparts: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "subpart") + }, + subsubparts: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "subsubpart") + }, + questions: { + signature: "o", + processContent: (nodes) => enumerate.cleanEnumerateBody(nodes, "question") + } +}; +exports.environments = environments; +exports.macros = macros; +//# sourceMappingURL=provides-gOjhEUvC.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs.map new file mode 100644 index 0000000..65bf180 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-gOjhEUvC.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-gOjhEUvC.cjs","sources":["../package/exam/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { cleanEnumerateBody } from \"../../utils/enumerate\";\n\nexport const macros: MacroInfoRecord = {\n answerline: { signature: \"o\" },\n fillin: { signature: \"o o\" },\n fullwidth: { signature: \"m\" },\n fillwidthlines: { signature: \"m\" },\n fillwidthdottedlines: { signature: \"m\" },\n fillwidthgrid: { signature: \"m\" },\n makeemptybox: { signature: \"m\" },\n CorrectChoiceEmphasis: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n SolutionEmphasis: { signature: \"m\", renderInfo: { breakAround: true } },\n uplevel: { signature: \"m\", renderInfo: { breakAround: true } },\n checkboxchar: { signature: \"m\", renderInfo: { breakAround: true } },\n checkedchar: { signature: \"m\", renderInfo: { breakAround: true } },\n pointname: { signature: \"m\", renderInfo: { breakAround: true } },\n marginpointname: { signature: \"m\", renderInfo: { breakAround: true } },\n extrawidth: { signature: \"m\", renderInfo: { breakAround: true } },\n pointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n bonuspointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n totalformat: { signature: \"m\", renderInfo: { breakAround: true } },\n qformat: { signature: \"m\", renderInfo: { breakAround: true } },\n titledquestion: { signature: \"m o\", renderInfo: { breakAround: true } },\n pointpoints: { signature: \"m m\", renderInfo: { breakAround: true } },\n bonuspointpoints: { signature: \"m m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n choices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n checkboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n oneparchoices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n oneparcheckboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n parts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"part\"),\n },\n subparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subpart\"),\n },\n subsubparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subsubpart\"),\n },\n questions: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"question\"),\n },\n};\n"],"names":["cleanEnumerateBody"],"mappings":";;AAMO,MAAM,SAA0B;AAAA,EACnC,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,QAAQ,EAAE,WAAW,MAAM;AAAA,EAC3B,WAAW,EAAE,WAAW,IAAI;AAAA,EAC5B,gBAAgB,EAAE,WAAW,IAAI;AAAA,EACjC,sBAAsB,EAAE,WAAW,IAAI;AAAA,EACvC,eAAe,EAAE,WAAW,IAAI;AAAA,EAChC,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,uBAAuB;AAAA,IACnB,WAAW;AAAA,IACX,YAAY,EAAE,aAAa,KAAK;AAAA,EACpC;AAAA,EACA,kBAAkB,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACtE,SAAS,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAC7D,cAAc,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAClE,aAAa,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACjE,WAAW,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAC/D,iBAAiB,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACrE,YAAY,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAChE,aAAa,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACjE,kBAAkB,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACtE,aAAa,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EACjE,SAAS,EAAE,WAAW,KAAK,YAAY,EAAE,aAAa,OAAO;AAAA,EAC7D,gBAAgB,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,OAAO;AAAA,EACtE,aAAa,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,OAAO;AAAA,EACnE,kBAAkB,EAAE,WAAW,OAAO,YAAY,EAAE,aAAa,KAAO,EAAA;AAC5E;AAEO,MAAM,eAA8B;AAAA,EACvC,SAAS;AAAA,IACL,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,YAAY;AAAA,IACR,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,eAAe;AAAA,IACX,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,kBAAkB;AAAA,IACd,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,QAAQ;AAAA,EACjE;AAAA,EACA,OAAO;AAAA,IACH,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,MAAM;AAAA,EAC/D;AAAA,EACA,UAAU;AAAA,IACN,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,SAAS;AAAA,EAClE;AAAA,EACA,aAAa;AAAA,IACT,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,YAAY;AAAA,EACrE;AAAA,EACA,WAAW;AAAA,IACP,WAAW;AAAA,IACX,gBAAgB,CAAC,UAAUA,UAAA,mBAAmB,OAAO,UAAU;AAAA,EAAA;AAEvE;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js b/node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js new file mode 100644 index 0000000..2076762 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js @@ -0,0 +1,57 @@ +import { arg } from "@unified-latex/unified-latex-builder"; +import { parse } from "@unified-latex/unified-latex-util-argspec"; +import { gobbleSingleArgument } from "@unified-latex/unified-latex-util-arguments"; +import { match } from "@unified-latex/unified-latex-util-match"; +const argSpecM = parse("m")[0]; +const argSpecO = parse("o")[0]; +const argSpecRDelim = {}; +const argumentParser = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO, startPos); + const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecM, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim[delim] = argSpecRDelim[delim] || parse(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [ + optionalArg || arg(null), + languageArg || arg(null), + codeArg || arg(null) + ], + nodesRemoved: optionalArgNodesRemoved + languageArgNodesRemoved + codeArgNodesRemoved + }; +}; +const macros = { + mint: { argumentParser }, + mintinline: { argumentParser }, + inputminted: { argumentParser }, + usemintedstyle: { signature: "m" }, + setminted: { signature: "o m" }, + setmintedinline: { signature: "o m" }, + newmint: { signature: "o m m" }, + newminted: { signature: "o m m" }, + newmintinline: { signature: "o m m" }, + newmintedfile: { signature: "o m m" } +}; +const environments = { + minted: { signature: "o m" } +}; +export { + environments as e, + macros as m +}; +//# sourceMappingURL=provides-sdqk_ZBm.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js.map b/node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js.map new file mode 100644 index 0000000..87f2bbf --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-sdqk_ZBm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-sdqk_ZBm.js","sources":["../package/minted/libs/argument-parser.ts","../package/minted/provides.ts"],"sourcesContent":["import { arg } from \"@unified-latex/unified-latex-builder\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { parse as parseArgspec } from \"@unified-latex/unified-latex-util-argspec\";\nimport { Node } from \"@unified-latex/unified-latex-util-argspec/libs/argspec-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nconst argSpecM = parseArgspec(\"m\")[0];\nconst argSpecO = parseArgspec(\"o\")[0];\nconst argSpecRDelim: { [delim: string]: Node } = {};\n\n/**\n * This argument parser parses arguments in the form of\n * - [⟨options⟩]{⟨language⟩}⟨delim⟩⟨code⟩⟨delim⟩\n * - [⟨options⟩]{⟨language⟩}{⟨code⟩}\n */\nexport const argumentParser: ArgumentParser = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecO, startPos);\n\n const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecM, startPos);\n\n let codeArg: Argument | Argument[] | null = null;\n let codeArgNodesRemoved: number = 0;\n const nextNode = nodes[startPos];\n if (match.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim[delim] =\n argSpecRDelim[delim] || parseArgspec(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument(\n nodes,\n argSpecRDelim[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n\n return {\n args: [\n optionalArg || arg(null),\n languageArg || arg(null),\n codeArg || arg(null),\n ],\n nodesRemoved:\n optionalArgNodesRemoved +\n languageArgNodesRemoved +\n codeArgNodesRemoved,\n };\n};\n","import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { argumentParser } from \"./libs/argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n mint: { argumentParser: argumentParser },\n mintinline: { argumentParser: argumentParser },\n inputminted: { argumentParser: argumentParser },\n usemintedstyle: { signature: \"m\" },\n setminted: { signature: \"o m\" },\n setmintedinline: { signature: \"o m\" },\n newmint: { signature: \"o m m\" },\n newminted: { signature: \"o m m\" },\n newmintinline: { signature: \"o m m\" },\n newmintedfile: { signature: \"o m m\" },\n};\n\nexport const environments: EnvInfoRecord = {\n minted: { signature: \"o m\" },\n};\n"],"names":["parseArgspec"],"mappings":";;;;AAOA,MAAM,WAAWA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,WAAWA,MAAa,GAAG,EAAE,CAAC;AACpC,MAAM,gBAA2C,CAAC;AAOrC,MAAA,iBAAiC,CAAC,OAAO,aAAa;AACzD,QAAA,EAAE,UAAU,aAAa,cAAc,wBACzC,IAAA,qBAAqB,OAAO,UAAU,QAAQ;AAE5C,QAAA,EAAE,UAAU,aAAa,cAAc,wBACzC,IAAA,qBAAqB,OAAO,UAAU,QAAQ;AAElD,MAAI,UAAwC;AAC5C,MAAI,sBAA8B;AAC5B,QAAA,WAAW,MAAM,QAAQ;AAC3B,MAAA,MAAM,MAAM,QAAQ,GAAG;AACvB,UAAM,eAAe,qBAAqB,OAAO,UAAU,QAAQ;AACnE,cAAU,aAAa;AACvB,0BAAsB,aAAa;AAAA,EAAA,WAC5B,MAAM,OAAO,QAAQ,KAAK,SAAS,QAAQ,WAAW,GAAG;AAChE,UAAM,QAAQ,SAAS;AACvB,kBAAc,KAAK,IACf,cAAc,KAAK,KAAKA,MAAa,IAAI,KAAK,GAAG,KAAK,EAAE,EAAE,CAAC;AAC/D,UAAM,WAAW;AAAA,MACb;AAAA,MACA,cAAc,KAAK;AAAA,MACnB;AAAA,IACJ;AACA,cAAU,SAAS;AACnB,0BAAsB,SAAS;AAAA,EAAA;AAG5B,SAAA;AAAA,IACH,MAAM;AAAA,MACF,eAAe,IAAI,IAAI;AAAA,MACvB,eAAe,IAAI,IAAI;AAAA,MACvB,WAAW,IAAI,IAAI;AAAA,IACvB;AAAA,IACA,cACI,0BACA,0BACA;AAAA,EACR;AACJ;AChDO,MAAM,SAA0B;AAAA,EACnC,MAAM,EAAE,eAA+B;AAAA,EACvC,YAAY,EAAE,eAA+B;AAAA,EAC7C,aAAa,EAAE,eAA+B;AAAA,EAC9C,gBAAgB,EAAE,WAAW,IAAI;AAAA,EACjC,WAAW,EAAE,WAAW,MAAM;AAAA,EAC9B,iBAAiB,EAAE,WAAW,MAAM;AAAA,EACpC,SAAS,EAAE,WAAW,QAAQ;AAAA,EAC9B,WAAW,EAAE,WAAW,QAAQ;AAAA,EAChC,eAAe,EAAE,WAAW,QAAQ;AAAA,EACpC,eAAe,EAAE,WAAW,QAAQ;AACxC;AAEO,MAAM,eAA8B;AAAA,EACvC,QAAQ,EAAE,WAAW,MAAM;AAC/B;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js b/node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js new file mode 100644 index 0000000..2ff9125 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js @@ -0,0 +1,27 @@ +const macros = { + systeme: { + signature: "s o o m", + renderInfo: { inMathMode: true } + }, + sysdelim: { + signature: "m m" + }, + syseqsep: { signature: "m" }, + sysalign: { signature: "m" }, + syssignspace: { signature: "m" }, + syseqspace: { signature: "m" }, + syslineskipcoeff: { signature: "m" }, + syseqivsign: { signature: "m" }, + sysaddeqsign: { signature: "m" }, + sysremoveeqsign: { signature: "m" }, + sysextracolonsign: { signature: "m" }, + syscodeextracol: { signature: "m" }, + sysautonum: { signature: "m" }, + syssubstitute: { signature: "m" } +}; +const environments = {}; +export { + environments as e, + macros as m +}; +//# sourceMappingURL=provides-yGf6-zdY.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js.map b/node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js.map new file mode 100644 index 0000000..5966b1f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/provides-yGf6-zdY.js.map @@ -0,0 +1 @@ +{"version":3,"file":"provides-yGf6-zdY.js","sources":["../package/systeme/provides.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n systeme: {\n signature: \"s o o m\",\n renderInfo: { inMathMode: true },\n },\n sysdelim: {\n signature: \"m m\",\n },\n syseqsep: { signature: \"m\" },\n sysalign: { signature: \"m\" },\n syssignspace: { signature: \"m\" },\n syseqspace: { signature: \"m\" },\n syslineskipcoeff: { signature: \"m\" },\n syseqivsign: { signature: \"m\" },\n sysaddeqsign: { signature: \"m\" },\n sysremoveeqsign: { signature: \"m\" },\n sysextracolonsign: { signature: \"m\" },\n syscodeextracol: { signature: \"m\" },\n sysautonum: { signature: \"m\" },\n syssubstitute: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n"],"names":[],"mappings":"AAKO,MAAM,SAA0B;AAAA,EACnC,SAAS;AAAA,IACL,WAAW;AAAA,IACX,YAAY,EAAE,YAAY,KAAK;AAAA,EACnC;AAAA,EACA,UAAU;AAAA,IACN,WAAW;AAAA,EACf;AAAA,EACA,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,UAAU,EAAE,WAAW,IAAI;AAAA,EAC3B,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,kBAAkB,EAAE,WAAW,IAAI;AAAA,EACnC,aAAa,EAAE,WAAW,IAAI;AAAA,EAC9B,cAAc,EAAE,WAAW,IAAI;AAAA,EAC/B,iBAAiB,EAAE,WAAW,IAAI;AAAA,EAClC,mBAAmB,EAAE,WAAW,IAAI;AAAA,EACpC,iBAAiB,EAAE,WAAW,IAAI;AAAA,EAClC,YAAY,EAAE,WAAW,IAAI;AAAA,EAC7B,eAAe,EAAE,WAAW,IAAI;AACpC;AAEO,MAAM,eAA8B,CAAA;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/utils/enumerate.d.ts b/node_modules/@unified-latex/unified-latex-ctan/utils/enumerate.d.ts new file mode 100644 index 0000000..0077e71 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/utils/enumerate.d.ts @@ -0,0 +1,13 @@ +import * as Ast from "@unified-latex/unified-latex-types"; +/** + * Clean up any whitespace issues in an enumerate environment. In particular, + * * Remove any leading or ending whitespace + * * Ensure there is a par between occurrences of `\item` + * * Ensure there is whitespace after each occurrence of `\item` provided there is content there + * `itemName` can be used to set what the "item" macro is called. + * + * This function attaches content following a `\item` to the `\item` macro with + * `openMark` and `closeMark` set to empty. This allows hanging-indents to be rendered. + */ +export declare function cleanEnumerateBody(ast: Ast.Node[], itemName?: string): Ast.Node[]; +//# sourceMappingURL=enumerate.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs b/node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs new file mode 100644 index 0000000..b3ec092 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs @@ -0,0 +1,850 @@ +"use strict"; +const Color = require("color"); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +const macros = { + substitutecolormodel: { + signature: "m m", + renderInfo: { breakAround: true } + }, + selectcolormodel: { + signature: "m", + renderInfo: { breakAround: true } + }, + definecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + colorlet: { + signature: "o m o m", + renderInfo: { breakAround: true } + }, + definecolorset: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + preparecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + preparecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + DefineNamedColor: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + definecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + providecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + color: { signature: "o m", renderInfo: { breakAround: true } }, + textcolor: { signature: "o m m", renderInfo: { inParMode: true } }, + pagecolor: { signature: "o m" }, + colorbox: { signature: "o m m" }, + fcolorbox: { signature: "o m o m m" }, + boxframe: { signature: "o m" }, + testcolor: { signature: "o m" }, + blendcolors: { signature: "s m" }, + maskcolors: { signature: "o m" }, + definecolorseries: { + signature: "m m m o m o m", + renderInfo: { breakAround: true } + }, + resetcolorseries: { + signature: "o m", + renderInfo: { breakAround: true } + }, + rowcolors: { signature: "s o m m m" }, + extractcolorspec: { signature: "m m" }, + extractcolorspecs: { signature: "m m m" }, + convertcolorspec: { signature: "m m m m" } +}; +const environments = { + testcolors: { signature: "o", renderInfo: { pgfkeysArgs: true } } +}; +const fromRgb = ([r, g, b]) => Color([r * 255, g * 255, b * 255], "rgb"); +const DVI_PS_NAMES = { + Apricot: Color("#FBB982"), + Aquamarine: Color("#00B5BE"), + Bittersweet: Color("#C04F17"), + Black: Color("#221E1F"), + Blue: Color("#2D2F92"), + BlueGreen: Color("#00B3B8"), + BlueViolet: Color("#473992"), + BrickRed: Color("#B6321C"), + Brown: Color("#792500"), + BurntOrange: Color("#F7921D"), + CadetBlue: Color("#74729A"), + CarnationPink: Color("#F282B4"), + Cerulean: Color("#00A2E3"), + CornflowerBlue: Color("#41B0E4"), + Cyan: Color("#00AEEF"), + Dandelion: Color("#FDBC42"), + DarkOrchid: Color("#A4538A"), + Emerald: Color("#00A99D"), + ForestGreen: Color("#009B55"), + Fuchsia: Color("#8C368C"), + Goldenrod: Color("#FFDF42"), + Gray: Color("#949698"), + Green: Color("#00A64F"), + GreenYellow: Color("#DFE674"), + JungleGreen: Color("#00A99A"), + Lavender: Color("#F49EC4"), + LimeGreen: Color("#8DC73E"), + Magenta: Color("#EC008C"), + Mahogany: Color("#A9341F"), + Maroon: Color("#AF3235"), + Melon: Color("#F89E7B"), + MidnightBlue: Color("#006795"), + Mulberry: Color("#A93C93"), + NavyBlue: Color("#006EB8"), + OliveGreen: Color("#3C8031"), + Orange: Color("#F58137"), + OrangeRed: Color("#ED135A"), + Orchid: Color("#AF72B0"), + Peach: Color("#F7965A"), + Periwinkle: Color("#7977B8"), + PineGreen: Color("#008B72"), + Plum: Color("#92268F"), + ProcessBlue: Color("#00B0F0"), + Purple: Color("#99479B"), + RawSienna: Color("#974006"), + Red: Color("#ED1B23"), + RedOrange: Color("#F26035"), + RedViolet: Color("#A1246B"), + Rhodamine: Color("#EF559F"), + RoyalBlue: Color("#0071BC"), + RoyalPurple: Color("#613F99"), + RubineRed: Color("#ED017D"), + Salmon: Color("#F69289"), + SeaGreen: Color("#3FBC9D"), + Sepia: Color("#671800"), + SkyBlue: Color("#46C5DD"), + SpringGreen: Color("#C6DC67"), + Tan: Color("#DA9D76"), + TealBlue: Color("#00AEB3"), + Thistle: Color("#D883B7"), + Turquoise: Color("#00B4CE"), + Violet: Color("#58429B"), + VioletRed: Color("#EF58A0"), + White: Color("#FFFFFF"), + WildStrawberry: Color("#EE2967"), + Yellow: Color("#FFF200"), + YellowGreen: Color("#98CC70"), + YellowOrange: Color("#FAA21A") +}; +const SVG_NAMES = { + AliceBlue: fromRgb([0.94, 0.972, 1]), + AntiqueWhite: fromRgb([0.98, 0.92, 0.844]), + Aqua: fromRgb([0, 1, 1]), + Aquamarine: fromRgb([0.498, 1, 0.83]), + Azure: fromRgb([0.94, 1, 1]), + Beige: fromRgb([0.96, 0.96, 0.864]), + Bisque: fromRgb([1, 0.894, 0.77]), + Black: fromRgb([0, 0, 0]), + BlanchedAlmond: fromRgb([1, 0.92, 0.804]), + Blue: fromRgb([0, 0, 1]), + BlueViolet: fromRgb([0.54, 0.17, 0.888]), + Brown: fromRgb([0.648, 0.165, 0.165]), + BurlyWood: fromRgb([0.87, 0.72, 0.53]), + CadetBlue: fromRgb([0.372, 0.62, 0.628]), + Chartreuse: fromRgb([0.498, 1, 0]), + Chocolate: fromRgb([0.824, 0.41, 0.116]), + Coral: fromRgb([1, 0.498, 0.312]), + CornflowerBlue: fromRgb([0.392, 0.585, 0.93]), + Cornsilk: fromRgb([1, 0.972, 0.864]), + Crimson: fromRgb([0.864, 0.08, 0.235]), + Cyan: fromRgb([0, 1, 1]), + DarkBlue: fromRgb([0, 0, 0.545]), + DarkCyan: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]), + DarkGray: fromRgb([0.664, 0.664, 0.664]), + DarkGreen: fromRgb([0, 0.392, 0]), + DarkGrey: fromRgb([0.664, 0.664, 0.664]), + DarkKhaki: fromRgb([0.74, 0.716, 0.42]), + DarkMagenta: fromRgb([0.545, 0, 0.545]), + DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]), + DarkOrange: fromRgb([1, 0.55, 0]), + DarkOrchid: fromRgb([0.6, 0.196, 0.8]), + DarkRed: fromRgb([0.545, 0, 0]), + DarkSalmon: fromRgb([0.912, 0.59, 0.48]), + DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]), + DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]), + DarkSlateGray: fromRgb([0.185, 0.31, 0.31]), + DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]), + DarkTurquoise: fromRgb([0, 0.808, 0.82]), + DarkViolet: fromRgb([0.58, 0, 0.828]), + DeepPink: fromRgb([1, 0.08, 0.576]), + DeepSkyBlue: fromRgb([0, 0.75, 1]), + DimGray: fromRgb([0.41, 0.41, 0.41]), + DimGrey: fromRgb([0.41, 0.41, 0.41]), + DodgerBlue: fromRgb([0.116, 0.565, 1]), + FireBrick: fromRgb([0.698, 0.132, 0.132]), + FloralWhite: fromRgb([1, 0.98, 0.94]), + ForestGreen: fromRgb([0.132, 0.545, 0.132]), + Fuchsia: fromRgb([1, 0, 1]), + Gainsboro: fromRgb([0.864, 0.864, 0.864]), + GhostWhite: fromRgb([0.972, 0.972, 1]), + Gold: fromRgb([1, 0.844, 0]), + Goldenrod: fromRgb([0.855, 0.648, 0.125]), + Gray: fromRgb([0.5, 0.5, 0.5]), + Green: fromRgb([0, 0.5, 0]), + GreenYellow: fromRgb([0.68, 1, 0.185]), + Grey: fromRgb([0.5, 0.5, 0.5]), + Honeydew: fromRgb([0.94, 1, 0.94]), + HotPink: fromRgb([1, 0.41, 0.705]), + IndianRed: fromRgb([0.804, 0.36, 0.36]), + Indigo: fromRgb([0.294, 0, 0.51]), + Ivory: fromRgb([1, 1, 0.94]), + Khaki: fromRgb([0.94, 0.9, 0.55]), + Lavender: fromRgb([0.9, 0.9, 0.98]), + LavenderBlush: fromRgb([1, 0.94, 0.96]), + LawnGreen: fromRgb([0.488, 0.99, 0]), + LemonChiffon: fromRgb([1, 0.98, 0.804]), + LightBlue: fromRgb([0.68, 0.848, 0.9]), + LightCoral: fromRgb([0.94, 0.5, 0.5]), + LightCyan: fromRgb([0.88, 1, 1]), + LightGoldenrod: fromRgb([0.933, 0.867, 0.51]), + LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]), + LightGray: fromRgb([0.828, 0.828, 0.828]), + LightGreen: fromRgb([0.565, 0.932, 0.565]), + LightGrey: fromRgb([0.828, 0.828, 0.828]), + LightPink: fromRgb([1, 0.712, 0.756]), + LightSalmon: fromRgb([1, 0.628, 0.48]), + LightSeaGreen: fromRgb([0.125, 0.698, 0.668]), + LightSkyBlue: fromRgb([0.53, 0.808, 0.98]), + LightSlateBlue: fromRgb([0.518, 0.44, 1]), + LightSlateGray: fromRgb([0.468, 0.532, 0.6]), + LightSlateGrey: fromRgb([0.468, 0.532, 0.6]), + LightSteelBlue: fromRgb([0.69, 0.77, 0.87]), + LightYellow: fromRgb([1, 1, 0.88]), + Lime: fromRgb([0, 1, 0]), + LimeGreen: fromRgb([0.196, 0.804, 0.196]), + Linen: fromRgb([0.98, 0.94, 0.9]), + Magenta: fromRgb([1, 0, 1]), + Maroon: fromRgb([0.5, 0, 0]), + MediumAquamarine: fromRgb([0.4, 0.804, 0.668]), + MediumBlue: fromRgb([0, 0, 0.804]), + MediumOrchid: fromRgb([0.73, 0.332, 0.828]), + MediumPurple: fromRgb([0.576, 0.44, 0.86]), + MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]), + MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]), + MediumSpringGreen: fromRgb([0, 0.98, 0.604]), + MediumTurquoise: fromRgb([0.284, 0.82, 0.8]), + MediumVioletRed: fromRgb([0.78, 0.084, 0.52]), + MidnightBlue: fromRgb([0.098, 0.098, 0.44]), + MintCream: fromRgb([0.96, 1, 0.98]), + MistyRose: fromRgb([1, 0.894, 0.884]), + Moccasin: fromRgb([1, 0.894, 0.71]), + NavajoWhite: fromRgb([1, 0.87, 0.68]), + Navy: fromRgb([0, 0, 0.5]), + NavyBlue: fromRgb([0, 0, 0.5]), + OldLace: fromRgb([0.992, 0.96, 0.9]), + Olive: fromRgb([0.5, 0.5, 0]), + OliveDrab: fromRgb([0.42, 0.556, 0.136]), + Orange: fromRgb([1, 0.648, 0]), + OrangeRed: fromRgb([1, 0.27, 0]), + Orchid: fromRgb([0.855, 0.44, 0.84]), + PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]), + PaleGreen: fromRgb([0.596, 0.985, 0.596]), + PaleTurquoise: fromRgb([0.688, 0.932, 0.932]), + PaleVioletRed: fromRgb([0.86, 0.44, 0.576]), + PapayaWhip: fromRgb([1, 0.936, 0.835]), + PeachPuff: fromRgb([1, 0.855, 0.725]), + Peru: fromRgb([0.804, 0.52, 0.248]), + Pink: fromRgb([1, 0.752, 0.796]), + Plum: fromRgb([0.868, 0.628, 0.868]), + PowderBlue: fromRgb([0.69, 0.88, 0.9]), + Purple: fromRgb([0.5, 0, 0.5]), + Red: fromRgb([1, 0, 0]), + RosyBrown: fromRgb([0.736, 0.56, 0.56]), + RoyalBlue: fromRgb([0.255, 0.41, 0.884]), + SaddleBrown: fromRgb([0.545, 0.27, 0.075]), + Salmon: fromRgb([0.98, 0.5, 0.448]), + SandyBrown: fromRgb([0.956, 0.644, 0.376]), + SeaGreen: fromRgb([0.18, 0.545, 0.34]), + Seashell: fromRgb([1, 0.96, 0.932]), + Sienna: fromRgb([0.628, 0.32, 0.176]), + Silver: fromRgb([0.752, 0.752, 0.752]), + SkyBlue: fromRgb([0.53, 0.808, 0.92]), + SlateBlue: fromRgb([0.415, 0.352, 0.804]), + SlateGray: fromRgb([0.44, 0.5, 0.565]), + SlateGrey: fromRgb([0.44, 0.5, 0.565]), + Snow: fromRgb([1, 0.98, 0.98]), + SpringGreen: fromRgb([0, 1, 0.498]), + SteelBlue: fromRgb([0.275, 0.51, 0.705]), + Tan: fromRgb([0.824, 0.705, 0.55]), + Teal: fromRgb([0, 0.5, 0.5]), + Thistle: fromRgb([0.848, 0.75, 0.848]), + Tomato: fromRgb([1, 0.39, 0.28]), + Turquoise: fromRgb([0.25, 0.88, 0.815]), + Violet: fromRgb([0.932, 0.51, 0.932]), + VioletRed: fromRgb([0.816, 0.125, 0.565]), + Wheat: fromRgb([0.96, 0.87, 0.7]), + White: fromRgb([1, 1, 1]), + WhiteSmoke: fromRgb([0.96, 0.96, 0.96]), + Yellow: fromRgb([1, 1, 0]), + YellowGreen: fromRgb([0.604, 0.804, 0.196]) +}; +const X11_NAMES = { + AntiqueWhite1: fromRgb([1, 0.936, 0.86]), + AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]), + AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]), + AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]), + Aquamarine1: fromRgb([0.498, 1, 0.83]), + Aquamarine2: fromRgb([0.464, 0.932, 0.776]), + Aquamarine3: fromRgb([0.4, 0.804, 0.668]), + Aquamarine4: fromRgb([0.27, 0.545, 0.455]), + Azure1: fromRgb([0.94, 1, 1]), + Azure2: fromRgb([0.88, 0.932, 0.932]), + Azure3: fromRgb([0.756, 0.804, 0.804]), + Azure4: fromRgb([0.512, 0.545, 0.545]), + Bisque1: fromRgb([1, 0.894, 0.77]), + Bisque2: fromRgb([0.932, 0.835, 0.716]), + Bisque3: fromRgb([0.804, 0.716, 0.62]), + Bisque4: fromRgb([0.545, 0.49, 0.42]), + Blue1: fromRgb([0, 0, 1]), + Blue2: fromRgb([0, 0, 0.932]), + Blue3: fromRgb([0, 0, 0.804]), + Blue4: fromRgb([0, 0, 0.545]), + Brown1: fromRgb([1, 0.25, 0.25]), + Brown2: fromRgb([0.932, 0.23, 0.23]), + Brown3: fromRgb([0.804, 0.2, 0.2]), + Brown4: fromRgb([0.545, 0.136, 0.136]), + Burlywood1: fromRgb([1, 0.828, 0.608]), + Burlywood2: fromRgb([0.932, 0.772, 0.57]), + Burlywood3: fromRgb([0.804, 0.668, 0.49]), + Burlywood4: fromRgb([0.545, 0.45, 0.332]), + CadetBlue1: fromRgb([0.596, 0.96, 1]), + CadetBlue2: fromRgb([0.556, 0.898, 0.932]), + CadetBlue3: fromRgb([0.48, 0.772, 0.804]), + CadetBlue4: fromRgb([0.325, 0.525, 0.545]), + Chartreuse1: fromRgb([0.498, 1, 0]), + Chartreuse2: fromRgb([0.464, 0.932, 0]), + Chartreuse3: fromRgb([0.4, 0.804, 0]), + Chartreuse4: fromRgb([0.27, 0.545, 0]), + Chocolate1: fromRgb([1, 0.498, 0.14]), + Chocolate2: fromRgb([0.932, 0.464, 0.13]), + Chocolate3: fromRgb([0.804, 0.4, 0.112]), + Chocolate4: fromRgb([0.545, 0.27, 0.075]), + Coral1: fromRgb([1, 0.448, 0.336]), + Coral2: fromRgb([0.932, 0.415, 0.312]), + Coral3: fromRgb([0.804, 0.356, 0.27]), + Coral4: fromRgb([0.545, 0.244, 0.185]), + Cornsilk1: fromRgb([1, 0.972, 0.864]), + Cornsilk2: fromRgb([0.932, 0.91, 0.804]), + Cornsilk3: fromRgb([0.804, 0.785, 0.694]), + Cornsilk4: fromRgb([0.545, 0.532, 0.47]), + Cyan1: fromRgb([0, 1, 1]), + Cyan2: fromRgb([0, 0.932, 0.932]), + Cyan3: fromRgb([0, 0.804, 0.804]), + Cyan4: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod1: fromRgb([1, 0.725, 0.06]), + DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]), + DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]), + DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]), + DarkOliveGreen1: fromRgb([0.792, 1, 0.44]), + DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]), + DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]), + DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]), + DarkOrange1: fromRgb([1, 0.498, 0]), + DarkOrange2: fromRgb([0.932, 0.464, 0]), + DarkOrange3: fromRgb([0.804, 0.4, 0]), + DarkOrange4: fromRgb([0.545, 0.27, 0]), + DarkOrchid1: fromRgb([0.75, 0.244, 1]), + DarkOrchid2: fromRgb([0.698, 0.228, 0.932]), + DarkOrchid3: fromRgb([0.604, 0.196, 0.804]), + DarkOrchid4: fromRgb([0.408, 0.132, 0.545]), + DarkSeaGreen1: fromRgb([0.756, 1, 0.756]), + DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]), + DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]), + DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]), + DarkSlateGray1: fromRgb([0.592, 1, 1]), + DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]), + DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]), + DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]), + DeepPink1: fromRgb([1, 0.08, 0.576]), + DeepPink2: fromRgb([0.932, 0.07, 0.536]), + DeepPink3: fromRgb([0.804, 0.064, 0.464]), + DeepPink4: fromRgb([0.545, 0.04, 0.312]), + DeepSkyBlue1: fromRgb([0, 0.75, 1]), + DeepSkyBlue2: fromRgb([0, 0.698, 0.932]), + DeepSkyBlue3: fromRgb([0, 0.604, 0.804]), + DeepSkyBlue4: fromRgb([0, 0.408, 0.545]), + DodgerBlue1: fromRgb([0.116, 0.565, 1]), + DodgerBlue2: fromRgb([0.11, 0.525, 0.932]), + DodgerBlue3: fromRgb([0.094, 0.455, 0.804]), + DodgerBlue4: fromRgb([0.064, 0.305, 0.545]), + Firebrick1: fromRgb([1, 0.19, 0.19]), + Firebrick2: fromRgb([0.932, 0.172, 0.172]), + Firebrick3: fromRgb([0.804, 0.15, 0.15]), + Firebrick4: fromRgb([0.545, 0.1, 0.1]), + Gold1: fromRgb([1, 0.844, 0]), + Gold2: fromRgb([0.932, 0.79, 0]), + Gold3: fromRgb([0.804, 0.68, 0]), + Gold4: fromRgb([0.545, 0.46, 0]), + Goldenrod1: fromRgb([1, 0.756, 0.145]), + Goldenrod2: fromRgb([0.932, 0.705, 0.132]), + Goldenrod3: fromRgb([0.804, 0.608, 0.112]), + Goldenrod4: fromRgb([0.545, 0.41, 0.08]), + Green1: fromRgb([0, 1, 0]), + Green2: fromRgb([0, 0.932, 0]), + Green3: fromRgb([0, 0.804, 0]), + Green4: fromRgb([0, 0.545, 0]), + Honeydew1: fromRgb([0.94, 1, 0.94]), + Honeydew2: fromRgb([0.88, 0.932, 0.88]), + Honeydew3: fromRgb([0.756, 0.804, 0.756]), + Honeydew4: fromRgb([0.512, 0.545, 0.512]), + HotPink1: fromRgb([1, 0.43, 0.705]), + HotPink2: fromRgb([0.932, 0.415, 0.655]), + HotPink3: fromRgb([0.804, 0.376, 0.565]), + HotPink4: fromRgb([0.545, 0.228, 0.385]), + IndianRed1: fromRgb([1, 0.415, 0.415]), + IndianRed2: fromRgb([0.932, 0.39, 0.39]), + IndianRed3: fromRgb([0.804, 0.332, 0.332]), + IndianRed4: fromRgb([0.545, 0.228, 0.228]), + Ivory1: fromRgb([1, 1, 0.94]), + Ivory2: fromRgb([0.932, 0.932, 0.88]), + Ivory3: fromRgb([0.804, 0.804, 0.756]), + Ivory4: fromRgb([0.545, 0.545, 0.512]), + Khaki1: fromRgb([1, 0.965, 0.56]), + Khaki2: fromRgb([0.932, 0.9, 0.52]), + Khaki3: fromRgb([0.804, 0.776, 0.45]), + Khaki4: fromRgb([0.545, 0.525, 0.305]), + LavenderBlush1: fromRgb([1, 0.94, 0.96]), + LavenderBlush2: fromRgb([0.932, 0.88, 0.898]), + LavenderBlush3: fromRgb([0.804, 0.756, 0.772]), + LavenderBlush4: fromRgb([0.545, 0.512, 0.525]), + LemonChiffon1: fromRgb([1, 0.98, 0.804]), + LemonChiffon2: fromRgb([0.932, 0.912, 0.75]), + LemonChiffon3: fromRgb([0.804, 0.79, 0.648]), + LemonChiffon4: fromRgb([0.545, 0.536, 0.44]), + LightBlue1: fromRgb([0.75, 0.936, 1]), + LightBlue2: fromRgb([0.698, 0.875, 0.932]), + LightBlue3: fromRgb([0.604, 0.752, 0.804]), + LightBlue4: fromRgb([0.408, 0.512, 0.545]), + LightCyan1: fromRgb([0.88, 1, 1]), + LightCyan2: fromRgb([0.82, 0.932, 0.932]), + LightCyan3: fromRgb([0.705, 0.804, 0.804]), + LightCyan4: fromRgb([0.48, 0.545, 0.545]), + LightGoldenrod1: fromRgb([1, 0.925, 0.545]), + LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]), + LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]), + LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]), + LightPink1: fromRgb([1, 0.684, 0.725]), + LightPink2: fromRgb([0.932, 0.635, 0.68]), + LightPink3: fromRgb([0.804, 0.55, 0.585]), + LightPink4: fromRgb([0.545, 0.372, 0.396]), + LightSalmon1: fromRgb([1, 0.628, 0.48]), + LightSalmon2: fromRgb([0.932, 0.585, 0.448]), + LightSalmon3: fromRgb([0.804, 0.505, 0.385]), + LightSalmon4: fromRgb([0.545, 0.34, 0.26]), + LightSkyBlue1: fromRgb([0.69, 0.888, 1]), + LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]), + LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]), + LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]), + LightSteelBlue1: fromRgb([0.792, 0.884, 1]), + LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]), + LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]), + LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]), + LightYellow1: fromRgb([1, 1, 0.88]), + LightYellow2: fromRgb([0.932, 0.932, 0.82]), + LightYellow3: fromRgb([0.804, 0.804, 0.705]), + LightYellow4: fromRgb([0.545, 0.545, 0.48]), + Magenta1: fromRgb([1, 0, 1]), + Magenta2: fromRgb([0.932, 0, 0.932]), + Magenta3: fromRgb([0.804, 0, 0.804]), + Magenta4: fromRgb([0.545, 0, 0.545]), + Maroon1: fromRgb([1, 0.204, 0.7]), + Maroon2: fromRgb([0.932, 0.19, 0.655]), + Maroon3: fromRgb([0.804, 0.16, 0.565]), + Maroon4: fromRgb([0.545, 0.11, 0.385]), + MediumOrchid1: fromRgb([0.88, 0.4, 1]), + MediumOrchid2: fromRgb([0.82, 0.372, 0.932]), + MediumOrchid3: fromRgb([0.705, 0.32, 0.804]), + MediumOrchid4: fromRgb([0.48, 0.215, 0.545]), + MediumPurple1: fromRgb([0.67, 0.51, 1]), + MediumPurple2: fromRgb([0.624, 0.475, 0.932]), + MediumPurple3: fromRgb([0.536, 0.408, 0.804]), + MediumPurple4: fromRgb([0.365, 0.28, 0.545]), + MistyRose1: fromRgb([1, 0.894, 0.884]), + MistyRose2: fromRgb([0.932, 0.835, 0.824]), + MistyRose3: fromRgb([0.804, 0.716, 0.71]), + MistyRose4: fromRgb([0.545, 0.49, 0.484]), + NavajoWhite1: fromRgb([1, 0.87, 0.68]), + NavajoWhite2: fromRgb([0.932, 0.81, 0.63]), + NavajoWhite3: fromRgb([0.804, 0.7, 0.545]), + NavajoWhite4: fromRgb([0.545, 0.475, 0.37]), + OliveDrab1: fromRgb([0.752, 1, 0.244]), + OliveDrab2: fromRgb([0.7, 0.932, 0.228]), + OliveDrab3: fromRgb([0.604, 0.804, 0.196]), + OliveDrab4: fromRgb([0.41, 0.545, 0.132]), + Orange1: fromRgb([1, 0.648, 0]), + Orange2: fromRgb([0.932, 0.604, 0]), + Orange3: fromRgb([0.804, 0.52, 0]), + Orange4: fromRgb([0.545, 0.352, 0]), + OrangeRed1: fromRgb([1, 0.27, 0]), + OrangeRed2: fromRgb([0.932, 0.25, 0]), + OrangeRed3: fromRgb([0.804, 0.215, 0]), + OrangeRed4: fromRgb([0.545, 0.145, 0]), + Orchid1: fromRgb([1, 0.512, 0.98]), + Orchid2: fromRgb([0.932, 0.48, 0.912]), + Orchid3: fromRgb([0.804, 0.41, 0.79]), + Orchid4: fromRgb([0.545, 0.28, 0.536]), + PaleGreen1: fromRgb([0.604, 1, 0.604]), + PaleGreen2: fromRgb([0.565, 0.932, 0.565]), + PaleGreen3: fromRgb([0.488, 0.804, 0.488]), + PaleGreen4: fromRgb([0.33, 0.545, 0.33]), + PaleTurquoise1: fromRgb([0.732, 1, 1]), + PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]), + PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]), + PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]), + PaleVioletRed1: fromRgb([1, 0.51, 0.67]), + PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]), + PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]), + PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]), + PeachPuff1: fromRgb([1, 0.855, 0.725]), + PeachPuff2: fromRgb([0.932, 0.796, 0.68]), + PeachPuff3: fromRgb([0.804, 0.688, 0.585]), + PeachPuff4: fromRgb([0.545, 0.468, 0.396]), + Pink1: fromRgb([1, 0.71, 0.772]), + Pink2: fromRgb([0.932, 0.664, 0.72]), + Pink3: fromRgb([0.804, 0.57, 0.62]), + Pink4: fromRgb([0.545, 0.39, 0.424]), + Plum1: fromRgb([1, 0.732, 1]), + Plum2: fromRgb([0.932, 0.684, 0.932]), + Plum3: fromRgb([0.804, 0.59, 0.804]), + Plum4: fromRgb([0.545, 0.4, 0.545]), + Purple1: fromRgb([0.608, 0.19, 1]), + Purple2: fromRgb([0.57, 0.172, 0.932]), + Purple3: fromRgb([0.49, 0.15, 0.804]), + Purple4: fromRgb([0.332, 0.1, 0.545]), + Red1: fromRgb([1, 0, 0]), + Red2: fromRgb([0.932, 0, 0]), + Red3: fromRgb([0.804, 0, 0]), + Red4: fromRgb([0.545, 0, 0]), + RosyBrown1: fromRgb([1, 0.756, 0.756]), + RosyBrown2: fromRgb([0.932, 0.705, 0.705]), + RosyBrown3: fromRgb([0.804, 0.608, 0.608]), + RosyBrown4: fromRgb([0.545, 0.41, 0.41]), + RoyalBlue1: fromRgb([0.284, 0.464, 1]), + RoyalBlue2: fromRgb([0.264, 0.43, 0.932]), + RoyalBlue3: fromRgb([0.228, 0.372, 0.804]), + RoyalBlue4: fromRgb([0.152, 0.25, 0.545]), + Salmon1: fromRgb([1, 0.55, 0.41]), + Salmon2: fromRgb([0.932, 0.51, 0.385]), + Salmon3: fromRgb([0.804, 0.44, 0.33]), + Salmon4: fromRgb([0.545, 0.298, 0.224]), + SeaGreen1: fromRgb([0.33, 1, 0.624]), + SeaGreen2: fromRgb([0.305, 0.932, 0.58]), + SeaGreen3: fromRgb([0.264, 0.804, 0.5]), + SeaGreen4: fromRgb([0.18, 0.545, 0.34]), + Seashell1: fromRgb([1, 0.96, 0.932]), + Seashell2: fromRgb([0.932, 0.898, 0.87]), + Seashell3: fromRgb([0.804, 0.772, 0.75]), + Seashell4: fromRgb([0.545, 0.525, 0.51]), + Sienna1: fromRgb([1, 0.51, 0.28]), + Sienna2: fromRgb([0.932, 0.475, 0.26]), + Sienna3: fromRgb([0.804, 0.408, 0.224]), + Sienna4: fromRgb([0.545, 0.28, 0.15]), + SkyBlue1: fromRgb([0.53, 0.808, 1]), + SkyBlue2: fromRgb([0.494, 0.752, 0.932]), + SkyBlue3: fromRgb([0.424, 0.65, 0.804]), + SkyBlue4: fromRgb([0.29, 0.44, 0.545]), + SlateBlue1: fromRgb([0.512, 0.435, 1]), + SlateBlue2: fromRgb([0.48, 0.404, 0.932]), + SlateBlue3: fromRgb([0.41, 0.35, 0.804]), + SlateBlue4: fromRgb([0.28, 0.235, 0.545]), + SlateGray1: fromRgb([0.776, 0.888, 1]), + SlateGray2: fromRgb([0.725, 0.828, 0.932]), + SlateGray3: fromRgb([0.624, 0.712, 0.804]), + SlateGray4: fromRgb([0.424, 0.484, 0.545]), + Snow1: fromRgb([1, 0.98, 0.98]), + Snow2: fromRgb([0.932, 0.912, 0.912]), + Snow3: fromRgb([0.804, 0.79, 0.79]), + Snow4: fromRgb([0.545, 0.536, 0.536]), + SpringGreen1: fromRgb([0, 1, 0.498]), + SpringGreen2: fromRgb([0, 0.932, 0.464]), + SpringGreen3: fromRgb([0, 0.804, 0.4]), + SpringGreen4: fromRgb([0, 0.545, 0.27]), + SteelBlue1: fromRgb([0.39, 0.72, 1]), + SteelBlue2: fromRgb([0.36, 0.675, 0.932]), + SteelBlue3: fromRgb([0.31, 0.58, 0.804]), + SteelBlue4: fromRgb([0.21, 0.392, 0.545]), + Tan1: fromRgb([1, 0.648, 0.31]), + Tan2: fromRgb([0.932, 0.604, 0.288]), + Tan3: fromRgb([0.804, 0.52, 0.248]), + Tan4: fromRgb([0.545, 0.352, 0.17]), + Thistle1: fromRgb([1, 0.884, 1]), + Thistle2: fromRgb([0.932, 0.824, 0.932]), + Thistle3: fromRgb([0.804, 0.71, 0.804]), + Thistle4: fromRgb([0.545, 0.484, 0.545]), + Tomato1: fromRgb([1, 0.39, 0.28]), + Tomato2: fromRgb([0.932, 0.36, 0.26]), + Tomato3: fromRgb([0.804, 0.31, 0.224]), + Tomato4: fromRgb([0.545, 0.21, 0.15]), + Turquoise1: fromRgb([0, 0.96, 1]), + Turquoise2: fromRgb([0, 0.898, 0.932]), + Turquoise3: fromRgb([0, 0.772, 0.804]), + Turquoise4: fromRgb([0, 0.525, 0.545]), + VioletRed1: fromRgb([1, 0.244, 0.59]), + VioletRed2: fromRgb([0.932, 0.228, 0.55]), + VioletRed3: fromRgb([0.804, 0.196, 0.47]), + VioletRed4: fromRgb([0.545, 0.132, 0.32]), + Wheat1: fromRgb([1, 0.905, 0.73]), + Wheat2: fromRgb([0.932, 0.848, 0.684]), + Wheat3: fromRgb([0.804, 0.73, 0.59]), + Wheat4: fromRgb([0.545, 0.494, 0.4]), + Yellow1: fromRgb([1, 1, 0]), + Yellow2: fromRgb([0.932, 0.932, 0]), + Yellow3: fromRgb([0.804, 0.804, 0]), + Yellow4: fromRgb([0.545, 0.545, 0]), + Gray0: fromRgb([0.745, 0.745, 0.745]), + Green0: fromRgb([0, 1, 0]), + Grey0: fromRgb([0.745, 0.745, 0.745]), + Maroon0: fromRgb([0.69, 0.19, 0.376]), + Purple0: fromRgb([0.628, 0.125, 0.94]) +}; +const parseCache = {}; +function parse(str = "") { + parseCache[str] = parseCache[str] || unifiedLatexUtilPegjs.XColorPegParser.parse(str); + return parseCache[str]; +} +const CORE_MODELS = /* @__PURE__ */ new Set(["rgb", "cmy", "cmyk", "hsb", "gray"]); +const XColorCoreModelToColor = { + rgb: ([r, g, b]) => Color([r * 255, g * 255, b * 255], "rgb"), + cmy: ([c, m, y]) => XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]), + cmyk: ([c, m, y, k]) => Color([c * 255, m * 255, y * 255, k * 100], "cmyk"), + hsb: ([h, s, b]) => Color([h * 360, s * 100, b * 100], "hsv"), + gray: ([v]) => Color([v * 255, v * 255, v * 255], "rgb") +}; +const XColorModelToColor = { + wave: ([lambda]) => { + const gamma = 0.8; + let baseRgb = [0, 0, 0]; + if (380 <= lambda && lambda < 440) { + baseRgb = [(440 - lambda) / (440 - 380), 0, 1]; + } + if (440 <= lambda && lambda < 490) { + baseRgb = [0, (lambda - 440) / (490 - 440), 1]; + } + if (490 <= lambda && lambda < 510) { + baseRgb = [0, 1, (510 - lambda) / (510 - 490)]; + } + if (510 <= lambda && lambda < 580) { + baseRgb = [(lambda - 510) / (580 - 510), 1, 0]; + } + if (580 <= lambda && lambda < 6450) { + baseRgb = [1, (645 - lambda) / (645 - 580), 0]; + } + if (645 <= lambda && lambda <= 780) { + baseRgb = [1, 0, 0]; + } + let f = 1; + if (380 <= lambda && 420 < lambda) { + f = 0.3 + 0.7 * (lambda - 380) / (420 - 380); + } + if (700 < lambda && lambda <= 780) { + f = 0.3 + 0.7 * (780 - lambda) / (780 - 700); + } + const rgb = [ + Math.pow(baseRgb[0] * f, gamma), + Math.pow(baseRgb[1] * f, gamma), + Math.pow(baseRgb[2] * f, gamma) + ]; + return Color([rgb[0] * 255, rgb[1] * 255, rgb[2] * 255], "rgb"); + }, + Hsb: ([h, s, b]) => XColorCoreModelToColor.hsb([h / 360, s, b]), + HSB: ([h, s, b]) => XColorCoreModelToColor.hsb([h / 240, s / 240, b / 240]), + HTML: ([v]) => v.startsWith("#") ? Color(v) : Color(`#${v}`), + RGB: ([r, g, b]) => Color([r, g, b], "rgb"), + Gray: ([v]) => XColorCoreModelToColor.gray([v / 15]), + ...XColorCoreModelToColor +}; +const ColorToXColorModel = { + rgb: (color) => color.rgb().array().map((v) => v / 255), + cmy: (color) => [255 - color.red(), 255 - color.green(), 255 - color.blue()].map( + (v) => v / 255 + ), + cmyk: (color) => color.cmyk().array().map((v, i) => i === 3 ? v / 100 : v / 255), + hsb: (color) => [ + color.hue() / 360, + color.saturationv() / 100, + color.value() / 100 + ], + gray: (color) => [color.gray() / 100] +}; +const PREDEFINED_XCOLOR_COLORS = { + // Core colors + red: XColorCoreModelToColor.rgb([1, 0, 0]), + green: XColorCoreModelToColor.rgb([0, 1, 0]), + blue: XColorCoreModelToColor.rgb([0, 0, 1]), + brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]), + lime: XColorCoreModelToColor.rgb([0.75, 1, 0]), + orange: XColorCoreModelToColor.rgb([1, 0.5, 0]), + pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]), + purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]), + teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]), + violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]), + cyan: XColorCoreModelToColor.rgb([0, 1, 1]), + magenta: XColorCoreModelToColor.rgb([1, 0, 1]), + yellow: XColorCoreModelToColor.rgb([1, 1, 0]), + olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]), + black: XColorCoreModelToColor.rgb([0, 0, 0]), + darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]), + gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]), + lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]), + white: XColorCoreModelToColor.rgb([1, 1, 1]), + ...DVI_PS_NAMES, + ...SVG_NAMES, + ...X11_NAMES +}; +function scalarMul(scalar, vec) { + return vec.map((v) => scalar * v); +} +function addVectors(...vecs) { + return vecs.reduce((prev, current) => prev.map((v, i) => v + current[i])); +} +function mixInModel(model, colorsAndCoefficients) { + if (!CORE_MODELS.has(model)) { + throw new Error( + `Cannot mix colors in model "${model}"; only core modes ${Array.from( + CORE_MODELS + ).join(", ")} are supported` + ); + } + const toModel = ColorToXColorModel[model]; + const fromModel = XColorCoreModelToColor[model]; + const mixed = addVectors( + ...colorsAndCoefficients.map(([v, color]) => { + const colorInModel = toModel(color); + return scalarMul(v, colorInModel); + }) + ); + return fromModel(mixed); +} +function computeColor(expr, predefinedColors = {}) { + if (expr.type !== "color") { + throw new Error( + `Can only compute the color of a "color" expression, not one of type ${expr.type}` + ); + } + const knownColors = { ...PREDEFINED_XCOLOR_COLORS, ...predefinedColors }; + function getColor(name) { + if (!knownColors[name]) { + throw new Error(`Unknown color "${name}"`); + } + return knownColors[name]; + } + const color = expr.color; + let computedColor = Color("#000000"); + if (color.type === "expr") { + let base = getColor(color.name); + for (const mix of color.mix_expr) { + if (mix.type === "complete_mix") { + const mixColor = getColor(mix.name); + base = base.mix(mixColor, 1 - mix.mix_percent / 100); + } else if (mix.type === "partial_mix") { + base = base.mix(Color("#FFFFFF"), 1 - mix.mix_percent / 100); + } + } + if (color.prefix && color.prefix.length % 2 === 1) { + base = base.rotate(180); + } + computedColor = base; + } + if (color.type === "extended_expr") { + const model = color.core_model; + const div = color.div || color.expressions.reduce((a, expr2) => a + expr2.weight, 0); + if (div <= 0) { + throw new Error( + `Cannot mix color with ratios that have a denominator of ${div}` + ); + } + const colorsToMix = color.expressions.map( + (expr2) => [ + expr2.weight / div, + computeColor({ + type: "color", + color: expr2.color, + functions: [] + }) + ] + ); + computedColor = mixInModel(model, colorsToMix); + } + for (const func of expr.functions) { + if (func.name === "wheel") { + const angle = func.args[0]; + const circ = func.args[1] || 360; + computedColor = computedColor.rotate(angle / circ * 360); + } + if (func.name === "twheel") { + const angle = func.args[0]; + const circ = func.args[1] || 360; + computedColor = computedColor.rotate(angle / circ * 360 + 60); + } + } + return computedColor; +} +function xcolorColorToHex(color, model, options = { predefinedColors: {} }) { + const { predefinedColors = {} } = options; + const parsed = parse(color); + if (model && model !== "default" && parsed.type !== "color") { + if (!(model in XColorModelToColor)) { + throw new Error( + `Unknown color model "${model}"; known models are ${Object.keys( + XColorModelToColor + ).join(", ")}` + ); + } + if (parsed.type !== "hex_spec" && parsed.type !== "num_spec") { + throw new Error( + `Cannot use model ${model} to compute the color "${color}"` + ); + } + if (model === "HTML" && parsed.type === "hex_spec") { + return XColorModelToColor.HTML(parsed.content).hex(); + } else if (parsed.type === "num_spec") { + return XColorModelToColor[model](parsed.content).hex(); + } + throw new Error( + `Don't know how to process color "${color}" in model "${model}"` + ); + } + if (Array.isArray(parsed) || parsed.type !== "color") { + throw new Error( + `Cannot the color "${color}" is not a valid color string` + ); + } + let computed = null; + try { + computed = computeColor(parsed, predefinedColors); + } catch (e) { + } + return computed && computed.hex(); +} +exports.DVI_PS_NAMES = DVI_PS_NAMES; +exports.PREDEFINED_XCOLOR_COLORS = PREDEFINED_XCOLOR_COLORS; +exports.SVG_NAMES = SVG_NAMES; +exports.X11_NAMES = X11_NAMES; +exports.XColorCoreModelToColor = XColorCoreModelToColor; +exports.computeColor = computeColor; +exports.environments = environments; +exports.macros = macros; +exports.parse = parse; +exports.xcolorColorToHex = xcolorColorToHex; +//# sourceMappingURL=xcolor-BEfsW_1K.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs.map b/node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs.map new file mode 100644 index 0000000..d9054ab --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/xcolor-BEfsW_1K.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"xcolor-BEfsW_1K.cjs","sources":["../package/xcolor/provides.ts","../package/xcolor/libs/predefined-colors.ts","../package/xcolor/libs/parser.ts","../package/xcolor/libs/xcolor.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n substitutecolormodel: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n selectcolormodel: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n definecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n providecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n colorlet: {\n signature: \"o m o m\",\n renderInfo: { breakAround: true },\n },\n definecolorset: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n providecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true },\n },\n preparecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n preparecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true },\n },\n DefineNamedColor: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n definecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n providecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n color: { signature: \"o m\", renderInfo: { breakAround: true } },\n textcolor: { signature: \"o m m\", renderInfo: { inParMode: true } },\n pagecolor: { signature: \"o m\" },\n colorbox: { signature: \"o m m\" },\n fcolorbox: { signature: \"o m o m m\" },\n boxframe: { signature: \"o m\" },\n testcolor: { signature: \"o m\" },\n blendcolors: { signature: \"s m\" },\n maskcolors: { signature: \"o m\" },\n definecolorseries: {\n signature: \"m m m o m o m\",\n renderInfo: { breakAround: true },\n },\n resetcolorseries: {\n signature: \"o m\",\n renderInfo: { breakAround: true },\n },\n rowcolors: { signature: \"s o m m m\" },\n extractcolorspec: { signature: \"m m\" },\n extractcolorspecs: { signature: \"m m m\" },\n convertcolorspec: { signature: \"m m m m\" },\n};\n\nexport const environments: EnvInfoRecord = {\n testcolors: { signature: \"o\", renderInfo: { pgfkeysArgs: true } },\n};\n","import Color from \"color\";\n\nconst fromRgb = ([r, g, b]: number[]) =>\n Color([r * 255, g * 255, b * 255], \"rgb\");\n\nexport const DVI_PS_NAMES = {\n Apricot: Color(\"#FBB982\"),\n Aquamarine: Color(\"#00B5BE\"),\n Bittersweet: Color(\"#C04F17\"),\n Black: Color(\"#221E1F\"),\n Blue: Color(\"#2D2F92\"),\n BlueGreen: Color(\"#00B3B8\"),\n BlueViolet: Color(\"#473992\"),\n BrickRed: Color(\"#B6321C\"),\n Brown: Color(\"#792500\"),\n BurntOrange: Color(\"#F7921D\"),\n CadetBlue: Color(\"#74729A\"),\n CarnationPink: Color(\"#F282B4\"),\n Cerulean: Color(\"#00A2E3\"),\n CornflowerBlue: Color(\"#41B0E4\"),\n Cyan: Color(\"#00AEEF\"),\n Dandelion: Color(\"#FDBC42\"),\n DarkOrchid: Color(\"#A4538A\"),\n Emerald: Color(\"#00A99D\"),\n ForestGreen: Color(\"#009B55\"),\n Fuchsia: Color(\"#8C368C\"),\n Goldenrod: Color(\"#FFDF42\"),\n Gray: Color(\"#949698\"),\n Green: Color(\"#00A64F\"),\n GreenYellow: Color(\"#DFE674\"),\n JungleGreen: Color(\"#00A99A\"),\n Lavender: Color(\"#F49EC4\"),\n LimeGreen: Color(\"#8DC73E\"),\n Magenta: Color(\"#EC008C\"),\n Mahogany: Color(\"#A9341F\"),\n Maroon: Color(\"#AF3235\"),\n Melon: Color(\"#F89E7B\"),\n MidnightBlue: Color(\"#006795\"),\n Mulberry: Color(\"#A93C93\"),\n NavyBlue: Color(\"#006EB8\"),\n OliveGreen: Color(\"#3C8031\"),\n Orange: Color(\"#F58137\"),\n OrangeRed: Color(\"#ED135A\"),\n Orchid: Color(\"#AF72B0\"),\n Peach: Color(\"#F7965A\"),\n Periwinkle: Color(\"#7977B8\"),\n PineGreen: Color(\"#008B72\"),\n Plum: Color(\"#92268F\"),\n ProcessBlue: Color(\"#00B0F0\"),\n Purple: Color(\"#99479B\"),\n RawSienna: Color(\"#974006\"),\n Red: Color(\"#ED1B23\"),\n RedOrange: Color(\"#F26035\"),\n RedViolet: Color(\"#A1246B\"),\n Rhodamine: Color(\"#EF559F\"),\n RoyalBlue: Color(\"#0071BC\"),\n RoyalPurple: Color(\"#613F99\"),\n RubineRed: Color(\"#ED017D\"),\n Salmon: Color(\"#F69289\"),\n SeaGreen: Color(\"#3FBC9D\"),\n Sepia: Color(\"#671800\"),\n SkyBlue: Color(\"#46C5DD\"),\n SpringGreen: Color(\"#C6DC67\"),\n Tan: Color(\"#DA9D76\"),\n TealBlue: Color(\"#00AEB3\"),\n Thistle: Color(\"#D883B7\"),\n Turquoise: Color(\"#00B4CE\"),\n Violet: Color(\"#58429B\"),\n VioletRed: Color(\"#EF58A0\"),\n White: Color(\"#FFFFFF\"),\n WildStrawberry: Color(\"#EE2967\"),\n Yellow: Color(\"#FFF200\"),\n YellowGreen: Color(\"#98CC70\"),\n YellowOrange: Color(\"#FAA21A\"),\n};\n\nexport const SVG_NAMES = {\n AliceBlue: fromRgb([0.94, 0.972, 1]),\n AntiqueWhite: fromRgb([0.98, 0.92, 0.844]),\n Aqua: fromRgb([0, 1, 1]),\n Aquamarine: fromRgb([0.498, 1, 0.83]),\n Azure: fromRgb([0.94, 1, 1]),\n Beige: fromRgb([0.96, 0.96, 0.864]),\n Bisque: fromRgb([1, 0.894, 0.77]),\n Black: fromRgb([0, 0, 0]),\n BlanchedAlmond: fromRgb([1, 0.92, 0.804]),\n Blue: fromRgb([0, 0, 1]),\n BlueViolet: fromRgb([0.54, 0.17, 0.888]),\n Brown: fromRgb([0.648, 0.165, 0.165]),\n BurlyWood: fromRgb([0.87, 0.72, 0.53]),\n CadetBlue: fromRgb([0.372, 0.62, 0.628]),\n Chartreuse: fromRgb([0.498, 1, 0]),\n Chocolate: fromRgb([0.824, 0.41, 0.116]),\n Coral: fromRgb([1, 0.498, 0.312]),\n CornflowerBlue: fromRgb([0.392, 0.585, 0.93]),\n Cornsilk: fromRgb([1, 0.972, 0.864]),\n Crimson: fromRgb([0.864, 0.08, 0.235]),\n Cyan: fromRgb([0, 1, 1]),\n DarkBlue: fromRgb([0, 0, 0.545]),\n DarkCyan: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]),\n DarkGray: fromRgb([0.664, 0.664, 0.664]),\n DarkGreen: fromRgb([0, 0.392, 0]),\n DarkGrey: fromRgb([0.664, 0.664, 0.664]),\n DarkKhaki: fromRgb([0.74, 0.716, 0.42]),\n DarkMagenta: fromRgb([0.545, 0, 0.545]),\n DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]),\n DarkOrange: fromRgb([1, 0.55, 0]),\n DarkOrchid: fromRgb([0.6, 0.196, 0.8]),\n DarkRed: fromRgb([0.545, 0, 0]),\n DarkSalmon: fromRgb([0.912, 0.59, 0.48]),\n DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]),\n DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]),\n DarkSlateGray: fromRgb([0.185, 0.31, 0.31]),\n DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]),\n DarkTurquoise: fromRgb([0, 0.808, 0.82]),\n DarkViolet: fromRgb([0.58, 0, 0.828]),\n DeepPink: fromRgb([1, 0.08, 0.576]),\n DeepSkyBlue: fromRgb([0, 0.75, 1]),\n DimGray: fromRgb([0.41, 0.41, 0.41]),\n DimGrey: fromRgb([0.41, 0.41, 0.41]),\n DodgerBlue: fromRgb([0.116, 0.565, 1]),\n FireBrick: fromRgb([0.698, 0.132, 0.132]),\n FloralWhite: fromRgb([1, 0.98, 0.94]),\n ForestGreen: fromRgb([0.132, 0.545, 0.132]),\n Fuchsia: fromRgb([1, 0, 1]),\n Gainsboro: fromRgb([0.864, 0.864, 0.864]),\n GhostWhite: fromRgb([0.972, 0.972, 1]),\n Gold: fromRgb([1, 0.844, 0]),\n Goldenrod: fromRgb([0.855, 0.648, 0.125]),\n Gray: fromRgb([0.5, 0.5, 0.5]),\n Green: fromRgb([0, 0.5, 0]),\n GreenYellow: fromRgb([0.68, 1, 0.185]),\n Grey: fromRgb([0.5, 0.5, 0.5]),\n Honeydew: fromRgb([0.94, 1, 0.94]),\n HotPink: fromRgb([1, 0.41, 0.705]),\n IndianRed: fromRgb([0.804, 0.36, 0.36]),\n Indigo: fromRgb([0.294, 0, 0.51]),\n Ivory: fromRgb([1, 1, 0.94]),\n Khaki: fromRgb([0.94, 0.9, 0.55]),\n Lavender: fromRgb([0.9, 0.9, 0.98]),\n LavenderBlush: fromRgb([1, 0.94, 0.96]),\n LawnGreen: fromRgb([0.488, 0.99, 0]),\n LemonChiffon: fromRgb([1, 0.98, 0.804]),\n LightBlue: fromRgb([0.68, 0.848, 0.9]),\n LightCoral: fromRgb([0.94, 0.5, 0.5]),\n LightCyan: fromRgb([0.88, 1, 1]),\n LightGoldenrod: fromRgb([0.933, 0.867, 0.51]),\n LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]),\n LightGray: fromRgb([0.828, 0.828, 0.828]),\n LightGreen: fromRgb([0.565, 0.932, 0.565]),\n LightGrey: fromRgb([0.828, 0.828, 0.828]),\n LightPink: fromRgb([1, 0.712, 0.756]),\n LightSalmon: fromRgb([1, 0.628, 0.48]),\n LightSeaGreen: fromRgb([0.125, 0.698, 0.668]),\n LightSkyBlue: fromRgb([0.53, 0.808, 0.98]),\n LightSlateBlue: fromRgb([0.518, 0.44, 1]),\n LightSlateGray: fromRgb([0.468, 0.532, 0.6]),\n LightSlateGrey: fromRgb([0.468, 0.532, 0.6]),\n LightSteelBlue: fromRgb([0.69, 0.77, 0.87]),\n LightYellow: fromRgb([1, 1, 0.88]),\n Lime: fromRgb([0, 1, 0]),\n LimeGreen: fromRgb([0.196, 0.804, 0.196]),\n Linen: fromRgb([0.98, 0.94, 0.9]),\n Magenta: fromRgb([1, 0, 1]),\n Maroon: fromRgb([0.5, 0, 0]),\n MediumAquamarine: fromRgb([0.4, 0.804, 0.668]),\n MediumBlue: fromRgb([0, 0, 0.804]),\n MediumOrchid: fromRgb([0.73, 0.332, 0.828]),\n MediumPurple: fromRgb([0.576, 0.44, 0.86]),\n MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]),\n MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]),\n MediumSpringGreen: fromRgb([0, 0.98, 0.604]),\n MediumTurquoise: fromRgb([0.284, 0.82, 0.8]),\n MediumVioletRed: fromRgb([0.78, 0.084, 0.52]),\n MidnightBlue: fromRgb([0.098, 0.098, 0.44]),\n MintCream: fromRgb([0.96, 1, 0.98]),\n MistyRose: fromRgb([1, 0.894, 0.884]),\n Moccasin: fromRgb([1, 0.894, 0.71]),\n NavajoWhite: fromRgb([1, 0.87, 0.68]),\n Navy: fromRgb([0, 0, 0.5]),\n NavyBlue: fromRgb([0, 0, 0.5]),\n OldLace: fromRgb([0.992, 0.96, 0.9]),\n Olive: fromRgb([0.5, 0.5, 0]),\n OliveDrab: fromRgb([0.42, 0.556, 0.136]),\n Orange: fromRgb([1, 0.648, 0]),\n OrangeRed: fromRgb([1, 0.27, 0]),\n Orchid: fromRgb([0.855, 0.44, 0.84]),\n PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]),\n PaleGreen: fromRgb([0.596, 0.985, 0.596]),\n PaleTurquoise: fromRgb([0.688, 0.932, 0.932]),\n PaleVioletRed: fromRgb([0.86, 0.44, 0.576]),\n PapayaWhip: fromRgb([1, 0.936, 0.835]),\n PeachPuff: fromRgb([1, 0.855, 0.725]),\n Peru: fromRgb([0.804, 0.52, 0.248]),\n Pink: fromRgb([1, 0.752, 0.796]),\n Plum: fromRgb([0.868, 0.628, 0.868]),\n PowderBlue: fromRgb([0.69, 0.88, 0.9]),\n Purple: fromRgb([0.5, 0, 0.5]),\n Red: fromRgb([1, 0, 0]),\n RosyBrown: fromRgb([0.736, 0.56, 0.56]),\n RoyalBlue: fromRgb([0.255, 0.41, 0.884]),\n SaddleBrown: fromRgb([0.545, 0.27, 0.075]),\n Salmon: fromRgb([0.98, 0.5, 0.448]),\n SandyBrown: fromRgb([0.956, 0.644, 0.376]),\n SeaGreen: fromRgb([0.18, 0.545, 0.34]),\n Seashell: fromRgb([1, 0.96, 0.932]),\n Sienna: fromRgb([0.628, 0.32, 0.176]),\n Silver: fromRgb([0.752, 0.752, 0.752]),\n SkyBlue: fromRgb([0.53, 0.808, 0.92]),\n SlateBlue: fromRgb([0.415, 0.352, 0.804]),\n SlateGray: fromRgb([0.44, 0.5, 0.565]),\n SlateGrey: fromRgb([0.44, 0.5, 0.565]),\n Snow: fromRgb([1, 0.98, 0.98]),\n SpringGreen: fromRgb([0, 1, 0.498]),\n SteelBlue: fromRgb([0.275, 0.51, 0.705]),\n Tan: fromRgb([0.824, 0.705, 0.55]),\n Teal: fromRgb([0, 0.5, 0.5]),\n Thistle: fromRgb([0.848, 0.75, 0.848]),\n Tomato: fromRgb([1, 0.39, 0.28]),\n Turquoise: fromRgb([0.25, 0.88, 0.815]),\n Violet: fromRgb([0.932, 0.51, 0.932]),\n VioletRed: fromRgb([0.816, 0.125, 0.565]),\n Wheat: fromRgb([0.96, 0.87, 0.7]),\n White: fromRgb([1, 1, 1]),\n WhiteSmoke: fromRgb([0.96, 0.96, 0.96]),\n Yellow: fromRgb([1, 1, 0]),\n YellowGreen: fromRgb([0.604, 0.804, 0.196]),\n};\n\nexport const X11_NAMES = {\n AntiqueWhite1: fromRgb([1, 0.936, 0.86]),\n AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]),\n AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]),\n AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]),\n Aquamarine1: fromRgb([0.498, 1, 0.83]),\n Aquamarine2: fromRgb([0.464, 0.932, 0.776]),\n Aquamarine3: fromRgb([0.4, 0.804, 0.668]),\n Aquamarine4: fromRgb([0.27, 0.545, 0.455]),\n Azure1: fromRgb([0.94, 1, 1]),\n Azure2: fromRgb([0.88, 0.932, 0.932]),\n Azure3: fromRgb([0.756, 0.804, 0.804]),\n Azure4: fromRgb([0.512, 0.545, 0.545]),\n Bisque1: fromRgb([1, 0.894, 0.77]),\n Bisque2: fromRgb([0.932, 0.835, 0.716]),\n Bisque3: fromRgb([0.804, 0.716, 0.62]),\n Bisque4: fromRgb([0.545, 0.49, 0.42]),\n Blue1: fromRgb([0, 0, 1]),\n Blue2: fromRgb([0, 0, 0.932]),\n Blue3: fromRgb([0, 0, 0.804]),\n Blue4: fromRgb([0, 0, 0.545]),\n Brown1: fromRgb([1, 0.25, 0.25]),\n Brown2: fromRgb([0.932, 0.23, 0.23]),\n Brown3: fromRgb([0.804, 0.2, 0.2]),\n Brown4: fromRgb([0.545, 0.136, 0.136]),\n Burlywood1: fromRgb([1, 0.828, 0.608]),\n Burlywood2: fromRgb([0.932, 0.772, 0.57]),\n Burlywood3: fromRgb([0.804, 0.668, 0.49]),\n Burlywood4: fromRgb([0.545, 0.45, 0.332]),\n CadetBlue1: fromRgb([0.596, 0.96, 1]),\n CadetBlue2: fromRgb([0.556, 0.898, 0.932]),\n CadetBlue3: fromRgb([0.48, 0.772, 0.804]),\n CadetBlue4: fromRgb([0.325, 0.525, 0.545]),\n Chartreuse1: fromRgb([0.498, 1, 0]),\n Chartreuse2: fromRgb([0.464, 0.932, 0]),\n Chartreuse3: fromRgb([0.4, 0.804, 0]),\n Chartreuse4: fromRgb([0.27, 0.545, 0]),\n Chocolate1: fromRgb([1, 0.498, 0.14]),\n Chocolate2: fromRgb([0.932, 0.464, 0.13]),\n Chocolate3: fromRgb([0.804, 0.4, 0.112]),\n Chocolate4: fromRgb([0.545, 0.27, 0.075]),\n Coral1: fromRgb([1, 0.448, 0.336]),\n Coral2: fromRgb([0.932, 0.415, 0.312]),\n Coral3: fromRgb([0.804, 0.356, 0.27]),\n Coral4: fromRgb([0.545, 0.244, 0.185]),\n Cornsilk1: fromRgb([1, 0.972, 0.864]),\n Cornsilk2: fromRgb([0.932, 0.91, 0.804]),\n Cornsilk3: fromRgb([0.804, 0.785, 0.694]),\n Cornsilk4: fromRgb([0.545, 0.532, 0.47]),\n Cyan1: fromRgb([0, 1, 1]),\n Cyan2: fromRgb([0, 0.932, 0.932]),\n Cyan3: fromRgb([0, 0.804, 0.804]),\n Cyan4: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod1: fromRgb([1, 0.725, 0.06]),\n DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]),\n DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]),\n DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]),\n DarkOliveGreen1: fromRgb([0.792, 1, 0.44]),\n DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]),\n DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]),\n DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]),\n DarkOrange1: fromRgb([1, 0.498, 0]),\n DarkOrange2: fromRgb([0.932, 0.464, 0]),\n DarkOrange3: fromRgb([0.804, 0.4, 0]),\n DarkOrange4: fromRgb([0.545, 0.27, 0]),\n DarkOrchid1: fromRgb([0.75, 0.244, 1]),\n DarkOrchid2: fromRgb([0.698, 0.228, 0.932]),\n DarkOrchid3: fromRgb([0.604, 0.196, 0.804]),\n DarkOrchid4: fromRgb([0.408, 0.132, 0.545]),\n DarkSeaGreen1: fromRgb([0.756, 1, 0.756]),\n DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]),\n DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]),\n DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]),\n DarkSlateGray1: fromRgb([0.592, 1, 1]),\n DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]),\n DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]),\n DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]),\n DeepPink1: fromRgb([1, 0.08, 0.576]),\n DeepPink2: fromRgb([0.932, 0.07, 0.536]),\n DeepPink3: fromRgb([0.804, 0.064, 0.464]),\n DeepPink4: fromRgb([0.545, 0.04, 0.312]),\n DeepSkyBlue1: fromRgb([0, 0.75, 1]),\n DeepSkyBlue2: fromRgb([0, 0.698, 0.932]),\n DeepSkyBlue3: fromRgb([0, 0.604, 0.804]),\n DeepSkyBlue4: fromRgb([0, 0.408, 0.545]),\n DodgerBlue1: fromRgb([0.116, 0.565, 1]),\n DodgerBlue2: fromRgb([0.11, 0.525, 0.932]),\n DodgerBlue3: fromRgb([0.094, 0.455, 0.804]),\n DodgerBlue4: fromRgb([0.064, 0.305, 0.545]),\n Firebrick1: fromRgb([1, 0.19, 0.19]),\n Firebrick2: fromRgb([0.932, 0.172, 0.172]),\n Firebrick3: fromRgb([0.804, 0.15, 0.15]),\n Firebrick4: fromRgb([0.545, 0.1, 0.1]),\n Gold1: fromRgb([1, 0.844, 0]),\n Gold2: fromRgb([0.932, 0.79, 0]),\n Gold3: fromRgb([0.804, 0.68, 0]),\n Gold4: fromRgb([0.545, 0.46, 0]),\n Goldenrod1: fromRgb([1, 0.756, 0.145]),\n Goldenrod2: fromRgb([0.932, 0.705, 0.132]),\n Goldenrod3: fromRgb([0.804, 0.608, 0.112]),\n Goldenrod4: fromRgb([0.545, 0.41, 0.08]),\n Green1: fromRgb([0, 1, 0]),\n Green2: fromRgb([0, 0.932, 0]),\n Green3: fromRgb([0, 0.804, 0]),\n Green4: fromRgb([0, 0.545, 0]),\n Honeydew1: fromRgb([0.94, 1, 0.94]),\n Honeydew2: fromRgb([0.88, 0.932, 0.88]),\n Honeydew3: fromRgb([0.756, 0.804, 0.756]),\n Honeydew4: fromRgb([0.512, 0.545, 0.512]),\n HotPink1: fromRgb([1, 0.43, 0.705]),\n HotPink2: fromRgb([0.932, 0.415, 0.655]),\n HotPink3: fromRgb([0.804, 0.376, 0.565]),\n HotPink4: fromRgb([0.545, 0.228, 0.385]),\n IndianRed1: fromRgb([1, 0.415, 0.415]),\n IndianRed2: fromRgb([0.932, 0.39, 0.39]),\n IndianRed3: fromRgb([0.804, 0.332, 0.332]),\n IndianRed4: fromRgb([0.545, 0.228, 0.228]),\n Ivory1: fromRgb([1, 1, 0.94]),\n Ivory2: fromRgb([0.932, 0.932, 0.88]),\n Ivory3: fromRgb([0.804, 0.804, 0.756]),\n Ivory4: fromRgb([0.545, 0.545, 0.512]),\n Khaki1: fromRgb([1, 0.965, 0.56]),\n Khaki2: fromRgb([0.932, 0.9, 0.52]),\n Khaki3: fromRgb([0.804, 0.776, 0.45]),\n Khaki4: fromRgb([0.545, 0.525, 0.305]),\n LavenderBlush1: fromRgb([1, 0.94, 0.96]),\n LavenderBlush2: fromRgb([0.932, 0.88, 0.898]),\n LavenderBlush3: fromRgb([0.804, 0.756, 0.772]),\n LavenderBlush4: fromRgb([0.545, 0.512, 0.525]),\n LemonChiffon1: fromRgb([1, 0.98, 0.804]),\n LemonChiffon2: fromRgb([0.932, 0.912, 0.75]),\n LemonChiffon3: fromRgb([0.804, 0.79, 0.648]),\n LemonChiffon4: fromRgb([0.545, 0.536, 0.44]),\n LightBlue1: fromRgb([0.75, 0.936, 1]),\n LightBlue2: fromRgb([0.698, 0.875, 0.932]),\n LightBlue3: fromRgb([0.604, 0.752, 0.804]),\n LightBlue4: fromRgb([0.408, 0.512, 0.545]),\n LightCyan1: fromRgb([0.88, 1, 1]),\n LightCyan2: fromRgb([0.82, 0.932, 0.932]),\n LightCyan3: fromRgb([0.705, 0.804, 0.804]),\n LightCyan4: fromRgb([0.48, 0.545, 0.545]),\n LightGoldenrod1: fromRgb([1, 0.925, 0.545]),\n LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]),\n LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]),\n LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]),\n LightPink1: fromRgb([1, 0.684, 0.725]),\n LightPink2: fromRgb([0.932, 0.635, 0.68]),\n LightPink3: fromRgb([0.804, 0.55, 0.585]),\n LightPink4: fromRgb([0.545, 0.372, 0.396]),\n LightSalmon1: fromRgb([1, 0.628, 0.48]),\n LightSalmon2: fromRgb([0.932, 0.585, 0.448]),\n LightSalmon3: fromRgb([0.804, 0.505, 0.385]),\n LightSalmon4: fromRgb([0.545, 0.34, 0.26]),\n LightSkyBlue1: fromRgb([0.69, 0.888, 1]),\n LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]),\n LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]),\n LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]),\n LightSteelBlue1: fromRgb([0.792, 0.884, 1]),\n LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]),\n LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]),\n LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]),\n LightYellow1: fromRgb([1, 1, 0.88]),\n LightYellow2: fromRgb([0.932, 0.932, 0.82]),\n LightYellow3: fromRgb([0.804, 0.804, 0.705]),\n LightYellow4: fromRgb([0.545, 0.545, 0.48]),\n Magenta1: fromRgb([1, 0, 1]),\n Magenta2: fromRgb([0.932, 0, 0.932]),\n Magenta3: fromRgb([0.804, 0, 0.804]),\n Magenta4: fromRgb([0.545, 0, 0.545]),\n Maroon1: fromRgb([1, 0.204, 0.7]),\n Maroon2: fromRgb([0.932, 0.19, 0.655]),\n Maroon3: fromRgb([0.804, 0.16, 0.565]),\n Maroon4: fromRgb([0.545, 0.11, 0.385]),\n MediumOrchid1: fromRgb([0.88, 0.4, 1]),\n MediumOrchid2: fromRgb([0.82, 0.372, 0.932]),\n MediumOrchid3: fromRgb([0.705, 0.32, 0.804]),\n MediumOrchid4: fromRgb([0.48, 0.215, 0.545]),\n MediumPurple1: fromRgb([0.67, 0.51, 1]),\n MediumPurple2: fromRgb([0.624, 0.475, 0.932]),\n MediumPurple3: fromRgb([0.536, 0.408, 0.804]),\n MediumPurple4: fromRgb([0.365, 0.28, 0.545]),\n MistyRose1: fromRgb([1, 0.894, 0.884]),\n MistyRose2: fromRgb([0.932, 0.835, 0.824]),\n MistyRose3: fromRgb([0.804, 0.716, 0.71]),\n MistyRose4: fromRgb([0.545, 0.49, 0.484]),\n NavajoWhite1: fromRgb([1, 0.87, 0.68]),\n NavajoWhite2: fromRgb([0.932, 0.81, 0.63]),\n NavajoWhite3: fromRgb([0.804, 0.7, 0.545]),\n NavajoWhite4: fromRgb([0.545, 0.475, 0.37]),\n OliveDrab1: fromRgb([0.752, 1, 0.244]),\n OliveDrab2: fromRgb([0.7, 0.932, 0.228]),\n OliveDrab3: fromRgb([0.604, 0.804, 0.196]),\n OliveDrab4: fromRgb([0.41, 0.545, 0.132]),\n Orange1: fromRgb([1, 0.648, 0]),\n Orange2: fromRgb([0.932, 0.604, 0]),\n Orange3: fromRgb([0.804, 0.52, 0]),\n Orange4: fromRgb([0.545, 0.352, 0]),\n OrangeRed1: fromRgb([1, 0.27, 0]),\n OrangeRed2: fromRgb([0.932, 0.25, 0]),\n OrangeRed3: fromRgb([0.804, 0.215, 0]),\n OrangeRed4: fromRgb([0.545, 0.145, 0]),\n Orchid1: fromRgb([1, 0.512, 0.98]),\n Orchid2: fromRgb([0.932, 0.48, 0.912]),\n Orchid3: fromRgb([0.804, 0.41, 0.79]),\n Orchid4: fromRgb([0.545, 0.28, 0.536]),\n PaleGreen1: fromRgb([0.604, 1, 0.604]),\n PaleGreen2: fromRgb([0.565, 0.932, 0.565]),\n PaleGreen3: fromRgb([0.488, 0.804, 0.488]),\n PaleGreen4: fromRgb([0.33, 0.545, 0.33]),\n PaleTurquoise1: fromRgb([0.732, 1, 1]),\n PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]),\n PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]),\n PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]),\n PaleVioletRed1: fromRgb([1, 0.51, 0.67]),\n PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]),\n PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]),\n PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]),\n PeachPuff1: fromRgb([1, 0.855, 0.725]),\n PeachPuff2: fromRgb([0.932, 0.796, 0.68]),\n PeachPuff3: fromRgb([0.804, 0.688, 0.585]),\n PeachPuff4: fromRgb([0.545, 0.468, 0.396]),\n Pink1: fromRgb([1, 0.71, 0.772]),\n Pink2: fromRgb([0.932, 0.664, 0.72]),\n Pink3: fromRgb([0.804, 0.57, 0.62]),\n Pink4: fromRgb([0.545, 0.39, 0.424]),\n Plum1: fromRgb([1, 0.732, 1]),\n Plum2: fromRgb([0.932, 0.684, 0.932]),\n Plum3: fromRgb([0.804, 0.59, 0.804]),\n Plum4: fromRgb([0.545, 0.4, 0.545]),\n Purple1: fromRgb([0.608, 0.19, 1]),\n Purple2: fromRgb([0.57, 0.172, 0.932]),\n Purple3: fromRgb([0.49, 0.15, 0.804]),\n Purple4: fromRgb([0.332, 0.1, 0.545]),\n Red1: fromRgb([1, 0, 0]),\n Red2: fromRgb([0.932, 0, 0]),\n Red3: fromRgb([0.804, 0, 0]),\n Red4: fromRgb([0.545, 0, 0]),\n RosyBrown1: fromRgb([1, 0.756, 0.756]),\n RosyBrown2: fromRgb([0.932, 0.705, 0.705]),\n RosyBrown3: fromRgb([0.804, 0.608, 0.608]),\n RosyBrown4: fromRgb([0.545, 0.41, 0.41]),\n RoyalBlue1: fromRgb([0.284, 0.464, 1]),\n RoyalBlue2: fromRgb([0.264, 0.43, 0.932]),\n RoyalBlue3: fromRgb([0.228, 0.372, 0.804]),\n RoyalBlue4: fromRgb([0.152, 0.25, 0.545]),\n Salmon1: fromRgb([1, 0.55, 0.41]),\n Salmon2: fromRgb([0.932, 0.51, 0.385]),\n Salmon3: fromRgb([0.804, 0.44, 0.33]),\n Salmon4: fromRgb([0.545, 0.298, 0.224]),\n SeaGreen1: fromRgb([0.33, 1, 0.624]),\n SeaGreen2: fromRgb([0.305, 0.932, 0.58]),\n SeaGreen3: fromRgb([0.264, 0.804, 0.5]),\n SeaGreen4: fromRgb([0.18, 0.545, 0.34]),\n Seashell1: fromRgb([1, 0.96, 0.932]),\n Seashell2: fromRgb([0.932, 0.898, 0.87]),\n Seashell3: fromRgb([0.804, 0.772, 0.75]),\n Seashell4: fromRgb([0.545, 0.525, 0.51]),\n Sienna1: fromRgb([1, 0.51, 0.28]),\n Sienna2: fromRgb([0.932, 0.475, 0.26]),\n Sienna3: fromRgb([0.804, 0.408, 0.224]),\n Sienna4: fromRgb([0.545, 0.28, 0.15]),\n SkyBlue1: fromRgb([0.53, 0.808, 1]),\n SkyBlue2: fromRgb([0.494, 0.752, 0.932]),\n SkyBlue3: fromRgb([0.424, 0.65, 0.804]),\n SkyBlue4: fromRgb([0.29, 0.44, 0.545]),\n SlateBlue1: fromRgb([0.512, 0.435, 1]),\n SlateBlue2: fromRgb([0.48, 0.404, 0.932]),\n SlateBlue3: fromRgb([0.41, 0.35, 0.804]),\n SlateBlue4: fromRgb([0.28, 0.235, 0.545]),\n SlateGray1: fromRgb([0.776, 0.888, 1]),\n SlateGray2: fromRgb([0.725, 0.828, 0.932]),\n SlateGray3: fromRgb([0.624, 0.712, 0.804]),\n SlateGray4: fromRgb([0.424, 0.484, 0.545]),\n Snow1: fromRgb([1, 0.98, 0.98]),\n Snow2: fromRgb([0.932, 0.912, 0.912]),\n Snow3: fromRgb([0.804, 0.79, 0.79]),\n Snow4: fromRgb([0.545, 0.536, 0.536]),\n SpringGreen1: fromRgb([0, 1, 0.498]),\n SpringGreen2: fromRgb([0, 0.932, 0.464]),\n SpringGreen3: fromRgb([0, 0.804, 0.4]),\n SpringGreen4: fromRgb([0, 0.545, 0.27]),\n SteelBlue1: fromRgb([0.39, 0.72, 1]),\n SteelBlue2: fromRgb([0.36, 0.675, 0.932]),\n SteelBlue3: fromRgb([0.31, 0.58, 0.804]),\n SteelBlue4: fromRgb([0.21, 0.392, 0.545]),\n Tan1: fromRgb([1, 0.648, 0.31]),\n Tan2: fromRgb([0.932, 0.604, 0.288]),\n Tan3: fromRgb([0.804, 0.52, 0.248]),\n Tan4: fromRgb([0.545, 0.352, 0.17]),\n Thistle1: fromRgb([1, 0.884, 1]),\n Thistle2: fromRgb([0.932, 0.824, 0.932]),\n Thistle3: fromRgb([0.804, 0.71, 0.804]),\n Thistle4: fromRgb([0.545, 0.484, 0.545]),\n Tomato1: fromRgb([1, 0.39, 0.28]),\n Tomato2: fromRgb([0.932, 0.36, 0.26]),\n Tomato3: fromRgb([0.804, 0.31, 0.224]),\n Tomato4: fromRgb([0.545, 0.21, 0.15]),\n Turquoise1: fromRgb([0, 0.96, 1]),\n Turquoise2: fromRgb([0, 0.898, 0.932]),\n Turquoise3: fromRgb([0, 0.772, 0.804]),\n Turquoise4: fromRgb([0, 0.525, 0.545]),\n VioletRed1: fromRgb([1, 0.244, 0.59]),\n VioletRed2: fromRgb([0.932, 0.228, 0.55]),\n VioletRed3: fromRgb([0.804, 0.196, 0.47]),\n VioletRed4: fromRgb([0.545, 0.132, 0.32]),\n Wheat1: fromRgb([1, 0.905, 0.73]),\n Wheat2: fromRgb([0.932, 0.848, 0.684]),\n Wheat3: fromRgb([0.804, 0.73, 0.59]),\n Wheat4: fromRgb([0.545, 0.494, 0.4]),\n Yellow1: fromRgb([1, 1, 0]),\n Yellow2: fromRgb([0.932, 0.932, 0]),\n Yellow3: fromRgb([0.804, 0.804, 0]),\n Yellow4: fromRgb([0.545, 0.545, 0]),\n Gray0: fromRgb([0.745, 0.745, 0.745]),\n Green0: fromRgb([0, 1, 0]),\n Grey0: fromRgb([0.745, 0.745, 0.745]),\n Maroon0: fromRgb([0.69, 0.19, 0.376]),\n Purple0: fromRgb([0.628, 0.125, 0.94]),\n};\n","import { XColorPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as XColorSpec from \"./types\";\n\nconst parseCache: Record = {};\n\n/**\n * Parse an `xparse` argument specification string to an AST.\n * This function caches results. Don't mutate the returned AST!\n *\n * @param {string} [str=\"\"] - LaTeX string input\n * @returns - AST for LaTeX string\n */\nexport function parse(str = \"\"): XColorSpec.Ast {\n parseCache[str] =\n parseCache[str] || (XColorPegParser.parse(str) as XColorSpec.Ast);\n return parseCache[str];\n}\n","import Color from \"color\";\nimport { DVI_PS_NAMES, SVG_NAMES, X11_NAMES } from \"./predefined-colors\";\nimport { XColor } from \"./types\";\nimport { parse as xcolorParser } from \"./parser\";\n\nconst CORE_MODELS = new Set([\"rgb\", \"cmy\", \"cmyk\", \"hsb\", \"gray\"]);\n\nexport const XColorCoreModelToColor = {\n rgb: ([r, g, b]: number[]) => Color([r * 255, g * 255, b * 255], \"rgb\"),\n cmy: ([c, m, y]: number[]) =>\n XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]),\n cmyk: ([c, m, y, k]: number[]) =>\n Color([c * 255, m * 255, y * 255, k * 100], \"cmyk\"),\n hsb: ([h, s, b]: number[]) => Color([h * 360, s * 100, b * 100], \"hsv\"),\n gray: ([v]: number[]) => Color([v * 255, v * 255, v * 255], \"rgb\"),\n};\nconst XColorModelToColor = {\n wave: ([lambda]: number[]) => {\n // Constants according to the xcolor readme\n const gamma = 0.8;\n let baseRgb = [0, 0, 0];\n if (380 <= lambda && lambda < 440) {\n baseRgb = [(440 - lambda) / (440 - 380), 0, 1];\n }\n if (440 <= lambda && lambda < 490) {\n baseRgb = [0, (lambda - 440) / (490 - 440), 1];\n }\n if (490 <= lambda && lambda < 510) {\n baseRgb = [0, 1, (510 - lambda) / (510 - 490)];\n }\n if (510 <= lambda && lambda < 580) {\n baseRgb = [(lambda - 510) / (580 - 510), 1, 0];\n }\n if (580 <= lambda && lambda < 6450) {\n baseRgb = [1, (645 - lambda) / (645 - 580), 0];\n }\n if (645 <= lambda && lambda <= 780) {\n baseRgb = [1, 0, 0];\n }\n let f = 1.0;\n if (380 <= lambda && 420 < lambda) {\n f = 0.3 + (0.7 * (lambda - 380)) / (420 - 380);\n }\n if (700 < lambda && lambda <= 780) {\n f = 0.3 + (0.7 * (780 - lambda)) / (780 - 700);\n }\n\n const rgb = [\n Math.pow(baseRgb[0] * f, gamma),\n Math.pow(baseRgb[1] * f, gamma),\n Math.pow(baseRgb[2] * f, gamma),\n ];\n\n return Color([rgb[0] * 255, rgb[1] * 255, rgb[2] * 255], \"rgb\");\n },\n Hsb: ([h, s, b]: number[]) => XColorCoreModelToColor.hsb([h / 360, s, b]),\n HSB: ([h, s, b]: number[]) =>\n XColorCoreModelToColor.hsb([h / 240, s / 240, b / 240]),\n HTML: ([v]: [string]) => (v.startsWith(\"#\") ? Color(v) : Color(`#${v}`)),\n RGB: ([r, g, b]: number[]) => Color([r, g, b], \"rgb\"),\n Gray: ([v]: number[]) => XColorCoreModelToColor.gray([v / 15]),\n ...XColorCoreModelToColor,\n};\n\nconst ColorToXColorModel = {\n rgb: (color: Color) =>\n color\n .rgb()\n .array()\n .map((v) => v / 255),\n cmy: (color: Color) =>\n [255 - color.red(), 255 - color.green(), 255 - color.blue()].map(\n (v) => v / 255\n ),\n cmyk: (color: Color) =>\n color\n .cmyk()\n .array()\n // The k component goes from 0-100\n .map((v, i) => (i === 3 ? v / 100 : v / 255)),\n hsb: (color: Color) => [\n color.hue() / 360,\n color.saturationv() / 100,\n color.value() / 100,\n ],\n gray: (color: Color) => [color.gray() / 100],\n};\n\nexport const PREDEFINED_XCOLOR_COLORS: Record> = {\n // Core colors\n red: XColorCoreModelToColor.rgb([1, 0, 0]),\n green: XColorCoreModelToColor.rgb([0, 1, 0]),\n blue: XColorCoreModelToColor.rgb([0, 0, 1]),\n brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]),\n lime: XColorCoreModelToColor.rgb([0.75, 1, 0]),\n orange: XColorCoreModelToColor.rgb([1, 0.5, 0]),\n pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]),\n purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]),\n teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]),\n violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]),\n cyan: XColorCoreModelToColor.rgb([0, 1, 1]),\n magenta: XColorCoreModelToColor.rgb([1, 0, 1]),\n yellow: XColorCoreModelToColor.rgb([1, 1, 0]),\n olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]),\n black: XColorCoreModelToColor.rgb([0, 0, 0]),\n darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]),\n gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]),\n lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]),\n white: XColorCoreModelToColor.rgb([1, 1, 1]),\n ...DVI_PS_NAMES,\n ...SVG_NAMES,\n ...X11_NAMES,\n};\n\nfunction scalarMul(scalar: number, vec: number[]) {\n return vec.map((v) => scalar * v);\n}\nfunction addVectors(...vecs: number[][]) {\n return vecs.reduce((prev, current) => prev.map((v, i) => v + current[i]));\n}\n\n/**\n * Mix a color in color model `model` as per the algorithm in 2.3.3 of the xcolor manual.\n */\nfunction mixInModel(\n model: string,\n colorsAndCoefficients: [number, Color][]\n): Color {\n if (!CORE_MODELS.has(model)) {\n throw new Error(\n `Cannot mix colors in model \"${model}\"; only core modes ${Array.from(\n CORE_MODELS\n ).join(\", \")} are supported`\n );\n }\n const toModel =\n ColorToXColorModel[model as keyof typeof ColorToXColorModel];\n const fromModel =\n XColorCoreModelToColor[model as keyof typeof XColorCoreModelToColor];\n\n const mixed = addVectors(\n ...colorsAndCoefficients.map(([v, color]) => {\n const colorInModel = toModel(color);\n return scalarMul(v, colorInModel);\n })\n );\n return fromModel(mixed);\n}\n\n/**\n * Given a parsed `XColor`, compute the color and return a `Color` object\n * (that can be used in CSS, for example).\n */\nexport function computeColor(\n expr: XColor,\n predefinedColors: Record> = {}\n): Color {\n if (expr.type !== \"color\") {\n throw new Error(\n `Can only compute the color of a \"color\" expression, not one of type ${expr.type}`\n );\n }\n\n const knownColors = { ...PREDEFINED_XCOLOR_COLORS, ...predefinedColors };\n function getColor(name: string) {\n if (!knownColors[name]) {\n throw new Error(`Unknown color \"${name}\"`);\n }\n return knownColors[name];\n }\n\n const color = expr.color;\n let computedColor = Color(\"#000000\");\n if (color.type === \"expr\") {\n // From the algorithm in 2.3.2 of the xcolor manual\n\n // TODO: the suffix `!![num]` is not yet implemented.\n let base = getColor(color.name);\n for (const mix of color.mix_expr) {\n if (mix.type === \"complete_mix\") {\n const mixColor = getColor(mix.name);\n base = base.mix(mixColor, 1 - mix.mix_percent / 100);\n } else if (mix.type === \"partial_mix\") {\n base = base.mix(Color(\"#FFFFFF\"), 1 - mix.mix_percent / 100);\n }\n }\n if (color.prefix && color.prefix.length % 2 === 1) {\n base = base.rotate(180);\n }\n computedColor = base;\n }\n if (color.type === \"extended_expr\") {\n const model = color.core_model;\n const div =\n color.div ||\n color.expressions.reduce((a, expr) => a + expr.weight, 0);\n if (div <= 0) {\n throw new Error(\n `Cannot mix color with ratios that have a denominator of ${div}`\n );\n }\n const colorsToMix: [number, Color][] = color.expressions.map(\n (expr) => [\n expr.weight / div,\n computeColor({\n type: \"color\",\n color: expr.color,\n functions: [],\n }),\n ]\n );\n computedColor = mixInModel(model, colorsToMix);\n }\n\n // Now we apply any color functions\n for (const func of expr.functions) {\n if (func.name === \"wheel\") {\n const angle = func.args[0];\n const circ = func.args[1] || 360;\n computedColor = computedColor.rotate((angle / circ) * 360);\n }\n if (func.name === \"twheel\") {\n // This function depends on the definition of \\rangetHsb, which we\n // don't actually know, so we just use it's default, which is to\n // add a 60 deg. angle to everything. I think...\n const angle = func.args[0];\n const circ = func.args[1] || 360;\n computedColor = computedColor.rotate((angle / circ) * 360 + 60);\n }\n }\n\n return computedColor;\n}\n\n/**\n * Convert the xcolor defined color to RGB Hex representation.\n * If the color is unknown or cannot be computed, `null` is returned.\n *\n * If `model` is supplied,\n *\n * The most likely reason a color will be `null` is if the color is defined\n * using a pre-defined color that wasn't supplied as an argument.\n */\nexport function xcolorColorToHex(\n color: string,\n model?: string | null,\n options: {\n predefinedColors?: Record>;\n } = { predefinedColors: {} }\n): string | null {\n const { predefinedColors = {} } = options;\n const parsed = xcolorParser(color);\n // If a model was entered, the corresponding color was directly entered without\n // mixing, unless the parsed type was \"color\". This would through an error in `xcolor`,\n // but we won't error.\n if (model && model !== \"default\" && parsed.type !== \"color\") {\n if (!(model in XColorModelToColor)) {\n throw new Error(\n `Unknown color model \"${model}\"; known models are ${Object.keys(\n XColorModelToColor\n ).join(\", \")}`\n );\n }\n if (parsed.type !== \"hex_spec\" && parsed.type !== \"num_spec\") {\n throw new Error(\n `Cannot use model ${model} to compute the color \"${color}\"`\n );\n }\n\n if (model === \"HTML\" && parsed.type === \"hex_spec\") {\n return XColorModelToColor.HTML(parsed.content).hex();\n } else if (parsed.type === \"num_spec\") {\n type x = keyof Omit;\n return XColorModelToColor[\n model as keyof Omit\n ](parsed.content).hex();\n }\n\n throw new Error(\n `Don't know how to process color \"${color}\" in model \"${model}\"`\n );\n }\n\n if (Array.isArray(parsed) || parsed.type !== \"color\") {\n throw new Error(\n `Cannot the color \"${color}\" is not a valid color string`\n );\n }\n let computed: Color | null = null;\n try {\n computed = computeColor(parsed, predefinedColors);\n } catch (e) {}\n\n return computed && computed.hex();\n}\n"],"names":["XColorPegParser","expr","xcolorParser"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js b/node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js new file mode 100644 index 0000000..0c0fcf7 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js @@ -0,0 +1,851 @@ +import Color from "color"; +import { XColorPegParser } from "@unified-latex/unified-latex-util-pegjs"; +const macros = { + substitutecolormodel: { + signature: "m m", + renderInfo: { breakAround: true } + }, + selectcolormodel: { + signature: "m", + renderInfo: { breakAround: true } + }, + definecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + colorlet: { + signature: "o m o m", + renderInfo: { breakAround: true } + }, + definecolorset: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + preparecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + preparecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + DefineNamedColor: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + definecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + providecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + color: { signature: "o m", renderInfo: { breakAround: true } }, + textcolor: { signature: "o m m", renderInfo: { inParMode: true } }, + pagecolor: { signature: "o m" }, + colorbox: { signature: "o m m" }, + fcolorbox: { signature: "o m o m m" }, + boxframe: { signature: "o m" }, + testcolor: { signature: "o m" }, + blendcolors: { signature: "s m" }, + maskcolors: { signature: "o m" }, + definecolorseries: { + signature: "m m m o m o m", + renderInfo: { breakAround: true } + }, + resetcolorseries: { + signature: "o m", + renderInfo: { breakAround: true } + }, + rowcolors: { signature: "s o m m m" }, + extractcolorspec: { signature: "m m" }, + extractcolorspecs: { signature: "m m m" }, + convertcolorspec: { signature: "m m m m" } +}; +const environments = { + testcolors: { signature: "o", renderInfo: { pgfkeysArgs: true } } +}; +const fromRgb = ([r, g, b]) => Color([r * 255, g * 255, b * 255], "rgb"); +const DVI_PS_NAMES = { + Apricot: Color("#FBB982"), + Aquamarine: Color("#00B5BE"), + Bittersweet: Color("#C04F17"), + Black: Color("#221E1F"), + Blue: Color("#2D2F92"), + BlueGreen: Color("#00B3B8"), + BlueViolet: Color("#473992"), + BrickRed: Color("#B6321C"), + Brown: Color("#792500"), + BurntOrange: Color("#F7921D"), + CadetBlue: Color("#74729A"), + CarnationPink: Color("#F282B4"), + Cerulean: Color("#00A2E3"), + CornflowerBlue: Color("#41B0E4"), + Cyan: Color("#00AEEF"), + Dandelion: Color("#FDBC42"), + DarkOrchid: Color("#A4538A"), + Emerald: Color("#00A99D"), + ForestGreen: Color("#009B55"), + Fuchsia: Color("#8C368C"), + Goldenrod: Color("#FFDF42"), + Gray: Color("#949698"), + Green: Color("#00A64F"), + GreenYellow: Color("#DFE674"), + JungleGreen: Color("#00A99A"), + Lavender: Color("#F49EC4"), + LimeGreen: Color("#8DC73E"), + Magenta: Color("#EC008C"), + Mahogany: Color("#A9341F"), + Maroon: Color("#AF3235"), + Melon: Color("#F89E7B"), + MidnightBlue: Color("#006795"), + Mulberry: Color("#A93C93"), + NavyBlue: Color("#006EB8"), + OliveGreen: Color("#3C8031"), + Orange: Color("#F58137"), + OrangeRed: Color("#ED135A"), + Orchid: Color("#AF72B0"), + Peach: Color("#F7965A"), + Periwinkle: Color("#7977B8"), + PineGreen: Color("#008B72"), + Plum: Color("#92268F"), + ProcessBlue: Color("#00B0F0"), + Purple: Color("#99479B"), + RawSienna: Color("#974006"), + Red: Color("#ED1B23"), + RedOrange: Color("#F26035"), + RedViolet: Color("#A1246B"), + Rhodamine: Color("#EF559F"), + RoyalBlue: Color("#0071BC"), + RoyalPurple: Color("#613F99"), + RubineRed: Color("#ED017D"), + Salmon: Color("#F69289"), + SeaGreen: Color("#3FBC9D"), + Sepia: Color("#671800"), + SkyBlue: Color("#46C5DD"), + SpringGreen: Color("#C6DC67"), + Tan: Color("#DA9D76"), + TealBlue: Color("#00AEB3"), + Thistle: Color("#D883B7"), + Turquoise: Color("#00B4CE"), + Violet: Color("#58429B"), + VioletRed: Color("#EF58A0"), + White: Color("#FFFFFF"), + WildStrawberry: Color("#EE2967"), + Yellow: Color("#FFF200"), + YellowGreen: Color("#98CC70"), + YellowOrange: Color("#FAA21A") +}; +const SVG_NAMES = { + AliceBlue: fromRgb([0.94, 0.972, 1]), + AntiqueWhite: fromRgb([0.98, 0.92, 0.844]), + Aqua: fromRgb([0, 1, 1]), + Aquamarine: fromRgb([0.498, 1, 0.83]), + Azure: fromRgb([0.94, 1, 1]), + Beige: fromRgb([0.96, 0.96, 0.864]), + Bisque: fromRgb([1, 0.894, 0.77]), + Black: fromRgb([0, 0, 0]), + BlanchedAlmond: fromRgb([1, 0.92, 0.804]), + Blue: fromRgb([0, 0, 1]), + BlueViolet: fromRgb([0.54, 0.17, 0.888]), + Brown: fromRgb([0.648, 0.165, 0.165]), + BurlyWood: fromRgb([0.87, 0.72, 0.53]), + CadetBlue: fromRgb([0.372, 0.62, 0.628]), + Chartreuse: fromRgb([0.498, 1, 0]), + Chocolate: fromRgb([0.824, 0.41, 0.116]), + Coral: fromRgb([1, 0.498, 0.312]), + CornflowerBlue: fromRgb([0.392, 0.585, 0.93]), + Cornsilk: fromRgb([1, 0.972, 0.864]), + Crimson: fromRgb([0.864, 0.08, 0.235]), + Cyan: fromRgb([0, 1, 1]), + DarkBlue: fromRgb([0, 0, 0.545]), + DarkCyan: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]), + DarkGray: fromRgb([0.664, 0.664, 0.664]), + DarkGreen: fromRgb([0, 0.392, 0]), + DarkGrey: fromRgb([0.664, 0.664, 0.664]), + DarkKhaki: fromRgb([0.74, 0.716, 0.42]), + DarkMagenta: fromRgb([0.545, 0, 0.545]), + DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]), + DarkOrange: fromRgb([1, 0.55, 0]), + DarkOrchid: fromRgb([0.6, 0.196, 0.8]), + DarkRed: fromRgb([0.545, 0, 0]), + DarkSalmon: fromRgb([0.912, 0.59, 0.48]), + DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]), + DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]), + DarkSlateGray: fromRgb([0.185, 0.31, 0.31]), + DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]), + DarkTurquoise: fromRgb([0, 0.808, 0.82]), + DarkViolet: fromRgb([0.58, 0, 0.828]), + DeepPink: fromRgb([1, 0.08, 0.576]), + DeepSkyBlue: fromRgb([0, 0.75, 1]), + DimGray: fromRgb([0.41, 0.41, 0.41]), + DimGrey: fromRgb([0.41, 0.41, 0.41]), + DodgerBlue: fromRgb([0.116, 0.565, 1]), + FireBrick: fromRgb([0.698, 0.132, 0.132]), + FloralWhite: fromRgb([1, 0.98, 0.94]), + ForestGreen: fromRgb([0.132, 0.545, 0.132]), + Fuchsia: fromRgb([1, 0, 1]), + Gainsboro: fromRgb([0.864, 0.864, 0.864]), + GhostWhite: fromRgb([0.972, 0.972, 1]), + Gold: fromRgb([1, 0.844, 0]), + Goldenrod: fromRgb([0.855, 0.648, 0.125]), + Gray: fromRgb([0.5, 0.5, 0.5]), + Green: fromRgb([0, 0.5, 0]), + GreenYellow: fromRgb([0.68, 1, 0.185]), + Grey: fromRgb([0.5, 0.5, 0.5]), + Honeydew: fromRgb([0.94, 1, 0.94]), + HotPink: fromRgb([1, 0.41, 0.705]), + IndianRed: fromRgb([0.804, 0.36, 0.36]), + Indigo: fromRgb([0.294, 0, 0.51]), + Ivory: fromRgb([1, 1, 0.94]), + Khaki: fromRgb([0.94, 0.9, 0.55]), + Lavender: fromRgb([0.9, 0.9, 0.98]), + LavenderBlush: fromRgb([1, 0.94, 0.96]), + LawnGreen: fromRgb([0.488, 0.99, 0]), + LemonChiffon: fromRgb([1, 0.98, 0.804]), + LightBlue: fromRgb([0.68, 0.848, 0.9]), + LightCoral: fromRgb([0.94, 0.5, 0.5]), + LightCyan: fromRgb([0.88, 1, 1]), + LightGoldenrod: fromRgb([0.933, 0.867, 0.51]), + LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]), + LightGray: fromRgb([0.828, 0.828, 0.828]), + LightGreen: fromRgb([0.565, 0.932, 0.565]), + LightGrey: fromRgb([0.828, 0.828, 0.828]), + LightPink: fromRgb([1, 0.712, 0.756]), + LightSalmon: fromRgb([1, 0.628, 0.48]), + LightSeaGreen: fromRgb([0.125, 0.698, 0.668]), + LightSkyBlue: fromRgb([0.53, 0.808, 0.98]), + LightSlateBlue: fromRgb([0.518, 0.44, 1]), + LightSlateGray: fromRgb([0.468, 0.532, 0.6]), + LightSlateGrey: fromRgb([0.468, 0.532, 0.6]), + LightSteelBlue: fromRgb([0.69, 0.77, 0.87]), + LightYellow: fromRgb([1, 1, 0.88]), + Lime: fromRgb([0, 1, 0]), + LimeGreen: fromRgb([0.196, 0.804, 0.196]), + Linen: fromRgb([0.98, 0.94, 0.9]), + Magenta: fromRgb([1, 0, 1]), + Maroon: fromRgb([0.5, 0, 0]), + MediumAquamarine: fromRgb([0.4, 0.804, 0.668]), + MediumBlue: fromRgb([0, 0, 0.804]), + MediumOrchid: fromRgb([0.73, 0.332, 0.828]), + MediumPurple: fromRgb([0.576, 0.44, 0.86]), + MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]), + MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]), + MediumSpringGreen: fromRgb([0, 0.98, 0.604]), + MediumTurquoise: fromRgb([0.284, 0.82, 0.8]), + MediumVioletRed: fromRgb([0.78, 0.084, 0.52]), + MidnightBlue: fromRgb([0.098, 0.098, 0.44]), + MintCream: fromRgb([0.96, 1, 0.98]), + MistyRose: fromRgb([1, 0.894, 0.884]), + Moccasin: fromRgb([1, 0.894, 0.71]), + NavajoWhite: fromRgb([1, 0.87, 0.68]), + Navy: fromRgb([0, 0, 0.5]), + NavyBlue: fromRgb([0, 0, 0.5]), + OldLace: fromRgb([0.992, 0.96, 0.9]), + Olive: fromRgb([0.5, 0.5, 0]), + OliveDrab: fromRgb([0.42, 0.556, 0.136]), + Orange: fromRgb([1, 0.648, 0]), + OrangeRed: fromRgb([1, 0.27, 0]), + Orchid: fromRgb([0.855, 0.44, 0.84]), + PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]), + PaleGreen: fromRgb([0.596, 0.985, 0.596]), + PaleTurquoise: fromRgb([0.688, 0.932, 0.932]), + PaleVioletRed: fromRgb([0.86, 0.44, 0.576]), + PapayaWhip: fromRgb([1, 0.936, 0.835]), + PeachPuff: fromRgb([1, 0.855, 0.725]), + Peru: fromRgb([0.804, 0.52, 0.248]), + Pink: fromRgb([1, 0.752, 0.796]), + Plum: fromRgb([0.868, 0.628, 0.868]), + PowderBlue: fromRgb([0.69, 0.88, 0.9]), + Purple: fromRgb([0.5, 0, 0.5]), + Red: fromRgb([1, 0, 0]), + RosyBrown: fromRgb([0.736, 0.56, 0.56]), + RoyalBlue: fromRgb([0.255, 0.41, 0.884]), + SaddleBrown: fromRgb([0.545, 0.27, 0.075]), + Salmon: fromRgb([0.98, 0.5, 0.448]), + SandyBrown: fromRgb([0.956, 0.644, 0.376]), + SeaGreen: fromRgb([0.18, 0.545, 0.34]), + Seashell: fromRgb([1, 0.96, 0.932]), + Sienna: fromRgb([0.628, 0.32, 0.176]), + Silver: fromRgb([0.752, 0.752, 0.752]), + SkyBlue: fromRgb([0.53, 0.808, 0.92]), + SlateBlue: fromRgb([0.415, 0.352, 0.804]), + SlateGray: fromRgb([0.44, 0.5, 0.565]), + SlateGrey: fromRgb([0.44, 0.5, 0.565]), + Snow: fromRgb([1, 0.98, 0.98]), + SpringGreen: fromRgb([0, 1, 0.498]), + SteelBlue: fromRgb([0.275, 0.51, 0.705]), + Tan: fromRgb([0.824, 0.705, 0.55]), + Teal: fromRgb([0, 0.5, 0.5]), + Thistle: fromRgb([0.848, 0.75, 0.848]), + Tomato: fromRgb([1, 0.39, 0.28]), + Turquoise: fromRgb([0.25, 0.88, 0.815]), + Violet: fromRgb([0.932, 0.51, 0.932]), + VioletRed: fromRgb([0.816, 0.125, 0.565]), + Wheat: fromRgb([0.96, 0.87, 0.7]), + White: fromRgb([1, 1, 1]), + WhiteSmoke: fromRgb([0.96, 0.96, 0.96]), + Yellow: fromRgb([1, 1, 0]), + YellowGreen: fromRgb([0.604, 0.804, 0.196]) +}; +const X11_NAMES = { + AntiqueWhite1: fromRgb([1, 0.936, 0.86]), + AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]), + AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]), + AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]), + Aquamarine1: fromRgb([0.498, 1, 0.83]), + Aquamarine2: fromRgb([0.464, 0.932, 0.776]), + Aquamarine3: fromRgb([0.4, 0.804, 0.668]), + Aquamarine4: fromRgb([0.27, 0.545, 0.455]), + Azure1: fromRgb([0.94, 1, 1]), + Azure2: fromRgb([0.88, 0.932, 0.932]), + Azure3: fromRgb([0.756, 0.804, 0.804]), + Azure4: fromRgb([0.512, 0.545, 0.545]), + Bisque1: fromRgb([1, 0.894, 0.77]), + Bisque2: fromRgb([0.932, 0.835, 0.716]), + Bisque3: fromRgb([0.804, 0.716, 0.62]), + Bisque4: fromRgb([0.545, 0.49, 0.42]), + Blue1: fromRgb([0, 0, 1]), + Blue2: fromRgb([0, 0, 0.932]), + Blue3: fromRgb([0, 0, 0.804]), + Blue4: fromRgb([0, 0, 0.545]), + Brown1: fromRgb([1, 0.25, 0.25]), + Brown2: fromRgb([0.932, 0.23, 0.23]), + Brown3: fromRgb([0.804, 0.2, 0.2]), + Brown4: fromRgb([0.545, 0.136, 0.136]), + Burlywood1: fromRgb([1, 0.828, 0.608]), + Burlywood2: fromRgb([0.932, 0.772, 0.57]), + Burlywood3: fromRgb([0.804, 0.668, 0.49]), + Burlywood4: fromRgb([0.545, 0.45, 0.332]), + CadetBlue1: fromRgb([0.596, 0.96, 1]), + CadetBlue2: fromRgb([0.556, 0.898, 0.932]), + CadetBlue3: fromRgb([0.48, 0.772, 0.804]), + CadetBlue4: fromRgb([0.325, 0.525, 0.545]), + Chartreuse1: fromRgb([0.498, 1, 0]), + Chartreuse2: fromRgb([0.464, 0.932, 0]), + Chartreuse3: fromRgb([0.4, 0.804, 0]), + Chartreuse4: fromRgb([0.27, 0.545, 0]), + Chocolate1: fromRgb([1, 0.498, 0.14]), + Chocolate2: fromRgb([0.932, 0.464, 0.13]), + Chocolate3: fromRgb([0.804, 0.4, 0.112]), + Chocolate4: fromRgb([0.545, 0.27, 0.075]), + Coral1: fromRgb([1, 0.448, 0.336]), + Coral2: fromRgb([0.932, 0.415, 0.312]), + Coral3: fromRgb([0.804, 0.356, 0.27]), + Coral4: fromRgb([0.545, 0.244, 0.185]), + Cornsilk1: fromRgb([1, 0.972, 0.864]), + Cornsilk2: fromRgb([0.932, 0.91, 0.804]), + Cornsilk3: fromRgb([0.804, 0.785, 0.694]), + Cornsilk4: fromRgb([0.545, 0.532, 0.47]), + Cyan1: fromRgb([0, 1, 1]), + Cyan2: fromRgb([0, 0.932, 0.932]), + Cyan3: fromRgb([0, 0.804, 0.804]), + Cyan4: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod1: fromRgb([1, 0.725, 0.06]), + DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]), + DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]), + DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]), + DarkOliveGreen1: fromRgb([0.792, 1, 0.44]), + DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]), + DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]), + DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]), + DarkOrange1: fromRgb([1, 0.498, 0]), + DarkOrange2: fromRgb([0.932, 0.464, 0]), + DarkOrange3: fromRgb([0.804, 0.4, 0]), + DarkOrange4: fromRgb([0.545, 0.27, 0]), + DarkOrchid1: fromRgb([0.75, 0.244, 1]), + DarkOrchid2: fromRgb([0.698, 0.228, 0.932]), + DarkOrchid3: fromRgb([0.604, 0.196, 0.804]), + DarkOrchid4: fromRgb([0.408, 0.132, 0.545]), + DarkSeaGreen1: fromRgb([0.756, 1, 0.756]), + DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]), + DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]), + DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]), + DarkSlateGray1: fromRgb([0.592, 1, 1]), + DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]), + DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]), + DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]), + DeepPink1: fromRgb([1, 0.08, 0.576]), + DeepPink2: fromRgb([0.932, 0.07, 0.536]), + DeepPink3: fromRgb([0.804, 0.064, 0.464]), + DeepPink4: fromRgb([0.545, 0.04, 0.312]), + DeepSkyBlue1: fromRgb([0, 0.75, 1]), + DeepSkyBlue2: fromRgb([0, 0.698, 0.932]), + DeepSkyBlue3: fromRgb([0, 0.604, 0.804]), + DeepSkyBlue4: fromRgb([0, 0.408, 0.545]), + DodgerBlue1: fromRgb([0.116, 0.565, 1]), + DodgerBlue2: fromRgb([0.11, 0.525, 0.932]), + DodgerBlue3: fromRgb([0.094, 0.455, 0.804]), + DodgerBlue4: fromRgb([0.064, 0.305, 0.545]), + Firebrick1: fromRgb([1, 0.19, 0.19]), + Firebrick2: fromRgb([0.932, 0.172, 0.172]), + Firebrick3: fromRgb([0.804, 0.15, 0.15]), + Firebrick4: fromRgb([0.545, 0.1, 0.1]), + Gold1: fromRgb([1, 0.844, 0]), + Gold2: fromRgb([0.932, 0.79, 0]), + Gold3: fromRgb([0.804, 0.68, 0]), + Gold4: fromRgb([0.545, 0.46, 0]), + Goldenrod1: fromRgb([1, 0.756, 0.145]), + Goldenrod2: fromRgb([0.932, 0.705, 0.132]), + Goldenrod3: fromRgb([0.804, 0.608, 0.112]), + Goldenrod4: fromRgb([0.545, 0.41, 0.08]), + Green1: fromRgb([0, 1, 0]), + Green2: fromRgb([0, 0.932, 0]), + Green3: fromRgb([0, 0.804, 0]), + Green4: fromRgb([0, 0.545, 0]), + Honeydew1: fromRgb([0.94, 1, 0.94]), + Honeydew2: fromRgb([0.88, 0.932, 0.88]), + Honeydew3: fromRgb([0.756, 0.804, 0.756]), + Honeydew4: fromRgb([0.512, 0.545, 0.512]), + HotPink1: fromRgb([1, 0.43, 0.705]), + HotPink2: fromRgb([0.932, 0.415, 0.655]), + HotPink3: fromRgb([0.804, 0.376, 0.565]), + HotPink4: fromRgb([0.545, 0.228, 0.385]), + IndianRed1: fromRgb([1, 0.415, 0.415]), + IndianRed2: fromRgb([0.932, 0.39, 0.39]), + IndianRed3: fromRgb([0.804, 0.332, 0.332]), + IndianRed4: fromRgb([0.545, 0.228, 0.228]), + Ivory1: fromRgb([1, 1, 0.94]), + Ivory2: fromRgb([0.932, 0.932, 0.88]), + Ivory3: fromRgb([0.804, 0.804, 0.756]), + Ivory4: fromRgb([0.545, 0.545, 0.512]), + Khaki1: fromRgb([1, 0.965, 0.56]), + Khaki2: fromRgb([0.932, 0.9, 0.52]), + Khaki3: fromRgb([0.804, 0.776, 0.45]), + Khaki4: fromRgb([0.545, 0.525, 0.305]), + LavenderBlush1: fromRgb([1, 0.94, 0.96]), + LavenderBlush2: fromRgb([0.932, 0.88, 0.898]), + LavenderBlush3: fromRgb([0.804, 0.756, 0.772]), + LavenderBlush4: fromRgb([0.545, 0.512, 0.525]), + LemonChiffon1: fromRgb([1, 0.98, 0.804]), + LemonChiffon2: fromRgb([0.932, 0.912, 0.75]), + LemonChiffon3: fromRgb([0.804, 0.79, 0.648]), + LemonChiffon4: fromRgb([0.545, 0.536, 0.44]), + LightBlue1: fromRgb([0.75, 0.936, 1]), + LightBlue2: fromRgb([0.698, 0.875, 0.932]), + LightBlue3: fromRgb([0.604, 0.752, 0.804]), + LightBlue4: fromRgb([0.408, 0.512, 0.545]), + LightCyan1: fromRgb([0.88, 1, 1]), + LightCyan2: fromRgb([0.82, 0.932, 0.932]), + LightCyan3: fromRgb([0.705, 0.804, 0.804]), + LightCyan4: fromRgb([0.48, 0.545, 0.545]), + LightGoldenrod1: fromRgb([1, 0.925, 0.545]), + LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]), + LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]), + LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]), + LightPink1: fromRgb([1, 0.684, 0.725]), + LightPink2: fromRgb([0.932, 0.635, 0.68]), + LightPink3: fromRgb([0.804, 0.55, 0.585]), + LightPink4: fromRgb([0.545, 0.372, 0.396]), + LightSalmon1: fromRgb([1, 0.628, 0.48]), + LightSalmon2: fromRgb([0.932, 0.585, 0.448]), + LightSalmon3: fromRgb([0.804, 0.505, 0.385]), + LightSalmon4: fromRgb([0.545, 0.34, 0.26]), + LightSkyBlue1: fromRgb([0.69, 0.888, 1]), + LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]), + LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]), + LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]), + LightSteelBlue1: fromRgb([0.792, 0.884, 1]), + LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]), + LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]), + LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]), + LightYellow1: fromRgb([1, 1, 0.88]), + LightYellow2: fromRgb([0.932, 0.932, 0.82]), + LightYellow3: fromRgb([0.804, 0.804, 0.705]), + LightYellow4: fromRgb([0.545, 0.545, 0.48]), + Magenta1: fromRgb([1, 0, 1]), + Magenta2: fromRgb([0.932, 0, 0.932]), + Magenta3: fromRgb([0.804, 0, 0.804]), + Magenta4: fromRgb([0.545, 0, 0.545]), + Maroon1: fromRgb([1, 0.204, 0.7]), + Maroon2: fromRgb([0.932, 0.19, 0.655]), + Maroon3: fromRgb([0.804, 0.16, 0.565]), + Maroon4: fromRgb([0.545, 0.11, 0.385]), + MediumOrchid1: fromRgb([0.88, 0.4, 1]), + MediumOrchid2: fromRgb([0.82, 0.372, 0.932]), + MediumOrchid3: fromRgb([0.705, 0.32, 0.804]), + MediumOrchid4: fromRgb([0.48, 0.215, 0.545]), + MediumPurple1: fromRgb([0.67, 0.51, 1]), + MediumPurple2: fromRgb([0.624, 0.475, 0.932]), + MediumPurple3: fromRgb([0.536, 0.408, 0.804]), + MediumPurple4: fromRgb([0.365, 0.28, 0.545]), + MistyRose1: fromRgb([1, 0.894, 0.884]), + MistyRose2: fromRgb([0.932, 0.835, 0.824]), + MistyRose3: fromRgb([0.804, 0.716, 0.71]), + MistyRose4: fromRgb([0.545, 0.49, 0.484]), + NavajoWhite1: fromRgb([1, 0.87, 0.68]), + NavajoWhite2: fromRgb([0.932, 0.81, 0.63]), + NavajoWhite3: fromRgb([0.804, 0.7, 0.545]), + NavajoWhite4: fromRgb([0.545, 0.475, 0.37]), + OliveDrab1: fromRgb([0.752, 1, 0.244]), + OliveDrab2: fromRgb([0.7, 0.932, 0.228]), + OliveDrab3: fromRgb([0.604, 0.804, 0.196]), + OliveDrab4: fromRgb([0.41, 0.545, 0.132]), + Orange1: fromRgb([1, 0.648, 0]), + Orange2: fromRgb([0.932, 0.604, 0]), + Orange3: fromRgb([0.804, 0.52, 0]), + Orange4: fromRgb([0.545, 0.352, 0]), + OrangeRed1: fromRgb([1, 0.27, 0]), + OrangeRed2: fromRgb([0.932, 0.25, 0]), + OrangeRed3: fromRgb([0.804, 0.215, 0]), + OrangeRed4: fromRgb([0.545, 0.145, 0]), + Orchid1: fromRgb([1, 0.512, 0.98]), + Orchid2: fromRgb([0.932, 0.48, 0.912]), + Orchid3: fromRgb([0.804, 0.41, 0.79]), + Orchid4: fromRgb([0.545, 0.28, 0.536]), + PaleGreen1: fromRgb([0.604, 1, 0.604]), + PaleGreen2: fromRgb([0.565, 0.932, 0.565]), + PaleGreen3: fromRgb([0.488, 0.804, 0.488]), + PaleGreen4: fromRgb([0.33, 0.545, 0.33]), + PaleTurquoise1: fromRgb([0.732, 1, 1]), + PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]), + PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]), + PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]), + PaleVioletRed1: fromRgb([1, 0.51, 0.67]), + PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]), + PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]), + PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]), + PeachPuff1: fromRgb([1, 0.855, 0.725]), + PeachPuff2: fromRgb([0.932, 0.796, 0.68]), + PeachPuff3: fromRgb([0.804, 0.688, 0.585]), + PeachPuff4: fromRgb([0.545, 0.468, 0.396]), + Pink1: fromRgb([1, 0.71, 0.772]), + Pink2: fromRgb([0.932, 0.664, 0.72]), + Pink3: fromRgb([0.804, 0.57, 0.62]), + Pink4: fromRgb([0.545, 0.39, 0.424]), + Plum1: fromRgb([1, 0.732, 1]), + Plum2: fromRgb([0.932, 0.684, 0.932]), + Plum3: fromRgb([0.804, 0.59, 0.804]), + Plum4: fromRgb([0.545, 0.4, 0.545]), + Purple1: fromRgb([0.608, 0.19, 1]), + Purple2: fromRgb([0.57, 0.172, 0.932]), + Purple3: fromRgb([0.49, 0.15, 0.804]), + Purple4: fromRgb([0.332, 0.1, 0.545]), + Red1: fromRgb([1, 0, 0]), + Red2: fromRgb([0.932, 0, 0]), + Red3: fromRgb([0.804, 0, 0]), + Red4: fromRgb([0.545, 0, 0]), + RosyBrown1: fromRgb([1, 0.756, 0.756]), + RosyBrown2: fromRgb([0.932, 0.705, 0.705]), + RosyBrown3: fromRgb([0.804, 0.608, 0.608]), + RosyBrown4: fromRgb([0.545, 0.41, 0.41]), + RoyalBlue1: fromRgb([0.284, 0.464, 1]), + RoyalBlue2: fromRgb([0.264, 0.43, 0.932]), + RoyalBlue3: fromRgb([0.228, 0.372, 0.804]), + RoyalBlue4: fromRgb([0.152, 0.25, 0.545]), + Salmon1: fromRgb([1, 0.55, 0.41]), + Salmon2: fromRgb([0.932, 0.51, 0.385]), + Salmon3: fromRgb([0.804, 0.44, 0.33]), + Salmon4: fromRgb([0.545, 0.298, 0.224]), + SeaGreen1: fromRgb([0.33, 1, 0.624]), + SeaGreen2: fromRgb([0.305, 0.932, 0.58]), + SeaGreen3: fromRgb([0.264, 0.804, 0.5]), + SeaGreen4: fromRgb([0.18, 0.545, 0.34]), + Seashell1: fromRgb([1, 0.96, 0.932]), + Seashell2: fromRgb([0.932, 0.898, 0.87]), + Seashell3: fromRgb([0.804, 0.772, 0.75]), + Seashell4: fromRgb([0.545, 0.525, 0.51]), + Sienna1: fromRgb([1, 0.51, 0.28]), + Sienna2: fromRgb([0.932, 0.475, 0.26]), + Sienna3: fromRgb([0.804, 0.408, 0.224]), + Sienna4: fromRgb([0.545, 0.28, 0.15]), + SkyBlue1: fromRgb([0.53, 0.808, 1]), + SkyBlue2: fromRgb([0.494, 0.752, 0.932]), + SkyBlue3: fromRgb([0.424, 0.65, 0.804]), + SkyBlue4: fromRgb([0.29, 0.44, 0.545]), + SlateBlue1: fromRgb([0.512, 0.435, 1]), + SlateBlue2: fromRgb([0.48, 0.404, 0.932]), + SlateBlue3: fromRgb([0.41, 0.35, 0.804]), + SlateBlue4: fromRgb([0.28, 0.235, 0.545]), + SlateGray1: fromRgb([0.776, 0.888, 1]), + SlateGray2: fromRgb([0.725, 0.828, 0.932]), + SlateGray3: fromRgb([0.624, 0.712, 0.804]), + SlateGray4: fromRgb([0.424, 0.484, 0.545]), + Snow1: fromRgb([1, 0.98, 0.98]), + Snow2: fromRgb([0.932, 0.912, 0.912]), + Snow3: fromRgb([0.804, 0.79, 0.79]), + Snow4: fromRgb([0.545, 0.536, 0.536]), + SpringGreen1: fromRgb([0, 1, 0.498]), + SpringGreen2: fromRgb([0, 0.932, 0.464]), + SpringGreen3: fromRgb([0, 0.804, 0.4]), + SpringGreen4: fromRgb([0, 0.545, 0.27]), + SteelBlue1: fromRgb([0.39, 0.72, 1]), + SteelBlue2: fromRgb([0.36, 0.675, 0.932]), + SteelBlue3: fromRgb([0.31, 0.58, 0.804]), + SteelBlue4: fromRgb([0.21, 0.392, 0.545]), + Tan1: fromRgb([1, 0.648, 0.31]), + Tan2: fromRgb([0.932, 0.604, 0.288]), + Tan3: fromRgb([0.804, 0.52, 0.248]), + Tan4: fromRgb([0.545, 0.352, 0.17]), + Thistle1: fromRgb([1, 0.884, 1]), + Thistle2: fromRgb([0.932, 0.824, 0.932]), + Thistle3: fromRgb([0.804, 0.71, 0.804]), + Thistle4: fromRgb([0.545, 0.484, 0.545]), + Tomato1: fromRgb([1, 0.39, 0.28]), + Tomato2: fromRgb([0.932, 0.36, 0.26]), + Tomato3: fromRgb([0.804, 0.31, 0.224]), + Tomato4: fromRgb([0.545, 0.21, 0.15]), + Turquoise1: fromRgb([0, 0.96, 1]), + Turquoise2: fromRgb([0, 0.898, 0.932]), + Turquoise3: fromRgb([0, 0.772, 0.804]), + Turquoise4: fromRgb([0, 0.525, 0.545]), + VioletRed1: fromRgb([1, 0.244, 0.59]), + VioletRed2: fromRgb([0.932, 0.228, 0.55]), + VioletRed3: fromRgb([0.804, 0.196, 0.47]), + VioletRed4: fromRgb([0.545, 0.132, 0.32]), + Wheat1: fromRgb([1, 0.905, 0.73]), + Wheat2: fromRgb([0.932, 0.848, 0.684]), + Wheat3: fromRgb([0.804, 0.73, 0.59]), + Wheat4: fromRgb([0.545, 0.494, 0.4]), + Yellow1: fromRgb([1, 1, 0]), + Yellow2: fromRgb([0.932, 0.932, 0]), + Yellow3: fromRgb([0.804, 0.804, 0]), + Yellow4: fromRgb([0.545, 0.545, 0]), + Gray0: fromRgb([0.745, 0.745, 0.745]), + Green0: fromRgb([0, 1, 0]), + Grey0: fromRgb([0.745, 0.745, 0.745]), + Maroon0: fromRgb([0.69, 0.19, 0.376]), + Purple0: fromRgb([0.628, 0.125, 0.94]) +}; +const parseCache = {}; +function parse(str = "") { + parseCache[str] = parseCache[str] || XColorPegParser.parse(str); + return parseCache[str]; +} +const CORE_MODELS = /* @__PURE__ */ new Set(["rgb", "cmy", "cmyk", "hsb", "gray"]); +const XColorCoreModelToColor = { + rgb: ([r, g, b]) => Color([r * 255, g * 255, b * 255], "rgb"), + cmy: ([c, m, y]) => XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]), + cmyk: ([c, m, y, k]) => Color([c * 255, m * 255, y * 255, k * 100], "cmyk"), + hsb: ([h, s, b]) => Color([h * 360, s * 100, b * 100], "hsv"), + gray: ([v]) => Color([v * 255, v * 255, v * 255], "rgb") +}; +const XColorModelToColor = { + wave: ([lambda]) => { + const gamma = 0.8; + let baseRgb = [0, 0, 0]; + if (380 <= lambda && lambda < 440) { + baseRgb = [(440 - lambda) / (440 - 380), 0, 1]; + } + if (440 <= lambda && lambda < 490) { + baseRgb = [0, (lambda - 440) / (490 - 440), 1]; + } + if (490 <= lambda && lambda < 510) { + baseRgb = [0, 1, (510 - lambda) / (510 - 490)]; + } + if (510 <= lambda && lambda < 580) { + baseRgb = [(lambda - 510) / (580 - 510), 1, 0]; + } + if (580 <= lambda && lambda < 6450) { + baseRgb = [1, (645 - lambda) / (645 - 580), 0]; + } + if (645 <= lambda && lambda <= 780) { + baseRgb = [1, 0, 0]; + } + let f = 1; + if (380 <= lambda && 420 < lambda) { + f = 0.3 + 0.7 * (lambda - 380) / (420 - 380); + } + if (700 < lambda && lambda <= 780) { + f = 0.3 + 0.7 * (780 - lambda) / (780 - 700); + } + const rgb = [ + Math.pow(baseRgb[0] * f, gamma), + Math.pow(baseRgb[1] * f, gamma), + Math.pow(baseRgb[2] * f, gamma) + ]; + return Color([rgb[0] * 255, rgb[1] * 255, rgb[2] * 255], "rgb"); + }, + Hsb: ([h, s, b]) => XColorCoreModelToColor.hsb([h / 360, s, b]), + HSB: ([h, s, b]) => XColorCoreModelToColor.hsb([h / 240, s / 240, b / 240]), + HTML: ([v]) => v.startsWith("#") ? Color(v) : Color(`#${v}`), + RGB: ([r, g, b]) => Color([r, g, b], "rgb"), + Gray: ([v]) => XColorCoreModelToColor.gray([v / 15]), + ...XColorCoreModelToColor +}; +const ColorToXColorModel = { + rgb: (color) => color.rgb().array().map((v) => v / 255), + cmy: (color) => [255 - color.red(), 255 - color.green(), 255 - color.blue()].map( + (v) => v / 255 + ), + cmyk: (color) => color.cmyk().array().map((v, i) => i === 3 ? v / 100 : v / 255), + hsb: (color) => [ + color.hue() / 360, + color.saturationv() / 100, + color.value() / 100 + ], + gray: (color) => [color.gray() / 100] +}; +const PREDEFINED_XCOLOR_COLORS = { + // Core colors + red: XColorCoreModelToColor.rgb([1, 0, 0]), + green: XColorCoreModelToColor.rgb([0, 1, 0]), + blue: XColorCoreModelToColor.rgb([0, 0, 1]), + brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]), + lime: XColorCoreModelToColor.rgb([0.75, 1, 0]), + orange: XColorCoreModelToColor.rgb([1, 0.5, 0]), + pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]), + purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]), + teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]), + violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]), + cyan: XColorCoreModelToColor.rgb([0, 1, 1]), + magenta: XColorCoreModelToColor.rgb([1, 0, 1]), + yellow: XColorCoreModelToColor.rgb([1, 1, 0]), + olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]), + black: XColorCoreModelToColor.rgb([0, 0, 0]), + darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]), + gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]), + lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]), + white: XColorCoreModelToColor.rgb([1, 1, 1]), + ...DVI_PS_NAMES, + ...SVG_NAMES, + ...X11_NAMES +}; +function scalarMul(scalar, vec) { + return vec.map((v) => scalar * v); +} +function addVectors(...vecs) { + return vecs.reduce((prev, current) => prev.map((v, i) => v + current[i])); +} +function mixInModel(model, colorsAndCoefficients) { + if (!CORE_MODELS.has(model)) { + throw new Error( + `Cannot mix colors in model "${model}"; only core modes ${Array.from( + CORE_MODELS + ).join(", ")} are supported` + ); + } + const toModel = ColorToXColorModel[model]; + const fromModel = XColorCoreModelToColor[model]; + const mixed = addVectors( + ...colorsAndCoefficients.map(([v, color]) => { + const colorInModel = toModel(color); + return scalarMul(v, colorInModel); + }) + ); + return fromModel(mixed); +} +function computeColor(expr, predefinedColors = {}) { + if (expr.type !== "color") { + throw new Error( + `Can only compute the color of a "color" expression, not one of type ${expr.type}` + ); + } + const knownColors = { ...PREDEFINED_XCOLOR_COLORS, ...predefinedColors }; + function getColor(name) { + if (!knownColors[name]) { + throw new Error(`Unknown color "${name}"`); + } + return knownColors[name]; + } + const color = expr.color; + let computedColor = Color("#000000"); + if (color.type === "expr") { + let base = getColor(color.name); + for (const mix of color.mix_expr) { + if (mix.type === "complete_mix") { + const mixColor = getColor(mix.name); + base = base.mix(mixColor, 1 - mix.mix_percent / 100); + } else if (mix.type === "partial_mix") { + base = base.mix(Color("#FFFFFF"), 1 - mix.mix_percent / 100); + } + } + if (color.prefix && color.prefix.length % 2 === 1) { + base = base.rotate(180); + } + computedColor = base; + } + if (color.type === "extended_expr") { + const model = color.core_model; + const div = color.div || color.expressions.reduce((a, expr2) => a + expr2.weight, 0); + if (div <= 0) { + throw new Error( + `Cannot mix color with ratios that have a denominator of ${div}` + ); + } + const colorsToMix = color.expressions.map( + (expr2) => [ + expr2.weight / div, + computeColor({ + type: "color", + color: expr2.color, + functions: [] + }) + ] + ); + computedColor = mixInModel(model, colorsToMix); + } + for (const func of expr.functions) { + if (func.name === "wheel") { + const angle = func.args[0]; + const circ = func.args[1] || 360; + computedColor = computedColor.rotate(angle / circ * 360); + } + if (func.name === "twheel") { + const angle = func.args[0]; + const circ = func.args[1] || 360; + computedColor = computedColor.rotate(angle / circ * 360 + 60); + } + } + return computedColor; +} +function xcolorColorToHex(color, model, options = { predefinedColors: {} }) { + const { predefinedColors = {} } = options; + const parsed = parse(color); + if (model && model !== "default" && parsed.type !== "color") { + if (!(model in XColorModelToColor)) { + throw new Error( + `Unknown color model "${model}"; known models are ${Object.keys( + XColorModelToColor + ).join(", ")}` + ); + } + if (parsed.type !== "hex_spec" && parsed.type !== "num_spec") { + throw new Error( + `Cannot use model ${model} to compute the color "${color}"` + ); + } + if (model === "HTML" && parsed.type === "hex_spec") { + return XColorModelToColor.HTML(parsed.content).hex(); + } else if (parsed.type === "num_spec") { + return XColorModelToColor[model](parsed.content).hex(); + } + throw new Error( + `Don't know how to process color "${color}" in model "${model}"` + ); + } + if (Array.isArray(parsed) || parsed.type !== "color") { + throw new Error( + `Cannot the color "${color}" is not a valid color string` + ); + } + let computed = null; + try { + computed = computeColor(parsed, predefinedColors); + } catch (e) { + } + return computed && computed.hex(); +} +export { + DVI_PS_NAMES as D, + PREDEFINED_XCOLOR_COLORS as P, + SVG_NAMES as S, + XColorCoreModelToColor as X, + X11_NAMES as a, + computeColor as c, + environments as e, + macros as m, + parse as p, + xcolorColorToHex as x +}; +//# sourceMappingURL=xcolor-CIejE3rZ.js.map diff --git a/node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js.map b/node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js.map new file mode 100644 index 0000000..50b6287 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-ctan/xcolor-CIejE3rZ.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xcolor-CIejE3rZ.js","sources":["../package/xcolor/provides.ts","../package/xcolor/libs/predefined-colors.ts","../package/xcolor/libs/parser.ts","../package/xcolor/libs/xcolor.ts"],"sourcesContent":["import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n substitutecolormodel: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n selectcolormodel: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n definecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n providecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n colorlet: {\n signature: \"o m o m\",\n renderInfo: { breakAround: true },\n },\n definecolorset: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n providecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true },\n },\n preparecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n preparecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true },\n },\n DefineNamedColor: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n definecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n providecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n color: { signature: \"o m\", renderInfo: { breakAround: true } },\n textcolor: { signature: \"o m m\", renderInfo: { inParMode: true } },\n pagecolor: { signature: \"o m\" },\n colorbox: { signature: \"o m m\" },\n fcolorbox: { signature: \"o m o m m\" },\n boxframe: { signature: \"o m\" },\n testcolor: { signature: \"o m\" },\n blendcolors: { signature: \"s m\" },\n maskcolors: { signature: \"o m\" },\n definecolorseries: {\n signature: \"m m m o m o m\",\n renderInfo: { breakAround: true },\n },\n resetcolorseries: {\n signature: \"o m\",\n renderInfo: { breakAround: true },\n },\n rowcolors: { signature: \"s o m m m\" },\n extractcolorspec: { signature: \"m m\" },\n extractcolorspecs: { signature: \"m m m\" },\n convertcolorspec: { signature: \"m m m m\" },\n};\n\nexport const environments: EnvInfoRecord = {\n testcolors: { signature: \"o\", renderInfo: { pgfkeysArgs: true } },\n};\n","import Color from \"color\";\n\nconst fromRgb = ([r, g, b]: number[]) =>\n Color([r * 255, g * 255, b * 255], \"rgb\");\n\nexport const DVI_PS_NAMES = {\n Apricot: Color(\"#FBB982\"),\n Aquamarine: Color(\"#00B5BE\"),\n Bittersweet: Color(\"#C04F17\"),\n Black: Color(\"#221E1F\"),\n Blue: Color(\"#2D2F92\"),\n BlueGreen: Color(\"#00B3B8\"),\n BlueViolet: Color(\"#473992\"),\n BrickRed: Color(\"#B6321C\"),\n Brown: Color(\"#792500\"),\n BurntOrange: Color(\"#F7921D\"),\n CadetBlue: Color(\"#74729A\"),\n CarnationPink: Color(\"#F282B4\"),\n Cerulean: Color(\"#00A2E3\"),\n CornflowerBlue: Color(\"#41B0E4\"),\n Cyan: Color(\"#00AEEF\"),\n Dandelion: Color(\"#FDBC42\"),\n DarkOrchid: Color(\"#A4538A\"),\n Emerald: Color(\"#00A99D\"),\n ForestGreen: Color(\"#009B55\"),\n Fuchsia: Color(\"#8C368C\"),\n Goldenrod: Color(\"#FFDF42\"),\n Gray: Color(\"#949698\"),\n Green: Color(\"#00A64F\"),\n GreenYellow: Color(\"#DFE674\"),\n JungleGreen: Color(\"#00A99A\"),\n Lavender: Color(\"#F49EC4\"),\n LimeGreen: Color(\"#8DC73E\"),\n Magenta: Color(\"#EC008C\"),\n Mahogany: Color(\"#A9341F\"),\n Maroon: Color(\"#AF3235\"),\n Melon: Color(\"#F89E7B\"),\n MidnightBlue: Color(\"#006795\"),\n Mulberry: Color(\"#A93C93\"),\n NavyBlue: Color(\"#006EB8\"),\n OliveGreen: Color(\"#3C8031\"),\n Orange: Color(\"#F58137\"),\n OrangeRed: Color(\"#ED135A\"),\n Orchid: Color(\"#AF72B0\"),\n Peach: Color(\"#F7965A\"),\n Periwinkle: Color(\"#7977B8\"),\n PineGreen: Color(\"#008B72\"),\n Plum: Color(\"#92268F\"),\n ProcessBlue: Color(\"#00B0F0\"),\n Purple: Color(\"#99479B\"),\n RawSienna: Color(\"#974006\"),\n Red: Color(\"#ED1B23\"),\n RedOrange: Color(\"#F26035\"),\n RedViolet: Color(\"#A1246B\"),\n Rhodamine: Color(\"#EF559F\"),\n RoyalBlue: Color(\"#0071BC\"),\n RoyalPurple: Color(\"#613F99\"),\n RubineRed: Color(\"#ED017D\"),\n Salmon: Color(\"#F69289\"),\n SeaGreen: Color(\"#3FBC9D\"),\n Sepia: Color(\"#671800\"),\n SkyBlue: Color(\"#46C5DD\"),\n SpringGreen: Color(\"#C6DC67\"),\n Tan: Color(\"#DA9D76\"),\n TealBlue: Color(\"#00AEB3\"),\n Thistle: Color(\"#D883B7\"),\n Turquoise: Color(\"#00B4CE\"),\n Violet: Color(\"#58429B\"),\n VioletRed: Color(\"#EF58A0\"),\n White: Color(\"#FFFFFF\"),\n WildStrawberry: Color(\"#EE2967\"),\n Yellow: Color(\"#FFF200\"),\n YellowGreen: Color(\"#98CC70\"),\n YellowOrange: Color(\"#FAA21A\"),\n};\n\nexport const SVG_NAMES = {\n AliceBlue: fromRgb([0.94, 0.972, 1]),\n AntiqueWhite: fromRgb([0.98, 0.92, 0.844]),\n Aqua: fromRgb([0, 1, 1]),\n Aquamarine: fromRgb([0.498, 1, 0.83]),\n Azure: fromRgb([0.94, 1, 1]),\n Beige: fromRgb([0.96, 0.96, 0.864]),\n Bisque: fromRgb([1, 0.894, 0.77]),\n Black: fromRgb([0, 0, 0]),\n BlanchedAlmond: fromRgb([1, 0.92, 0.804]),\n Blue: fromRgb([0, 0, 1]),\n BlueViolet: fromRgb([0.54, 0.17, 0.888]),\n Brown: fromRgb([0.648, 0.165, 0.165]),\n BurlyWood: fromRgb([0.87, 0.72, 0.53]),\n CadetBlue: fromRgb([0.372, 0.62, 0.628]),\n Chartreuse: fromRgb([0.498, 1, 0]),\n Chocolate: fromRgb([0.824, 0.41, 0.116]),\n Coral: fromRgb([1, 0.498, 0.312]),\n CornflowerBlue: fromRgb([0.392, 0.585, 0.93]),\n Cornsilk: fromRgb([1, 0.972, 0.864]),\n Crimson: fromRgb([0.864, 0.08, 0.235]),\n Cyan: fromRgb([0, 1, 1]),\n DarkBlue: fromRgb([0, 0, 0.545]),\n DarkCyan: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]),\n DarkGray: fromRgb([0.664, 0.664, 0.664]),\n DarkGreen: fromRgb([0, 0.392, 0]),\n DarkGrey: fromRgb([0.664, 0.664, 0.664]),\n DarkKhaki: fromRgb([0.74, 0.716, 0.42]),\n DarkMagenta: fromRgb([0.545, 0, 0.545]),\n DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]),\n DarkOrange: fromRgb([1, 0.55, 0]),\n DarkOrchid: fromRgb([0.6, 0.196, 0.8]),\n DarkRed: fromRgb([0.545, 0, 0]),\n DarkSalmon: fromRgb([0.912, 0.59, 0.48]),\n DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]),\n DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]),\n DarkSlateGray: fromRgb([0.185, 0.31, 0.31]),\n DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]),\n DarkTurquoise: fromRgb([0, 0.808, 0.82]),\n DarkViolet: fromRgb([0.58, 0, 0.828]),\n DeepPink: fromRgb([1, 0.08, 0.576]),\n DeepSkyBlue: fromRgb([0, 0.75, 1]),\n DimGray: fromRgb([0.41, 0.41, 0.41]),\n DimGrey: fromRgb([0.41, 0.41, 0.41]),\n DodgerBlue: fromRgb([0.116, 0.565, 1]),\n FireBrick: fromRgb([0.698, 0.132, 0.132]),\n FloralWhite: fromRgb([1, 0.98, 0.94]),\n ForestGreen: fromRgb([0.132, 0.545, 0.132]),\n Fuchsia: fromRgb([1, 0, 1]),\n Gainsboro: fromRgb([0.864, 0.864, 0.864]),\n GhostWhite: fromRgb([0.972, 0.972, 1]),\n Gold: fromRgb([1, 0.844, 0]),\n Goldenrod: fromRgb([0.855, 0.648, 0.125]),\n Gray: fromRgb([0.5, 0.5, 0.5]),\n Green: fromRgb([0, 0.5, 0]),\n GreenYellow: fromRgb([0.68, 1, 0.185]),\n Grey: fromRgb([0.5, 0.5, 0.5]),\n Honeydew: fromRgb([0.94, 1, 0.94]),\n HotPink: fromRgb([1, 0.41, 0.705]),\n IndianRed: fromRgb([0.804, 0.36, 0.36]),\n Indigo: fromRgb([0.294, 0, 0.51]),\n Ivory: fromRgb([1, 1, 0.94]),\n Khaki: fromRgb([0.94, 0.9, 0.55]),\n Lavender: fromRgb([0.9, 0.9, 0.98]),\n LavenderBlush: fromRgb([1, 0.94, 0.96]),\n LawnGreen: fromRgb([0.488, 0.99, 0]),\n LemonChiffon: fromRgb([1, 0.98, 0.804]),\n LightBlue: fromRgb([0.68, 0.848, 0.9]),\n LightCoral: fromRgb([0.94, 0.5, 0.5]),\n LightCyan: fromRgb([0.88, 1, 1]),\n LightGoldenrod: fromRgb([0.933, 0.867, 0.51]),\n LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]),\n LightGray: fromRgb([0.828, 0.828, 0.828]),\n LightGreen: fromRgb([0.565, 0.932, 0.565]),\n LightGrey: fromRgb([0.828, 0.828, 0.828]),\n LightPink: fromRgb([1, 0.712, 0.756]),\n LightSalmon: fromRgb([1, 0.628, 0.48]),\n LightSeaGreen: fromRgb([0.125, 0.698, 0.668]),\n LightSkyBlue: fromRgb([0.53, 0.808, 0.98]),\n LightSlateBlue: fromRgb([0.518, 0.44, 1]),\n LightSlateGray: fromRgb([0.468, 0.532, 0.6]),\n LightSlateGrey: fromRgb([0.468, 0.532, 0.6]),\n LightSteelBlue: fromRgb([0.69, 0.77, 0.87]),\n LightYellow: fromRgb([1, 1, 0.88]),\n Lime: fromRgb([0, 1, 0]),\n LimeGreen: fromRgb([0.196, 0.804, 0.196]),\n Linen: fromRgb([0.98, 0.94, 0.9]),\n Magenta: fromRgb([1, 0, 1]),\n Maroon: fromRgb([0.5, 0, 0]),\n MediumAquamarine: fromRgb([0.4, 0.804, 0.668]),\n MediumBlue: fromRgb([0, 0, 0.804]),\n MediumOrchid: fromRgb([0.73, 0.332, 0.828]),\n MediumPurple: fromRgb([0.576, 0.44, 0.86]),\n MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]),\n MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]),\n MediumSpringGreen: fromRgb([0, 0.98, 0.604]),\n MediumTurquoise: fromRgb([0.284, 0.82, 0.8]),\n MediumVioletRed: fromRgb([0.78, 0.084, 0.52]),\n MidnightBlue: fromRgb([0.098, 0.098, 0.44]),\n MintCream: fromRgb([0.96, 1, 0.98]),\n MistyRose: fromRgb([1, 0.894, 0.884]),\n Moccasin: fromRgb([1, 0.894, 0.71]),\n NavajoWhite: fromRgb([1, 0.87, 0.68]),\n Navy: fromRgb([0, 0, 0.5]),\n NavyBlue: fromRgb([0, 0, 0.5]),\n OldLace: fromRgb([0.992, 0.96, 0.9]),\n Olive: fromRgb([0.5, 0.5, 0]),\n OliveDrab: fromRgb([0.42, 0.556, 0.136]),\n Orange: fromRgb([1, 0.648, 0]),\n OrangeRed: fromRgb([1, 0.27, 0]),\n Orchid: fromRgb([0.855, 0.44, 0.84]),\n PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]),\n PaleGreen: fromRgb([0.596, 0.985, 0.596]),\n PaleTurquoise: fromRgb([0.688, 0.932, 0.932]),\n PaleVioletRed: fromRgb([0.86, 0.44, 0.576]),\n PapayaWhip: fromRgb([1, 0.936, 0.835]),\n PeachPuff: fromRgb([1, 0.855, 0.725]),\n Peru: fromRgb([0.804, 0.52, 0.248]),\n Pink: fromRgb([1, 0.752, 0.796]),\n Plum: fromRgb([0.868, 0.628, 0.868]),\n PowderBlue: fromRgb([0.69, 0.88, 0.9]),\n Purple: fromRgb([0.5, 0, 0.5]),\n Red: fromRgb([1, 0, 0]),\n RosyBrown: fromRgb([0.736, 0.56, 0.56]),\n RoyalBlue: fromRgb([0.255, 0.41, 0.884]),\n SaddleBrown: fromRgb([0.545, 0.27, 0.075]),\n Salmon: fromRgb([0.98, 0.5, 0.448]),\n SandyBrown: fromRgb([0.956, 0.644, 0.376]),\n SeaGreen: fromRgb([0.18, 0.545, 0.34]),\n Seashell: fromRgb([1, 0.96, 0.932]),\n Sienna: fromRgb([0.628, 0.32, 0.176]),\n Silver: fromRgb([0.752, 0.752, 0.752]),\n SkyBlue: fromRgb([0.53, 0.808, 0.92]),\n SlateBlue: fromRgb([0.415, 0.352, 0.804]),\n SlateGray: fromRgb([0.44, 0.5, 0.565]),\n SlateGrey: fromRgb([0.44, 0.5, 0.565]),\n Snow: fromRgb([1, 0.98, 0.98]),\n SpringGreen: fromRgb([0, 1, 0.498]),\n SteelBlue: fromRgb([0.275, 0.51, 0.705]),\n Tan: fromRgb([0.824, 0.705, 0.55]),\n Teal: fromRgb([0, 0.5, 0.5]),\n Thistle: fromRgb([0.848, 0.75, 0.848]),\n Tomato: fromRgb([1, 0.39, 0.28]),\n Turquoise: fromRgb([0.25, 0.88, 0.815]),\n Violet: fromRgb([0.932, 0.51, 0.932]),\n VioletRed: fromRgb([0.816, 0.125, 0.565]),\n Wheat: fromRgb([0.96, 0.87, 0.7]),\n White: fromRgb([1, 1, 1]),\n WhiteSmoke: fromRgb([0.96, 0.96, 0.96]),\n Yellow: fromRgb([1, 1, 0]),\n YellowGreen: fromRgb([0.604, 0.804, 0.196]),\n};\n\nexport const X11_NAMES = {\n AntiqueWhite1: fromRgb([1, 0.936, 0.86]),\n AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]),\n AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]),\n AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]),\n Aquamarine1: fromRgb([0.498, 1, 0.83]),\n Aquamarine2: fromRgb([0.464, 0.932, 0.776]),\n Aquamarine3: fromRgb([0.4, 0.804, 0.668]),\n Aquamarine4: fromRgb([0.27, 0.545, 0.455]),\n Azure1: fromRgb([0.94, 1, 1]),\n Azure2: fromRgb([0.88, 0.932, 0.932]),\n Azure3: fromRgb([0.756, 0.804, 0.804]),\n Azure4: fromRgb([0.512, 0.545, 0.545]),\n Bisque1: fromRgb([1, 0.894, 0.77]),\n Bisque2: fromRgb([0.932, 0.835, 0.716]),\n Bisque3: fromRgb([0.804, 0.716, 0.62]),\n Bisque4: fromRgb([0.545, 0.49, 0.42]),\n Blue1: fromRgb([0, 0, 1]),\n Blue2: fromRgb([0, 0, 0.932]),\n Blue3: fromRgb([0, 0, 0.804]),\n Blue4: fromRgb([0, 0, 0.545]),\n Brown1: fromRgb([1, 0.25, 0.25]),\n Brown2: fromRgb([0.932, 0.23, 0.23]),\n Brown3: fromRgb([0.804, 0.2, 0.2]),\n Brown4: fromRgb([0.545, 0.136, 0.136]),\n Burlywood1: fromRgb([1, 0.828, 0.608]),\n Burlywood2: fromRgb([0.932, 0.772, 0.57]),\n Burlywood3: fromRgb([0.804, 0.668, 0.49]),\n Burlywood4: fromRgb([0.545, 0.45, 0.332]),\n CadetBlue1: fromRgb([0.596, 0.96, 1]),\n CadetBlue2: fromRgb([0.556, 0.898, 0.932]),\n CadetBlue3: fromRgb([0.48, 0.772, 0.804]),\n CadetBlue4: fromRgb([0.325, 0.525, 0.545]),\n Chartreuse1: fromRgb([0.498, 1, 0]),\n Chartreuse2: fromRgb([0.464, 0.932, 0]),\n Chartreuse3: fromRgb([0.4, 0.804, 0]),\n Chartreuse4: fromRgb([0.27, 0.545, 0]),\n Chocolate1: fromRgb([1, 0.498, 0.14]),\n Chocolate2: fromRgb([0.932, 0.464, 0.13]),\n Chocolate3: fromRgb([0.804, 0.4, 0.112]),\n Chocolate4: fromRgb([0.545, 0.27, 0.075]),\n Coral1: fromRgb([1, 0.448, 0.336]),\n Coral2: fromRgb([0.932, 0.415, 0.312]),\n Coral3: fromRgb([0.804, 0.356, 0.27]),\n Coral4: fromRgb([0.545, 0.244, 0.185]),\n Cornsilk1: fromRgb([1, 0.972, 0.864]),\n Cornsilk2: fromRgb([0.932, 0.91, 0.804]),\n Cornsilk3: fromRgb([0.804, 0.785, 0.694]),\n Cornsilk4: fromRgb([0.545, 0.532, 0.47]),\n Cyan1: fromRgb([0, 1, 1]),\n Cyan2: fromRgb([0, 0.932, 0.932]),\n Cyan3: fromRgb([0, 0.804, 0.804]),\n Cyan4: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod1: fromRgb([1, 0.725, 0.06]),\n DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]),\n DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]),\n DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]),\n DarkOliveGreen1: fromRgb([0.792, 1, 0.44]),\n DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]),\n DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]),\n DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]),\n DarkOrange1: fromRgb([1, 0.498, 0]),\n DarkOrange2: fromRgb([0.932, 0.464, 0]),\n DarkOrange3: fromRgb([0.804, 0.4, 0]),\n DarkOrange4: fromRgb([0.545, 0.27, 0]),\n DarkOrchid1: fromRgb([0.75, 0.244, 1]),\n DarkOrchid2: fromRgb([0.698, 0.228, 0.932]),\n DarkOrchid3: fromRgb([0.604, 0.196, 0.804]),\n DarkOrchid4: fromRgb([0.408, 0.132, 0.545]),\n DarkSeaGreen1: fromRgb([0.756, 1, 0.756]),\n DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]),\n DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]),\n DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]),\n DarkSlateGray1: fromRgb([0.592, 1, 1]),\n DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]),\n DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]),\n DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]),\n DeepPink1: fromRgb([1, 0.08, 0.576]),\n DeepPink2: fromRgb([0.932, 0.07, 0.536]),\n DeepPink3: fromRgb([0.804, 0.064, 0.464]),\n DeepPink4: fromRgb([0.545, 0.04, 0.312]),\n DeepSkyBlue1: fromRgb([0, 0.75, 1]),\n DeepSkyBlue2: fromRgb([0, 0.698, 0.932]),\n DeepSkyBlue3: fromRgb([0, 0.604, 0.804]),\n DeepSkyBlue4: fromRgb([0, 0.408, 0.545]),\n DodgerBlue1: fromRgb([0.116, 0.565, 1]),\n DodgerBlue2: fromRgb([0.11, 0.525, 0.932]),\n DodgerBlue3: fromRgb([0.094, 0.455, 0.804]),\n DodgerBlue4: fromRgb([0.064, 0.305, 0.545]),\n Firebrick1: fromRgb([1, 0.19, 0.19]),\n Firebrick2: fromRgb([0.932, 0.172, 0.172]),\n Firebrick3: fromRgb([0.804, 0.15, 0.15]),\n Firebrick4: fromRgb([0.545, 0.1, 0.1]),\n Gold1: fromRgb([1, 0.844, 0]),\n Gold2: fromRgb([0.932, 0.79, 0]),\n Gold3: fromRgb([0.804, 0.68, 0]),\n Gold4: fromRgb([0.545, 0.46, 0]),\n Goldenrod1: fromRgb([1, 0.756, 0.145]),\n Goldenrod2: fromRgb([0.932, 0.705, 0.132]),\n Goldenrod3: fromRgb([0.804, 0.608, 0.112]),\n Goldenrod4: fromRgb([0.545, 0.41, 0.08]),\n Green1: fromRgb([0, 1, 0]),\n Green2: fromRgb([0, 0.932, 0]),\n Green3: fromRgb([0, 0.804, 0]),\n Green4: fromRgb([0, 0.545, 0]),\n Honeydew1: fromRgb([0.94, 1, 0.94]),\n Honeydew2: fromRgb([0.88, 0.932, 0.88]),\n Honeydew3: fromRgb([0.756, 0.804, 0.756]),\n Honeydew4: fromRgb([0.512, 0.545, 0.512]),\n HotPink1: fromRgb([1, 0.43, 0.705]),\n HotPink2: fromRgb([0.932, 0.415, 0.655]),\n HotPink3: fromRgb([0.804, 0.376, 0.565]),\n HotPink4: fromRgb([0.545, 0.228, 0.385]),\n IndianRed1: fromRgb([1, 0.415, 0.415]),\n IndianRed2: fromRgb([0.932, 0.39, 0.39]),\n IndianRed3: fromRgb([0.804, 0.332, 0.332]),\n IndianRed4: fromRgb([0.545, 0.228, 0.228]),\n Ivory1: fromRgb([1, 1, 0.94]),\n Ivory2: fromRgb([0.932, 0.932, 0.88]),\n Ivory3: fromRgb([0.804, 0.804, 0.756]),\n Ivory4: fromRgb([0.545, 0.545, 0.512]),\n Khaki1: fromRgb([1, 0.965, 0.56]),\n Khaki2: fromRgb([0.932, 0.9, 0.52]),\n Khaki3: fromRgb([0.804, 0.776, 0.45]),\n Khaki4: fromRgb([0.545, 0.525, 0.305]),\n LavenderBlush1: fromRgb([1, 0.94, 0.96]),\n LavenderBlush2: fromRgb([0.932, 0.88, 0.898]),\n LavenderBlush3: fromRgb([0.804, 0.756, 0.772]),\n LavenderBlush4: fromRgb([0.545, 0.512, 0.525]),\n LemonChiffon1: fromRgb([1, 0.98, 0.804]),\n LemonChiffon2: fromRgb([0.932, 0.912, 0.75]),\n LemonChiffon3: fromRgb([0.804, 0.79, 0.648]),\n LemonChiffon4: fromRgb([0.545, 0.536, 0.44]),\n LightBlue1: fromRgb([0.75, 0.936, 1]),\n LightBlue2: fromRgb([0.698, 0.875, 0.932]),\n LightBlue3: fromRgb([0.604, 0.752, 0.804]),\n LightBlue4: fromRgb([0.408, 0.512, 0.545]),\n LightCyan1: fromRgb([0.88, 1, 1]),\n LightCyan2: fromRgb([0.82, 0.932, 0.932]),\n LightCyan3: fromRgb([0.705, 0.804, 0.804]),\n LightCyan4: fromRgb([0.48, 0.545, 0.545]),\n LightGoldenrod1: fromRgb([1, 0.925, 0.545]),\n LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]),\n LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]),\n LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]),\n LightPink1: fromRgb([1, 0.684, 0.725]),\n LightPink2: fromRgb([0.932, 0.635, 0.68]),\n LightPink3: fromRgb([0.804, 0.55, 0.585]),\n LightPink4: fromRgb([0.545, 0.372, 0.396]),\n LightSalmon1: fromRgb([1, 0.628, 0.48]),\n LightSalmon2: fromRgb([0.932, 0.585, 0.448]),\n LightSalmon3: fromRgb([0.804, 0.505, 0.385]),\n LightSalmon4: fromRgb([0.545, 0.34, 0.26]),\n LightSkyBlue1: fromRgb([0.69, 0.888, 1]),\n LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]),\n LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]),\n LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]),\n LightSteelBlue1: fromRgb([0.792, 0.884, 1]),\n LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]),\n LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]),\n LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]),\n LightYellow1: fromRgb([1, 1, 0.88]),\n LightYellow2: fromRgb([0.932, 0.932, 0.82]),\n LightYellow3: fromRgb([0.804, 0.804, 0.705]),\n LightYellow4: fromRgb([0.545, 0.545, 0.48]),\n Magenta1: fromRgb([1, 0, 1]),\n Magenta2: fromRgb([0.932, 0, 0.932]),\n Magenta3: fromRgb([0.804, 0, 0.804]),\n Magenta4: fromRgb([0.545, 0, 0.545]),\n Maroon1: fromRgb([1, 0.204, 0.7]),\n Maroon2: fromRgb([0.932, 0.19, 0.655]),\n Maroon3: fromRgb([0.804, 0.16, 0.565]),\n Maroon4: fromRgb([0.545, 0.11, 0.385]),\n MediumOrchid1: fromRgb([0.88, 0.4, 1]),\n MediumOrchid2: fromRgb([0.82, 0.372, 0.932]),\n MediumOrchid3: fromRgb([0.705, 0.32, 0.804]),\n MediumOrchid4: fromRgb([0.48, 0.215, 0.545]),\n MediumPurple1: fromRgb([0.67, 0.51, 1]),\n MediumPurple2: fromRgb([0.624, 0.475, 0.932]),\n MediumPurple3: fromRgb([0.536, 0.408, 0.804]),\n MediumPurple4: fromRgb([0.365, 0.28, 0.545]),\n MistyRose1: fromRgb([1, 0.894, 0.884]),\n MistyRose2: fromRgb([0.932, 0.835, 0.824]),\n MistyRose3: fromRgb([0.804, 0.716, 0.71]),\n MistyRose4: fromRgb([0.545, 0.49, 0.484]),\n NavajoWhite1: fromRgb([1, 0.87, 0.68]),\n NavajoWhite2: fromRgb([0.932, 0.81, 0.63]),\n NavajoWhite3: fromRgb([0.804, 0.7, 0.545]),\n NavajoWhite4: fromRgb([0.545, 0.475, 0.37]),\n OliveDrab1: fromRgb([0.752, 1, 0.244]),\n OliveDrab2: fromRgb([0.7, 0.932, 0.228]),\n OliveDrab3: fromRgb([0.604, 0.804, 0.196]),\n OliveDrab4: fromRgb([0.41, 0.545, 0.132]),\n Orange1: fromRgb([1, 0.648, 0]),\n Orange2: fromRgb([0.932, 0.604, 0]),\n Orange3: fromRgb([0.804, 0.52, 0]),\n Orange4: fromRgb([0.545, 0.352, 0]),\n OrangeRed1: fromRgb([1, 0.27, 0]),\n OrangeRed2: fromRgb([0.932, 0.25, 0]),\n OrangeRed3: fromRgb([0.804, 0.215, 0]),\n OrangeRed4: fromRgb([0.545, 0.145, 0]),\n Orchid1: fromRgb([1, 0.512, 0.98]),\n Orchid2: fromRgb([0.932, 0.48, 0.912]),\n Orchid3: fromRgb([0.804, 0.41, 0.79]),\n Orchid4: fromRgb([0.545, 0.28, 0.536]),\n PaleGreen1: fromRgb([0.604, 1, 0.604]),\n PaleGreen2: fromRgb([0.565, 0.932, 0.565]),\n PaleGreen3: fromRgb([0.488, 0.804, 0.488]),\n PaleGreen4: fromRgb([0.33, 0.545, 0.33]),\n PaleTurquoise1: fromRgb([0.732, 1, 1]),\n PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]),\n PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]),\n PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]),\n PaleVioletRed1: fromRgb([1, 0.51, 0.67]),\n PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]),\n PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]),\n PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]),\n PeachPuff1: fromRgb([1, 0.855, 0.725]),\n PeachPuff2: fromRgb([0.932, 0.796, 0.68]),\n PeachPuff3: fromRgb([0.804, 0.688, 0.585]),\n PeachPuff4: fromRgb([0.545, 0.468, 0.396]),\n Pink1: fromRgb([1, 0.71, 0.772]),\n Pink2: fromRgb([0.932, 0.664, 0.72]),\n Pink3: fromRgb([0.804, 0.57, 0.62]),\n Pink4: fromRgb([0.545, 0.39, 0.424]),\n Plum1: fromRgb([1, 0.732, 1]),\n Plum2: fromRgb([0.932, 0.684, 0.932]),\n Plum3: fromRgb([0.804, 0.59, 0.804]),\n Plum4: fromRgb([0.545, 0.4, 0.545]),\n Purple1: fromRgb([0.608, 0.19, 1]),\n Purple2: fromRgb([0.57, 0.172, 0.932]),\n Purple3: fromRgb([0.49, 0.15, 0.804]),\n Purple4: fromRgb([0.332, 0.1, 0.545]),\n Red1: fromRgb([1, 0, 0]),\n Red2: fromRgb([0.932, 0, 0]),\n Red3: fromRgb([0.804, 0, 0]),\n Red4: fromRgb([0.545, 0, 0]),\n RosyBrown1: fromRgb([1, 0.756, 0.756]),\n RosyBrown2: fromRgb([0.932, 0.705, 0.705]),\n RosyBrown3: fromRgb([0.804, 0.608, 0.608]),\n RosyBrown4: fromRgb([0.545, 0.41, 0.41]),\n RoyalBlue1: fromRgb([0.284, 0.464, 1]),\n RoyalBlue2: fromRgb([0.264, 0.43, 0.932]),\n RoyalBlue3: fromRgb([0.228, 0.372, 0.804]),\n RoyalBlue4: fromRgb([0.152, 0.25, 0.545]),\n Salmon1: fromRgb([1, 0.55, 0.41]),\n Salmon2: fromRgb([0.932, 0.51, 0.385]),\n Salmon3: fromRgb([0.804, 0.44, 0.33]),\n Salmon4: fromRgb([0.545, 0.298, 0.224]),\n SeaGreen1: fromRgb([0.33, 1, 0.624]),\n SeaGreen2: fromRgb([0.305, 0.932, 0.58]),\n SeaGreen3: fromRgb([0.264, 0.804, 0.5]),\n SeaGreen4: fromRgb([0.18, 0.545, 0.34]),\n Seashell1: fromRgb([1, 0.96, 0.932]),\n Seashell2: fromRgb([0.932, 0.898, 0.87]),\n Seashell3: fromRgb([0.804, 0.772, 0.75]),\n Seashell4: fromRgb([0.545, 0.525, 0.51]),\n Sienna1: fromRgb([1, 0.51, 0.28]),\n Sienna2: fromRgb([0.932, 0.475, 0.26]),\n Sienna3: fromRgb([0.804, 0.408, 0.224]),\n Sienna4: fromRgb([0.545, 0.28, 0.15]),\n SkyBlue1: fromRgb([0.53, 0.808, 1]),\n SkyBlue2: fromRgb([0.494, 0.752, 0.932]),\n SkyBlue3: fromRgb([0.424, 0.65, 0.804]),\n SkyBlue4: fromRgb([0.29, 0.44, 0.545]),\n SlateBlue1: fromRgb([0.512, 0.435, 1]),\n SlateBlue2: fromRgb([0.48, 0.404, 0.932]),\n SlateBlue3: fromRgb([0.41, 0.35, 0.804]),\n SlateBlue4: fromRgb([0.28, 0.235, 0.545]),\n SlateGray1: fromRgb([0.776, 0.888, 1]),\n SlateGray2: fromRgb([0.725, 0.828, 0.932]),\n SlateGray3: fromRgb([0.624, 0.712, 0.804]),\n SlateGray4: fromRgb([0.424, 0.484, 0.545]),\n Snow1: fromRgb([1, 0.98, 0.98]),\n Snow2: fromRgb([0.932, 0.912, 0.912]),\n Snow3: fromRgb([0.804, 0.79, 0.79]),\n Snow4: fromRgb([0.545, 0.536, 0.536]),\n SpringGreen1: fromRgb([0, 1, 0.498]),\n SpringGreen2: fromRgb([0, 0.932, 0.464]),\n SpringGreen3: fromRgb([0, 0.804, 0.4]),\n SpringGreen4: fromRgb([0, 0.545, 0.27]),\n SteelBlue1: fromRgb([0.39, 0.72, 1]),\n SteelBlue2: fromRgb([0.36, 0.675, 0.932]),\n SteelBlue3: fromRgb([0.31, 0.58, 0.804]),\n SteelBlue4: fromRgb([0.21, 0.392, 0.545]),\n Tan1: fromRgb([1, 0.648, 0.31]),\n Tan2: fromRgb([0.932, 0.604, 0.288]),\n Tan3: fromRgb([0.804, 0.52, 0.248]),\n Tan4: fromRgb([0.545, 0.352, 0.17]),\n Thistle1: fromRgb([1, 0.884, 1]),\n Thistle2: fromRgb([0.932, 0.824, 0.932]),\n Thistle3: fromRgb([0.804, 0.71, 0.804]),\n Thistle4: fromRgb([0.545, 0.484, 0.545]),\n Tomato1: fromRgb([1, 0.39, 0.28]),\n Tomato2: fromRgb([0.932, 0.36, 0.26]),\n Tomato3: fromRgb([0.804, 0.31, 0.224]),\n Tomato4: fromRgb([0.545, 0.21, 0.15]),\n Turquoise1: fromRgb([0, 0.96, 1]),\n Turquoise2: fromRgb([0, 0.898, 0.932]),\n Turquoise3: fromRgb([0, 0.772, 0.804]),\n Turquoise4: fromRgb([0, 0.525, 0.545]),\n VioletRed1: fromRgb([1, 0.244, 0.59]),\n VioletRed2: fromRgb([0.932, 0.228, 0.55]),\n VioletRed3: fromRgb([0.804, 0.196, 0.47]),\n VioletRed4: fromRgb([0.545, 0.132, 0.32]),\n Wheat1: fromRgb([1, 0.905, 0.73]),\n Wheat2: fromRgb([0.932, 0.848, 0.684]),\n Wheat3: fromRgb([0.804, 0.73, 0.59]),\n Wheat4: fromRgb([0.545, 0.494, 0.4]),\n Yellow1: fromRgb([1, 1, 0]),\n Yellow2: fromRgb([0.932, 0.932, 0]),\n Yellow3: fromRgb([0.804, 0.804, 0]),\n Yellow4: fromRgb([0.545, 0.545, 0]),\n Gray0: fromRgb([0.745, 0.745, 0.745]),\n Green0: fromRgb([0, 1, 0]),\n Grey0: fromRgb([0.745, 0.745, 0.745]),\n Maroon0: fromRgb([0.69, 0.19, 0.376]),\n Purple0: fromRgb([0.628, 0.125, 0.94]),\n};\n","import { XColorPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as XColorSpec from \"./types\";\n\nconst parseCache: Record = {};\n\n/**\n * Parse an `xparse` argument specification string to an AST.\n * This function caches results. Don't mutate the returned AST!\n *\n * @param {string} [str=\"\"] - LaTeX string input\n * @returns - AST for LaTeX string\n */\nexport function parse(str = \"\"): XColorSpec.Ast {\n parseCache[str] =\n parseCache[str] || (XColorPegParser.parse(str) as XColorSpec.Ast);\n return parseCache[str];\n}\n","import Color from \"color\";\nimport { DVI_PS_NAMES, SVG_NAMES, X11_NAMES } from \"./predefined-colors\";\nimport { XColor } from \"./types\";\nimport { parse as xcolorParser } from \"./parser\";\n\nconst CORE_MODELS = new Set([\"rgb\", \"cmy\", \"cmyk\", \"hsb\", \"gray\"]);\n\nexport const XColorCoreModelToColor = {\n rgb: ([r, g, b]: number[]) => Color([r * 255, g * 255, b * 255], \"rgb\"),\n cmy: ([c, m, y]: number[]) =>\n XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]),\n cmyk: ([c, m, y, k]: number[]) =>\n Color([c * 255, m * 255, y * 255, k * 100], \"cmyk\"),\n hsb: ([h, s, b]: number[]) => Color([h * 360, s * 100, b * 100], \"hsv\"),\n gray: ([v]: number[]) => Color([v * 255, v * 255, v * 255], \"rgb\"),\n};\nconst XColorModelToColor = {\n wave: ([lambda]: number[]) => {\n // Constants according to the xcolor readme\n const gamma = 0.8;\n let baseRgb = [0, 0, 0];\n if (380 <= lambda && lambda < 440) {\n baseRgb = [(440 - lambda) / (440 - 380), 0, 1];\n }\n if (440 <= lambda && lambda < 490) {\n baseRgb = [0, (lambda - 440) / (490 - 440), 1];\n }\n if (490 <= lambda && lambda < 510) {\n baseRgb = [0, 1, (510 - lambda) / (510 - 490)];\n }\n if (510 <= lambda && lambda < 580) {\n baseRgb = [(lambda - 510) / (580 - 510), 1, 0];\n }\n if (580 <= lambda && lambda < 6450) {\n baseRgb = [1, (645 - lambda) / (645 - 580), 0];\n }\n if (645 <= lambda && lambda <= 780) {\n baseRgb = [1, 0, 0];\n }\n let f = 1.0;\n if (380 <= lambda && 420 < lambda) {\n f = 0.3 + (0.7 * (lambda - 380)) / (420 - 380);\n }\n if (700 < lambda && lambda <= 780) {\n f = 0.3 + (0.7 * (780 - lambda)) / (780 - 700);\n }\n\n const rgb = [\n Math.pow(baseRgb[0] * f, gamma),\n Math.pow(baseRgb[1] * f, gamma),\n Math.pow(baseRgb[2] * f, gamma),\n ];\n\n return Color([rgb[0] * 255, rgb[1] * 255, rgb[2] * 255], \"rgb\");\n },\n Hsb: ([h, s, b]: number[]) => XColorCoreModelToColor.hsb([h / 360, s, b]),\n HSB: ([h, s, b]: number[]) =>\n XColorCoreModelToColor.hsb([h / 240, s / 240, b / 240]),\n HTML: ([v]: [string]) => (v.startsWith(\"#\") ? Color(v) : Color(`#${v}`)),\n RGB: ([r, g, b]: number[]) => Color([r, g, b], \"rgb\"),\n Gray: ([v]: number[]) => XColorCoreModelToColor.gray([v / 15]),\n ...XColorCoreModelToColor,\n};\n\nconst ColorToXColorModel = {\n rgb: (color: Color) =>\n color\n .rgb()\n .array()\n .map((v) => v / 255),\n cmy: (color: Color) =>\n [255 - color.red(), 255 - color.green(), 255 - color.blue()].map(\n (v) => v / 255\n ),\n cmyk: (color: Color) =>\n color\n .cmyk()\n .array()\n // The k component goes from 0-100\n .map((v, i) => (i === 3 ? v / 100 : v / 255)),\n hsb: (color: Color) => [\n color.hue() / 360,\n color.saturationv() / 100,\n color.value() / 100,\n ],\n gray: (color: Color) => [color.gray() / 100],\n};\n\nexport const PREDEFINED_XCOLOR_COLORS: Record> = {\n // Core colors\n red: XColorCoreModelToColor.rgb([1, 0, 0]),\n green: XColorCoreModelToColor.rgb([0, 1, 0]),\n blue: XColorCoreModelToColor.rgb([0, 0, 1]),\n brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]),\n lime: XColorCoreModelToColor.rgb([0.75, 1, 0]),\n orange: XColorCoreModelToColor.rgb([1, 0.5, 0]),\n pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]),\n purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]),\n teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]),\n violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]),\n cyan: XColorCoreModelToColor.rgb([0, 1, 1]),\n magenta: XColorCoreModelToColor.rgb([1, 0, 1]),\n yellow: XColorCoreModelToColor.rgb([1, 1, 0]),\n olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]),\n black: XColorCoreModelToColor.rgb([0, 0, 0]),\n darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]),\n gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]),\n lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]),\n white: XColorCoreModelToColor.rgb([1, 1, 1]),\n ...DVI_PS_NAMES,\n ...SVG_NAMES,\n ...X11_NAMES,\n};\n\nfunction scalarMul(scalar: number, vec: number[]) {\n return vec.map((v) => scalar * v);\n}\nfunction addVectors(...vecs: number[][]) {\n return vecs.reduce((prev, current) => prev.map((v, i) => v + current[i]));\n}\n\n/**\n * Mix a color in color model `model` as per the algorithm in 2.3.3 of the xcolor manual.\n */\nfunction mixInModel(\n model: string,\n colorsAndCoefficients: [number, Color][]\n): Color {\n if (!CORE_MODELS.has(model)) {\n throw new Error(\n `Cannot mix colors in model \"${model}\"; only core modes ${Array.from(\n CORE_MODELS\n ).join(\", \")} are supported`\n );\n }\n const toModel =\n ColorToXColorModel[model as keyof typeof ColorToXColorModel];\n const fromModel =\n XColorCoreModelToColor[model as keyof typeof XColorCoreModelToColor];\n\n const mixed = addVectors(\n ...colorsAndCoefficients.map(([v, color]) => {\n const colorInModel = toModel(color);\n return scalarMul(v, colorInModel);\n })\n );\n return fromModel(mixed);\n}\n\n/**\n * Given a parsed `XColor`, compute the color and return a `Color` object\n * (that can be used in CSS, for example).\n */\nexport function computeColor(\n expr: XColor,\n predefinedColors: Record> = {}\n): Color {\n if (expr.type !== \"color\") {\n throw new Error(\n `Can only compute the color of a \"color\" expression, not one of type ${expr.type}`\n );\n }\n\n const knownColors = { ...PREDEFINED_XCOLOR_COLORS, ...predefinedColors };\n function getColor(name: string) {\n if (!knownColors[name]) {\n throw new Error(`Unknown color \"${name}\"`);\n }\n return knownColors[name];\n }\n\n const color = expr.color;\n let computedColor = Color(\"#000000\");\n if (color.type === \"expr\") {\n // From the algorithm in 2.3.2 of the xcolor manual\n\n // TODO: the suffix `!![num]` is not yet implemented.\n let base = getColor(color.name);\n for (const mix of color.mix_expr) {\n if (mix.type === \"complete_mix\") {\n const mixColor = getColor(mix.name);\n base = base.mix(mixColor, 1 - mix.mix_percent / 100);\n } else if (mix.type === \"partial_mix\") {\n base = base.mix(Color(\"#FFFFFF\"), 1 - mix.mix_percent / 100);\n }\n }\n if (color.prefix && color.prefix.length % 2 === 1) {\n base = base.rotate(180);\n }\n computedColor = base;\n }\n if (color.type === \"extended_expr\") {\n const model = color.core_model;\n const div =\n color.div ||\n color.expressions.reduce((a, expr) => a + expr.weight, 0);\n if (div <= 0) {\n throw new Error(\n `Cannot mix color with ratios that have a denominator of ${div}`\n );\n }\n const colorsToMix: [number, Color][] = color.expressions.map(\n (expr) => [\n expr.weight / div,\n computeColor({\n type: \"color\",\n color: expr.color,\n functions: [],\n }),\n ]\n );\n computedColor = mixInModel(model, colorsToMix);\n }\n\n // Now we apply any color functions\n for (const func of expr.functions) {\n if (func.name === \"wheel\") {\n const angle = func.args[0];\n const circ = func.args[1] || 360;\n computedColor = computedColor.rotate((angle / circ) * 360);\n }\n if (func.name === \"twheel\") {\n // This function depends on the definition of \\rangetHsb, which we\n // don't actually know, so we just use it's default, which is to\n // add a 60 deg. angle to everything. I think...\n const angle = func.args[0];\n const circ = func.args[1] || 360;\n computedColor = computedColor.rotate((angle / circ) * 360 + 60);\n }\n }\n\n return computedColor;\n}\n\n/**\n * Convert the xcolor defined color to RGB Hex representation.\n * If the color is unknown or cannot be computed, `null` is returned.\n *\n * If `model` is supplied,\n *\n * The most likely reason a color will be `null` is if the color is defined\n * using a pre-defined color that wasn't supplied as an argument.\n */\nexport function xcolorColorToHex(\n color: string,\n model?: string | null,\n options: {\n predefinedColors?: Record>;\n } = { predefinedColors: {} }\n): string | null {\n const { predefinedColors = {} } = options;\n const parsed = xcolorParser(color);\n // If a model was entered, the corresponding color was directly entered without\n // mixing, unless the parsed type was \"color\". This would through an error in `xcolor`,\n // but we won't error.\n if (model && model !== \"default\" && parsed.type !== \"color\") {\n if (!(model in XColorModelToColor)) {\n throw new Error(\n `Unknown color model \"${model}\"; known models are ${Object.keys(\n XColorModelToColor\n ).join(\", \")}`\n );\n }\n if (parsed.type !== \"hex_spec\" && parsed.type !== \"num_spec\") {\n throw new Error(\n `Cannot use model ${model} to compute the color \"${color}\"`\n );\n }\n\n if (model === \"HTML\" && parsed.type === \"hex_spec\") {\n return XColorModelToColor.HTML(parsed.content).hex();\n } else if (parsed.type === \"num_spec\") {\n type x = keyof Omit;\n return XColorModelToColor[\n model as keyof Omit\n ](parsed.content).hex();\n }\n\n throw new Error(\n `Don't know how to process color \"${color}\" in model \"${model}\"`\n );\n }\n\n if (Array.isArray(parsed) || parsed.type !== \"color\") {\n throw new Error(\n `Cannot the color \"${color}\" is not a valid color string`\n );\n }\n let computed: Color | null = null;\n try {\n computed = computeColor(parsed, predefinedColors);\n } catch (e) {}\n\n return computed && computed.hex();\n}\n"],"names":["expr","xcolorParser"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/README.md b/node_modules/@unified-latex/unified-latex-prettier/README.md new file mode 100644 index 0000000..983c8ea --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/README.md @@ -0,0 +1,24 @@ + + + + +# unified-latex-prettier + +## What is this? + +A [Prettier](https://prettier.io/) plugin for formatting and pretty-printing LaTeX source code. + +## When should I use this? + +If you want to construct a `Prettier` instance that has LaTeX parsing abilities. + +You should probably use the `prettier-plugin-latex` package instead of directly accessing this package. + +## Install + +```bash +npm install @unified-latex/unified-latex-prettier +``` + +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. diff --git a/node_modules/@unified-latex/unified-latex-prettier/index.cjs b/node_modules/@unified-latex/unified-latex-prettier/index.cjs new file mode 100644 index 0000000..4db1e6b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/index.cjs @@ -0,0 +1,26424 @@ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; + +// ../../node_modules/trie-prefix-tree/dist/config.js +var require_config = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/config.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = { + END_WORD: "$", + END_WORD_REPLACER: "9a219a89-91cd-42e2-abd5-eb113af08ca8", + PERMS_MIN_LEN: 2 + }; + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/append.js +var require_append = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/append.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = append; + var _config = require_config(); + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function append(trie, letter, index2, array) { + var isEndWordLetter = letter === _config2.default.END_WORD; + var isLastLetter = index2 === array.length - 1; + if (isEndWordLetter && !isLastLetter) { + trie[_config2.default.END_WORD] = 1; + trie[_config2.default.END_WORD_REPLACER] = {}; + trie = trie[_config2.default.END_WORD_REPLACER]; + } else { + trie[letter] = trie[letter] || {}; + trie = trie[letter]; + } + if (isLastLetter) { + trie[_config2.default.END_WORD] = 1; + } + return trie; + } + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/create.js +var require_create = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/create.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports.default = create; + var _append = require_append(); + var _append2 = _interopRequireDefault(_append); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function create(input) { + if (!Array.isArray(input)) { + throw "Expected parameter Array, received " + (typeof input === "undefined" ? "undefined" : _typeof(input)); + } + var trie = input.reduce(function(accumulator, item) { + item.toLowerCase().split("").reduce(_append2.default, accumulator); + return accumulator; + }, {}); + return trie; + } + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/utils.js +var require_utils = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/utils.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = { + objectCopy: function objectCopy(obj) { + if (typeof obj === "undefined") { + return {}; + } + return JSON.parse(JSON.stringify(obj)); + }, + stringify: function stringify(obj) { + var spacer = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2; + if (typeof obj === "undefined") { + return ""; + } + return JSON.stringify(obj, null, spacer); + } + }; + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/checkPrefix.js +var require_checkPrefix = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/checkPrefix.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = checkPrefix; + var _utils = require_utils(); + var _utils2 = _interopRequireDefault(_utils); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function checkPrefix(prefixNode, prefix) { + var input = prefix.toLowerCase().split(""); + var prefixFound = input.every(function(letter, index2) { + if (!prefixNode[letter]) { + return false; + } + return prefixNode = prefixNode[letter]; + }); + return { + prefixFound, + prefixNode + }; + } + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/recursePrefix.js +var require_recursePrefix = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/recursePrefix.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = recursePrefix; + var _config = require_config(); + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var pushInOrder = function pushInOrder2(word, prefixes) { + var i = 0; + while (i < prefixes.length) { + if (word < prefixes[i]) { + break; + } + i += 1; + } + prefixes.splice(i, 0, word); + return prefixes; + }; + function recursePrefix(node, prefix, sorted) { + var prefixes = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : []; + var word = prefix; + for (var branch in node) { + var currentLetter = branch; + if (branch === _config2.default.END_WORD && typeof node[branch] === "number") { + if (sorted) { + pushInOrder(word, prefixes); + } else { + prefixes.push(word); + } + word = ""; + } else if (branch === _config2.default.END_WORD_REPLACER) { + currentLetter = _config2.default.END_WORD; + } + recursePrefix(node[branch], prefix + currentLetter, sorted, prefixes); + } + return prefixes; + } + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/recurseRandomWord.js +var require_recurseRandomWord = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/recurseRandomWord.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = recurseRandomWord; + var _config = require_config(); + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function recurseRandomWord(node, prefix) { + var word = prefix; + var branches = Object.keys(node); + var branch = branches[Math.floor(Math.random() * branches.length)]; + if (branch === _config2.default.END_WORD) { + return word; + } + return recurseRandomWord(node[branch], prefix + branch); + } + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/permutations.js +var require_permutations = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/permutations.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports.default = permutations; + var _config = require_config(); + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function permutations(letters, trie) { + var opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : { + type: "anagram" + }; + if (typeof letters !== "string") { + throw "Permutations expects string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + var words = []; + var permute = function permute2(word, node) { + var prefix = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : ""; + var wordIsEmpty = word.length === 0; + var wordFound = words.indexOf(prefix) !== -1; + var endWordFound = node[_config2.default.END_WORD] === 1; + if (wordIsEmpty && endWordFound && !wordFound) { + words.push(prefix); + } + for (var i = 0, len = word.length; i < len; i++) { + var letter = word[i]; + if (opts.type === "sub-anagram") { + if (endWordFound && !(words.indexOf(prefix) !== -1)) { + words.push(prefix); + } + } + if (node[letter]) { + var remaining = word.substring(0, i) + word.substring(i + 1, len); + permute2(remaining, node[letter], prefix + letter, words); + } + } + return words.sort(); + }; + return permute(letters, trie); + } + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/trie-prefix-tree/dist/index.js +var require_dist = __commonJS({ + "../../node_modules/trie-prefix-tree/dist/index.js"(exports, module2) { + "use strict"; + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports.default = function(input) { + if (!Array.isArray(input)) { + throw "Expected parameter Array, received " + (typeof input === "undefined" ? "undefined" : _typeof(input)); + } + var trie = (0, _create2.default)([].concat(_toConsumableArray(input))); + return { + /** + * Get the generated raw trie object + */ + tree: function tree() { + return trie; + }, + /** + * Get a string representation of the trie + */ + dump: function dump() { + var spacer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + return _utils2.default.stringify(trie, spacer); + }, + /** + * Add a new word to the trie + */ + addWord: function addWord(word) { + if (typeof word !== "string" || word === "") { + throw "Expected parameter string, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var reducer = function reducer2() { + return _append2.default.apply(void 0, arguments); + }; + var input2 = word.toLowerCase().split(""); + input2.reduce(reducer, trie); + return this; + }, + /** + * Remove an existing word from the trie + */ + removeWord: function removeWord(word) { + if (typeof word !== "string" || word === "") { + throw "Expected parameter string, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var _checkPrefix = (0, _checkPrefix6.default)(trie, word), prefixFound = _checkPrefix.prefixFound, prefixNode = _checkPrefix.prefixNode; + if (prefixFound) { + delete prefixNode[_config2.default.END_WORD]; + } + return this; + }, + /** + * Check a prefix is valid + * @returns Boolean + */ + isPrefix: function isPrefix(prefix) { + if (typeof prefix !== "string") { + throw "Expected string prefix, received " + (typeof prefix === "undefined" ? "undefined" : _typeof(prefix)); + } + var _checkPrefix2 = (0, _checkPrefix6.default)(trie, prefix), prefixFound = _checkPrefix2.prefixFound; + return prefixFound; + }, + /** + * Get a list of all words in the trie with the given prefix + * @returns Array + */ + getPrefix: function getPrefix(strPrefix) { + var sorted = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + if (typeof strPrefix !== "string") { + throw "Expected string prefix, received " + (typeof strPrefix === "undefined" ? "undefined" : _typeof(strPrefix)); + } + if (typeof sorted !== "boolean") { + throw "Expected sort parameter as boolean, received " + (typeof sorted === "undefined" ? "undefined" : _typeof(sorted)); + } + if (!this.isPrefix(strPrefix)) { + return []; + } + var prefixNode = strPrefix.length ? (0, _checkPrefix6.default)(trie, strPrefix).prefixNode : trie; + return (0, _recursePrefix2.default)(prefixNode, strPrefix, sorted); + }, + /** + * Get a random word in the trie with the given prefix + * @returns Array + */ + getRandomWordWithPrefix: function getRandomWordWithPrefix(strPrefix) { + if (typeof strPrefix !== "string") { + throw "Expected string prefix, received " + (typeof strPrefix === "undefined" ? "undefined" : _typeof(strPrefix)); + } + if (!this.isPrefix(strPrefix)) { + return ""; + } + var _checkPrefix3 = (0, _checkPrefix6.default)(trie, strPrefix), prefixNode = _checkPrefix3.prefixNode; + return (0, _recurseRandomWord2.default)(prefixNode, strPrefix); + }, + /** + * Count the number of words with the given prefixSearch + * @returns Number + */ + countPrefix: function countPrefix(strPrefix) { + var prefixes = this.getPrefix(strPrefix); + return prefixes.length; + }, + /** + * Get all words in the trie + * @returns Array + */ + getWords: function getWords() { + var sorted = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; + return this.getPrefix("", sorted); + }, + /** + * Check the existence of a word in the trie + * @returns Boolean + */ + hasWord: function hasWord(word) { + if (typeof word !== "string") { + throw "Expected string word, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var _checkPrefix4 = (0, _checkPrefix6.default)(trie, word), prefixFound = _checkPrefix4.prefixFound, prefixNode = _checkPrefix4.prefixNode; + if (prefixFound) { + return prefixNode[_config2.default.END_WORD] === 1; + } + return false; + }, + /** + * Get a list of valid anagrams that can be made from the given letters + * @returns Array + */ + getAnagrams: function getAnagrams(letters) { + if (typeof letters !== "string") { + throw "Anagrams expected string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + if (letters.length < PERMS_MIN_LEN) { + throw "getAnagrams expects at least " + PERMS_MIN_LEN + " letters"; + } + return (0, _permutations2.default)(letters, trie, { + type: "anagram" + }); + }, + /** + * Get a list of all sub-anagrams that can be made from the given letters + * @returns Array + */ + getSubAnagrams: function getSubAnagrams(letters) { + if (typeof letters !== "string") { + throw "Expected string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + if (letters.length < PERMS_MIN_LEN) { + throw "getSubAnagrams expects at least " + PERMS_MIN_LEN + " letters"; + } + return (0, _permutations2.default)(letters, trie, { + type: "sub-anagram" + }); + } + }; + }; + var _create = require_create(); + var _create2 = _interopRequireDefault(_create); + var _append = require_append(); + var _append2 = _interopRequireDefault(_append); + var _checkPrefix5 = require_checkPrefix(); + var _checkPrefix6 = _interopRequireDefault(_checkPrefix5); + var _recursePrefix = require_recursePrefix(); + var _recursePrefix2 = _interopRequireDefault(_recursePrefix); + var _recurseRandomWord = require_recurseRandomWord(); + var _recurseRandomWord2 = _interopRequireDefault(_recurseRandomWord); + var _utils = require_utils(); + var _utils2 = _interopRequireDefault(_utils); + var _config = require_config(); + var _config2 = _interopRequireDefault(_config); + var _permutations = require_permutations(); + var _permutations2 = _interopRequireDefault(_permutations); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function _toConsumableArray(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { + arr2[i] = arr[i]; + } + return arr2; + } else { + return Array.from(arr); + } + } + var PERMS_MIN_LEN = _config2.default.PERMS_MIN_LEN; + module2.exports = exports["default"]; + } +}); + +// ../../node_modules/is-buffer/index.js +var require_is_buffer = __commonJS({ + "../../node_modules/is-buffer/index.js"(exports, module2) { + module2.exports = function isBuffer2(obj) { + return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj); + }; + } +}); + +// ../../node_modules/extend/index.js +var require_extend = __commonJS({ + "../../node_modules/extend/index.js"(exports, module2) { + "use strict"; + var hasOwn = Object.prototype.hasOwnProperty; + var toStr = Object.prototype.toString; + var defineProperty = Object.defineProperty; + var gOPD = Object.getOwnPropertyDescriptor; + var isArray = function isArray2(arr) { + if (typeof Array.isArray === "function") { + return Array.isArray(arr); + } + return toStr.call(arr) === "[object Array]"; + }; + var isPlainObject2 = function isPlainObject3(obj) { + if (!obj || toStr.call(obj) !== "[object Object]") { + return false; + } + var hasOwnConstructor = hasOwn.call(obj, "constructor"); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf"); + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } + var key; + for (key in obj) { + } + return typeof key === "undefined" || hasOwn.call(obj, key); + }; + var setProperty = function setProperty2(target, options) { + if (defineProperty && options.name === "__proto__") { + defineProperty(target, options.name, { + enumerable: true, + configurable: true, + value: options.newValue, + writable: true + }); + } else { + target[options.name] = options.newValue; + } + }; + var getProperty = function getProperty2(obj, name) { + if (name === "__proto__") { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + return gOPD(obj, name).value; + } + } + return obj[name]; + }; + module2.exports = function extend2() { + var options, name, src, copy, copyIsArray, clone2; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + i = 2; + } + if (target == null || typeof target !== "object" && typeof target !== "function") { + target = {}; + } + for (; i < length; ++i) { + options = arguments[i]; + if (options != null) { + for (name in options) { + src = getProperty(target, name); + copy = getProperty(options, name); + if (target !== copy) { + if (deep && copy && (isPlainObject2(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone2 = src && isArray(src) ? src : []; + } else { + clone2 = src && isPlainObject2(src) ? src : {}; + } + setProperty(target, { name, newValue: extend2(deep, clone2, copy) }); + } else if (typeof copy !== "undefined") { + setProperty(target, { name, newValue: copy }); + } + } + } + } + } + return target; + }; + } +}); + +// ../../node_modules/color-name/index.js +var require_color_name = __commonJS({ + "../../node_modules/color-name/index.js"(exports, module2) { + "use strict"; + module2.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + } +}); + +// ../../node_modules/simple-swizzle/node_modules/is-arrayish/index.js +var require_is_arrayish = __commonJS({ + "../../node_modules/simple-swizzle/node_modules/is-arrayish/index.js"(exports, module2) { + module2.exports = function isArrayish(obj) { + if (!obj || typeof obj === "string") { + return false; + } + return obj instanceof Array || Array.isArray(obj) || obj.length >= 0 && (obj.splice instanceof Function || Object.getOwnPropertyDescriptor(obj, obj.length - 1) && obj.constructor.name !== "String"); + }; + } +}); + +// ../../node_modules/simple-swizzle/index.js +var require_simple_swizzle = __commonJS({ + "../../node_modules/simple-swizzle/index.js"(exports, module2) { + "use strict"; + var isArrayish = require_is_arrayish(); + var concat = Array.prototype.concat; + var slice = Array.prototype.slice; + var swizzle = module2.exports = function swizzle2(args) { + var results = []; + for (var i = 0, len = args.length; i < len; i++) { + var arg2 = args[i]; + if (isArrayish(arg2)) { + results = concat.call(results, slice.call(arg2)); + } else { + results.push(arg2); + } + } + return results; + }; + swizzle.wrap = function(fn) { + return function() { + return fn(swizzle(arguments)); + }; + }; + } +}); + +// ../../node_modules/color-string/index.js +var require_color_string = __commonJS({ + "../../node_modules/color-string/index.js"(exports, module2) { + var colorNames = require_color_name(); + var swizzle = require_simple_swizzle(); + var hasOwnProperty = Object.hasOwnProperty; + var reverseNames = /* @__PURE__ */ Object.create(null); + for (name in colorNames) { + if (hasOwnProperty.call(colorNames, name)) { + reverseNames[colorNames[name]] = name; + } + } + var name; + var cs = module2.exports = { + to: {}, + get: {} + }; + cs.get = function(string2) { + var prefix = string2.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case "hsl": + val = cs.get.hsl(string2); + model = "hsl"; + break; + case "hwb": + val = cs.get.hwb(string2); + model = "hwb"; + break; + default: + val = cs.get.rgb(string2); + model = "rgb"; + break; + } + if (!val) { + return null; + } + return { model, value: val }; + }; + cs.get.rgb = function(string2) { + if (!string2) { + return null; + } + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var keyword = /^(\w+)$/; + var rgb = [0, 0, 0, 1]; + var match2; + var i; + var hexAlpha; + if (match2 = string2.match(hex)) { + hexAlpha = match2[2]; + match2 = match2[1]; + for (i = 0; i < 3; i++) { + var i2 = i * 2; + rgb[i] = parseInt(match2.slice(i2, i2 + 2), 16); + } + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match2 = string2.match(abbr)) { + match2 = match2[1]; + hexAlpha = match2[3]; + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match2[i] + match2[i], 16); + } + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match2 = string2.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match2[i + 1], 0); + } + if (match2[4]) { + if (match2[5]) { + rgb[3] = parseFloat(match2[4]) * 0.01; + } else { + rgb[3] = parseFloat(match2[4]); + } + } + } else if (match2 = string2.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match2[i + 1]) * 2.55); + } + if (match2[4]) { + if (match2[5]) { + rgb[3] = parseFloat(match2[4]) * 0.01; + } else { + rgb[3] = parseFloat(match2[4]); + } + } + } else if (match2 = string2.match(keyword)) { + if (match2[1] === "transparent") { + return [0, 0, 0, 0]; + } + if (!hasOwnProperty.call(colorNames, match2[1])) { + return null; + } + rgb = colorNames[match2[1]]; + rgb[3] = 1; + return rgb; + } else { + return null; + } + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + return rgb; + }; + cs.get.hsl = function(string2) { + if (!string2) { + return null; + } + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match2 = string2.match(hsl); + if (match2) { + var alpha = parseFloat(match2[4]); + var h = (parseFloat(match2[1]) % 360 + 360) % 360; + var s2 = clamp(parseFloat(match2[2]), 0, 100); + var l = clamp(parseFloat(match2[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, s2, l, a]; + } + return null; + }; + cs.get.hwb = function(string2) { + if (!string2) { + return null; + } + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match2 = string2.match(hwb); + if (match2) { + var alpha = parseFloat(match2[4]); + var h = (parseFloat(match2[1]) % 360 + 360) % 360; + var w = clamp(parseFloat(match2[2]), 0, 100); + var b = clamp(parseFloat(match2[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + return null; + }; + cs.to.hex = function() { + var rgba = swizzle(arguments); + return "#" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (rgba[3] < 1 ? hexDouble(Math.round(rgba[3] * 255)) : ""); + }; + cs.to.rgb = function() { + var rgba = swizzle(arguments); + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ")" : "rgba(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ", " + rgba[3] + ")"; + }; + cs.to.rgb.percent = function() { + var rgba = swizzle(arguments); + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + r + "%, " + g + "%, " + b + "%)" : "rgba(" + r + "%, " + g + "%, " + b + "%, " + rgba[3] + ")"; + }; + cs.to.hsl = function() { + var hsla = swizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 ? "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)" : "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, " + hsla[3] + ")"; + }; + cs.to.hwb = function() { + var hwba = swizzle(arguments); + var a = ""; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ", " + hwba[3]; + } + return "hwb(" + hwba[0] + ", " + hwba[1] + "%, " + hwba[2] + "%" + a + ")"; + }; + cs.to.keyword = function(rgb) { + return reverseNames[rgb.slice(0, 3)]; + }; + function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); + } + function hexDouble(num) { + var str = Math.round(num).toString(16).toUpperCase(); + return str.length < 2 ? "0" + str : str; + } + } +}); + +// ../../node_modules/color-convert/conversions.js +var require_conversions = __commonJS({ + "../../node_modules/color-convert/conversions.js"(exports, module2) { + var cssKeywords = require_color_name(); + var reverseKeywords = {}; + for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; + } + var convert = { + rgb: { channels: 3, labels: "rgb" }, + hsl: { channels: 3, labels: "hsl" }, + hsv: { channels: 3, labels: "hsv" }, + hwb: { channels: 3, labels: "hwb" }, + cmyk: { channels: 4, labels: "cmyk" }, + xyz: { channels: 3, labels: "xyz" }, + lab: { channels: 3, labels: "lab" }, + lch: { channels: 3, labels: "lch" }, + hex: { channels: 1, labels: ["hex"] }, + keyword: { channels: 1, labels: ["keyword"] }, + ansi16: { channels: 1, labels: ["ansi16"] }, + ansi256: { channels: 1, labels: ["ansi256"] }, + hcg: { channels: 3, labels: ["h", "c", "g"] }, + apple: { channels: 3, labels: ["r16", "g16", "b16"] }, + gray: { channels: 1, labels: ["gray"] } + }; + module2.exports = convert; + for (const model of Object.keys(convert)) { + if (!("channels" in convert[model])) { + throw new Error("missing channels property: " + model); + } + if (!("labels" in convert[model])) { + throw new Error("missing channel labels property: " + model); + } + if (convert[model].labels.length !== convert[model].channels) { + throw new Error("channel and label counts mismatch: " + model); + } + const { channels, labels } = convert[model]; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], "channels", { value: channels }); + Object.defineProperty(convert[model], "labels", { value: labels }); + } + convert.rgb.hsl = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s2; + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + h = Math.min(h * 60, 360); + if (h < 0) { + h += 360; + } + const l = (min + max) / 2; + if (max === min) { + s2 = 0; + } else if (l <= 0.5) { + s2 = delta / (max + min); + } else { + s2 = delta / (2 - max - min); + } + return [h, s2 * 100, l * 100]; + }; + convert.rgb.hsv = function(rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s2; + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function(c) { + return (v - c) / 6 / diff + 1 / 2; + }; + if (diff === 0) { + h = 0; + s2 = 0; + } else { + s2 = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = 1 / 3 + rdif - bdif; + } else if (b === v) { + h = 2 / 3 + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + return [ + h * 360, + s2 * 100, + v * 100 + ]; + }; + convert.rgb.hwb = function(rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + return [h, w * 100, b * 100]; + }; + convert.rgb.cmyk = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + return [c * 100, m * 100, y * 100, k * 100]; + }; + function comparativeDistance(x, y) { + return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2; + } + convert.rgb.keyword = function(rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + let currentClosestDistance = Infinity; + let currentClosestKeyword; + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + const distance = comparativeDistance(rgb, value); + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + return currentClosestKeyword; + }; + convert.keyword.rgb = function(keyword) { + return cssKeywords[keyword]; + }; + convert.rgb.xyz = function(rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92; + g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92; + b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92; + const x = r * 0.4124 + g * 0.3576 + b * 0.1805; + const y = r * 0.2126 + g * 0.7152 + b * 0.0722; + const z = r * 0.0193 + g * 0.1192 + b * 0.9505; + return [x * 100, y * 100, z * 100]; + }; + convert.rgb.lab = function(rgb) { + const xyz = convert.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; + }; + convert.hsl.rgb = function(hsl) { + const h = hsl[0] / 360; + const s2 = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + if (s2 === 0) { + val = l * 255; + return [val, val, val]; + } + if (l < 0.5) { + t2 = l * (1 + s2); + } else { + t2 = l + s2 - l * s2; + } + const t1 = 2 * l - t2; + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + rgb[i] = val * 255; + } + return rgb; + }; + convert.hsl.hsv = function(hsl) { + const h = hsl[0]; + let s2 = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s2; + const lmin = Math.max(l, 0.01); + l *= 2; + s2 *= l <= 1 ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s2) / 2; + const sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s2 / (l + s2); + return [h, sv * 100, v * 100]; + }; + convert.hsv.rgb = function(hsv) { + const h = hsv[0] / 60; + const s2 = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + const f = h - Math.floor(h); + const p = 255 * v * (1 - s2); + const q = 255 * v * (1 - s2 * f); + const t = 255 * v * (1 - s2 * (1 - f)); + v *= 255; + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } + }; + convert.hsv.hsl = function(hsv) { + const h = hsv[0]; + const s2 = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + l = (2 - s2) * v; + const lmin = (2 - s2) * vmin; + sl = s2 * vmin; + sl /= lmin <= 1 ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + return [h, sl * 100, l * 100]; + }; + convert.hwb.rgb = function(hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + if ((i & 1) !== 0) { + f = 1 - f; + } + const n = wh + f * (v - wh); + let r; + let g; + let b; + switch (i) { + default: + case 6: + case 0: + r = v; + g = n; + b = wh; + break; + case 1: + r = n; + g = v; + b = wh; + break; + case 2: + r = wh; + g = v; + b = n; + break; + case 3: + r = wh; + g = n; + b = v; + break; + case 4: + r = n; + g = wh; + b = v; + break; + case 5: + r = v; + g = wh; + b = n; + break; + } + return [r * 255, g * 255, b * 255]; + }; + convert.cmyk.rgb = function(cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + return [r * 255, g * 255, b * 255]; + }; + convert.xyz.rgb = function(xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + r = x * 3.2406 + y * -1.5372 + z * -0.4986; + g = x * -0.9689 + y * 1.8758 + z * 0.0415; + b = x * 0.0557 + y * -0.204 + z * 1.057; + r = r > 31308e-7 ? 1.055 * r ** (1 / 2.4) - 0.055 : r * 12.92; + g = g > 31308e-7 ? 1.055 * g ** (1 / 2.4) - 0.055 : g * 12.92; + b = b > 31308e-7 ? 1.055 * b ** (1 / 2.4) - 0.055 : b * 12.92; + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + return [r * 255, g * 255, b * 255]; + }; + convert.xyz.lab = function(xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; + }; + convert.lab.xyz = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 8856e-6 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 8856e-6 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 8856e-6 ? z2 : (z - 16 / 116) / 7.787; + x *= 95.047; + y *= 100; + z *= 108.883; + return [x, y, z]; + }; + convert.lab.lch = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + if (h < 0) { + h += 360; + } + const c = Math.sqrt(a * a + b * b); + return [l, c, h]; + }; + convert.lch.lab = function(lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + return [l, a, b]; + }; + convert.rgb.ansi16 = function(args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; + value = Math.round(value / 50); + if (value === 0) { + return 30; + } + let ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255)); + if (value === 2) { + ansi += 60; + } + return ansi; + }; + convert.hsv.ansi16 = function(args) { + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); + }; + convert.rgb.ansi256 = function(args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + if (r === g && g === b) { + if (r < 8) { + return 16; + } + if (r > 248) { + return 231; + } + return Math.round((r - 8) / 247 * 24) + 232; + } + const ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5); + return ansi; + }; + convert.ansi16.rgb = function(args) { + let color = args % 10; + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + color = color / 10.5 * 255; + return [color, color, color]; + } + const mult = (~~(args > 50) + 1) * 0.5; + const r = (color & 1) * mult * 255; + const g = (color >> 1 & 1) * mult * 255; + const b = (color >> 2 & 1) * mult * 255; + return [r, g, b]; + }; + convert.ansi256.rgb = function(args) { + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + args -= 16; + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = rem % 6 / 5 * 255; + return [r, g, b]; + }; + convert.rgb.hex = function(args) { + const integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255); + const string2 = integer.toString(16).toUpperCase(); + return "000000".substring(string2.length) + string2; + }; + convert.hex.rgb = function(args) { + const match2 = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match2) { + return [0, 0, 0]; + } + let colorString = match2[0]; + if (match2[0].length === 3) { + colorString = colorString.split("").map((char) => { + return char + char; + }).join(""); + } + const integer = parseInt(colorString, 16); + const r = integer >> 16 & 255; + const g = integer >> 8 & 255; + const b = integer & 255; + return [r, g, b]; + }; + convert.rgb.hcg = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = max - min; + let grayscale; + let hue; + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + if (chroma <= 0) { + hue = 0; + } else if (max === r) { + hue = (g - b) / chroma % 6; + } else if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + hue /= 6; + hue %= 1; + return [hue * 360, chroma * 100, grayscale * 100]; + }; + convert.hsl.hcg = function(hsl) { + const s2 = hsl[1] / 100; + const l = hsl[2] / 100; + const c = l < 0.5 ? 2 * s2 * l : 2 * s2 * (1 - l); + let f = 0; + if (c < 1) { + f = (l - 0.5 * c) / (1 - c); + } + return [hsl[0], c * 100, f * 100]; + }; + convert.hsv.hcg = function(hsv) { + const s2 = hsv[1] / 100; + const v = hsv[2] / 100; + const c = s2 * v; + let f = 0; + if (c < 1) { + f = (v - c) / (1 - c); + } + return [hsv[0], c * 100, f * 100]; + }; + convert.hcg.rgb = function(hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + if (c === 0) { + return [g * 255, g * 255, g * 255]; + } + const pure = [0, 0, 0]; + const hi = h % 1 * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; + pure[1] = v; + pure[2] = 0; + break; + case 1: + pure[0] = w; + pure[1] = 1; + pure[2] = 0; + break; + case 2: + pure[0] = 0; + pure[1] = 1; + pure[2] = v; + break; + case 3: + pure[0] = 0; + pure[1] = w; + pure[2] = 1; + break; + case 4: + pure[0] = v; + pure[1] = 0; + pure[2] = 1; + break; + default: + pure[0] = 1; + pure[1] = 0; + pure[2] = w; + } + mg = (1 - c) * g; + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; + }; + convert.hcg.hsv = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + let f = 0; + if (v > 0) { + f = c / v; + } + return [hcg[0], f * 100, v * 100]; + }; + convert.hcg.hsl = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const l = g * (1 - c) + 0.5 * c; + let s2 = 0; + if (l > 0 && l < 0.5) { + s2 = c / (2 * l); + } else if (l >= 0.5 && l < 1) { + s2 = c / (2 * (1 - l)); + } + return [hcg[0], s2 * 100, l * 100]; + }; + convert.hcg.hwb = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; + }; + convert.hwb.hcg = function(hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + if (c < 1) { + g = (v - c) / (1 - c); + } + return [hwb[0], c * 100, g * 100]; + }; + convert.apple.rgb = function(apple) { + return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; + }; + convert.rgb.apple = function(rgb) { + return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535]; + }; + convert.gray.rgb = function(args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; + }; + convert.gray.hsl = function(args) { + return [0, 0, args[0]]; + }; + convert.gray.hsv = convert.gray.hsl; + convert.gray.hwb = function(gray) { + return [0, 100, gray[0]]; + }; + convert.gray.cmyk = function(gray) { + return [0, 0, 0, gray[0]]; + }; + convert.gray.lab = function(gray) { + return [gray[0], 0, 0]; + }; + convert.gray.hex = function(gray) { + const val = Math.round(gray[0] / 100 * 255) & 255; + const integer = (val << 16) + (val << 8) + val; + const string2 = integer.toString(16).toUpperCase(); + return "000000".substring(string2.length) + string2; + }; + convert.rgb.gray = function(rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; + }; + } +}); + +// ../../node_modules/color-convert/route.js +var require_route = __commonJS({ + "../../node_modules/color-convert/route.js"(exports, module2) { + var conversions = require_conversions(); + function buildGraph() { + const graph = {}; + const models = Object.keys(conversions); + for (let len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + return graph; + } + function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; + graph[fromModel].distance = 0; + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions[current]); + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + return graph; + } + function link(from, to) { + return function(args) { + return to(from(args)); + }; + } + function wrapConversion(toModel, graph) { + const path2 = [graph[toModel].parent, toModel]; + let fn = conversions[graph[toModel].parent][toModel]; + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path2.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + fn.conversion = path2; + return fn; + } + module2.exports = function(fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + const models = Object.keys(graph); + for (let len = models.length, i = 0; i < len; i++) { + const toModel = models[i]; + const node = graph[toModel]; + if (node.parent === null) { + continue; + } + conversion[toModel] = wrapConversion(toModel, graph); + } + return conversion; + }; + } +}); + +// ../../node_modules/color-convert/index.js +var require_color_convert = __commonJS({ + "../../node_modules/color-convert/index.js"(exports, module2) { + var conversions = require_conversions(); + var route = require_route(); + var convert = {}; + var models = Object.keys(conversions); + function wrapRaw(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + return fn(args); + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; + } + function wrapRounded(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + const result = fn(args); + if (typeof result === "object") { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + return result; + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; + } + models.forEach((fromModel) => { + convert[fromModel] = {}; + Object.defineProperty(convert[fromModel], "channels", { value: conversions[fromModel].channels }); + Object.defineProperty(convert[fromModel], "labels", { value: conversions[fromModel].labels }); + const routes = route(fromModel); + const routeModels = Object.keys(routes); + routeModels.forEach((toModel) => { + const fn = routes[toModel]; + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); + }); + module2.exports = convert; + } +}); + +// ../../node_modules/color/index.js +var require_color = __commonJS({ + "../../node_modules/color/index.js"(exports, module2) { + var colorString = require_color_string(); + var convert = require_color_convert(); + var skippedModels = [ + // To be honest, I don't really feel like keyword belongs in color convert, but eh. + "keyword", + // Gray conflicts with some method names, and has its own method defined. + "gray", + // Shouldn't really be in color-convert either... + "hex" + ]; + var hashedModelKeys = {}; + for (const model of Object.keys(convert)) { + hashedModelKeys[[...convert[model].labels].sort().join("")] = model; + } + var limiters = {}; + function Color3(object, model) { + if (!(this instanceof Color3)) { + return new Color3(object, model); + } + if (model && model in skippedModels) { + model = null; + } + if (model && !(model in convert)) { + throw new Error("Unknown model: " + model); + } + let i; + let channels; + if (object == null) { + this.model = "rgb"; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (object instanceof Color3) { + this.model = object.model; + this.color = [...object.color]; + this.valpha = object.valpha; + } else if (typeof object === "string") { + const result = colorString.get(object); + if (result === null) { + throw new Error("Unable to parse color from string: " + object); + } + this.model = result.model; + channels = convert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === "number" ? result.value[channels] : 1; + } else if (object.length > 0) { + this.model = model || "rgb"; + channels = convert[this.model].channels; + const newArray = Array.prototype.slice.call(object, 0, channels); + this.color = zeroArray(newArray, channels); + this.valpha = typeof object[channels] === "number" ? object[channels] : 1; + } else if (typeof object === "number") { + this.model = "rgb"; + this.color = [ + object >> 16 & 255, + object >> 8 & 255, + object & 255 + ]; + this.valpha = 1; + } else { + this.valpha = 1; + const keys2 = Object.keys(object); + if ("alpha" in object) { + keys2.splice(keys2.indexOf("alpha"), 1); + this.valpha = typeof object.alpha === "number" ? object.alpha : 0; + } + const hashedKeys = keys2.sort().join(""); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error("Unable to parse color from object: " + JSON.stringify(object)); + } + this.model = hashedModelKeys[hashedKeys]; + const { labels } = convert[this.model]; + const color = []; + for (i = 0; i < labels.length; i++) { + color.push(object[labels[i]]); + } + this.color = zeroArray(color); + } + if (limiters[this.model]) { + channels = convert[this.model].channels; + for (i = 0; i < channels; i++) { + const limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + this.valpha = Math.max(0, Math.min(1, this.valpha)); + if (Object.freeze) { + Object.freeze(this); + } + } + Color3.prototype = { + toString() { + return this.string(); + }, + toJSON() { + return this[this.model](); + }, + string(places) { + let self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === "number" ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to[self.model](args); + }, + percentString(places) { + const self = this.rgb().round(typeof places === "number" ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to.rgb.percent(args); + }, + array() { + return this.valpha === 1 ? [...this.color] : [...this.color, this.valpha]; + }, + object() { + const result = {}; + const { channels } = convert[this.model]; + const { labels } = convert[this.model]; + for (let i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + return result; + }, + unitArray() { + const rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + return rgb; + }, + unitObject() { + const rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + return rgb; + }, + round(places) { + places = Math.max(places || 0, 0); + return new Color3([...this.color.map(roundToPlace(places)), this.valpha], this.model); + }, + alpha(value) { + if (value !== void 0) { + return new Color3([...this.color, Math.max(0, Math.min(1, value))], this.model); + } + return this.valpha; + }, + // Rgb + red: getset("rgb", 0, maxfn(255)), + green: getset("rgb", 1, maxfn(255)), + blue: getset("rgb", 2, maxfn(255)), + hue: getset(["hsl", "hsv", "hsl", "hwb", "hcg"], 0, (value) => (value % 360 + 360) % 360), + saturationl: getset("hsl", 1, maxfn(100)), + lightness: getset("hsl", 2, maxfn(100)), + saturationv: getset("hsv", 1, maxfn(100)), + value: getset("hsv", 2, maxfn(100)), + chroma: getset("hcg", 1, maxfn(100)), + gray: getset("hcg", 2, maxfn(100)), + white: getset("hwb", 1, maxfn(100)), + wblack: getset("hwb", 2, maxfn(100)), + cyan: getset("cmyk", 0, maxfn(100)), + magenta: getset("cmyk", 1, maxfn(100)), + yellow: getset("cmyk", 2, maxfn(100)), + black: getset("cmyk", 3, maxfn(100)), + x: getset("xyz", 0, maxfn(95.047)), + y: getset("xyz", 1, maxfn(100)), + z: getset("xyz", 2, maxfn(108.833)), + l: getset("lab", 0, maxfn(100)), + a: getset("lab", 1), + b: getset("lab", 2), + keyword(value) { + if (value !== void 0) { + return new Color3(value); + } + return convert[this.model].keyword(this.color); + }, + hex(value) { + if (value !== void 0) { + return new Color3(value); + } + return colorString.to.hex(this.rgb().round().color); + }, + hexa(value) { + if (value !== void 0) { + return new Color3(value); + } + const rgbArray = this.rgb().round().color; + let alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase(); + if (alphaHex.length === 1) { + alphaHex = "0" + alphaHex; + } + return colorString.to.hex(rgbArray) + alphaHex; + }, + rgbNumber() { + const rgb = this.rgb().color; + return (rgb[0] & 255) << 16 | (rgb[1] & 255) << 8 | rgb[2] & 255; + }, + luminosity() { + const rgb = this.rgb().color; + const lum = []; + for (const [i, element] of rgb.entries()) { + const chan = element / 255; + lum[i] = chan <= 0.04045 ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4; + } + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + contrast(color2) { + const lum1 = this.luminosity(); + const lum2 = color2.luminosity(); + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + return (lum2 + 0.05) / (lum1 + 0.05); + }, + level(color2) { + const contrastRatio = this.contrast(color2); + if (contrastRatio >= 7) { + return "AAA"; + } + return contrastRatio >= 4.5 ? "AA" : ""; + }, + isDark() { + const rgb = this.rgb().color; + const yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 1e4; + return yiq < 128; + }, + isLight() { + return !this.isDark(); + }, + negate() { + const rgb = this.rgb(); + for (let i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + lighten(ratio) { + const hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + darken(ratio) { + const hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + saturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + desaturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + whiten(ratio) { + const hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + blacken(ratio) { + const hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + grayscale() { + const rgb = this.rgb().color; + const value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color3.rgb(value, value, value); + }, + fade(ratio) { + return this.alpha(this.valpha - this.valpha * ratio); + }, + opaquer(ratio) { + return this.alpha(this.valpha + this.valpha * ratio); + }, + rotate(degrees) { + const hsl = this.hsl(); + let hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + mix(mixinColor, weight) { + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + const color1 = mixinColor.rgb(); + const color2 = this.rgb(); + const p = weight === void 0 ? 0.5 : weight; + const w = 2 * p - 1; + const a = color1.alpha() - color2.alpha(); + const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2; + const w2 = 1 - w1; + return Color3.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p) + ); + } + }; + for (const model of Object.keys(convert)) { + if (skippedModels.includes(model)) { + continue; + } + const { channels } = convert[model]; + Color3.prototype[model] = function(...args) { + if (this.model === model) { + return new Color3(this); + } + if (args.length > 0) { + return new Color3(args, model); + } + return new Color3([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model); + }; + Color3[model] = function(...args) { + let color = args[0]; + if (typeof color === "number") { + color = zeroArray(args, channels); + } + return new Color3(color, model); + }; + } + function roundTo(number, places) { + return Number(number.toFixed(places)); + } + function roundToPlace(places) { + return function(number) { + return roundTo(number, places); + }; + } + function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + for (const m of model) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + } + model = model[0]; + return function(value) { + let result; + if (value !== void 0) { + if (modifier) { + value = modifier(value); + } + result = this[model](); + result.color[channel] = value; + return result; + } + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + return result; + }; + } + function maxfn(max) { + return function(v) { + return Math.max(0, Math.min(max, v)); + }; + } + function assertArray(value) { + return Array.isArray(value) ? value : [value]; + } + function zeroArray(array, length) { + for (let i = 0; i < length; i++) { + if (typeof array[i] !== "number") { + array[i] = 0; + } + } + return array; + } + module2.exports = Color3; + } +}); + +// index.ts +var unified_latex_prettier_exports = {}; +__export(unified_latex_prettier_exports, { + prettierPluginLatex: () => prettierPluginLatex, + printLatexAst: () => printLatexAst, + printer: () => printLatexAst +}); +module.exports = __toCommonJS(unified_latex_prettier_exports); + +// node_modules/prettier/doc.mjs +var __defProp2 = Object.defineProperty; +var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); +}; +var public_exports = {}; +__export2(public_exports, { + builders: () => builders, + printer: () => printer, + utils: () => utils +}); +var DOC_TYPE_STRING = "string"; +var DOC_TYPE_ARRAY = "array"; +var DOC_TYPE_CURSOR = "cursor"; +var DOC_TYPE_INDENT = "indent"; +var DOC_TYPE_ALIGN = "align"; +var DOC_TYPE_TRIM = "trim"; +var DOC_TYPE_GROUP = "group"; +var DOC_TYPE_FILL = "fill"; +var DOC_TYPE_IF_BREAK = "if-break"; +var DOC_TYPE_INDENT_IF_BREAK = "indent-if-break"; +var DOC_TYPE_LINE_SUFFIX = "line-suffix"; +var DOC_TYPE_LINE_SUFFIX_BOUNDARY = "line-suffix-boundary"; +var DOC_TYPE_LINE = "line"; +var DOC_TYPE_LABEL = "label"; +var DOC_TYPE_BREAK_PARENT = "break-parent"; +var VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([ + DOC_TYPE_CURSOR, + DOC_TYPE_INDENT, + DOC_TYPE_ALIGN, + DOC_TYPE_TRIM, + DOC_TYPE_GROUP, + DOC_TYPE_FILL, + DOC_TYPE_IF_BREAK, + DOC_TYPE_INDENT_IF_BREAK, + DOC_TYPE_LINE_SUFFIX, + DOC_TYPE_LINE_SUFFIX_BOUNDARY, + DOC_TYPE_LINE, + DOC_TYPE_LABEL, + DOC_TYPE_BREAK_PARENT +]); +function getDocType(doc) { + if (typeof doc === "string") { + return DOC_TYPE_STRING; + } + if (Array.isArray(doc)) { + return DOC_TYPE_ARRAY; + } + if (!doc) { + return; + } + const { type } = doc; + if (VALID_OBJECT_DOC_TYPES.has(type)) { + return type; + } +} +var get_doc_type_default = getDocType; +var disjunctionListFormat = (list) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(list); +function getDocErrorMessage(doc) { + const type = doc === null ? "null" : typeof doc; + if (type !== "string" && type !== "object") { + return `Unexpected doc '${type}', +Expected it to be 'string' or 'object'.`; + } + if (get_doc_type_default(doc)) { + throw new Error("doc is valid."); + } + const objectType = Object.prototype.toString.call(doc); + if (objectType !== "[object Object]") { + return `Unexpected doc '${objectType}'.`; + } + const EXPECTED_TYPE_VALUES = disjunctionListFormat( + [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`) + ); + return `Unexpected doc.type '${doc.type}'. +Expected it to be ${EXPECTED_TYPE_VALUES}.`; +} +var InvalidDocError = class extends Error { + name = "InvalidDocError"; + constructor(doc) { + super(getDocErrorMessage(doc)); + this.doc = doc; + } +}; +var invalid_doc_error_default = InvalidDocError; +var traverseDocOnExitStackMarker = {}; +function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { + const docsStack = [doc]; + while (docsStack.length > 0) { + const doc2 = docsStack.pop(); + if (doc2 === traverseDocOnExitStackMarker) { + onExit(docsStack.pop()); + continue; + } + if (onExit) { + docsStack.push(doc2, traverseDocOnExitStackMarker); + } + const docType = get_doc_type_default(doc2); + if (!docType) { + throw new invalid_doc_error_default(doc2); + } + if ((onEnter == null ? void 0 : onEnter(doc2)) === false) { + continue; + } + switch (docType) { + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts; + for (let ic = parts.length, i = ic - 1; i >= 0; --i) { + docsStack.push(parts[i]); + } + break; + } + case DOC_TYPE_IF_BREAK: + docsStack.push(doc2.flatContents, doc2.breakContents); + break; + case DOC_TYPE_GROUP: + if (shouldTraverseConditionalGroups && doc2.expandedStates) { + for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) { + docsStack.push(doc2.expandedStates[i]); + } + } else { + docsStack.push(doc2.contents); + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + docsStack.push(doc2.contents); + break; + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + } +} +var traverse_doc_default = traverseDoc; +var noop = () => { +}; +var assertDoc = true ? noop : function(doc) { + traverse_doc_default(doc, (doc2) => { + if (checked.has(doc2)) { + return false; + } + if (typeof doc2 !== "string") { + checked.add(doc2); + } + }); +}; +var assertDocArray = true ? noop : function(docs, optional = false) { + if (optional && !docs) { + return; + } + if (!Array.isArray(docs)) { + throw new TypeError("Unexpected doc array."); + } + for (const doc of docs) { + assertDoc(doc); + } +}; +function indent(contents) { + assertDoc(contents); + return { type: DOC_TYPE_INDENT, contents }; +} +function align(widthOrString, contents) { + assertDoc(contents); + return { type: DOC_TYPE_ALIGN, contents, n: widthOrString }; +} +function group(contents, opts = {}) { + assertDoc(contents); + assertDocArray( + opts.expandedStates, + /* optional */ + true + ); + return { + type: DOC_TYPE_GROUP, + id: opts.id, + contents, + break: Boolean(opts.shouldBreak), + expandedStates: opts.expandedStates + }; +} +function dedentToRoot(contents) { + return align(Number.NEGATIVE_INFINITY, contents); +} +function markAsRoot(contents) { + return align({ type: "root" }, contents); +} +function dedent(contents) { + return align(-1, contents); +} +function conditionalGroup(states, opts) { + return group(states[0], { ...opts, expandedStates: states }); +} +function fill(parts) { + assertDocArray(parts); + return { type: DOC_TYPE_FILL, parts }; +} +function ifBreak(breakContents, flatContents = "", opts = {}) { + assertDoc(breakContents); + if (flatContents !== "") { + assertDoc(flatContents); + } + return { + type: DOC_TYPE_IF_BREAK, + breakContents, + flatContents, + groupId: opts.groupId + }; +} +function indentIfBreak(contents, opts) { + assertDoc(contents); + return { + type: DOC_TYPE_INDENT_IF_BREAK, + contents, + groupId: opts.groupId, + negate: opts.negate + }; +} +function lineSuffix(contents) { + assertDoc(contents); + return { type: DOC_TYPE_LINE_SUFFIX, contents }; +} +var lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY }; +var breakParent = { type: DOC_TYPE_BREAK_PARENT }; +var trim = { type: DOC_TYPE_TRIM }; +var hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true }; +var literallineWithoutBreakParent = { + type: DOC_TYPE_LINE, + hard: true, + literal: true +}; +var line = { type: DOC_TYPE_LINE }; +var softline = { type: DOC_TYPE_LINE, soft: true }; +var hardline = [hardlineWithoutBreakParent, breakParent]; +var literalline = [literallineWithoutBreakParent, breakParent]; +var cursor = { type: DOC_TYPE_CURSOR }; +function join(separator, docs) { + assertDoc(separator); + assertDocArray(docs); + const parts = []; + for (let i = 0; i < docs.length; i++) { + if (i !== 0) { + parts.push(separator); + } + parts.push(docs[i]); + } + return parts; +} +function addAlignmentToDoc(doc, size, tabWidth) { + assertDoc(doc); + let aligned = doc; + if (size > 0) { + for (let i = 0; i < Math.floor(size / tabWidth); ++i) { + aligned = indent(aligned); + } + aligned = align(size % tabWidth, aligned); + aligned = align(Number.NEGATIVE_INFINITY, aligned); + } + return aligned; +} +function label(label2, contents) { + assertDoc(contents); + return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents; +} +var at = (isOptionalObject, object, index2) => { + if (isOptionalObject && (object === void 0 || object === null)) { + return; + } + if (Array.isArray(object) || typeof object === "string") { + return object[index2 < 0 ? object.length + index2 : index2]; + } + return object.at(index2); +}; +var at_default = at; +var stringReplaceAll = (isOptionalObject, original, pattern, replacement) => { + if (isOptionalObject && (original === void 0 || original === null)) { + return; + } + if (original.replaceAll) { + return original.replaceAll(pattern, replacement); + } + if (pattern.global) { + return original.replace(pattern, replacement); + } + return original.split(pattern).join(replacement); +}; +var string_replace_all_default = stringReplaceAll; +function convertEndOfLineToChars(value) { + switch (value) { + case "cr": + return "\r"; + case "crlf": + return "\r\n"; + default: + return "\n"; + } +} +var emoji_regex_default = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; +}; +var eastasianwidth_default = { + eastAsianWidth(character) { + var x = character.charCodeAt(0); + var y = character.length == 2 ? character.charCodeAt(1) : 0; + var codePoint = x; + if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) { + x &= 1023; + y &= 1023; + codePoint = x << 10 | y; + codePoint += 65536; + } + if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) { + return "F"; + } + if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) { + return "W"; + } + return "N"; + } +}; +var notAsciiRegex = /[^\x20-\x7F]/; +function getStringWidth(text) { + if (!text) { + return 0; + } + if (!notAsciiRegex.test(text)) { + return text.length; + } + text = text.replace(emoji_regex_default(), " "); + let width = 0; + for (const character of text) { + const codePoint = character.codePointAt(0); + if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) { + continue; + } + if (codePoint >= 768 && codePoint <= 879) { + continue; + } + const code = eastasianwidth_default.eastAsianWidth(character); + width += code === "F" || code === "W" ? 2 : 1; + } + return width; +} +var get_string_width_default = getStringWidth; +var getDocParts = (doc) => { + if (Array.isArray(doc)) { + return doc; + } + if (doc.type !== DOC_TYPE_FILL) { + throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`); + } + return doc.parts; +}; +function mapDoc(doc, cb) { + if (typeof doc === "string") { + return cb(doc); + } + const mapped = /* @__PURE__ */ new Map(); + return rec(doc); + function rec(doc2) { + if (mapped.has(doc2)) { + return mapped.get(doc2); + } + const result = process2(doc2); + mapped.set(doc2, result); + return result; + } + function process2(doc2) { + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_ARRAY: + return cb(doc2.map(rec)); + case DOC_TYPE_FILL: + return cb({ + ...doc2, + parts: doc2.parts.map(rec) + }); + case DOC_TYPE_IF_BREAK: + return cb({ + ...doc2, + breakContents: rec(doc2.breakContents), + flatContents: rec(doc2.flatContents) + }); + case DOC_TYPE_GROUP: { + let { + expandedStates, + contents + } = doc2; + if (expandedStates) { + expandedStates = expandedStates.map(rec); + contents = expandedStates[0]; + } else { + contents = rec(contents); + } + return cb({ + ...doc2, + contents, + expandedStates + }); + } + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + return cb({ + ...doc2, + contents: rec(doc2.contents) + }); + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + return cb(doc2); + default: + throw new invalid_doc_error_default(doc2); + } + } +} +function findInDoc(doc, fn, defaultValue) { + let result = defaultValue; + let shouldSkipFurtherProcessing = false; + function findInDocOnEnterFn(doc2) { + if (shouldSkipFurtherProcessing) { + return false; + } + const maybeResult = fn(doc2); + if (maybeResult !== void 0) { + shouldSkipFurtherProcessing = true; + result = maybeResult; + } + } + traverse_doc_default(doc, findInDocOnEnterFn); + return result; +} +function willBreakFn(doc) { + if (doc.type === DOC_TYPE_GROUP && doc.break) { + return true; + } + if (doc.type === DOC_TYPE_LINE && doc.hard) { + return true; + } + if (doc.type === DOC_TYPE_BREAK_PARENT) { + return true; + } +} +function willBreak(doc) { + return findInDoc(doc, willBreakFn, false); +} +function breakParentGroup(groupStack) { + if (groupStack.length > 0) { + const parentGroup = at_default( + /* isOptionalObject*/ + false, + groupStack, + -1 + ); + if (!parentGroup.expandedStates && !parentGroup.break) { + parentGroup.break = "propagated"; + } + } + return null; +} +function propagateBreaks(doc) { + const alreadyVisitedSet = /* @__PURE__ */ new Set(); + const groupStack = []; + function propagateBreaksOnEnterFn(doc2) { + if (doc2.type === DOC_TYPE_BREAK_PARENT) { + breakParentGroup(groupStack); + } + if (doc2.type === DOC_TYPE_GROUP) { + groupStack.push(doc2); + if (alreadyVisitedSet.has(doc2)) { + return false; + } + alreadyVisitedSet.add(doc2); + } + } + function propagateBreaksOnExitFn(doc2) { + if (doc2.type === DOC_TYPE_GROUP) { + const group22 = groupStack.pop(); + if (group22.break) { + breakParentGroup(groupStack); + } + } + } + traverse_doc_default( + doc, + propagateBreaksOnEnterFn, + propagateBreaksOnExitFn, + /* shouldTraverseConditionalGroups */ + true + ); +} +function removeLinesFn(doc) { + if (doc.type === DOC_TYPE_LINE && !doc.hard) { + return doc.soft ? "" : " "; + } + if (doc.type === DOC_TYPE_IF_BREAK) { + return doc.flatContents; + } + return doc; +} +function removeLines(doc) { + return mapDoc(doc, removeLinesFn); +} +function stripTrailingHardlineFromParts(parts) { + parts = [...parts]; + while (parts.length >= 2 && at_default( + /* isOptionalObject*/ + false, + parts, + -2 + ).type === DOC_TYPE_LINE && at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ).type === DOC_TYPE_BREAK_PARENT) { + parts.length -= 2; + } + if (parts.length > 0) { + const lastPart = stripTrailingHardlineFromDoc(at_default( + /* isOptionalObject*/ + false, + parts, + -1 + )); + parts[parts.length - 1] = lastPart; + } + return parts; +} +function stripTrailingHardlineFromDoc(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_GROUP: + case DOC_TYPE_LINE_SUFFIX: + case DOC_TYPE_LABEL: { + const contents = stripTrailingHardlineFromDoc(doc.contents); + return { + ...doc, + contents + }; + } + case DOC_TYPE_IF_BREAK: + return { + ...doc, + breakContents: stripTrailingHardlineFromDoc(doc.breakContents), + flatContents: stripTrailingHardlineFromDoc(doc.flatContents) + }; + case DOC_TYPE_FILL: + return { + ...doc, + parts: stripTrailingHardlineFromParts(doc.parts) + }; + case DOC_TYPE_ARRAY: + return stripTrailingHardlineFromParts(doc); + case DOC_TYPE_STRING: + return doc.replace(/[\n\r]*$/, ""); + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function stripTrailingHardline(doc) { + return stripTrailingHardlineFromDoc(cleanDoc(doc)); +} +function cleanDocFn(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_FILL: + if (doc.parts.every((part) => part === "")) { + return ""; + } + break; + case DOC_TYPE_GROUP: + if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) { + return ""; + } + if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) { + return doc.contents; + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LINE_SUFFIX: + if (!doc.contents) { + return ""; + } + break; + case DOC_TYPE_IF_BREAK: + if (!doc.flatContents && !doc.breakContents) { + return ""; + } + break; + case DOC_TYPE_ARRAY: { + const parts = []; + for (const part of doc) { + if (!part) { + continue; + } + const [currentPart, ...restParts] = Array.isArray(part) ? part : [part]; + if (typeof currentPart === "string" && typeof at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ) === "string") { + parts[parts.length - 1] += currentPart; + } else { + parts.push(currentPart); + } + parts.push(...restParts); + } + if (parts.length === 0) { + return ""; + } + if (parts.length === 1) { + return parts[0]; + } + return parts; + } + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_LABEL: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function cleanDoc(doc) { + return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc)); +} +function replaceEndOfLine(doc, replacement = literalline) { + return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" ? join(replacement, currentDoc.split("\n")) : currentDoc); +} +function canBreakFn(doc) { + if (doc.type === DOC_TYPE_LINE) { + return true; + } +} +function canBreak(doc) { + return findInDoc(doc, canBreakFn, false); +} +var MODE_BREAK = Symbol("MODE_BREAK"); +var MODE_FLAT = Symbol("MODE_FLAT"); +var CURSOR_PLACEHOLDER = Symbol("cursor"); +function rootIndent() { + return { + value: "", + length: 0, + queue: [] + }; +} +function makeIndent(ind, options) { + return generateInd(ind, { + type: "indent" + }, options); +} +function makeAlign(indent22, widthOrDoc, options) { + if (widthOrDoc === Number.NEGATIVE_INFINITY) { + return indent22.root || rootIndent(); + } + if (widthOrDoc < 0) { + return generateInd(indent22, { + type: "dedent" + }, options); + } + if (!widthOrDoc) { + return indent22; + } + if (widthOrDoc.type === "root") { + return { + ...indent22, + root: indent22 + }; + } + const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign"; + return generateInd(indent22, { + type: alignType, + n: widthOrDoc + }, options); +} +function generateInd(ind, newPart, options) { + const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart]; + let value = ""; + let length = 0; + let lastTabs = 0; + let lastSpaces = 0; + for (const part of queue) { + switch (part.type) { + case "indent": + flush(); + if (options.useTabs) { + addTabs(1); + } else { + addSpaces(options.tabWidth); + } + break; + case "stringAlign": + flush(); + value += part.n; + length += part.n.length; + break; + case "numberAlign": + lastTabs += 1; + lastSpaces += part.n; + break; + default: + throw new Error(`Unexpected type '${part.type}'`); + } + } + flushSpaces(); + return { + ...ind, + value, + length, + queue + }; + function addTabs(count) { + value += " ".repeat(count); + length += options.tabWidth * count; + } + function addSpaces(count) { + value += " ".repeat(count); + length += count; + } + function flush() { + if (options.useTabs) { + flushTabs(); + } else { + flushSpaces(); + } + } + function flushTabs() { + if (lastTabs > 0) { + addTabs(lastTabs); + } + resetLast(); + } + function flushSpaces() { + if (lastSpaces > 0) { + addSpaces(lastSpaces); + } + resetLast(); + } + function resetLast() { + lastTabs = 0; + lastSpaces = 0; + } +} +function trim2(out) { + let trimCount = 0; + let cursorCount = 0; + let outIndex = out.length; + outer: + while (outIndex--) { + const last = out[outIndex]; + if (last === CURSOR_PLACEHOLDER) { + cursorCount++; + continue; + } + if (false) { + throw new Error(`Unexpected value in trim: '${typeof last}'`); + } + for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) { + const char = last[charIndex]; + if (char === " " || char === " ") { + trimCount++; + } else { + out[outIndex] = last.slice(0, charIndex + 1); + break outer; + } + } + } + if (trimCount > 0 || cursorCount > 0) { + out.length = outIndex + 1; + while (cursorCount-- > 0) { + out.push(CURSOR_PLACEHOLDER); + } + } + return trimCount; +} +function fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) { + if (width === Number.POSITIVE_INFINITY) { + return true; + } + let restIdx = restCommands.length; + const cmds = [next]; + const out = []; + while (width >= 0) { + if (cmds.length === 0) { + if (restIdx === 0) { + return true; + } + cmds.push(restCommands[--restIdx]); + continue; + } + const { + mode, + doc + } = cmds.pop(); + switch (get_doc_type_default(doc)) { + case DOC_TYPE_STRING: + out.push(doc); + width -= get_string_width_default(doc); + break; + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = getDocParts(doc); + for (let i = parts.length - 1; i >= 0; i--) { + cmds.push({ + mode, + doc: parts[i] + }); + } + break; + } + case DOC_TYPE_INDENT: + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + cmds.push({ + mode, + doc: doc.contents + }); + break; + case DOC_TYPE_TRIM: + width += trim2(out); + break; + case DOC_TYPE_GROUP: { + if (mustBeFlat && doc.break) { + return false; + } + const groupMode = doc.break ? MODE_BREAK : mode; + const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default( + /* isOptionalObject*/ + false, + doc.expandedStates, + -1 + ) : doc.contents; + cmds.push({ + mode: groupMode, + doc: contents + }); + break; + } + case DOC_TYPE_IF_BREAK: { + const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode; + const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents; + if (contents) { + cmds.push({ + mode, + doc: contents + }); + } + break; + } + case DOC_TYPE_LINE: + if (mode === MODE_BREAK || doc.hard) { + return true; + } + if (!doc.soft) { + out.push(" "); + width--; + } + break; + case DOC_TYPE_LINE_SUFFIX: + hasLineSuffix = true; + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (hasLineSuffix) { + return false; + } + break; + } + } + return false; +} +function printDocToString(doc, options) { + const groupModeMap = {}; + const width = options.printWidth; + const newLine = convertEndOfLineToChars(options.endOfLine); + let pos = 0; + const cmds = [{ + ind: rootIndent(), + mode: MODE_BREAK, + doc + }]; + const out = []; + let shouldRemeasure = false; + const lineSuffix22 = []; + let printedCursorCount = 0; + propagateBreaks(doc); + while (cmds.length > 0) { + const { + ind, + mode, + doc: doc2 + } = cmds.pop(); + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_STRING: { + const formatted = newLine !== "\n" ? string_replace_all_default( + /* isOptionalObject*/ + false, + doc2, + "\n", + newLine + ) : doc2; + out.push(formatted); + if (cmds.length > 0) { + pos += get_string_width_default(formatted); + } + break; + } + case DOC_TYPE_ARRAY: + for (let i = doc2.length - 1; i >= 0; i--) { + cmds.push({ + ind, + mode, + doc: doc2[i] + }); + } + break; + case DOC_TYPE_CURSOR: + if (printedCursorCount >= 2) { + throw new Error("There are too many 'cursor' in doc."); + } + out.push(CURSOR_PLACEHOLDER); + printedCursorCount++; + break; + case DOC_TYPE_INDENT: + cmds.push({ + ind: makeIndent(ind, options), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_ALIGN: + cmds.push({ + ind: makeAlign(ind, doc2.n, options), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_TRIM: + pos -= trim2(out); + break; + case DOC_TYPE_GROUP: + switch (mode) { + case MODE_FLAT: + if (!shouldRemeasure) { + cmds.push({ + ind, + mode: doc2.break ? MODE_BREAK : MODE_FLAT, + doc: doc2.contents + }); + break; + } + case MODE_BREAK: { + shouldRemeasure = false; + const next = { + ind, + mode: MODE_FLAT, + doc: doc2.contents + }; + const rem = width - pos; + const hasLineSuffix = lineSuffix22.length > 0; + if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(next); + } else { + if (doc2.expandedStates) { + const mostExpanded = at_default( + /* isOptionalObject*/ + false, + doc2.expandedStates, + -1 + ); + if (doc2.break) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + for (let i = 1; i < doc2.expandedStates.length + 1; i++) { + if (i >= doc2.expandedStates.length) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + const state = doc2.expandedStates[i]; + const cmd = { + ind, + mode: MODE_FLAT, + doc: state + }; + if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(cmd); + break; + } + } + } + } + } else { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: doc2.contents + }); + } + } + break; + } + } + if (doc2.id) { + groupModeMap[doc2.id] = at_default( + /* isOptionalObject*/ + false, + cmds, + -1 + ).mode; + } + break; + case DOC_TYPE_FILL: { + const rem = width - pos; + const { + parts + } = doc2; + if (parts.length === 0) { + break; + } + const [content, whitespace2] = parts; + const contentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: content + }; + const contentBreakCmd = { + ind, + mode: MODE_BREAK, + doc: content + }; + const contentFits = fits(contentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (parts.length === 1) { + if (contentFits) { + cmds.push(contentFlatCmd); + } else { + cmds.push(contentBreakCmd); + } + break; + } + const whitespaceFlatCmd = { + ind, + mode: MODE_FLAT, + doc: whitespace2 + }; + const whitespaceBreakCmd = { + ind, + mode: MODE_BREAK, + doc: whitespace2 + }; + if (parts.length === 2) { + if (contentFits) { + cmds.push(whitespaceFlatCmd, contentFlatCmd); + } else { + cmds.push(whitespaceBreakCmd, contentBreakCmd); + } + break; + } + parts.splice(0, 2); + const remainingCmd = { + ind, + mode, + doc: fill(parts) + }; + const secondContent = parts[0]; + const firstAndSecondContentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: [content, whitespace2, secondContent] + }; + const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (firstAndSecondContentFits) { + cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd); + } else if (contentFits) { + cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd); + } else { + cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd); + } + break; + } + case DOC_TYPE_IF_BREAK: + case DOC_TYPE_INDENT_IF_BREAK: { + const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode; + if (groupMode === MODE_BREAK) { + const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents); + if (breakContents) { + cmds.push({ + ind, + mode, + doc: breakContents + }); + } + } + if (groupMode === MODE_FLAT) { + const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents; + if (flatContents) { + cmds.push({ + ind, + mode, + doc: flatContents + }); + } + } + break; + } + case DOC_TYPE_LINE_SUFFIX: + lineSuffix22.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: hardlineWithoutBreakParent + }); + } + break; + case DOC_TYPE_LINE: + switch (mode) { + case MODE_FLAT: + if (!doc2.hard) { + if (!doc2.soft) { + out.push(" "); + pos += 1; + } + break; + } else { + shouldRemeasure = true; + } + case MODE_BREAK: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: doc2 + }, ...lineSuffix22.reverse()); + lineSuffix22.length = 0; + break; + } + if (doc2.literal) { + if (ind.root) { + out.push(newLine, ind.root.value); + pos = ind.root.length; + } else { + out.push(newLine); + pos = 0; + } + } else { + pos -= trim2(out); + out.push(newLine + ind.value); + pos = ind.length; + } + break; + } + break; + case DOC_TYPE_LABEL: + cmds.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + if (cmds.length === 0 && lineSuffix22.length > 0) { + cmds.push(...lineSuffix22.reverse()); + lineSuffix22.length = 0; + } + } + const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER); + if (cursorPlaceholderIndex !== -1) { + const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1); + const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(""); + const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(""); + const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(""); + return { + formatted: beforeCursor + aroundCursor + afterCursor, + cursorNodeStart: beforeCursor.length, + cursorNodeText: aroundCursor + }; + } + return { + formatted: out.join("") + }; +} +var builders = { + join, + line, + softline, + hardline, + literalline, + group, + conditionalGroup, + fill, + lineSuffix, + lineSuffixBoundary, + cursor, + breakParent, + ifBreak, + trim, + indent, + indentIfBreak, + align, + addAlignmentToDoc, + markAsRoot, + dedentToRoot, + dedent, + hardlineWithoutBreakParent, + literallineWithoutBreakParent, + label, + // TODO: Remove this in v4 + concat: (parts) => parts +}; +var printer = { printDocToString }; +var utils = { + willBreak, + traverseDoc: traverse_doc_default, + findInDoc, + mapDoc, + removeLines, + stripTrailingHardline, + replaceEndOfLine, + canBreak +}; + +// ../unified-latex-util-print-raw/dist/index.js +var linebreak = Symbol("linebreak"); +var ESCAPE = "\\"; +function _printRaw(node) { + if (typeof node === "string") { + return [node]; + } + if (Array.isArray(node)) { + return [].concat( + ...node.map((n) => _printRaw(n)) + ); + } + let argsString, escape; + switch (node.type) { + case "root": + return _printRaw(node.content); + case "argument": + return [node.openMark, ..._printRaw(node.content), node.closeMark]; + case "comment": + var suffix = node.suffixParbreak ? "" : linebreak; + var leadingWhitespace = ""; + if (node.sameline && node.leadingWhitespace) { + leadingWhitespace = " "; + } + if (node.sameline) { + return [ + leadingWhitespace, + "%", + ..._printRaw(node.content), + suffix + ]; + } + return [linebreak, "%", ..._printRaw(node.content), suffix]; + case "environment": + case "mathenv": + case "verbatim": + var env = _printRaw(node.env); + var envStart = [ESCAPE + "begin{", ...env, "}"]; + var envEnd = [ESCAPE + "end{", ...env, "}"]; + argsString = node.args == null ? [] : _printRaw(node.args); + return [ + ...envStart, + ...argsString, + ..._printRaw(node.content), + ...envEnd + ]; + case "displaymath": + return [ESCAPE + "[", ..._printRaw(node.content), ESCAPE + "]"]; + case "group": + return ["{", ..._printRaw(node.content), "}"]; + case "inlinemath": + return ["$", ..._printRaw(node.content), "$"]; + case "macro": + argsString = node.args == null ? [] : _printRaw(node.args); + escape = node.escapeToken == null ? ESCAPE : node.escapeToken; + return [escape, ..._printRaw(node.content), ...argsString]; + case "parbreak": + return [linebreak, linebreak]; + case "string": + return [node.content]; + case "verb": + return [ + ESCAPE, + node.env, + node.escape, + ..._printRaw(node.content), + node.escape + ]; + case "whitespace": + return [" "]; + default: + console.warn( + "Cannot find render for node ", + node, + `(of type ${typeof node})` + ); + return ["" + node]; + } +} +function printRaw(node, options) { + const asArray = options != null ? options.asArray : false; + const printedTokens = _printRaw(node); + if (asArray) { + return printedTokens; + } + return printedTokens.map((x) => x === linebreak ? "\n" : x).join(""); +} + +// ../unified-latex-util-match/dist/index.js +function createMacroMatcher(macros17) { + const macrosHash = Array.isArray(macros17) ? macros17.length > 0 ? typeof macros17[0] === "string" ? Object.fromEntries( + macros17.map((macro2) => { + if (typeof macro2 !== "string") { + throw new Error("Wrong branch of map function"); + } + return [macro2, {}]; + }) + ) : Object.fromEntries( + macros17.map((macro2) => { + if (typeof macro2 === "string") { + throw new Error("Wrong branch of map function"); + } + if (macro2.escapeToken != null) { + return [ + macro2.content, + { escapeToken: macro2.escapeToken } + ]; + } + return [macro2.content, {}]; + }) + ) : {} : macros17; + return function matchAgainstMacros(node) { + if (node == null || node.type !== "macro") { + return false; + } + const spec = macrosHash[node.content]; + if (!spec) { + return false; + } + if (typeof spec === "object" && "escapeToken" in spec) { + return spec.escapeToken == null || spec.escapeToken === node.escapeToken; + } + return true; + }; +} +function createEnvironmentMatcher(macros17) { + const environmentsHash = Array.isArray(macros17) ? Object.fromEntries( + macros17.map((str) => { + return [str, {}]; + }) + ) : macros17; + return function matchAgainstEnvironments(node) { + if (!match.anyEnvironment(node)) { + return false; + } + const envName = printRaw(node.env); + const spec = environmentsHash[envName]; + if (!spec) { + return false; + } + return true; + }; +} +var match = { + macro(node, macroName) { + if (node == null) { + return false; + } + return node.type === "macro" && (macroName == null || node.content === macroName); + }, + anyMacro(node) { + return match.macro(node); + }, + environment(node, envName) { + if (node == null) { + return false; + } + return (node.type === "environment" || node.type === "mathenv") && (envName == null || printRaw(node.env) === envName); + }, + anyEnvironment(node) { + return match.environment(node); + }, + comment(node) { + if (node == null) { + return false; + } + return node.type === "comment"; + }, + parbreak(node) { + if (node == null) { + return false; + } + return node.type === "parbreak"; + }, + whitespace(node) { + if (node == null) { + return false; + } + return node.type === "whitespace"; + }, + /** + * Matches whitespace or a comment with leading whitespace. + */ + whitespaceLike(node) { + if (node == null) { + return false; + } + return node.type === "whitespace" || node.type === "whitespace" && node.leadingWhitespace === true; + }, + string(node, value) { + if (node == null) { + return false; + } + return node.type === "string" && (value == null || node.content === value); + }, + anyString(node) { + return match.string(node); + }, + group(node) { + if (node == null) { + return false; + } + return node.type === "group"; + }, + argument(node) { + if (node == null) { + return false; + } + return node.type === "argument"; + }, + blankArgument(node) { + if (!match.argument(node)) { + return false; + } + return node.openMark === "" && node.closeMark === "" && node.content.length === 0; + }, + math(node) { + if (node == null) { + return false; + } + return node.type === "displaymath" || node.type === "inlinemath"; + }, + createMacroMatcher, + createEnvironmentMatcher +}; +var { + anyEnvironment, + anyMacro, + anyString, + argument, + blankArgument, + comment, + environment, + group: group2, + macro, + math, + parbreak, + string, + whitespace +} = match; + +// libs/printer/common.ts +function formatEnvSurround(node) { + const env = printRaw(node.env); + return { + envName: env, + start: ESCAPE2 + "begin{" + env + "}", + end: ESCAPE2 + "end{" + env + "}" + }; +} +function isLineType(elm) { + if (elm == null || typeof elm === "string") { + return false; + } + if (Array.isArray(elm)) { + return isLineType(elm[0]); + } + if (elm.type === "concat") { + return isLineType(elm.parts); + } + return elm.type === "line"; +} +function joinWithSoftline(arr) { + if (arr.length === 0 || arr.length === 1) { + return arr; + } + const ret = [arr[0]]; + for (let i = 1; i < arr.length; i++) { + const prevNode = arr[i - 1]; + const nextNode = arr[i]; + if (!isLineType(prevNode) && !isLineType(nextNode)) { + ret.push(softline2); + } + ret.push(nextNode); + } + return ret; +} +function getNodeInfo(node, options) { + if (!node) { + return { renderInfo: {} }; + } + const renderInfo = node._renderInfo || {}; + const previousNode = options.referenceMap && options.referenceMap.getPreviousNode(node); + const nextNode = options.referenceMap && options.referenceMap.getNextNode(node); + const renderCache = options.referenceMap && options.referenceMap.getRenderCache(node); + return { + renderInfo, + renderCache, + previousNode, + nextNode, + referenceMap: options.referenceMap + }; +} +var ESCAPE2 = "\\"; +var { + group: group3, + fill: fill2, + ifBreak: ifBreak2, + line: line2, + softline: softline2, + hardline: hardline2, + lineSuffix: lineSuffix2, + lineSuffixBoundary: lineSuffixBoundary2, + breakParent: breakParent2, + indent: indent2, + markAsRoot: markAsRoot2, + join: join2 +} = builders; +function formatDocArray(nodes, docArray, options) { + const ret = []; + for (let i = 0; i < nodes.length; i++) { + const rawNode = nodes[i]; + const printedNode = docArray[i]; + const { renderInfo, referenceMap, previousNode, nextNode } = getNodeInfo(rawNode, options); + const renderCache = referenceMap && referenceMap.getRenderCache(rawNode); + switch (rawNode.type) { + case "comment": + if (!rawNode.sameline && previousNode && !match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + ret.push(printedNode); + if (nextNode && !rawNode.suffixParbreak) { + ret.push(hardline2); + } + break; + case "environment": + case "displaymath": + case "mathenv": + if (previousNode && (previousNode == null ? void 0 : previousNode.type) !== "parbreak") { + if (ret[ret.length - 1] === line2) { + ret.pop(); + } + if (ret[ret.length - 1] !== hardline2) { + ret.push(hardline2); + } + } + ret.push(printedNode); + if ((nextNode == null ? void 0 : nextNode.type) === "whitespace") { + ret.push(hardline2); + i++; + } + break; + case "macro": + if (renderInfo.breakBefore || renderInfo.breakAround) { + if (previousNode) { + if (ret[ret.length - 1] === line2 || ret[ret.length - 1] === hardline2) { + ret.pop(); + ret.push(hardline2); + } else if (!match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + } + } + if (renderInfo.inParMode && !renderInfo.hangingIndent && renderCache) { + ret.push( + renderCache.content, + ...renderCache.rawArgs || [] + ); + } else { + ret.push(printedNode); + } + if (renderInfo.breakAfter || renderInfo.breakAround) { + if (nextNode) { + if (match.whitespace(nextNode)) { + ret.push(hardline2); + i++; + } else if (match.parbreak(nextNode)) { + } else if (!match.comment(nextNode)) { + ret.push(hardline2); + } + } + } + break; + case "parbreak": + ret.push(hardline2, hardline2); + break; + default: + ret.push(printedNode); + break; + } + } + return ret; +} + +// libs/zip.ts +function zip(array1, array2) { + const ret = []; + const len = Math.min(array1.length, array2.length); + for (let i = 0; i < len; i++) { + ret.push([array1[i], array2[i]]); + } + return ret; +} + +// libs/printer/macro.ts +function printMacro(path2, print, options) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const content = (node.escapeToken != null ? node.escapeToken : ESCAPE2) + node.content; + const args = node.args ? path2.map(print, "args") : []; + const rawArgs = []; + for (const [arg2, printedArg] of zip(node.args || [], args)) { + const renderCache = referenceMap && referenceMap.getRenderCache(arg2); + if (renderInfo.inParMode && renderCache) { + rawArgs.push(...renderCache); + } else { + rawArgs.push(printedArg); + } + } + if (referenceMap) { + referenceMap.setRenderCache(node, { rawArgs, content }); + } + if (renderInfo.hangingIndent) { + return indent2(fill2([content, ...rawArgs])); + } + return group3([content, ...rawArgs]); +} + +// ../unified-latex-util-visit/dist/index.js +function listMathChildren(node) { + const NULL_RETURN = { enter: [], leave: [] }; + if (Array.isArray(node)) { + return NULL_RETURN; + } + if (match.math(node)) { + return { enter: ["content"], leave: [] }; + } + const renderInfo = node._renderInfo || {}; + if (renderInfo.inMathMode == null) { + return NULL_RETURN; + } + if (match.macro(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["args"], leave: [] }; + } else if (renderInfo.inMathMode === false) { + return { enter: [], leave: ["args"] }; + } + } + if (match.environment(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["content"], leave: [] }; + } else { + return { enter: [], leave: ["content"] }; + } + } + return NULL_RETURN; +} +var CONTINUE = Symbol("continue"); +var SKIP = Symbol("skip"); +var EXIT = Symbol("exit"); +var DEFAULT_CONTEXT = { + inMathMode: false, + hasMathModeAncestor: false +}; +function visit(tree, visitor, options) { + const { + startingContext = DEFAULT_CONTEXT, + test = () => true, + includeArrays = false + } = options || {}; + let enter; + let leave; + if (typeof visitor === "function") { + enter = visitor; + } else if (visitor && typeof visitor === "object") { + enter = visitor.enter; + leave = visitor.leave; + } + walk(tree, { + key: void 0, + index: void 0, + parents: [], + containingArray: void 0, + context: { ...startingContext } + }); + function walk(node, { key, index: index2, parents, context, containingArray }) { + const nodePassesTest = includeArrays ? test(node, { key, index: index2, parents, context, containingArray }) : !Array.isArray(node) && test(node, { key, index: index2, parents, context, containingArray }); + const result = enter && nodePassesTest ? toResult( + enter(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : [CONTINUE]; + if (result[0] === EXIT) { + return result; + } + if (result[0] === SKIP) { + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : result; + } + if (Array.isArray(node)) { + for (let index22 = 0; index22 > -1 && index22 < node.length; index22++) { + const item = node[index22]; + const result2 = walk(item, { + key, + index: index22, + parents, + context, + containingArray: node + }); + if (result2[0] === EXIT) { + return result2; + } + if (typeof result2[1] === "number") { + index22 = result2[1] - 1; + } + } + } else { + let childProps = ["content", "args"]; + switch (node.type) { + case "macro": + childProps = ["args"]; + break; + case "comment": + case "string": + case "verb": + case "verbatim": + childProps = []; + break; + default: + break; + } + const mathModeProps = listMathChildren(node); + for (const key2 of childProps) { + const value = node[key2]; + const grandparents = [node].concat(parents); + if (value == null) { + continue; + } + const newContext = { ...context }; + if (mathModeProps.enter.includes(key2)) { + newContext.inMathMode = true; + newContext.hasMathModeAncestor = true; + } else if (mathModeProps.leave.includes(key2)) { + newContext.inMathMode = false; + } + const result2 = walk(value, { + key: key2, + index: void 0, + parents: grandparents, + context: newContext, + containingArray: void 0 + }); + if (result2[0] === EXIT) { + return result2; + } + } + } + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : result; + } +} +function toResult(value) { + if (value == null) { + return [CONTINUE]; + } + if (Array.isArray(value)) { + return value; + } + if (typeof value === "number") { + return [CONTINUE, value]; + } + return [value]; +} + +// ../unified-latex-util-trim/dist/index.js +function trim3(nodes) { + if (!Array.isArray(nodes)) { + console.warn("Trying to trim a non-array ast", nodes); + return nodes; + } + const { trimmedStart } = trimStart(nodes); + const { trimmedEnd } = trimEnd(nodes); + return { trimmedStart, trimmedEnd }; +} +function trimStart(nodes) { + const { start } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(0, start); + for (const leadingToken of nodes) { + if (!match.comment(leadingToken)) { + break; + } + if (leadingToken.leadingWhitespace || leadingToken.sameline) { + leadingToken.leadingWhitespace = false; + delete leadingToken.position; + } + if (start > 0 && leadingToken.sameline) { + leadingToken.sameline = false; + delete leadingToken.position; + } + } + return { trimmedStart: start }; +} +function trimEnd(nodes) { + const { end } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(nodes.length - end, end); + for (let i = nodes.length - 1; i >= 0; i--) { + const trailingToken = nodes[i]; + if (!match.comment(trailingToken)) { + break; + } + delete trailingToken.suffixParbreak; + if (match.comment(trailingToken) && trailingToken.leadingWhitespace && !trailingToken.sameline) { + trailingToken.leadingWhitespace = false; + delete trailingToken.position; + } + } + return { trimmedEnd: end }; +} +function amountOfLeadingAndTrailingWhitespace(ast) { + let start = 0; + let end = 0; + for (const node of ast) { + if (match.whitespace(node) || match.parbreak(node)) { + start++; + } else { + break; + } + } + if (start === ast.length) { + return { start, end: 0 }; + } + for (let i = ast.length - 1; i >= 0; i--) { + const node = ast[i]; + if (match.whitespace(node) || match.parbreak(node)) { + end++; + } else { + break; + } + } + return { start, end }; +} +var unifiedLatexTrimEnvironmentContents = function unifiedLatexTrimEnvironmentContents2() { + return (tree) => { + visit(tree, (node) => { + if (!(match.math(node) || match.anyEnvironment(node))) { + return; + } + let firstNode = node.content[0]; + if (match.comment(firstNode) && firstNode.sameline) { + firstNode.suffixParbreak = false; + trimEnd(node.content); + const { trimmedStart } = trimStart(node.content.slice(1)); + node.content.splice(1, trimmedStart); + } else { + trim3(node.content); + } + }); + }; +}; +var unifiedLatexTrimRoot = function unifiedLatexTrimRoot2() { + return (tree) => { + trim3(tree.content); + }; +}; + +// ../unified-latex-util-pegjs/dist/index.js +function decorateArrayForPegjs(array) { + array.charAt = function(i) { + return this[i]; + }; + array.charCodeAt = () => 0; + array.substring = function(i, j) { + return this.slice(i, j); + }; + array.replace = function(a, b) { + const ret = JSON.stringify(this); + return ret.replace(a, b); + }; + return array; +} +var latex_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath }; + var peg$startRuleFunction = peg$parsedocument; + var peg$c0 = "%"; + var peg$c1 = "."; + var peg$c2 = "verb*"; + var peg$c3 = "verb"; + var peg$c4 = "["; + var peg$c5 = "]"; + var peg$c6 = "lstinline"; + var peg$c7 = "mintinline"; + var peg$c8 = "mint"; + var peg$c9 = "minted"; + var peg$c10 = "verbatim*"; + var peg$c11 = "verbatim"; + var peg$c12 = "filecontents*"; + var peg$c13 = "filecontents"; + var peg$c14 = "comment"; + var peg$c15 = "lstlisting"; + var peg$c16 = "("; + var peg$c17 = ")"; + var peg$c18 = "begin"; + var peg$c19 = "end"; + var peg$c20 = "equation*"; + var peg$c21 = "equation"; + var peg$c22 = "align*"; + var peg$c23 = "align"; + var peg$c24 = "alignat*"; + var peg$c25 = "alignat"; + var peg$c26 = "gather*"; + var peg$c27 = "gather"; + var peg$c28 = "multline*"; + var peg$c29 = "multline"; + var peg$c30 = "flalign*"; + var peg$c31 = "flalign"; + var peg$c32 = "split"; + var peg$c33 = "math"; + var peg$c34 = "displaymath"; + var peg$c35 = "\\"; + var peg$c36 = "{"; + var peg$c37 = "}"; + var peg$c38 = "$"; + var peg$c39 = "&"; + var peg$c40 = "\r"; + var peg$c41 = "\n"; + var peg$c42 = "\r\n"; + var peg$c43 = "#"; + var peg$c44 = "^"; + var peg$c45 = "_"; + var peg$c46 = "\0"; + var peg$r0 = /^[^ \t\n\r]/; + var peg$r1 = /^[ \t]/; + var peg$r2 = /^[a-zA-Z]/; + var peg$r3 = /^[0-9]/; + var peg$r4 = /^[.,;:\-*\/()!?=+<>[\]`'"~]/; + var peg$e0 = peg$otherExpectation("document"); + var peg$e1 = peg$otherExpectation("math"); + var peg$e2 = peg$otherExpectation("token"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("parbreak"); + var peg$e5 = peg$otherExpectation("math token"); + var peg$e6 = peg$otherExpectation("nonchar token"); + var peg$e7 = peg$literalExpectation("%", false); + var peg$e8 = peg$otherExpectation("whitespace"); + var peg$e9 = peg$otherExpectation("number"); + var peg$e10 = peg$literalExpectation(".", false); + var peg$e11 = peg$otherExpectation("special macro"); + var peg$e12 = peg$literalExpectation("verb*", false); + var peg$e13 = peg$literalExpectation("verb", false); + var peg$e14 = peg$literalExpectation("[", false); + var peg$e15 = peg$literalExpectation("]", false); + var peg$e16 = peg$classExpectation([" ", " ", "\n", "\r"], true, false); + var peg$e17 = peg$otherExpectation("verbatim listings"); + var peg$e18 = peg$literalExpectation("lstinline", false); + var peg$e19 = peg$otherExpectation("verbatim minted"); + var peg$e20 = peg$literalExpectation("mintinline", false); + var peg$e21 = peg$literalExpectation("mint", false); + var peg$e22 = peg$otherExpectation("verbatim minted environment"); + var peg$e23 = peg$literalExpectation("minted", false); + var peg$e24 = peg$otherExpectation("verbatim environment"); + var peg$e25 = peg$literalExpectation("verbatim*", false); + var peg$e26 = peg$literalExpectation("verbatim", false); + var peg$e27 = peg$literalExpectation("filecontents*", false); + var peg$e28 = peg$literalExpectation("filecontents", false); + var peg$e29 = peg$literalExpectation("comment", false); + var peg$e30 = peg$literalExpectation("lstlisting", false); + var peg$e31 = peg$otherExpectation("macro"); + var peg$e32 = peg$otherExpectation("group"); + var peg$e33 = peg$otherExpectation("environment"); + var peg$e34 = peg$otherExpectation("math environment"); + var peg$e35 = peg$otherExpectation("math group"); + var peg$e36 = peg$literalExpectation("(", false); + var peg$e37 = peg$literalExpectation(")", false); + var peg$e38 = peg$literalExpectation("begin", false); + var peg$e39 = peg$literalExpectation("end", false); + var peg$e40 = peg$literalExpectation("equation*", false); + var peg$e41 = peg$literalExpectation("equation", false); + var peg$e42 = peg$literalExpectation("align*", false); + var peg$e43 = peg$literalExpectation("align", false); + var peg$e44 = peg$literalExpectation("alignat*", false); + var peg$e45 = peg$literalExpectation("alignat", false); + var peg$e46 = peg$literalExpectation("gather*", false); + var peg$e47 = peg$literalExpectation("gather", false); + var peg$e48 = peg$literalExpectation("multline*", false); + var peg$e49 = peg$literalExpectation("multline", false); + var peg$e50 = peg$literalExpectation("flalign*", false); + var peg$e51 = peg$literalExpectation("flalign", false); + var peg$e52 = peg$literalExpectation("split", false); + var peg$e53 = peg$literalExpectation("math", false); + var peg$e54 = peg$literalExpectation("displaymath", false); + var peg$e55 = peg$otherExpectation("escape"); + var peg$e56 = peg$literalExpectation("\\", false); + var peg$e57 = peg$literalExpectation("{", false); + var peg$e58 = peg$literalExpectation("}", false); + var peg$e59 = peg$literalExpectation("$", false); + var peg$e60 = peg$literalExpectation("&", false); + var peg$e61 = peg$otherExpectation("newline"); + var peg$e62 = peg$literalExpectation("\r", false); + var peg$e63 = peg$literalExpectation("\n", false); + var peg$e64 = peg$literalExpectation("\r\n", false); + var peg$e65 = peg$literalExpectation("#", false); + var peg$e66 = peg$literalExpectation("^", false); + var peg$e67 = peg$literalExpectation("_", false); + var peg$e68 = peg$literalExpectation("\0", false); + var peg$e69 = peg$classExpectation([" ", " "], false, false); + var peg$e70 = peg$otherExpectation("letter"); + var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false); + var peg$e72 = peg$otherExpectation("digit"); + var peg$e73 = peg$classExpectation([["0", "9"]], false, false); + var peg$e74 = peg$otherExpectation("punctuation"); + var peg$e75 = peg$classExpectation([".", ",", ";", ":", "-", "*", "/", "(", ")", "!", "?", "=", "+", "<", ">", "[", "]", "`", "'", '"', "~"], false, false); + var peg$e76 = peg$otherExpectation("full comment"); + var peg$e77 = peg$otherExpectation("comment"); + var peg$f0 = function(content) { + return createNode("root", { content: content.flatMap((x) => x) }); + }; + var peg$f1 = function(t) { + return t; + }; + var peg$f2 = function(eq) { + return createNode("inlinemath", { content: eq.flatMap((x) => x) }); + }; + var peg$f3 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f4 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f5 = function() { + return createNode("parbreak"); + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(x) { + return x; + }; + var peg$f8 = function() { + return createNode("macro", { content: "^", escapeToken: "" }); + }; + var peg$f9 = function() { + return createNode("macro", { content: "_", escapeToken: "" }); + }; + var peg$f10 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f11 = function() { + return createNode("whitespace"); + }; + var peg$f12 = function(a, b) { + return a.join("") + "." + b.join(""); + }; + var peg$f13 = function(b) { + return "." + b.join(""); + }; + var peg$f14 = function(a) { + return a.join("") + "."; + }; + var peg$f15 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f16 = function(env, e, end) { + return end == e; + }; + var peg$f17 = function(env, e, x) { + return x; + }; + var peg$f18 = function(env, e, x, end) { + return end == e; + }; + var peg$f19 = function(env, e, x) { + return createNode("verb", { + env, + escape: e, + content: x.join("") + }); + }; + var peg$f20 = function(x) { + return x; + }; + var peg$f21 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f22 = function(x) { + return x; + }; + var peg$f23 = function(x) { + return createNode("inlinemath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f24 = function(x) { + return x; + }; + var peg$f25 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f26 = function(end) { + return end.type === "string" && end.content === "]"; + }; + var peg$f27 = function(x) { + return x; + }; + var peg$f28 = function(o) { + return [ + createNode("string", { content: "[" }), + ...o, + createNode("string", { content: "]" }) + ]; + }; + var peg$f29 = function(x) { + return x; + }; + var peg$f30 = function(v) { + return createNode("group", { + content: createNode("string", { content: v.join("") }) + }); + }; + var peg$f31 = function(d, end) { + return end == d; + }; + var peg$f32 = function(d, x) { + return x; + }; + var peg$f33 = function(d, v, end) { + return end == d; + }; + var peg$f34 = function(d, v) { + return [ + createNode("string", { content: d }), + createNode("string", { content: v.join("") }), + createNode("string", { content: d }) + ]; + }; + var peg$f35 = function(macro2, option, verbatim) { + return [ + createNode("macro", { content: macro2 }), + ...option || [], + ...[].concat(verbatim) + ]; + }; + var peg$f36 = function(macro2, option, language, verbatim) { + return [ + createNode("macro", { content: macro2 }), + ...option || [], + language, + ...[].concat(verbatim) + ]; + }; + var peg$f37 = function(env, lang, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f38 = function(env, lang, x) { + return x; + }; + var peg$f39 = function(env, lang, body) { + return createNode("verbatim", { + env: `${env}{${lang.content.content}}`, + content: body.join("") + }); + }; + var peg$f40 = function(env, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f41 = function(env, x) { + return x; + }; + var peg$f42 = function(env, body) { + return createNode("verbatim", { + env, + content: body.join("") + }); + }; + var peg$f43 = function(n) { + return n.join(""); + }; + var peg$f44 = function(n) { + return n; + }; + var peg$f45 = function(m) { + return createNode("macro", { content: m }); + }; + var peg$f46 = function(c) { + return c; + }; + var peg$f47 = function(x) { + return createNode("group", { content: x.flatMap((x2) => x2) }); + }; + var peg$f48 = function(g) { + return text().slice(1, -1); + }; + var peg$f49 = function(env, env_comment, end_env) { + return compare_env(env, end_env); + }; + var peg$f50 = function(env, env_comment, x) { + return x; + }; + var peg$f51 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("environment", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f52 = function(env, env_comment, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f53 = function(env, env_comment, x) { + return x; + }; + var peg$f54 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("mathenv", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f55 = function(c) { + return c; + }; + var peg$f56 = function(x) { + return createNode("group", { content: x.flatMap((x2) => x2) }); + }; + var peg$f57 = function(e) { + return createNode("string", { content: e }); + }; + var peg$f58 = function() { + return createNode("string", { content: "\\" }); + }; + var peg$f59 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f60 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f61 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f62 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f63 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f64 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f65 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f66 = function() { + return " "; + }; + var peg$f67 = function(p) { + return createNode("string", { content: p }); + }; + var peg$f68 = function(leading_sp, comment2) { + return createNode("comment", { + ...comment2, + sameline: false, + leadingWhitespace: leading_sp.length > 0 + }); + }; + var peg$f69 = function(spaces, x) { + return createNode("comment", { + ...x, + sameline: true, + leadingWhitespace: spaces.length > 0 + }); + }; + var peg$f70 = function(c) { + return c; + }; + var peg$f71 = function(c) { + return { content: c.join(""), suffixParbreak: true }; + }; + var peg$f72 = function(c) { + return c; + }; + var peg$f73 = function(c) { + return { content: c.join("") }; + }; + var peg$f74 = function() { + var loc = location(); + return loc.start.column === 1; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsedocument() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + peg$savedPos = s0; + s1 = peg$f0(s1); + s0 = s1; + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + return s0; + } + function peg$parsemath() { + var s0, s1; + peg$silentFails++; + s0 = []; + s1 = peg$parsemath_token(); + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsemath_token(); + } + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsegroup(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_shift(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parseparbreak(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsenumber(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f3(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f4(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsemath_token() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsealignment_tab(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesuperscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f8(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesubscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsenonchar_token() { + var s0, s1; + peg$silentFails++; + s0 = peg$parseescape(); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parsenl(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsesp(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$parseEOF(); + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsenl(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsecomment_start(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsenl(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = []; + s2 = peg$parsesp(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + } else { + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f11(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parsenum(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parsenum(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f12(s2, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsenum(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenum(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f13(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f14(s2); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f15(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsespecial_macro() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c2) { + s2 = peg$c2; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c3) { + s2 = peg$c3; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f18(s2, s3, s4, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f19(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_listings(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_minted(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_environment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_display_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_display_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_inline_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_inline_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = peg$parsemath_shift(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s4 = peg$parsemath_shift(); + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_shift(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemath_environment(); + if (s0 === peg$FAILED) { + s0 = peg$parseenvironment(); + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsesquare_bracket_argument() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_group() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_delimited_by_char() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (peg$r0.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$f33(s1, s2, s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f34(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_listings() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c6) { + s2 = peg$c6; + peg$currPos += 9; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseverbatim_group(); + if (s4 === peg$FAILED) { + s4 = peg$parseverbatim_delimited_by_char(); + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f35(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parseverbatim_minted() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c7) { + s2 = peg$c7; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c8) { + s2 = peg$c8; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s5 = peg$parseverbatim_group(); + if (s5 === peg$FAILED) { + s5 = peg$parseverbatim_delimited_by_char(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f36(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parseverbatim_minted_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c9) { + s3 = peg$c9; + peg$currPos += 6; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f37(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f38(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f37(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f38(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s7 = peg$parseend_env(); + if (s7 !== peg$FAILED) { + s8 = peg$parsebegin_group(); + if (s8 !== peg$FAILED) { + s9 = peg$parseverbatim_env_name(); + if (s9 !== peg$FAILED) { + s10 = peg$parseend_group(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f39(s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + return s0; + } + function peg$parseverbatim_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parseverbatim_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$currPos; + s9 = peg$parseend_env(); + if (s9 !== peg$FAILED) { + s10 = peg$parsegroup(); + if (s10 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s11 = peg$f40(s3, s10); + if (s11) { + s11 = void 0; + } else { + s11 = peg$FAILED; + } + if (s11 !== peg$FAILED) { + s9 = [s9, s10, s11]; + s8 = s9; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = s6; + s6 = peg$f41(s3, s8); + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$currPos; + s9 = peg$parseend_env(); + if (s9 !== peg$FAILED) { + s10 = peg$parsegroup(); + if (s10 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s11 = peg$f40(s3, s10); + if (s11) { + s11 = void 0; + } else { + s11 = peg$FAILED; + } + if (s11 !== peg$FAILED) { + s9 = [s9, s10, s11]; + s8 = s9; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = s6; + s6 = peg$f41(s3, s8); + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseend_env(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebegin_group(); + if (s7 !== peg$FAILED) { + s8 = peg$parseverbatim_env_name(); + if (s8 !== peg$FAILED) { + s9 = peg$parseend_group(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f42(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + return s0; + } + function peg$parseverbatim_env_name() { + var s0; + if (input.substr(peg$currPos, 9) === peg$c10) { + s0 = peg$c10; + peg$currPos += 9; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c11) { + s0 = peg$c11; + peg$currPos += 8; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 13) === peg$c12) { + s0 = peg$c12; + peg$currPos += 13; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 12) === peg$c13) { + s0 = peg$c13; + peg$currPos += 12; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c14) { + s0 = peg$c14; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c15) { + s0 = peg$c15; + peg$currPos += 10; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + } + } + } + } + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsechar(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsechar(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f43(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f44(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f45(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f46(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f46(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f47(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsegroup_contents_as_string() { + var s0, s1; + s0 = peg$currPos; + s1 = peg$parsegroup(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f48(s1); + } + s0 = s1; + return s0; + } + function peg$parseenvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup_contents_as_string(); + if (s2 !== peg$FAILED) { + s3 = peg$parsesameline_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f49(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f50(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f49(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f50(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$parseend_env(); + if (s5 !== peg$FAILED) { + s6 = peg$parsegroup_contents_as_string(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f51(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsemath_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsesameline_comment(); + if (s5 === peg$FAILED) { + s5 = null; + } + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f52(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f53(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f52(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f53(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s7 = peg$parseend_env(); + if (s7 !== peg$FAILED) { + s8 = peg$parsebegin_group(); + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_env_name(); + if (s9 !== peg$FAILED) { + s10 = peg$parseend_group(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f54(s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parsemath_group() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f55(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f55(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f56(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e35); + } + } + return s0; + } + function peg$parsebegin_display_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 91) { + s2 = peg$c4; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_display_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s2 = peg$c5; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebegin_inline_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_inline_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s2 = peg$c17; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebegin_env() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c18) { + s2 = peg$c18; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e38); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_env() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c19) { + s2 = peg$c19; + peg$currPos += 3; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e39); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemath_env_name() { + var s0, s1; + s0 = peg$currPos; + if (input.substr(peg$currPos, 9) === peg$c20) { + s1 = peg$c20; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e40); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c21) { + s1 = peg$c21; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e41); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c22) { + s1 = peg$c22; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e42); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c23) { + s1 = peg$c23; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e43); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c24) { + s1 = peg$c24; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e44); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c25) { + s1 = peg$c25; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e45); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c26) { + s1 = peg$c26; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e46); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c27) { + s1 = peg$c27; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e47); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c28) { + s1 = peg$c28; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e48); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c29) { + s1 = peg$c29; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e49); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c30) { + s1 = peg$c30; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e50); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c31) { + s1 = peg$c31; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e51); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c32) { + s1 = peg$c32; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e52); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c33) { + s1 = peg$c33; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e53); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 11) === peg$c34) { + s1 = peg$c34; + peg$currPos += 11; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e54); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f57(s1); + } + s0 = s1; + return s0; + } + function peg$parseescape() { + var s0, s1; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e56); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f58(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e55); + } + } + return s0; + } + function peg$parsebegin_group() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c36; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e57); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f59(s1); + } + s0 = s1; + return s0; + } + function peg$parseend_group() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 125) { + s1 = peg$c37; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e58); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f60(s1); + } + s0 = s1; + return s0; + } + function peg$parsemath_shift() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 36) { + s1 = peg$c38; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e59); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f61(s1); + } + s0 = s1; + return s0; + } + function peg$parsealignment_tab() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 38) { + s1 = peg$c39; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e60); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f62(s1); + } + s0 = s1; + return s0; + } + function peg$parsenl() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 13) { + s2 = peg$c40; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c41; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e63); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c40; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c42) { + s0 = peg$c42; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e64); + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e61); + } + } + return s0; + } + function peg$parsemacro_parameter() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 35) { + s1 = peg$c43; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e65); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f63(s1); + } + s0 = s1; + return s0; + } + function peg$parsesuperscript() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 94) { + s1 = peg$c44; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e66); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f64(s1); + } + s0 = s1; + return s0; + } + function peg$parsesubscript() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s1 = peg$c45; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e67); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f65(s1); + } + s0 = s1; + return s0; + } + function peg$parseignore() { + var s0; + if (input.charCodeAt(peg$currPos) === 0) { + s0 = peg$c46; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e68); + } + } + return s0; + } + function peg$parsesp() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f66(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsechar() { + var s0, s1; + peg$silentFails++; + if (peg$r2.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e71); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e70); + } + } + return s0; + } + function peg$parsenum() { + var s0, s1; + peg$silentFails++; + if (peg$r3.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e73); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e72); + } + } + return s0; + } + function peg$parsepunctuation() { + var s0, s1; + peg$silentFails++; + s0 = peg$currPos; + if (peg$r4.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e75); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f67(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e74); + } + } + return s0; + } + function peg$parsecomment_start() { + var s0; + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsefull_comment() { + var s0, s1; + peg$silentFails++; + s0 = peg$parseownline_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsesameline_comment(); + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e76); + } + } + return s0; + } + function peg$parseownline_comment() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseleading_sp(); + if (s2 !== peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f68(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesameline_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsesp(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + s2 = peg$parsecomment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f69(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f70(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f70(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseparbreak(); + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f71(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f72(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f72(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + s4 = peg$parsenl(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = peg$parsenl(); + if (s3 === peg$FAILED) { + s3 = peg$parseEOF(); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f73(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e77); + } + } + return s0; + } + function peg$parseleading_sp() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsestart_of_line(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsestart_of_line() { + var s0; + peg$savedPos = peg$currPos; + s0 = peg$f74(); + if (s0) { + s0 = void 0; + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOF() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function toString(e) { + if (typeof e === "string") { + return e; + } + if (typeof e.content === "string") { + return e.content; + } + if (e && e.type === "whitespace") { + return " "; + } + return e; + } + function compare_env(g1, g2) { + const g1Name = typeof g1 === "string" ? g1 : g1.content.map(toString).join(""); + const g2Name = typeof g2 === "string" ? g2 : g2.content.map(toString).join(""); + return g1Name === g2Name; + } + function createNode(type, extra = {}) { + return { type, ...extra, position: location() }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var align_environment_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(x) { + return { cells: [], colSeps: [], ...x }; + }; + var peg$f2 = function(rowItems, rowSep, trailingComment) { + return { ...rowItems, rowSep, trailingComment }; + }; + var peg$f3 = function(rowItems, trailingComment) { + return { ...rowItems, rowSep: null, trailingComment }; + }; + var peg$f4 = function(x) { + return x; + }; + var peg$f5 = function(x) { + return { + cells: [], + colSeps: [], + rowSep: null, + trailingComment: x + }; + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(colSep, cell) { + return { colSep, cell }; + }; + var peg$f8 = function(colSep) { + return { colSep }; + }; + var peg$f9 = function(a, b) { + return processRow(a, b); + }; + var peg$f10 = function(b) { + return processRow(null, b); + }; + var peg$f11 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f12 = function(tok) { + return tok; + }; + var peg$f13 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f14 = function(tok) { + return tok; + }; + var peg$f15 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f16 = function(tok) { + return tok; + }; + var peg$f17 = function(tok) { + return options.isRowSep(tok); + }; + var peg$f18 = function(tok) { + return tok; + }; + var peg$f19 = function(tok) { + return options.isColSep(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f0(); + } + s0 = s1; + } + return s0; + } + function peg$parserow_with_end() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$savedPos = s1; + s2 = peg$f1(s2); + s1 = s2; + s2 = peg$parserow_sep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + peg$savedPos = s0; + s0 = peg$f2(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_without_end() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parserow_items(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$savedPos = s0; + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f5(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parserow_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsecol_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parseseparated_cell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsecell(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f8(s1); + } + s0 = s1; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsecell(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_cell(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_cell(); + } + peg$savedPos = s0; + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_cell(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_cell(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f11(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f12(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f13(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f14(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f15(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f16(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f17(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f18(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecol_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processRow(leadCell, otherCells) { + const cells = [leadCell || []]; + const seps = []; + for (const x of otherCells) { + cells.push(x.cell || []); + seps.push(x.colSep); + } + return { cells, colSeps: seps }; + } + if (!options.isWhitespace) { + try { + Object.assign( + options, + createMatchers(["\\", "hline", "cr"], ["&"]) + ); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var xparse_argspec_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list }; + var peg$startRuleFunction = peg$parseargs_spec_list; + var peg$c0 = "+"; + var peg$c1 = "v"; + var peg$c2 = "b"; + var peg$c3 = "!"; + var peg$c4 = "D"; + var peg$c5 = "d"; + var peg$c6 = "s"; + var peg$c7 = "O"; + var peg$c8 = "o"; + var peg$c9 = "e"; + var peg$c10 = "E"; + var peg$c11 = "t"; + var peg$c12 = "R"; + var peg$c13 = "r"; + var peg$c14 = "u"; + var peg$c15 = "m"; + var peg$c16 = "{"; + var peg$c17 = "}"; + var peg$c18 = " "; + var peg$c19 = "\n"; + var peg$c20 = "\r"; + var peg$r0 = /^[{ ]/; + var peg$e0 = peg$literalExpectation("+", false); + var peg$e1 = peg$literalExpectation("v", false); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$literalExpectation("b", false); + var peg$e4 = peg$literalExpectation("!", false); + var peg$e5 = peg$literalExpectation("D", false); + var peg$e6 = peg$literalExpectation("d", false); + var peg$e7 = peg$literalExpectation("s", false); + var peg$e8 = peg$literalExpectation("O", false); + var peg$e9 = peg$literalExpectation("o", false); + var peg$e10 = peg$literalExpectation("e", false); + var peg$e11 = peg$literalExpectation("E", false); + var peg$e12 = peg$literalExpectation("t", false); + var peg$e13 = peg$literalExpectation("R", false); + var peg$e14 = peg$literalExpectation("r", false); + var peg$e15 = peg$literalExpectation("u", false); + var peg$e16 = peg$classExpectation(["{", " "], false, false); + var peg$e17 = peg$literalExpectation("m", false); + var peg$e18 = peg$literalExpectation("{", false); + var peg$e19 = peg$literalExpectation("}", false); + var peg$e20 = peg$literalExpectation(" ", false); + var peg$e21 = peg$literalExpectation("\n", false); + var peg$e22 = peg$literalExpectation("\r", false); + var peg$f0 = function(x) { + return x; + }; + var peg$f1 = function(spec) { + return spec; + }; + var peg$f2 = function(spec) { + return spec; + }; + var peg$f3 = function(openBrace) { + return createNode("verbatim", { openBrace, closeBrace: openBrace }); + }; + var peg$f4 = function() { + return createNode("body"); + }; + var peg$f5 = function(leading_bang, spec) { + return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec; + }; + var peg$f6 = function(braceSpec, defaultArg) { + return createNode("optional", { ...braceSpec, defaultArg }); + }; + var peg$f7 = function(braceSpec) { + return createNode("optional", braceSpec); + }; + var peg$f8 = function() { + return createNode("optionalStar"); + }; + var peg$f9 = function(g) { + return createNode("optional", { defaultArg: g }); + }; + var peg$f10 = function() { + return createNode("optional"); + }; + var peg$f11 = function(args) { + return createNode("embellishment", { + embellishmentTokens: args.content + }); + }; + var peg$f12 = function(args, g) { + return createNode("embellishment", { + embellishmentTokens: args.content, + defaultArg: g + }); + }; + var peg$f13 = function(tok) { + return createNode("optionalToken", { token: tok }); + }; + var peg$f14 = function(braceSpec, defaultArg) { + return createNode("mandatory", { ...braceSpec, defaultArg }); + }; + var peg$f15 = function(braceSpec) { + return createNode("mandatory", braceSpec); + }; + var peg$f16 = function(stopTokens) { + return createNode("until", { stopTokens }); + }; + var peg$f17 = function(x) { + return [x]; + }; + var peg$f18 = function(g) { + return g.content; + }; + var peg$f19 = function() { + return createNode("mandatory"); + }; + var peg$f20 = function(openBrace, closeBrace) { + return { openBrace, closeBrace }; + }; + var peg$f21 = function(content) { + return { type: "group", content }; + }; + var peg$f22 = function() { + return ""; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseargs_spec_list() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + s2 = peg$parsewhitespace(); + peg$savedPos = s0; + s0 = peg$f1(s1); + return s0; + } + function peg$parsearg_spec() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + s1 = peg$c0; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseoptional(); + if (s2 === peg$FAILED) { + s2 = peg$parsemandatory(); + if (s2 === peg$FAILED) { + s2 = peg$parseverbatim(); + if (s2 === peg$FAILED) { + s2 = peg$parserequired(); + if (s2 === peg$FAILED) { + s2 = peg$parsebody(); + if (s2 === peg$FAILED) { + s2 = peg$parseuntil(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 118) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebody() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 98) { + s1 = peg$c2; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f4(); + } + s0 = s1; + return s0; + } + function peg$parseoptional() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c3; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseoptional_star(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_standard(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_delimited(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_embellishment(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_token(); + } + } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f5(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseoptional_delimited() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 68) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f6(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 100) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_star() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 115) { + s1 = peg$c6; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f8(); + } + s0 = s1; + return s0; + } + function peg$parseoptional_standard() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 79) { + s1 = peg$c7; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 111) { + s1 = peg$c8; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(); + } + s0 = s1; + } + return s0; + } + function peg$parseoptional_embellishment() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 101) { + s1 = peg$c9; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 69) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f12(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_token() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 116) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserequired() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 82) { + s1 = peg$c12; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f14(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 114) { + s1 = peg$c13; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + peg$savedPos = s0; + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseuntil() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 117) { + s1 = peg$c14; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseuntil_stop_token(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f16(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseuntil_stop_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f17(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebraced_group(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f18(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsemandatory() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 109) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f19(); + } + s0 = s1; + return s0; + } + function peg$parsebrace_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = null; + } + s2 = input.substring(s2, peg$currPos); + peg$savedPos = s0; + s0 = peg$f20(s1, s2); + return s0; + } + function peg$parsebraced_group() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + } + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c17; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace_token(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace_token(); + } + peg$savedPos = s0; + s1 = peg$f22(); + s0 = s1; + return s0; + } + function peg$parsewhitespace_token() { + var s0; + if (input.charCodeAt(peg$currPos) === 32) { + s0 = peg$c18; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + } + } + return s0; + } + const DEFAULT_OPTIONS = { + optional: { openBrace: "[", closeBrace: "]" }, + mandatory: { openBrace: "{", closeBrace: "}" } + }; + function createNode(type, options2) { + const computedOptions = DEFAULT_OPTIONS[type] || {}; + return { type, ...computedOptions, ...options2 }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var pgfkeys_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(rowItems, trailingComment) { + return { + itemParts: [], + ...rowItems, + trailingComment, + trailingComma: true + }; + }; + var peg$f2 = function(rowItems, trailingComment) { + return { ...rowItems, trailingComment }; + }; + var peg$f3 = function(a, b) { + return processItem(a, b); + }; + var peg$f4 = function(b) { + return processItem(null, b); + }; + var peg$f5 = function(cell) { + return { cell }; + }; + var peg$f6 = function() { + return {}; + }; + var peg$f7 = function(part) { + return part; + }; + var peg$f8 = function(x) { + return x; + }; + var peg$f9 = function(space, x) { + return { + trailingComment: x, + leadingParbreak: space.parbreak > 0 + }; + }; + var peg$f10 = function(list) { + return { + whitespace: list.filter((x) => options.isWhitespace(x)).length, + parbreak: list.filter((x) => options.isParbreak(x)).length + }; + }; + var peg$f11 = function() { + return !options.allowParenGroups; + }; + var peg$f12 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options.isParbreak(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options.isComma(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options.isEquals(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options.isChar(tok, "("); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options.isChar(tok, ")"); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f0(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_with_end() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + s0 = peg$currPos; + s1 = peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = peg$parsewhitespace_or_parbreaks(); + s4 = peg$parseitem_sep(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsewhitespace(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsewhitespace(); + } + s6 = peg$parsetrailing_comment(); + if (s6 === peg$FAILED) { + s6 = null; + } + s7 = []; + s8 = peg$parsewhitespace(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f1(s2, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_without_end() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + peg$savedPos = s0; + s0 = peg$f2(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseitem_part(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_part(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_part(); + } + peg$savedPos = s0; + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_part(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_part(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f4(s1); + } + s0 = s1; + } + return s0; + } + function peg$parseseparated_part() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseparbreak(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseparbreak(); + } + s4 = peg$parseitem_part(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f5(s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_part() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$currPos; + s3 = []; + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsewhitespace_or_parbreaks(); + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsenon_token(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_whitespace_non_parbreak_token() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewhitespace(); + if (s3 === peg$FAILED) { + s3 = peg$parseparbreak(); + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseparen_block(); + if (s3 === peg$FAILED) { + s3 = peg$parsetoken(); + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_token() { + var s0; + s0 = peg$parseitem_sep(); + if (s0 === peg$FAILED) { + s0 = peg$parseequals(); + if (s0 === peg$FAILED) { + s0 = peg$parsetrailing_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parseown_line_comment(); + } + } + } + return s0; + } + function peg$parsewhitespace_or_parbreaks() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + } + peg$savedPos = s0; + s1 = peg$f10(s1); + s0 = s1; + return s0; + } + function peg$parseparen_block() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + s0 = peg$currPos; + peg$savedPos = peg$currPos; + s1 = peg$f11(); + if (s1) { + s1 = peg$FAILED; + } else { + s1 = void 0; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$parseopen_paren(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseclose_paren(); + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processItem(leadCell, otherCells) { + const cells = [leadCell || []]; + for (const x of otherCells) { + cells.push(x.cell || []); + } + return { itemParts: cells }; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isChar: (node, char) => node.type === "string" && node.content === char, + isComma(node) { + return node.type === "string" && node.content === ","; + }, + isEquals(node) { + return node.type === "string" && node.content === "="; + }, + isParbreak(node) { + return node.type === "parbreak"; + }, + isWhitespace(node) { + return node.type === "whitespace"; + }, + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + allowParenGroups: true + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var macro_substitutions_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(tok) { + return options.isHash(tok); + }; + var peg$f3 = function(tok) { + return tok; + }; + var peg$f4 = function(tok) { + return options.isNumber(tok); + }; + var peg$f5 = function(tok) { + return tok; + }; + var peg$f6 = function() { + return { type: "string", content: "#" }; + }; + var peg$f7 = function(num) { + const split = options.splitNumber(num); + return [{ type: "hash_number", number: split.number }, split.rest]; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsehash() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f4(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f5(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_hash() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsehash(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehash_number() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isHash) { + try { + Object.assign(options, { + isHash: (node) => node.type === "string" && node.content === "#", + isNumber: (node) => node.type === "string" && 0 < +node.content.charAt(0), + splitNumber: (node) => { + const number = +node.content.charAt(0); + if (node.content.length > 1) { + return { + number, + rest: { + type: "string", + content: node.content.slice(1) + } + }; + } + return { number }; + } + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var ligatures_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f3 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f4 = function(tok1, tok2) { + const split = options.split(tok2); + return options.isRecognized([tok1, split[0]]); + }; + var peg$f5 = function(tok1, tok2) { + const split = options.split(tok2); + return [options.isRecognized([tok1, split[0]]), split[1]]; + }; + var peg$f6 = function(tok1, tok2) { + return options.isRecognized([tok1, tok2]); + }; + var peg$f7 = function(tok1, tok2) { + return options.isRecognized([tok1, tok2]); + }; + var peg$f8 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f9 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f10 = function(tok) { + return options.isRecognized([tok]); + }; + var peg$f11 = function(tok) { + return options.isRecognized([tok]); + }; + var peg$f12 = function(tok) { + return options.isMacro(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options.isSplitable(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsetriple_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_ligature() { + var s0; + s0 = peg$parsedouble_macro_ligature(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_macro_ligature_extracted(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_char_ligature(); + } + } + return s0; + } + function peg$parsedouble_macro_ligature_extracted() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + s3 = peg$parsesplitable(); + if (s3 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s4 = peg$f4(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f5(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_macro_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s4 = peg$f6(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f7(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_char_ligature() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f8(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f9(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemono_ligature() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f10(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f11(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesplitable() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isMacro: (node) => node.type === "macro", + isWhitespace: (node) => node.type === "whitespace", + isRecognized: (nodes) => { + if (nodes.length == 2 && nodes[0].content === "^" && nodes[1].content === "o") { + return { type: "string", content: "\xF4" }; + } + return null; + }, + isSplitable: (node) => node.type === "string" && node.content.length > 1, + split: (node) => [ + { type: "string", content: node.content.charAt(0) }, + { type: "string", content: node.content.slice(1) } + ] + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var xcolor_expressions_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { start: peg$parsestart }; + var peg$startRuleFunction = peg$parsestart; + var peg$c0 = ";"; + var peg$c1 = ","; + var peg$c2 = ":"; + var peg$c3 = "/"; + var peg$c4 = ">"; + var peg$c5 = "!"; + var peg$c6 = "."; + var peg$c7 = "!!["; + var peg$c8 = "]"; + var peg$c9 = "!!"; + var peg$c10 = "+"; + var peg$c11 = "-"; + var peg$r0 = /^[a-zA-Z0-9]/; + var peg$r1 = /^[0-9]/; + var peg$r2 = /^[ \t\n\r]/; + var peg$r3 = /^[0-9a-fA-F]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation(";", false); + var peg$e2 = peg$literalExpectation(",", false); + var peg$e3 = peg$otherExpectation("model list"); + var peg$e4 = peg$literalExpectation(":", false); + var peg$e5 = peg$literalExpectation("/", false); + var peg$e6 = peg$otherExpectation("model"); + var peg$e7 = peg$otherExpectation("color spec list"); + var peg$e8 = peg$otherExpectation("color spec"); + var peg$e9 = peg$otherExpectation("color"); + var peg$e10 = peg$otherExpectation("function expression"); + var peg$e11 = peg$literalExpectation(">", false); + var peg$e12 = peg$otherExpectation("function"); + var peg$e13 = peg$otherExpectation("extended expression"); + var peg$e14 = peg$otherExpectation("core model"); + var peg$e15 = peg$otherExpectation("expr"); + var peg$e16 = peg$literalExpectation("!", false); + var peg$e17 = peg$otherExpectation("mix expr"); + var peg$e18 = peg$otherExpectation("name"); + var peg$e19 = peg$literalExpectation(".", false); + var peg$e20 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e21 = peg$otherExpectation("postfix"); + var peg$e22 = peg$literalExpectation("!![", false); + var peg$e23 = peg$literalExpectation("]", false); + var peg$e24 = peg$literalExpectation("!!", false); + var peg$e25 = peg$otherExpectation("prefix"); + var peg$e26 = peg$otherExpectation("plus"); + var peg$e27 = peg$literalExpectation("+", false); + var peg$e28 = peg$otherExpectation("minus"); + var peg$e29 = peg$literalExpectation("-", false); + var peg$e30 = peg$otherExpectation("num"); + var peg$e31 = peg$classExpectation([["0", "9"]], false, false); + var peg$e32 = peg$otherExpectation("positive float"); + var peg$e33 = peg$otherExpectation("divisor"); + var peg$e34 = peg$otherExpectation("int"); + var peg$e35 = peg$otherExpectation("whitespace"); + var peg$e36 = peg$classExpectation([" ", " ", "\n", "\r"], false, false); + var peg$e37 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false); + var peg$f0 = function(m) { + return m; + }; + var peg$f1 = function(m) { + return m; + }; + var peg$f2 = function(m) { + return m; + }; + var peg$f3 = function(m) { + return m; + }; + var peg$f4 = function(m) { + return m; + }; + var peg$f5 = function(a) { + return { type: "invalid_spec", content: a }; + }; + var peg$f6 = function(f, c) { + return c; + }; + var peg$f7 = function(f, r) { + return { type: "color_set", content: [f].concat(r) }; + }; + var peg$f8 = function(n, s2) { + return { type: "color_set_item", name: n, spec_list: s2 }; + }; + var peg$f9 = function(c, m) { + return { type: "model_list", contents: m, core_model: c }; + }; + var peg$f10 = function(m) { + return { type: "model_list", contents: m, core_model: null }; + }; + var peg$f11 = function(m, a) { + return a; + }; + var peg$f12 = function(m, r) { + return [m].concat(r); + }; + var peg$f13 = function(s2, a) { + return a; + }; + var peg$f14 = function(s2, r) { + return { type: "spec_list", content: [s2].concat(r) }; + }; + var peg$f15 = function(c) { + return { type: "hex_spec", content: [c] }; + }; + var peg$f16 = function(c, d) { + return d; + }; + var peg$f17 = function(c, d) { + return d; + }; + var peg$f18 = function(c, r) { + return { type: "num_spec", content: r ? [c].concat(r) : [c] }; + }; + var peg$f19 = function(c, fs) { + return { type: "color", color: c, functions: fs }; + }; + var peg$f20 = function(f, n) { + return n; + }; + var peg$f21 = function(f, args) { + return { type: "function", name: f, args }; + }; + var peg$f22 = function(core, d, e, es) { + return { + type: "extended_expr", + core_model: core, + div: d, + expressions: [e].concat(es) + }; + }; + var peg$f23 = function(core, e, es) { + return { + type: "extended_expr", + core_model: core, + div: null, + expressions: [e].concat(es) + }; + }; + var peg$f24 = function(e, d) { + return { type: "weighted_expr", color: e, weight: d }; + }; + var peg$f25 = function(e) { + return e; + }; + var peg$f26 = function(p, n, e, po) { + return { + type: "expr", + prefix: p, + name: n, + mix_expr: e, + postfix: po + }; + }; + var peg$f27 = function(p, n) { + return { type: "complete_mix", mix_percent: p, name: n }; + }; + var peg$f28 = function(p) { + return { type: "partial_mix", mix_percent: p }; + }; + var peg$f29 = function(c, p) { + return c.concat(p || []); + }; + var peg$f30 = function(n) { + return { type: "postfix", num: n }; + }; + var peg$f31 = function(p) { + return { type: "postfix", plusses: p }; + }; + var peg$f32 = function(n) { + return parseInt(n, 10); + }; + var peg$f33 = function(n) { + return parseFloat(n); + }; + var peg$f34 = function(n) { + return n; + }; + var peg$f35 = function(n) { + return -n; + }; + var peg$f36 = function(m, n) { + return m ? -n : n; + }; + var peg$f37 = function(h) { + return h.toUpperCase(); + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsestart() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f0(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsespec_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor_set_spec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + s1 = input.substring(s1, peg$currPos); + peg$savedPos = s0; + s1 = peg$f5(s1); + s0 = s1; + } + } + } + } + } + return s0; + } + function peg$parsecolor_set_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsecolor_set_item(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + peg$savedPos = s0; + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolor_set_item() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsename(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsespec_list(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f8(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel_list() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemodel_list_tail(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f9(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list_tail(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parsemodel_list_tail() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsemodel(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + peg$savedPos = s0; + s0 = peg$f12(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel() { + var s0, s1; + peg$silentFails++; + s0 = peg$parsecore_model(); + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsespec_list() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + peg$savedPos = s0; + s0 = peg$f14(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsespec() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsehex(); + if (s3 !== peg$FAILED) { + s4 = peg$parsehex(); + if (s4 !== peg$FAILED) { + s5 = peg$parsehex(); + if (s5 !== peg$FAILED) { + s6 = peg$parsehex(); + if (s6 !== peg$FAILED) { + s7 = peg$parsehex(); + if (s7 !== peg$FAILED) { + s8 = peg$parsehex(); + if (s8 !== peg$FAILED) { + s3 = [s3, s4, s5, s6, s7, s8]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f15(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsedec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + } + if (s2 === peg$FAILED) { + s2 = null; + } + peg$savedPos = s0; + s0 = peg$f18(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsecolor() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecolor_expr(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsefunc_expr(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsefunc_expr(); + } + peg$savedPos = s0; + s0 = peg$f19(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsecolor_expr() { + var s0; + s0 = peg$parseext_expr(); + if (s0 === peg$FAILED) { + s0 = peg$parseexpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsename(); + } + } + return s0; + } + function peg$parsefunc_expr() { + var s0, s1, s2, s3, s4, s5, s6; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 62) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsefunction(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + peg$savedPos = s0; + s0 = peg$f21(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parsefunction() { + var s0, s1; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseext_expr() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsediv(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c2; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseweighted_expr(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseadditional_weighted_expr(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseadditional_weighted_expr(); + } + peg$savedPos = s0; + s0 = peg$f22(s1, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseweighted_expr(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseadditional_weighted_expr(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseadditional_weighted_expr(); + } + peg$savedPos = s0; + s0 = peg$f23(s1, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseweighted_expr() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseexpr(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsedec(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f24(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseadditional_weighted_expr() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s1 = peg$c0; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseweighted_expr(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecore_model() { + var s0, s1; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseexpr() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseprefix(); + s2 = peg$parsename(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemix_expr(); + s4 = peg$parsepostfix(); + if (s4 === peg$FAILED) { + s4 = null; + } + peg$savedPos = s0; + s0 = peg$f26(s1, s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsecomplete_mix() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsename(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f27(s2, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_mix() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemix_expr() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomplete_mix(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomplete_mix(); + } + s2 = peg$parsepartial_mix(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$savedPos = s0; + s0 = peg$f29(s1, s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + return s0; + } + function peg$parsename() { + var s0, s1, s2; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 46) { + s0 = peg$c6; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parsepostfix() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c7) { + s1 = peg$c7; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c8; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c9) { + s1 = peg$c9; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$parseplus(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseplus(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f31(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + return s0; + } + function peg$parseprefix() { + var s0, s1; + peg$silentFails++; + s0 = peg$parseminus(); + if (s0 === peg$FAILED) { + s0 = null; + } + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + return s0; + } + function peg$parsenum() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f32(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + return s0; + } + function peg$parsepct() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + s4 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c6; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + s8 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + while (s9 !== peg$FAILED) { + s8.push(s9); + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + s7 = input.substring(s7, peg$currPos); + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 === peg$FAILED) { + s5 = null; + } + s4 = input.substring(s4, peg$currPos); + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c6; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f33(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsediv() { + var s0, s1; + peg$silentFails++; + s0 = peg$parsepct(); + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsedec() { + var s0, s1, s2; + s0 = peg$parsepct(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f34(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f35(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parseint() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f36(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parse_() { + var s0, s1; + peg$silentFails++; + s0 = []; + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + } + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e35); + } + return s0; + } + function peg$parsesp() { + var s0, s1; + s0 = []; + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + } + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehex() { + var s0, s1; + s0 = peg$currPos; + if (peg$r3.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f37(s1); + } + s0 = s1; + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var tabular_spec_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$otherExpectation("decl_start"); + var peg$e1 = peg$otherExpectation("decl_end"); + var peg$e2 = peg$otherExpectation("vert"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("l"); + var peg$e5 = peg$otherExpectation("r"); + var peg$e6 = peg$otherExpectation("c"); + var peg$e7 = peg$otherExpectation("p"); + var peg$e8 = peg$otherExpectation("m"); + var peg$e9 = peg$otherExpectation("b"); + var peg$e10 = peg$otherExpectation("w"); + var peg$e11 = peg$otherExpectation("W"); + var peg$e12 = peg$otherExpectation("X"); + var peg$e13 = peg$otherExpectation("!"); + var peg$e14 = peg$otherExpectation("@"); + var peg$e15 = peg$otherExpectation("<"); + var peg$e16 = peg$otherExpectation(">"); + var peg$e17 = peg$otherExpectation("group"); + var peg$e18 = peg$otherExpectation("whitespace"); + var peg$f0 = function(c) { + return c; + }; + var peg$f1 = function(cols) { + return cols; + }; + var peg$f2 = function() { + return []; + }; + var peg$f3 = function(divs1, start, a, end, divs2) { + return { + type: "column", + pre_dividers: divs1, + post_dividers: divs2, + before_start_code: start, + before_end_code: end, + alignment: a + }; + }; + var peg$f4 = function() { + return { + type: "vert_divider" + }; + }; + var peg$f5 = function(b, g) { + return { + type: "bang_divider", + content: g[0].content + }; + }; + var peg$f6 = function(g) { + return { + type: "at_divider", + content: g[0].content + }; + }; + var peg$f7 = function(div) { + return div; + }; + var peg$f8 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f9 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f10 = function() { + return { type: "alignment", alignment: "left" }; + }; + var peg$f11 = function() { + return { type: "alignment", alignment: "center" }; + }; + var peg$f12 = function() { + return { type: "alignment", alignment: "right" }; + }; + var peg$f13 = function() { + return { type: "alignment", alignment: "X" }; + }; + var peg$f14 = function() { + return "top"; + }; + var peg$f15 = function() { + return "default"; + }; + var peg$f16 = function() { + return "bottom"; + }; + var peg$f17 = function(a, g) { + return { + type: "alignment", + alignment: "parbox", + baseline: a, + size: g[0].content + }; + }; + var peg$f18 = function(g1, g2) { + return { + type: "alignment", + alignment: "parbox", + baseline: g1[0].content, + size: g2[0].content + }; + }; + var peg$f19 = function(tok) { + return options.matchChar(tok, "|"); + }; + var peg$f20 = function(tok) { + return options.matchChar(tok, "l"); + }; + var peg$f21 = function(tok) { + return options.matchChar(tok, "r"); + }; + var peg$f22 = function(tok) { + return options.matchChar(tok, "c"); + }; + var peg$f23 = function(tok) { + return options.matchChar(tok, "p"); + }; + var peg$f24 = function(tok) { + return options.matchChar(tok, "m"); + }; + var peg$f25 = function(tok) { + return options.matchChar(tok, "b"); + }; + var peg$f26 = function(tok) { + return options.matchChar(tok, "w"); + }; + var peg$f27 = function(tok) { + return options.matchChar(tok, "W"); + }; + var peg$f28 = function(tok) { + return options.matchChar(tok, "X"); + }; + var peg$f29 = function(tok) { + return options.matchChar(tok, "!"); + }; + var peg$f30 = function(tok) { + return options.matchChar(tok, "@"); + }; + var peg$f31 = function(tok) { + return options.matchChar(tok, "<"); + }; + var peg$f32 = function(tok) { + return options.matchChar(tok, ">"); + }; + var peg$f33 = function(tok) { + return options.isGroup(tok); + }; + var peg$f34 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + peg$savedPos = s2; + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + peg$savedPos = s2; + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f1(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f2(); + } + s0 = s1; + } + return s0; + } + function peg$parsecolumn() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecolumn_divider(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecolumn_divider(); + } + s2 = peg$parsedecl_start(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = peg$parsealignment(); + if (s3 !== peg$FAILED) { + s4 = peg$parsedecl_end(); + if (s4 === peg$FAILED) { + s4 = null; + } + s5 = []; + s6 = peg$parsecolumn_divider(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsecolumn_divider(); + } + peg$savedPos = s0; + s0 = peg$f3(s1, s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolumn_divider() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$currPos; + s3 = peg$parsevert(); + if (s3 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$f4(); + } + s2 = s3; + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parsebang(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s2 = peg$f5(s3, s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parseat(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s2 = peg$f6(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedecl_start() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsegreater(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + return s0; + } + function peg$parsedecl_end() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseless(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parsealignment() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsel(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsec(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f11(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parser(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f12(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseX(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f13(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsep(); + if (s2 !== peg$FAILED) { + peg$savedPos = s1; + s2 = peg$f14(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parsem(); + if (s2 !== peg$FAILED) { + peg$savedPos = s1; + s2 = peg$f15(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseb(); + if (s2 !== peg$FAILED) { + peg$savedPos = s1; + s2 = peg$f16(); + } + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f17(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsew(); + if (s1 === peg$FAILED) { + s1 = peg$parseW(); + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f18(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + return s0; + } + function peg$parsevert() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parsel() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parser() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsec() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f23(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsem() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseb() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f25(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsew() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseW() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f27(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parseX() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parsebang() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f29(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseless() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f31(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsegreater() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f33(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isHash) { + try { + Object.assign(options, { + matchChar: (node, char) => node.type === "string" && node.content === char, + isGroup: (node) => node.type === "group", + isWhitespace: (node) => node.type === "whitespace" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var systeme_environment_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$otherExpectation("partial item"); + var peg$e1 = peg$otherExpectation("item"); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("equation"); + var peg$e4 = peg$otherExpectation("trailing comment"); + var peg$e5 = peg$otherExpectation("comment only line"); + var peg$e6 = peg$otherExpectation("non-var token"); + var peg$e7 = peg$otherExpectation("token"); + var peg$e8 = peg$otherExpectation("same line comment"); + var peg$e9 = peg$otherExpectation("own line comment"); + var peg$e10 = peg$otherExpectation(","); + var peg$e11 = peg$otherExpectation("@"); + var peg$e12 = peg$otherExpectation("variable token"); + var peg$e13 = peg$otherExpectation("+/-"); + var peg$e14 = peg$otherExpectation("="); + var peg$f0 = function(a, b) { + return a.concat(b ? b : []); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(a, b, c) { + return a.concat(b, c); + }; + var peg$f3 = function(op, a, b, c) { + return { type: "item", op, variable: b, content: a.concat(b, c) }; + }; + var peg$f4 = function(op, a) { + return { type: "item", op, variable: null, content: a }; + }; + var peg$f5 = function(line5, sep, comment2) { + return { ...line5, sep: [].concat(sep), trailingComment: comment2 }; + }; + var peg$f6 = function(line5, comment2) { + return { ...line5, trailingComment: comment2 }; + }; + var peg$f7 = function(eq, ann) { + return { + type: "line", + equation: eq, + annotation: ann, + sep: null + }; + }; + var peg$f8 = function(at2, ann) { + return at2 ? { type: "annotation", marker: at2, content: ann } : null; + }; + var peg$f9 = function(left, eq, right) { + return { type: "equation", left, right, equals: eq }; + }; + var peg$f10 = function(x) { + return x; + }; + var peg$f11 = function(x) { + return { + type: "line", + trailingComment: x + }; + }; + var peg$f12 = function(v, s2) { + return [v].concat(s2 ? s2 : []); + }; + var peg$f13 = function(t) { + return t; + }; + var peg$f14 = function(x) { + return x; + }; + var peg$f15 = function(x) { + return x; + }; + var peg$f16 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options.isSep(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options.isAt(tok); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options.isVar(tok); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options.isOperation(tok); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options.isEquals(tok); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options.isSubscript(tok); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + } + s2 = peg$parseline_without_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parseEOL(); + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f0(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsepartial_item() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = []; + s3 = peg$parsenon_var_token(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenon_var_token(); + } + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s4 = peg$parsevar(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parse_(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parse_(); + } + s6 = []; + s7 = peg$parsetoken(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsetoken(); + } + s7 = []; + s8 = peg$parse_(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parse_(); + } + peg$savedPos = s0; + s0 = peg$f2(s2, s4, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + return s0; + } + function peg$parseitem() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsevar(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parse_(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parse_(); + } + s7 = []; + s8 = peg$parsetoken(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsetoken(); + } + s8 = []; + s9 = peg$parse_(); + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parse_(); + } + peg$savedPos = s0; + s0 = peg$f3(s1, s3, s5, s7); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + peg$savedPos = s0; + s0 = peg$f4(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parseline_with_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + peg$savedPos = s0; + s0 = peg$f5(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_line_with_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f6(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_without_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s2 !== peg$FAILED) { + peg$currPos = s1; + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseequation(); + s3 = peg$parseannotation(); + if (s3 === peg$FAILED) { + s3 = null; + } + peg$savedPos = s0; + s0 = peg$f7(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseannotation() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseat(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsenon_sep_token(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenon_sep_token(); + } + peg$savedPos = s0; + s0 = peg$f8(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseitem(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseitem(); + } + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + } + peg$savedPos = s0; + s0 = peg$f9(s1, s2, s3); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f10(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsevar() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsevar_token(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsesubscript(); + if (s3 === peg$FAILED) { + s3 = null; + } + peg$savedPos = s0; + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenon_var_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsevar(); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsenon_sep_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f14(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parseat(); + if (s2 === peg$FAILED) { + s2 = peg$parseoperation(); + if (s2 === peg$FAILED) { + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsevar_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + peg$savedPos = peg$currPos; + s4 = peg$f28(s2); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f29(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parsesubscript() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isSep: (node) => node.type === "string" && node.content === ",", + isVar: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isOperation: (node) => node.type === "string" && node.content.match(/[+-]/), + isEquals: (node) => node.type === "string" && node.content === "=", + isAt: (node) => node.type === "string" && node.content === "@", + isSubscript: (node) => node.content === "_", + isWhitespace: (node) => node.type === "whitespace", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var tex_glue_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { root: peg$parseroot }; + var peg$startRuleFunction = peg$parseroot; + var peg$c0 = "plus"; + var peg$c1 = "minus"; + var peg$c2 = "pt"; + var peg$c3 = "mm"; + var peg$c4 = "cm"; + var peg$c5 = "in"; + var peg$c6 = "ex"; + var peg$c7 = "em"; + var peg$c8 = "bp"; + var peg$c9 = "pc"; + var peg$c10 = "dd"; + var peg$c11 = "cc"; + var peg$c12 = "nd"; + var peg$c13 = "nc"; + var peg$c14 = "sp"; + var peg$c15 = "filll"; + var peg$c16 = "fill"; + var peg$c17 = "fil"; + var peg$c18 = "."; + var peg$c19 = "+"; + var peg$c20 = "-"; + var peg$r0 = /^[0-9]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation("plus", false); + var peg$e2 = peg$literalExpectation("minus", false); + var peg$e3 = peg$literalExpectation("pt", false); + var peg$e4 = peg$literalExpectation("mm", false); + var peg$e5 = peg$literalExpectation("cm", false); + var peg$e6 = peg$literalExpectation("in", false); + var peg$e7 = peg$literalExpectation("ex", false); + var peg$e8 = peg$literalExpectation("em", false); + var peg$e9 = peg$literalExpectation("bp", false); + var peg$e10 = peg$literalExpectation("pc", false); + var peg$e11 = peg$literalExpectation("dd", false); + var peg$e12 = peg$literalExpectation("cc", false); + var peg$e13 = peg$literalExpectation("nd", false); + var peg$e14 = peg$literalExpectation("nc", false); + var peg$e15 = peg$literalExpectation("sp", false); + var peg$e16 = peg$literalExpectation("filll", false); + var peg$e17 = peg$literalExpectation("fill", false); + var peg$e18 = peg$literalExpectation("fil", false); + var peg$e19 = peg$otherExpectation("number"); + var peg$e20 = peg$classExpectation([["0", "9"]], false, false); + var peg$e21 = peg$literalExpectation(".", false); + var peg$e22 = peg$literalExpectation("+", false); + var peg$e23 = peg$literalExpectation("-", false); + var peg$f0 = function(b, st, sh) { + return { + type: "glue", + fixed: b, + stretchable: st, + shrinkable: sh, + position: location() + }; + }; + var peg$f1 = function(glue) { + return glue; + }; + var peg$f2 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f3 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f4 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f5 = function(n) { + return parseFloat(n); + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseroot() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsebase(); + if (s2 !== peg$FAILED) { + s3 = peg$parsestretchable(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseshrinkable(); + if (s4 === peg$FAILED) { + s4 = null; + } + peg$savedPos = s1; + s1 = peg$f0(s2, s3, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + peg$savedPos = s0; + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebase() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + s2 = peg$parseunit(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsestretchable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c0) { + s1 = peg$c0; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseshrinkable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 5) === peg$c1) { + s1 = peg$c1; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunit() { + var s0; + if (input.substr(peg$currPos, 2) === peg$c2) { + s0 = peg$c2; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c3) { + s0 = peg$c3; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c4) { + s0 = peg$c4; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c5) { + s0 = peg$c5; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c6) { + s0 = peg$c6; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c7) { + s0 = peg$c7; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c8) { + s0 = peg$c8; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c9) { + s0 = peg$c9; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c10) { + s0 = peg$c10; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c11) { + s0 = peg$c11; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c12) { + s0 = peg$c12; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c13) { + s0 = peg$c13; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c14) { + s0 = peg$c14; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return s0; + } + function peg$parserubber_unit() { + var s0; + s0 = peg$parseunit(); + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c15) { + s0 = peg$c15; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c16) { + s0 = peg$c16; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c17) { + s0 = peg$c17; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + } + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsesign(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$currPos; + s5 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c18; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s6 !== peg$FAILED) { + s7 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 === peg$FAILED) { + s4 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parsesign() { + var s0; + if (input.charCodeAt(peg$currPos) === 43) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var tikz_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + "use strict"; + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line5 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line5.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line5 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body }; + var peg$startRuleFunction = peg$parsepath_spec; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$otherExpectation("same line comment"); + var peg$e2 = peg$otherExpectation("own line comment"); + var peg$e3 = peg$otherExpectation("comment"); + var peg$e4 = peg$otherExpectation("floating comment"); + var peg$e5 = peg$otherExpectation("operation"); + var peg$e6 = peg$otherExpectation("="); + var peg$f0 = function(v) { + return v; + }; + var peg$f1 = function(ops) { + return { type: "path_spec", content: ops }; + }; + var peg$f2 = function(c1, op, comment2) { + return { op, comment: comment2 }; + }; + var peg$f3 = function(c1, ops, c2, body) { + const comments = [c1, ...ops.map((x) => x.comment), c2].filter( + (x) => x + ); + const attribute = ops.map((x) => x.op.content.content).join(" "); + return { + type: "animation", + comments, + attribute, + content: body.content + }; + }; + var peg$f4 = function(start, b) { + return { ...b, start, type: "foreach" }; + }; + var peg$f5 = function(c1, variables, options2, c2, c3, list, c4, command) { + const comments = [c1, c2, c3, c4].filter((x) => x); + return { + type: "foreach_body", + variables, + options: options2 && options2.content, + list, + command, + comments + }; + }; + var peg$f6 = function(c1, options2, c2, body) { + const comments = [c1, c2].filter((x) => x); + return { + type: "svg_operation", + options: options2 && options2.content, + content: body, + comments + }; + }; + var peg$f7 = function(c1, c2, coord, c3, c4, x) { + return { coord: x, comment: c4 }; + }; + var peg$f8 = function(c1, c2, coord, c3, a, c5) { + const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x); + return { + type: "curve_to", + controls: a ? [coord, a.coord] : [coord], + comments + }; + }; + var peg$f9 = function() { + return { type: "line_to", command: "|-" }; + }; + var peg$f10 = function() { + return { type: "line_to", command: "-|" }; + }; + var peg$f11 = function() { + return { type: "line_to", command: "--" }; + }; + var peg$f12 = function(prefix, content) { + return { type: "coordinate", content, prefix }; + }; + var peg$f13 = function(content) { + return { type: "square_brace_group", content }; + }; + var peg$f14 = function(v) { + return { type: "unknown", content: v }; + }; + var peg$f15 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f16 = function(tok) { + return tok; + }; + var peg$f17 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f18 = function(tok) { + return tok; + }; + var peg$f19 = function(tok) { + return options.isComment(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$f21 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f22 = function(tok) { + return tok; + }; + var peg$f23 = function(c) { + return c; + }; + var peg$f24 = function(tok) { + return options.isOperation(tok); + }; + var peg$f25 = function(tok) { + return { type: "operation", content: tok }; + }; + var peg$f26 = function(tok) { + return options.isChar(tok, "="); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options.isChar(tok, "["); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options.isChar(tok, "]"); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options.isChar(tok, "("); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$f34 = function(tok) { + return options.isChar(tok, ")"); + }; + var peg$f35 = function(tok) { + return tok; + }; + var peg$f36 = function(tok) { + return options.isChar(tok, "+"); + }; + var peg$f37 = function(tok) { + return tok; + }; + var peg$f38 = function(tok) { + return options.isChar(tok, "-"); + }; + var peg$f39 = function(tok) { + return tok; + }; + var peg$f40 = function(tok) { + return options.isChar(tok, "|"); + }; + var peg$f41 = function(tok) { + return tok; + }; + var peg$f42 = function(tok) { + return options.isChar(tok, "."); + }; + var peg$f43 = function(tok) { + return tok; + }; + var peg$f44 = function(tok) { + return options.isChar(tok, "controls"); + }; + var peg$f45 = function(tok) { + return tok; + }; + var peg$f46 = function(tok) { + return options.isChar(tok, "and"); + }; + var peg$f47 = function(tok) { + return tok; + }; + var peg$f48 = function(tok) { + return options.isChar(tok, "svg"); + }; + var peg$f49 = function(tok) { + return tok; + }; + var peg$f50 = function(tok) { + return options.isGroup(tok); + }; + var peg$f51 = function(tok) { + return tok; + }; + var peg$f52 = function(tok) { + return options.isAnyMacro(tok); + }; + var peg$f53 = function(tok) { + return tok; + }; + var peg$f54 = function(tok) { + return options.isChar(tok, "foreach"); + }; + var peg$f55 = function(tok) { + return tok; + }; + var peg$f56 = function(tok) { + return options.isMacro(tok, "foreach"); + }; + var peg$f57 = function(tok) { + return tok; + }; + var peg$f58 = function(tok) { + return options.isChar(tok, "in"); + }; + var peg$f59 = function(tok) { + return tok; + }; + var peg$f60 = function(tok) { + return options.isChar(tok, ":"); + }; + var peg$f61 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function offset() { + return peg$savedPos; + } + function range() { + return { + source: peg$source, + start: peg$savedPos, + end: peg$currPos + }; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function expected(description, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location2 + ); + } + function error(message, location2) { + location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos); + throw peg$buildSimpleError(message, location2); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildSimpleError(message, location2) { + return new peg$SyntaxError(message, null, null, location2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsepath_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + peg$savedPos = s2; + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + peg$savedPos = s2; + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f1(s1); + } + s0 = s1; + return s0; + } + function peg$parseanimation() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parsecolon(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = []; + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + peg$savedPos = s4; + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + peg$savedPos = s4; + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseequals(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_comment_(); + s6 = peg$parsegroup(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s2, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseforeach_keyword(); + if (s1 === peg$FAILED) { + s1 = peg$parseforeach_macro(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parseforeach_body(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_body() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = peg$parse_comment_(); + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsein_keyword(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$parsegroup(); + if (s7 === peg$FAILED) { + s7 = peg$parsemacro(); + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_comment_(); + s9 = peg$parseforeach(); + if (s9 === peg$FAILED) { + s9 = peg$parsegroup(); + if (s9 === peg$FAILED) { + s9 = peg$parsemacro(); + } + } + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsesvg_keyword(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f6(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecurve_to() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + s0 = peg$currPos; + s1 = peg$parsedotdot(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsecontrols_keyword(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_comment_(); + s5 = peg$parsecoordinate(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$currPos; + s8 = peg$parseand_keyword(); + if (s8 !== peg$FAILED) { + s9 = peg$parse_comment_(); + s10 = peg$parsecoordinate(); + if (s10 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f7(s2, s4, s5, s6, s9, s10); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 === peg$FAILED) { + s7 = null; + } + s8 = peg$parse_comment_(); + s9 = peg$parsedotdot(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f8(s2, s4, s5, s6, s7, s8); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_to() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsepipe(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parsepipe(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f10(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f11(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parsecoordinate() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parseplus(); + if (s3 !== peg$FAILED) { + s4 = peg$parseplus(); + if (s4 === peg$FAILED) { + s4 = null; + } + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$parseopen_paren(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s3 = input.substring(s3, peg$currPos); + s4 = peg$parseclose_paren(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesquare_brace_group() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parseopen_square_brace(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parseclose_square_brace(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedotdot() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsedot(); + if (s1 !== peg$FAILED) { + s2 = peg$parsedot(); + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunknown() { + var s0, s1; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f14(s1); + } + s0 = s1; + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f15(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f16(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f17(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f18(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parsecomment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f22(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parse_comment_() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsecomment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + peg$savedPos = s0; + s0 = peg$f23(s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parseopen_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f29(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f35(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f36(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f37(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f38(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f39(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepipe() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f41(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedot() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f43(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecontrols_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f44(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f45(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseand_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f46(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f47(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f48(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f49(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f50(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f51(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f52(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f53(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f54(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f55(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_macro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f56(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f57(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsein_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f58(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f59(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolon() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$f60(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f61(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isChar: (node, char) => node.type === "string" && node.content === char, + isOperation: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => node.type === "whitespace" || node.type === "parbreak", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + isGroup: (node) => node.type === "group", + isMacro: (node, name) => node.type === "macro" && node.content === name, + isAnyMacro: (node) => node.type === "macro" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var LatexPegParser = latex_default; +var AlignEnvironmentPegParser = align_environment_default; +var ArgSpecPegParser = xparse_argspec_default; +var PgfkeysPegParser = pgfkeys_default; +var TikzPegParser = tikz_default; + +// ../unified-latex-util-argspec/dist/index.js +var parseCache = {}; +function parse(str = "") { + parseCache[str] = parseCache[str] || ArgSpecPegParser.parse(str); + return parseCache[str]; +} + +// ../unified-latex-builder/dist/index.js +var BRACES_MAP = { + "*": { openMark: "", closeMark: "" }, + "{": { openMark: "{", closeMark: "}" }, + "[": { openMark: "[", closeMark: "]" }, + "(": { openMark: "(", closeMark: ")" }, + "<": { openMark: "<", closeMark: ">" } +}; +var CLOSE_BRACES = new Set( + Object.values(BRACES_MAP).map((x) => x.closeMark).filter((x) => x) +); +function bracesToOpenAndCloseMarks(braces) { + const ret = []; + for (const char of braces.split("")) { + if (CLOSE_BRACES.has(char)) { + continue; + } + const braces2 = BRACES_MAP[char]; + if (braces2 == null) { + throw new Error(`Unknown open/close mark type "${char}"`); + } + braces2; + ret.push(braces2); + } + return ret; +} +function arg(args2, special) { + if (args2 == null) { + return { type: "argument", content: [], openMark: "", closeMark: "" }; + } + if (typeof args2 === "string") { + args2 = s(args2); + } + if (!Array.isArray(args2) && args2.type === "argument") { + return args2; + } + let openMark = (special == null ? void 0 : special.openMark) ?? "{"; + let closeMark = (special == null ? void 0 : special.closeMark) ?? "}"; + if (special == null ? void 0 : special.braces) { + const braces = bracesToOpenAndCloseMarks(special.braces); + if (braces[0]) { + openMark = braces[0].openMark; + closeMark = braces[0].closeMark; + } + } + if (!Array.isArray(args2)) { + args2 = [args2]; + } + return { type: "argument", content: args2, openMark, closeMark }; +} +function s(value) { + if (typeof value === "string") { + return { type: "string", content: value }; + } + return value; +} + +// ../unified-latex-util-scan/dist/index.js +var import_trie_prefix_tree = __toESM(require_dist(), 1); +function scan(nodes, token, options) { + const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } = options || {}; + if (typeof token === "string") { + token = { type: "string", content: token }; + } + for (let i = startIndex || 0; i < nodes.length; i++) { + const node = nodes[i]; + if (node.type === token.type) { + switch (node.type) { + case "comment": + case "displaymath": + case "inlinemath": + case "root": + case "parbreak": + case "whitespace": + case "verb": + case "verbatim": + case "group": + return i; + case "macro": + if (node.content === token.content) { + return i; + } + break; + case "environment": + case "mathenv": + if (printRaw(node.env) === printRaw(token.env)) { + return i; + } + break; + case "string": + if (node.content === token.content) { + return i; + } + if (allowSubstringMatches && node.content.indexOf(token.content) >= 0) { + return i; + } + break; + } + } + if (onlySkipWhitespaceAndComments && !match.whitespace(node) && !match.comment(node)) { + return null; + } + } + return null; +} + +// ../unified-latex-util-render-info/dist/index.js +function updateRenderInfo(node, renderInfo) { + if (renderInfo != null) { + node._renderInfo = { ...node._renderInfo || {}, ...renderInfo }; + } + return node; +} + +// ../unified-latex-util-arguments/dist/index.js +function gobbleSingleArgument(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "string" || !argSpec.type) { + throw new Error( + `argSpec must be an already-parsed argument specification, not "${JSON.stringify( + argSpec + )}"` + ); + } + let argument2 = null; + let currPos = startPos; + const gobbleWhitespace = argSpec.noLeadingWhitespace ? () => { + } : () => { + while (currPos < nodes.length) { + if (!match.whitespace(nodes[currPos])) { + break; + } + currPos++; + } + }; + const openMark = argSpec.openBrace || ""; + const closeMark = argSpec.closeBrace || ""; + const acceptGroup = (argSpec.type === "mandatory" || argSpec.type === "optional") && openMark === "{" && closeMark === "}"; + function findBracePositions() { + let openMarkPos = null; + if (openMark) { + openMarkPos = nodes.findIndex( + (node, i) => i >= currPos && match.string(node, openMark) + ); + if (openMarkPos < currPos) { + openMarkPos = null; + } + } + let closeMarkPos = null; + if (openMarkPos != null) { + closeMarkPos = nodes.findIndex( + (node, i) => i >= openMarkPos + 1 && match.string(node, closeMark) + ); + if (closeMarkPos < openMarkPos + 1) { + closeMarkPos = null; + } + } + return [openMarkPos, closeMarkPos]; + } + gobbleWhitespace(); + const currNode = nodes[currPos]; + if (currNode == null || match.comment(currNode) || match.parbreak(currNode)) { + return { argument: argument2, nodesRemoved: 0 }; + } + switch (argSpec.type) { + case "mandatory": + if (acceptGroup) { + let content = [currNode]; + if (match.group(currNode)) { + content = currNode.content; + } + argument2 = arg(content, { + openMark, + closeMark + }); + currPos++; + break; + } + case "optional": + if (acceptGroup && match.group(currNode)) { + argument2 = arg(currNode.content, { + openMark, + closeMark + }); + currPos++; + break; + } + if (match.string(currNode, openMark)) { + const [openMarkPos, closeMarkPos] = findBracePositions(); + if (openMarkPos != null && closeMarkPos != null) { + argument2 = arg(nodes.slice(openMarkPos + 1, closeMarkPos), { + openMark, + closeMark + }); + currPos = closeMarkPos + 1; + break; + } + } + break; + case "optionalStar": + case "optionalToken": + if (match.string( + currNode, + argSpec.type === "optionalStar" ? "*" : argSpec.token + )) { + argument2 = arg([currNode], { openMark: "", closeMark: "" }); + currPos++; + break; + } + break; + case "until": { + if (argSpec.stopTokens.length > 1) { + console.warn( + `"until" matches with multi-token stop conditions are not yet implemented` + ); + break; + } + const rawToken = argSpec.stopTokens[0]; + const stopToken = rawToken === " " ? { type: "whitespace" } : { type: "string", content: argSpec.stopTokens[0] }; + let matchPos = scan(nodes, stopToken, { + startIndex: startPos, + allowSubstringMatches: true + }); + if (matchPos != null && partialStringMatch(nodes[matchPos], stopToken)) { + console.warn( + `"until" arguments that stop at non-punctuation symbols is not yet implemented` + ); + break; + } + if (matchPos == null) { + break; + } + argument2 = arg(nodes.slice(startPos, matchPos), { + openMark: "", + closeMark: rawToken + }); + currPos = matchPos; + if (currPos < nodes.length) { + currPos++; + } + break; + } + default: + console.warn( + `Don't know how to find an argument of argspec type "${argSpec.type}"` + ); + } + const nodesRemoved = argument2 ? currPos - startPos : 0; + nodes.splice(startPos, nodesRemoved); + return { argument: argument2, nodesRemoved }; +} +function partialStringMatch(node, token) { + return match.anyString(node) && match.anyString(token) && node.content.length > token.content.length; +} +function gobbleArguments(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "function") { + return argSpec(nodes, startPos); + } + if (typeof argSpec === "string") { + argSpec = parse(argSpec); + } + const args = []; + let nodesRemoved = 0; + for (const spec of argSpec) { + const { argument: argument2, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + spec, + startPos + ); + if (argument2) { + args.push(argument2); + nodesRemoved += removed; + } else { + args.push(arg([], { openMark: "", closeMark: "" })); + } + } + return { args, nodesRemoved }; +} +function attachMacroArgsInArray(nodes, macros17) { + let currIndex; + const isRelevantMacro = match.createMacroMatcher(macros17); + function gobbleUntilMacro() { + while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) { + currIndex--; + } + } + currIndex = nodes.length - 1; + while (currIndex >= 0) { + gobbleUntilMacro(); + if (currIndex < 0) { + return; + } + const macroIndex = currIndex; + const macro2 = nodes[macroIndex]; + const macroName = macro2.content; + const macroInfo2 = macros17[macroName]; + updateRenderInfo(macro2, macroInfo2.renderInfo); + const signatureOrParser = macroInfo2.argumentParser || macroInfo2.signature; + if (signatureOrParser == null) { + currIndex--; + continue; + } + if (macro2.args != null) { + currIndex = macroIndex - 1; + continue; + } + currIndex++; + const { args } = gobbleArguments(nodes, signatureOrParser, currIndex); + macro2.args = args; + currIndex = macroIndex - 1; + } +} + +// ../unified-latex-ctan/package/tikz/libs/tikz-command-argument-parser.ts +var OPTIONAL_ARGUMENT_ARG_SPEC = parse("o")[0]; + +// ../unified-latex-ctan/package/tikz/libs/parser.ts +function createMatchers2() { + return { + isChar: match.string, + isTerminal: (node) => match.string(node, ";"), + isOperation: (node) => match.anyString(node) && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => match.whitespace(node) || match.parbreak(node), + isComment: match.comment, + isGroup: match.group, + isMacro: match.macro, + isAnyMacro: match.anyMacro + }; +} +var matchers = createMatchers2(); +function parse2(ast, options) { + const { startRule = "path_spec" } = options || {}; + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return TikzPegParser.parse(ast, { + ...matchers, + startRule + }); +} + +// ../unified-latex-util-pgfkeys/dist/index.js +function createMatchers3() { + return { + isChar: (node, char) => match.string(node, char), + isComma: (node) => match.string(node, ","), + isEquals: (node) => match.string(node, "="), + isWhitespace: (node) => match.whitespace(node), + isParbreak: (node) => match.parbreak(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parsePgfkeys(ast, options) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + const { allowParenGroups = false } = options || {}; + ast = decorateArrayForPegjs([...ast]); + return PgfkeysPegParser.parse(ast, { + ...createMatchers3(), + allowParenGroups + }); +} + +// libs/printer/print-argument-pgfkeys.ts +function printArgumentPgfkeys(nodes, options) { + const { allowParenGroups = false } = options; + const parsed = parsePgfkeys(nodes, { allowParenGroups }); + const content = []; + for (const part of parsed) { + const isLastItem = part === parsed[parsed.length - 1]; + if (part.itemParts) { + const parts = part.itemParts.map( + (node) => printRaw(node, { asArray: true }).map( + (token) => token === linebreak ? hardline2 : token + ) + ); + const row = join2("=", parts); + content.push(row); + if (part.trailingComma) { + content.push(","); + } + } + if (part.trailingComment) { + const leadingContent = part.itemParts ? [" "] : []; + if (part.leadingParbreak) { + leadingContent.push(hardline2); + } + content.push( + ...leadingContent, + // We're carefully and manually controlling the newlines, + // so print the comment directly without any newlines + "%", + part.trailingComment.content, + breakParent2 + ); + } + if (!isLastItem) { + content.push(line2); + } + } + let leadingComment = [""]; + if (options.leadingComment) { + if (options.leadingComment.leadingWhitespace) { + leadingComment.push(" "); + } + leadingComment.push("%" + options.leadingComment.content, breakParent2); + } + return group3([ + options.openMark, + ...leadingComment, + // If there is no content, we don't want to push an extra `softline`. + // This matters because the braces group could still be broken by `leadingComment` + content.length > 0 ? indent2([softline2, ...content]) : "", + softline2, + options.closeMark + ]); +} + +// libs/printer/tikz.ts +function printTikzArgument(path2, print, options) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const content = []; + const nodes = [...node.content]; + trim3(nodes); + try { + const tikzAst = parse2(nodes); + if (tikzAst.content.length === 0) { + content.push(";"); + return content; + } + const printer2 = new TikzArgumentPrinter(tikzAst, path2, print); + return printer2.toDoc(); + } catch (e) { + console.warn("Encountered error when trying to parse tikz argument", e); + } + content.push(";"); + return content; +} +function printFragment(fragment, path2, print) { + const tmpKey = Symbol(); + const currNode = path2.getNode(); + if (!currNode) { + throw new Error( + "tried to print a fragment, but the current node is `null`" + ); + } + currNode[tmpKey] = fragment; + const ret = print(tmpKey); + delete currNode[tmpKey]; + return ret; +} +function printTikzPathSpecNode(node, path2, print) { + switch (node.type) { + case "comment": + return printFragment(node, path2, print); + case "unknown": + return printFragment(node.content, path2, print); + case "coordinate": + return [printRaw(node.prefix), "(", printRaw(node.content), ")"]; + case "line_to": + return node.command; + case "square_brace_group": + return printOptionalArgs(node.content); + case "operation": + return node.content.content; + case "svg_operation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const options = node.options ? printOptionalArgs(node.options) : []; + const rest = node.options ? [group3(indent2([line2, printRaw(node.content)]))] : [" ", printRaw(node.content)]; + return [...comments, "svg", options, ...rest]; + } + case "curve_to": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const printedControls = node.controls.length > 1 ? [ + printTikzPathSpecNode(node.controls[0], path2, print), + " ", + "and", + line2, + printTikzPathSpecNode(node.controls[1], path2, print) + ] : [printTikzPathSpecNode(node.controls[0], path2, print)]; + return [ + ...comments, + "..", + " ", + group3( + indent2(["controls", line2, ...printedControls, " ", ".."]) + ) + ]; + } + case "animation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + return [ + ...comments, + ":", + node.attribute, + " ", + "=", + " ", + group3( + indent2([ + printArgumentPgfkeys(node.content, { + openMark: "{", + closeMark: "}" + }) + ]) + ) + ]; + } + case "foreach": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const variables = [...node.variables]; + trim3(variables); + const list = node.list.type === "macro" ? printFragment(node.list, path2, print) : printArgumentPgfkeys(node.list.content, { + openMark: "{", + closeMark: "}", + allowParenGroups: true + }); + const doc = [ + ...comments, + printRaw(node.start), + " ", + printRaw(variables) + ]; + if (node.options) { + doc.push(" ", indent2(printOptionalArgs(node.options))); + } + doc.push(" ", "in", " ", group3(indent2(list))); + const commandType = node.command.type; + switch (commandType) { + case "foreach": + doc.push( + indent2([ + line2, + printTikzPathSpecNode(node.command, path2, print) + ]) + ); + break; + case "macro": + doc.push( + indent2([line2, printFragment(node.command, path2, print)]) + ); + break; + case "group": { + const groupContent = [...node.command.content]; + trim3(groupContent); + doc.push( + " ", + indent2( + group3([ + "{", + indent2([ + softline2, + ...groupContent.map( + (n) => printFragment(n, path2, print) + ) + ]), + softline2, + "}" + ]) + ) + ); + break; + } + default: + const invalidType = commandType; + console.warn( + `Unhandled command type when printing "foreach": ${invalidType}` + ); + } + return indent2(doc); + } + } + console.warn( + `Encountered unknown type when trying to print tikz PathSpec: "${node.type}"` + ); + return []; +} +function printOptionalArgs(nodes) { + return printArgumentPgfkeys(nodes, { + openMark: "[", + closeMark: "]" + }); +} +var _path, _print; +var TikzArgumentPrinter = class { + constructor(spec, path2, print) { + __privateAdd(this, _path, void 0); + __privateAdd(this, _print, void 0); + __privateSet(this, _path, path2); + __privateSet(this, _print, print); + this.nodes = [...spec.content]; + } + nodeToDoc(node) { + return printTikzPathSpecNode(node, __privateGet(this, _path), __privateGet(this, _print)); + } + toDoc() { + const doc = []; + const startArg = this.eatOptionalArg(); + if (startArg.optionalArg) { + doc.push( + ...startArg.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ) + ); + doc.push(printOptionalArgs(startArg.optionalArg.content)); + } + const innerDoc = []; + doc.push(group3([indent2(innerDoc), ";"])); + let cycle = -1; + while (this.nodes.length > 0) { + cycle++; + const firstSep = cycle === 0 && !startArg.optionalArg ? " " : line2; + const comingUp = this.peek(); + switch (comingUp) { + case "short_path": { + const [n0, n1, n2] = this.nodes.splice(0, 3); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1), + " ", + this.nodeToDoc(n2) + ); + continue; + } + case "long_path": { + const [n0, n1] = this.nodes.splice(0, 2); + if (n1.type === "operation") { + this.nodes.unshift(n1); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.eatOperation() + ); + } else { + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1) + ); + } + continue; + } + case "node": + { + const eatenNode = this.eatNode(); + if (eatenNode) { + innerDoc.push(line2, ...eatenNode); + continue; + } + console.warn( + "Expected to print a tikz `node` PathSpec but couldn't find the text `node`" + ); + } + continue; + case "operation": + innerDoc.push(firstSep, this.eatOperation()); + continue; + case "unknown": { + const node = this.nodes.shift(); + innerDoc.push(firstSep, this.nodeToDoc(node)); + continue; + } + } + this.nodes.shift(); + } + return doc; + } + /** + * Look at the current node and the nodes that follow. Return what + * "type" is recognized. + */ + peek() { + const [n0, n1, n2, n3] = [ + this.nodes[0], + this.nodes[1], + this.nodes[2], + this.nodes[3] + ]; + if ((n0 == null ? void 0 : n0.type) === "coordinate" && isPathJoinOperation(n1)) { + if ((n2 == null ? void 0 : n2.type) === "coordinate" && !((n3 == null ? void 0 : n3.type) === "coordinate" || isPathJoinOperation(n3))) { + return "short_path"; + } + return "long_path"; + } + if ((n0 == null ? void 0 : n0.type) === "operation") { + if (n0.content.content === "node") { + return "node"; + } + return "operation"; + } + return "unknown"; + } + /** + * Eat comments and an optional arg if present. If no optional + * arg is present, do nothing. + */ + eatOptionalArg() { + let i = 0; + const comments = []; + let optionalArg = null; + for (; i < this.nodes.length; i++) { + const node = this.nodes[i]; + if (node.type === "square_brace_group") { + optionalArg = node; + i++; + break; + } + if (node.type === "comment") { + comments.push(node); + continue; + } + break; + } + if (optionalArg) { + this.nodes.splice(0, i); + } + return { optionalArg, comments }; + } + /** + * Eat a `type === "operation"` node whose contents is `"node"`. I.e., + * the type of thing that shows up in `\path node at (1,1) {foo};` + */ + eatNode() { + const firstNode = this.nodes[0]; + if ((firstNode == null ? void 0 : firstNode.type) === "operation" && firstNode.content.content === "node") { + this.nodes.shift(); + } else { + return null; + } + const innerDoc = []; + const commentBlock = []; + const doc = [commentBlock, "node", group3(indent2(innerDoc))]; + let hasNodeArgument = false; + let shouldBail = false; + let i = 0; + const comments = []; + const options = []; + const name = []; + const atLocations = []; + const animations = []; + let content = []; + for (; i < this.nodes.length && !shouldBail; i++) { + const node = this.nodes[i]; + switch (node.type) { + case "animation": + animations.push(this.nodeToDoc(node)); + continue; + case "comment": { + const comment2 = { + ...node, + leadingWhitespace: false + }; + comments.push(this.nodeToDoc(comment2)); + continue; + } + case "square_brace_group": + options.push(printOptionalArgs(node.content)); + continue; + case "coordinate": + name.push(this.nodeToDoc(node)); + continue; + case "operation": { + if (node.content.content === "at") { + const nextNode = this.nodes[i + 1]; + if (!nextNode || !(nextNode.type === "coordinate" || nextNode.type === "unknown" && match.anyMacro(nextNode.content))) { + shouldBail = true; + continue; + } + atLocations.push(["at", " ", this.nodeToDoc(nextNode)]); + i++; + continue; + } + shouldBail = true; + continue; + } + case "unknown": { + if (match.group(node.content)) { + hasNodeArgument = true; + content = this.nodeToDoc(node); + } + } + } + break; + } + if (!hasNodeArgument) { + return innerDoc; + } + this.nodes.splice(0, i + 1); + let isFirstElement = true; + let isNamed = !(Array.isArray(name) && name.length === 0); + for (const comment2 of comments) { + commentBlock.push(comment2, hardline2); + } + if (options.length > 0) { + innerDoc.push(join2(" ", options)); + isFirstElement = false; + } + if (animations.length > 0) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(join2(line2, animations)); + isFirstElement = false; + } + if (isNamed) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(name); + isFirstElement = false; + } + if (atLocations.length > 0) { + innerDoc.push(isFirstElement || isNamed ? " " : line2); + innerDoc.push(join2(line2, atLocations)); + isFirstElement = false; + } + innerDoc.push(line2, content); + return doc; + } + /** + * Eat a `type === "operation"` node, including its optional arguments. + */ + eatOperation() { + const node = this.nodes[0]; + if ((node == null ? void 0 : node.type) === "operation") { + this.nodes.shift(); + } else { + return []; + } + const doc = []; + if ((node == null ? void 0 : node.type) !== "operation") { + throw new Error("Expecting `operation` node."); + } + const options = this.eatOptionalArg(); + doc.push( + ...options.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ), + node.content.content + ); + if (options.optionalArg) { + doc.push(indent2(printOptionalArgs(options.optionalArg.content))); + } + return doc; + } +}; +_path = new WeakMap(); +_print = new WeakMap(); +var PATH_JOIN_OPERATIONS = /* @__PURE__ */ new Set(["rectangle", "grid", "sin", "cos", "to"]); +function isPathJoinOperation(node) { + if (!node) { + return false; + } + switch (node.type) { + case "line_to": + case "curve_to": + return true; + case "operation": + return PATH_JOIN_OPERATIONS.has(node.content.content); + } + return false; +} + +// libs/printer/argument.ts +function printArgument(path2, print, options) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + if (node.openMark === "" && node.closeMark === "" && node.content.length === 0) { + return []; + } + const parentNode = path2.getParentNode(); + const { renderInfo: parentRenderInfo } = getNodeInfo(parentNode, options); + if (parentRenderInfo.pgfkeysArgs) { + const leadingComment = node.content.length > 0 && match.comment(node.content[0]) && node.content[0].sameline ? node.content[0] : null; + const content2 = leadingComment ? node.content.slice(1) : node.content; + trim3(content2); + return printArgumentPgfkeys(content2, { + openMark: node.openMark, + closeMark: node.closeMark, + leadingComment + }); + } + if (parentRenderInfo.tikzPathCommand) { + return printTikzArgument(path2, print, options); + } + const openMark = node.openMark; + const closeMark = node.closeMark; + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options); + if (match.comment(node.content[node.content.length - 1])) { + content.push(hardline2); + } + let rawRet = [openMark, fill2(content), closeMark]; + if (renderInfo.inParMode) { + rawRet = [openMark, ...content, closeMark]; + } + if (referenceMap) { + referenceMap.setRenderCache(node, rawRet); + } + return rawRet; +} + +// libs/printer/root.ts +function hasPreambleCode(nodes) { + return nodes.some((node) => match.macro(node, "documentclass")); +} +function printRoot(path2, print, options) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const content = path2.map(print, "content"); + const rawContent = formatDocArray(node.content, content, options); + const concatFunction = hasPreambleCode(node.content) ? (x) => x : fill2; + return concatFunction(rawContent); +} + +// libs/printer/comment.ts +function printComment(path2, _print2, _options) { + const node = path2.getNode(); + let leadingWhitespace = ""; + if (node.leadingWhitespace && node.sameline) { + leadingWhitespace = " "; + } + const content = [leadingWhitespace, "%" + printRaw(node.content)]; + return content; +} + +// libs/printer/math.ts +function printInlineMath(path2, print, options) { + const node = path2.getNode(); + if (node.content.length === 0) { + return ["$", " ", "$"]; + } + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options); + content = joinWithSoftline(content); + if (node.content[node.content.length - 1].type === "comment") { + content.push(hardline2); + } + return fill2(["$", ...content, "$"]); +} +function printDisplayMath(path2, print, options) { + const node = path2.getNode(); + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options); + content = joinWithSoftline(content); + const bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + ESCAPE2 + "[", + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + ESCAPE2 + "]" + ]; +} + +// ../unified-latex-util-align/dist/index.js +function createMatchers4(rowSepMacros, colSep) { + const isRowSep = match.createMacroMatcher(rowSepMacros); + return { + isRowSep, + isColSep: (node) => colSep.some((sep) => match.string(node, sep)), + isWhitespace: (node) => match.whitespace(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parseAlignEnvironment(ast, colSep = ["&"], rowSepMacros = ["\\", "hline", "cr"]) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return AlignEnvironmentPegParser.parse( + ast, + createMatchers4(rowSepMacros, colSep) + ); +} + +// libs/printer/environment.ts +function printVerbatimEnvironment(path2, print, options) { + const node = path2.getNode(); + const env = formatEnvSurround(node); + return [env.start, node.content, env.end]; +} +function printEnvironment(path2, print, options) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const args = node.args ? path2.map(print, "args") : []; + const env = formatEnvSurround(node); + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options); + if (renderInfo.inMathMode) { + content = joinWithSoftline(content); + } + let bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + env.start, + ...args, + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + env.end + ]; +} +function printAlignedEnvironment(path2, print, options) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const args = node.args ? path2.map(print, "args") : []; + const env = formatEnvSurround(node); + const leadingComment = node.content[0] && node.content[0].type === "comment" && node.content[0].sameline ? node.content[0] : null; + const { rows, rowSeps, trailingComments } = formatAlignedContent( + leadingComment ? node.content.slice(1) : node.content + ); + const content = []; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + const rowSep = rowSeps[i]; + const trailingComment = trailingComments[i]; + content.push(row); + if (rowSep) { + content.push(printRaw(rowSep)); + } + if (rowSep && trailingComment) { + content.push(" "); + } + if (trailingComment) { + content.push(["%", printRaw(trailingComment.content)]); + } + if (rowSep || trailingComment) { + content.push(hardline2); + } + } + if (content[content.length - 1] === hardline2) { + content.pop(); + } + if (leadingComment) { + content.unshift( + leadingComment.leadingWhitespace ? " " : "", + "%" + printRaw(leadingComment.content), + hardline2 + ); + return [env.start, ...args, indent2(content), hardline2, env.end]; + } + return [ + env.start, + ...args, + indent2([hardline2, ...content]), + hardline2, + env.end + ]; +} +function formatAlignedContent(nodes) { + function getSpace(len = 1) { + return " ".repeat(len); + } + const rows = parseAlignEnvironment(nodes); + const numCols = Math.max(...rows.map((r) => r.cells.length)); + const rowSeps = rows.map(({ rowSep }) => printRaw(rowSep || [])); + const trailingComments = rows.map(({ trailingComment }) => trailingComment); + const renderedRows = rows.map(({ cells, colSeps }) => ({ + cells: cells.map((nodes2) => { + trim3(nodes2); + return printRaw(nodes2); + }), + seps: colSeps.map((nodes2) => printRaw(nodes2)) + })); + const colWidths = []; + for (let i = 0; i < numCols; i++) { + colWidths.push( + Math.max( + ...renderedRows.map( + ({ cells, seps }) => ((cells[i] || "") + (seps[i] || "")).length + ) + ) + ); + } + const joinedRows = renderedRows.map(({ cells, seps }) => { + if (cells.length === 1 && cells[0] === "") { + return ""; + } + let ret = ""; + for (let i = 0; i < cells.length; i++) { + const width = colWidths[i] - (seps[i] || "").length; + ret += (i === 0 ? "" : " ") + cells[i] + getSpace(width - cells[i].length + 1) + (seps[i] || ""); + } + return ret; + }); + return { rows: joinedRows, rowSeps, trailingComments }; +} + +// libs/reference-map.ts +var ReferenceMap = class { + constructor(ast) { + this.ast = ast; + this.map = /* @__PURE__ */ new Map(); + visit( + this.ast, + (nodeList) => { + for (let i = 0; i < nodeList.length; i++) { + this.map.set(nodeList[i], { + previous: nodeList[i - 1], + next: nodeList[i + 1] + }); + } + }, + { includeArrays: true, test: Array.isArray } + ); + } + /** + * Associate render-specific data with this node. This data + * will be overwritten if `setRenderCache` is called twice. + * + * @param {Ast.Ast} node + * @param {*} data + * @memberof ReferenceMap + */ + setRenderCache(node, data) { + const currData = this.map.get(node) || {}; + this.map.set(node, { ...currData, renderCache: data }); + } + /** + * Retrieve data associated with `node` via `setRenderCache` + * + * @param {Ast.Ast} node + * @returns {(object | undefined)} + * @memberof ReferenceMap + */ + getRenderCache(node) { + var _a; + return (_a = this.map.get(node)) == null ? void 0 : _a.renderCache; + } + getPreviousNode(node) { + return (this.map.get(node) || {}).previous; + } + getNextNode(node) { + return (this.map.get(node) || {}).next; + } +}; + +// libs/printer/printer.ts +function printLatexAst(path2, options, print) { + const node = path2.getValue(); + const { renderInfo } = getNodeInfo(node, options); + if (node == null) { + return node; + } + if (typeof node === "string") { + return node; + } + switch (node.type) { + case "root": + if (options.referenceMap) { + console.warn( + "Processing root node, but ReferenceMap already exists. Are there multiple nodes of type 'root'?" + ); + } + options.referenceMap = new ReferenceMap(node); + return printRoot(path2, print, options); + case "argument": + return printArgument(path2, print, options); + case "comment": + return printComment(path2, print, options); + case "environment": + case "mathenv": + if (renderInfo.alignContent) { + return printAlignedEnvironment(path2, print, options); + } + return printEnvironment(path2, print, options); + case "displaymath": + return printDisplayMath(path2, print, options); + case "group": + const content = printRaw(node.content, { + asArray: true + }).map((token) => token === linebreak ? hardline2 : token); + return ["{", ...content, "}"]; + case "inlinemath": + return printInlineMath(path2, print, options); + case "macro": + return printMacro(path2, print, options); + case "parbreak": + return [hardline2, hardline2]; + case "string": + return node.content; + case "verb": + return [ + ESCAPE2, + node.env, + node.escape, + printRaw(node.content), + node.escape + ]; + case "verbatim": + return printVerbatimEnvironment(path2, print, options); + case "whitespace": + return line2; + default: + console.warn("Printing unknown type", node); + return printRaw(node); + } +} + +// ../../node_modules/bail/index.js +function bail(error) { + if (error) { + throw error; + } +} + +// ../../node_modules/unified/lib/index.js +var import_is_buffer2 = __toESM(require_is_buffer(), 1); +var import_extend = __toESM(require_extend(), 1); + +// ../../node_modules/unified/node_modules/is-plain-obj/index.js +function isPlainObject(value) { + if (typeof value !== "object" || value === null) { + return false; + } + const prototype = Object.getPrototypeOf(value); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); +} + +// ../../node_modules/trough/index.js +function trough() { + const fns = []; + const pipeline = { run, use }; + return pipeline; + function run(...values) { + let middlewareIndex = -1; + const callback = values.pop(); + if (typeof callback !== "function") { + throw new TypeError("Expected function as last argument, not " + callback); + } + next(null, ...values); + function next(error, ...output) { + const fn = fns[++middlewareIndex]; + let index2 = -1; + if (error) { + callback(error); + return; + } + while (++index2 < values.length) { + if (output[index2] === null || output[index2] === void 0) { + output[index2] = values[index2]; + } + } + values = output; + if (fn) { + wrap(fn, next)(...output); + } else { + callback(null, ...output); + } + } + } + function use(middelware) { + if (typeof middelware !== "function") { + throw new TypeError( + "Expected `middelware` to be a function, not " + middelware + ); + } + fns.push(middelware); + return pipeline; + } +} +function wrap(middleware, callback) { + let called; + return wrapped; + function wrapped(...parameters) { + const fnExpectsCallback = middleware.length > parameters.length; + let result; + if (fnExpectsCallback) { + parameters.push(done); + } + try { + result = middleware.apply(this, parameters); + } catch (error) { + const exception = ( + /** @type {Error} */ + error + ); + if (fnExpectsCallback && called) { + throw exception; + } + return done(exception); + } + if (!fnExpectsCallback) { + if (result instanceof Promise) { + result.then(then, done); + } else if (result instanceof Error) { + done(result); + } else { + then(result); + } + } + } + function done(error, ...output) { + if (!called) { + called = true; + callback(error, ...output); + } + } + function then(value) { + done(null, value); + } +} + +// ../../node_modules/vfile/lib/index.js +var import_is_buffer = __toESM(require_is_buffer(), 1); + +// ../../node_modules/unist-util-stringify-position/lib/index.js +function stringifyPosition(value) { + if (!value || typeof value !== "object") { + return ""; + } + if ("position" in value || "type" in value) { + return position(value.position); + } + if ("start" in value || "end" in value) { + return position(value); + } + if ("line" in value || "column" in value) { + return point(value); + } + return ""; +} +function point(point2) { + return index(point2 && point2.line) + ":" + index(point2 && point2.column); +} +function position(pos) { + return point(pos && pos.start) + "-" + point(pos && pos.end); +} +function index(value) { + return value && typeof value === "number" ? value : 1; +} + +// ../../node_modules/vfile-message/index.js +var VFileMessage = class extends Error { + /** + * Create a message for `reason` at `place` from `origin`. + * + * When an error is passed in as `reason`, the `stack` is copied. + * + * @param {string|Error|VFileMessage} reason + * Reason for message. + * Uses the stack and message of the error if given. + * @param {Node|NodeLike|Position|Point} [place] + * Place at which the message occurred in a file. + * @param {string} [origin] + * Place in code the message originates from (example `'my-package:my-rule-name'`) + */ + constructor(reason, place, origin) { + const parts = [null, null]; + let position2 = { + // @ts-expect-error: we always follows the structure of `position`. + start: { line: null, column: null }, + // @ts-expect-error: " + end: { line: null, column: null } + }; + super(); + if (typeof place === "string") { + origin = place; + place = void 0; + } + if (typeof origin === "string") { + const index2 = origin.indexOf(":"); + if (index2 === -1) { + parts[1] = origin; + } else { + parts[0] = origin.slice(0, index2); + parts[1] = origin.slice(index2 + 1); + } + } + if (place) { + if ("type" in place || "position" in place) { + if (place.position) { + position2 = place.position; + } + } else if ("start" in place || "end" in place) { + position2 = place; + } else if ("line" in place || "column" in place) { + position2.start = place; + } + } + this.name = stringifyPosition(place) || "1:1"; + this.message = typeof reason === "object" ? reason.message : reason; + this.stack = ""; + if (typeof reason === "object" && reason.stack) { + this.stack = reason.stack; + } + this.reason = this.message; + this.fatal; + this.line = position2.start.line; + this.column = position2.start.column; + this.position = position2; + this.source = parts[0]; + this.ruleId = parts[1]; + this.file; + this.actual; + this.expected; + this.url; + this.note; + } +}; +VFileMessage.prototype.file = ""; +VFileMessage.prototype.name = ""; +VFileMessage.prototype.reason = ""; +VFileMessage.prototype.message = ""; +VFileMessage.prototype.stack = ""; +VFileMessage.prototype.fatal = null; +VFileMessage.prototype.column = null; +VFileMessage.prototype.line = null; +VFileMessage.prototype.source = null; +VFileMessage.prototype.ruleId = null; +VFileMessage.prototype.position = null; + +// ../../node_modules/vfile/lib/minpath.browser.js +var path = { basename, dirname, extname, join: join3, sep: "/" }; +function basename(path2, ext) { + if (ext !== void 0 && typeof ext !== "string") { + throw new TypeError('"ext" argument must be a string'); + } + assertPath(path2); + let start = 0; + let end = -1; + let index2 = path2.length; + let seenNonSlash; + if (ext === void 0 || ext.length === 0 || ext.length > path2.length) { + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else if (end < 0) { + seenNonSlash = true; + end = index2 + 1; + } + } + return end < 0 ? "" : path2.slice(start, end); + } + if (ext === path2) { + return ""; + } + let firstNonSlashEnd = -1; + let extIndex = ext.length - 1; + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else { + if (firstNonSlashEnd < 0) { + seenNonSlash = true; + firstNonSlashEnd = index2 + 1; + } + if (extIndex > -1) { + if (path2.charCodeAt(index2) === ext.charCodeAt(extIndex--)) { + if (extIndex < 0) { + end = index2; + } + } else { + extIndex = -1; + end = firstNonSlashEnd; + } + } + } + } + if (start === end) { + end = firstNonSlashEnd; + } else if (end < 0) { + end = path2.length; + } + return path2.slice(start, end); +} +function dirname(path2) { + assertPath(path2); + if (path2.length === 0) { + return "."; + } + let end = -1; + let index2 = path2.length; + let unmatchedSlash; + while (--index2) { + if (path2.charCodeAt(index2) === 47) { + if (unmatchedSlash) { + end = index2; + break; + } + } else if (!unmatchedSlash) { + unmatchedSlash = true; + } + } + return end < 0 ? path2.charCodeAt(0) === 47 ? "/" : "." : end === 1 && path2.charCodeAt(0) === 47 ? "//" : path2.slice(0, end); +} +function extname(path2) { + assertPath(path2); + let index2 = path2.length; + let end = -1; + let startPart = 0; + let startDot = -1; + let preDotState = 0; + let unmatchedSlash; + while (index2--) { + const code = path2.charCodeAt(index2); + if (code === 47) { + if (unmatchedSlash) { + startPart = index2 + 1; + break; + } + continue; + } + if (end < 0) { + unmatchedSlash = true; + end = index2 + 1; + } + if (code === 46) { + if (startDot < 0) { + startDot = index2; + } else if (preDotState !== 1) { + preDotState = 1; + } + } else if (startDot > -1) { + preDotState = -1; + } + } + if (startDot < 0 || end < 0 || // We saw a non-dot character immediately before the dot. + preDotState === 0 || // The (right-most) trimmed path component is exactly `..`. + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ""; + } + return path2.slice(startDot, end); +} +function join3(...segments) { + let index2 = -1; + let joined; + while (++index2 < segments.length) { + assertPath(segments[index2]); + if (segments[index2]) { + joined = joined === void 0 ? segments[index2] : joined + "/" + segments[index2]; + } + } + return joined === void 0 ? "." : normalize(joined); +} +function normalize(path2) { + assertPath(path2); + const absolute = path2.charCodeAt(0) === 47; + let value = normalizeString(path2, !absolute); + if (value.length === 0 && !absolute) { + value = "."; + } + if (value.length > 0 && path2.charCodeAt(path2.length - 1) === 47) { + value += "/"; + } + return absolute ? "/" + value : value; +} +function normalizeString(path2, allowAboveRoot) { + let result = ""; + let lastSegmentLength = 0; + let lastSlash = -1; + let dots = 0; + let index2 = -1; + let code; + let lastSlashIndex; + while (++index2 <= path2.length) { + if (index2 < path2.length) { + code = path2.charCodeAt(index2); + } else if (code === 47) { + break; + } else { + code = 47; + } + if (code === 47) { + if (lastSlash === index2 - 1 || dots === 1) { + } else if (lastSlash !== index2 - 1 && dots === 2) { + if (result.length < 2 || lastSegmentLength !== 2 || result.charCodeAt(result.length - 1) !== 46 || result.charCodeAt(result.length - 2) !== 46) { + if (result.length > 2) { + lastSlashIndex = result.lastIndexOf("/"); + if (lastSlashIndex !== result.length - 1) { + if (lastSlashIndex < 0) { + result = ""; + lastSegmentLength = 0; + } else { + result = result.slice(0, lastSlashIndex); + lastSegmentLength = result.length - 1 - result.lastIndexOf("/"); + } + lastSlash = index2; + dots = 0; + continue; + } + } else if (result.length > 0) { + result = ""; + lastSegmentLength = 0; + lastSlash = index2; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + result = result.length > 0 ? result + "/.." : ".."; + lastSegmentLength = 2; + } + } else { + if (result.length > 0) { + result += "/" + path2.slice(lastSlash + 1, index2); + } else { + result = path2.slice(lastSlash + 1, index2); + } + lastSegmentLength = index2 - lastSlash - 1; + } + lastSlash = index2; + dots = 0; + } else if (code === 46 && dots > -1) { + dots++; + } else { + dots = -1; + } + } + return result; +} +function assertPath(path2) { + if (typeof path2 !== "string") { + throw new TypeError( + "Path must be a string. Received " + JSON.stringify(path2) + ); + } +} + +// ../../node_modules/vfile/lib/minproc.browser.js +var proc = { cwd }; +function cwd() { + return "/"; +} + +// ../../node_modules/vfile/lib/minurl.shared.js +function isUrl(fileURLOrPath) { + return fileURLOrPath !== null && typeof fileURLOrPath === "object" && // @ts-expect-error: indexable. + fileURLOrPath.href && // @ts-expect-error: indexable. + fileURLOrPath.origin; +} + +// ../../node_modules/vfile/lib/minurl.browser.js +function urlToPath(path2) { + if (typeof path2 === "string") { + path2 = new URL(path2); + } else if (!isUrl(path2)) { + const error = new TypeError( + 'The "path" argument must be of type string or an instance of URL. Received `' + path2 + "`" + ); + error.code = "ERR_INVALID_ARG_TYPE"; + throw error; + } + if (path2.protocol !== "file:") { + const error = new TypeError("The URL must be of scheme file"); + error.code = "ERR_INVALID_URL_SCHEME"; + throw error; + } + return getPathFromURLPosix(path2); +} +function getPathFromURLPosix(url) { + if (url.hostname !== "") { + const error = new TypeError( + 'File URL host must be "localhost" or empty on darwin' + ); + error.code = "ERR_INVALID_FILE_URL_HOST"; + throw error; + } + const pathname = url.pathname; + let index2 = -1; + while (++index2 < pathname.length) { + if (pathname.charCodeAt(index2) === 37 && pathname.charCodeAt(index2 + 1) === 50) { + const third = pathname.charCodeAt(index2 + 2); + if (third === 70 || third === 102) { + const error = new TypeError( + "File URL path must not include encoded / characters" + ); + error.code = "ERR_INVALID_FILE_URL_PATH"; + throw error; + } + } + } + return decodeURIComponent(pathname); +} + +// ../../node_modules/vfile/lib/index.js +var order = ["history", "path", "basename", "stem", "extname", "dirname"]; +var VFile = class { + /** + * Create a new virtual file. + * + * If `options` is `string` or `Buffer`, it’s treated as `{value: options}`. + * If `options` is a `URL`, it’s treated as `{path: options}`. + * If `options` is a `VFile`, shallow copies its data over to the new file. + * All fields in `options` are set on the newly created `VFile`. + * + * Path related fields are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * It’s not possible to set either `dirname` or `extname` without setting + * either `history`, `path`, `basename`, or `stem` as well. + * + * @param {Compatible} [value] + */ + constructor(value) { + let options; + if (!value) { + options = {}; + } else if (typeof value === "string" || (0, import_is_buffer.default)(value)) { + options = { value }; + } else if (isUrl(value)) { + options = { path: value }; + } else { + options = value; + } + this.data = {}; + this.messages = []; + this.history = []; + this.cwd = proc.cwd(); + this.value; + this.stored; + this.result; + this.map; + let index2 = -1; + while (++index2 < order.length) { + const prop2 = order[index2]; + if (prop2 in options && options[prop2] !== void 0) { + this[prop2] = prop2 === "history" ? [...options[prop2]] : options[prop2]; + } + } + let prop; + for (prop in options) { + if (!order.includes(prop)) + this[prop] = options[prop]; + } + } + /** + * Get the full path (example: `'~/index.min.js'`). + * @returns {string} + */ + get path() { + return this.history[this.history.length - 1]; + } + /** + * Set the full path (example: `'~/index.min.js'`). + * Cannot be nullified. + * You can set a file URL (a `URL` object with a `file:` protocol) which will + * be turned into a path with `url.fileURLToPath`. + * @param {string|URL} path + */ + set path(path2) { + if (isUrl(path2)) { + path2 = urlToPath(path2); + } + assertNonEmpty(path2, "path"); + if (this.path !== path2) { + this.history.push(path2); + } + } + /** + * Get the parent path (example: `'~'`). + */ + get dirname() { + return typeof this.path === "string" ? path.dirname(this.path) : void 0; + } + /** + * Set the parent path (example: `'~'`). + * Cannot be set if there’s no `path` yet. + */ + set dirname(dirname2) { + assertPath2(this.basename, "dirname"); + this.path = path.join(dirname2 || "", this.basename); + } + /** + * Get the basename (including extname) (example: `'index.min.js'`). + */ + get basename() { + return typeof this.path === "string" ? path.basename(this.path) : void 0; + } + /** + * Set basename (including extname) (`'index.min.js'`). + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set basename(basename2) { + assertNonEmpty(basename2, "basename"); + assertPart(basename2, "basename"); + this.path = path.join(this.dirname || "", basename2); + } + /** + * Get the extname (including dot) (example: `'.js'`). + */ + get extname() { + return typeof this.path === "string" ? path.extname(this.path) : void 0; + } + /** + * Set the extname (including dot) (example: `'.js'`). + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be set if there’s no `path` yet. + */ + set extname(extname2) { + assertPart(extname2, "extname"); + assertPath2(this.dirname, "extname"); + if (extname2) { + if (extname2.charCodeAt(0) !== 46) { + throw new Error("`extname` must start with `.`"); + } + if (extname2.includes(".", 1)) { + throw new Error("`extname` cannot contain multiple dots"); + } + } + this.path = path.join(this.dirname, this.stem + (extname2 || "")); + } + /** + * Get the stem (basename w/o extname) (example: `'index.min'`). + */ + get stem() { + return typeof this.path === "string" ? path.basename(this.path, this.extname) : void 0; + } + /** + * Set the stem (basename w/o extname) (example: `'index.min'`). + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set stem(stem) { + assertNonEmpty(stem, "stem"); + assertPart(stem, "stem"); + this.path = path.join(this.dirname || "", stem + (this.extname || "")); + } + /** + * Serialize the file. + * + * @param {BufferEncoding} [encoding='utf8'] + * When `value` is a `Buffer`, `encoding` is a character encoding to + * understand it as (default: `'utf8'`). + * @returns {string} + * Serialized file. + */ + toString(encoding) { + return (this.value || "").toString(encoding); + } + /** + * Constructs a new `VFileMessage`, where `fatal` is set to `false`, and + * associates it with the file by adding it to `vfile.messages` and setting + * `message.file` to the current filepath. + * + * @param {string|Error|VFileMessage} reason + * Human readable reason for the message, uses the stack and message of the error if given. + * @param {Node|NodeLike|Position|Point} [place] + * Place where the message occurred in the file. + * @param {string} [origin] + * Computer readable reason for the message + * @returns {VFileMessage} + * Message. + */ + message(reason, place, origin) { + const message = new VFileMessage(reason, place, origin); + if (this.path) { + message.name = this.path + ":" + message.name; + message.file = this.path; + } + message.fatal = false; + this.messages.push(message); + return message; + } + /** + * Like `VFile#message()`, but associates an informational message where + * `fatal` is set to `null`. + * + * @param {string|Error|VFileMessage} reason + * Human readable reason for the message, uses the stack and message of the error if given. + * @param {Node|NodeLike|Position|Point} [place] + * Place where the message occurred in the file. + * @param {string} [origin] + * Computer readable reason for the message + * @returns {VFileMessage} + * Message. + */ + info(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = null; + return message; + } + /** + * Like `VFile#message()`, but associates a fatal message where `fatal` is + * set to `true`, and then immediately throws it. + * + * > 👉 **Note**: a fatal error means that a file is no longer processable. + * + * @param {string|Error|VFileMessage} reason + * Human readable reason for the message, uses the stack and message of the error if given. + * @param {Node|NodeLike|Position|Point} [place] + * Place where the message occurred in the file. + * @param {string} [origin] + * Computer readable reason for the message + * @returns {never} + * Message. + */ + fail(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = true; + throw message; + } +}; +function assertPart(part, name) { + if (part && part.includes(path.sep)) { + throw new Error( + "`" + name + "` cannot be a path: did not expect `" + path.sep + "`" + ); + } +} +function assertNonEmpty(part, name) { + if (!part) { + throw new Error("`" + name + "` cannot be empty"); + } +} +function assertPath2(path2, name) { + if (!path2) { + throw new Error("Setting `" + name + "` requires `path` to be set too"); + } +} + +// ../../node_modules/unified/lib/index.js +var unified = base().freeze(); +var own = {}.hasOwnProperty; +function base() { + const transformers = trough(); + const attachers = []; + let namespace = {}; + let frozen; + let freezeIndex = -1; + processor.data = data; + processor.Parser = void 0; + processor.Compiler = void 0; + processor.freeze = freeze; + processor.attachers = attachers; + processor.use = use; + processor.parse = parse4; + processor.stringify = stringify; + processor.run = run; + processor.runSync = runSync; + processor.process = process; + processor.processSync = processSync; + return processor; + function processor() { + const destination = base(); + let index2 = -1; + while (++index2 < attachers.length) { + destination.use(...attachers[index2]); + } + destination.data((0, import_extend.default)(true, {}, namespace)); + return destination; + } + function data(key, value) { + if (typeof key === "string") { + if (arguments.length === 2) { + assertUnfrozen("data", frozen); + namespace[key] = value; + return processor; + } + return own.call(namespace, key) && namespace[key] || null; + } + if (key) { + assertUnfrozen("data", frozen); + namespace = key; + return processor; + } + return namespace; + } + function freeze() { + if (frozen) { + return processor; + } + while (++freezeIndex < attachers.length) { + const [attacher, ...options] = attachers[freezeIndex]; + if (options[0] === false) { + continue; + } + if (options[0] === true) { + options[0] = void 0; + } + const transformer = attacher.call(processor, ...options); + if (typeof transformer === "function") { + transformers.use(transformer); + } + } + frozen = true; + freezeIndex = Number.POSITIVE_INFINITY; + return processor; + } + function use(value, ...options) { + let settings; + assertUnfrozen("use", frozen); + if (value === null || value === void 0) { + } else if (typeof value === "function") { + addPlugin(value, ...options); + } else if (typeof value === "object") { + if (Array.isArray(value)) { + addList(value); + } else { + addPreset(value); + } + } else { + throw new TypeError("Expected usable value, not `" + value + "`"); + } + if (settings) { + namespace.settings = Object.assign(namespace.settings || {}, settings); + } + return processor; + function add(value2) { + if (typeof value2 === "function") { + addPlugin(value2); + } else if (typeof value2 === "object") { + if (Array.isArray(value2)) { + const [plugin, ...options2] = value2; + addPlugin(plugin, ...options2); + } else { + addPreset(value2); + } + } else { + throw new TypeError("Expected usable value, not `" + value2 + "`"); + } + } + function addPreset(result) { + addList(result.plugins); + if (result.settings) { + settings = Object.assign(settings || {}, result.settings); + } + } + function addList(plugins) { + let index2 = -1; + if (plugins === null || plugins === void 0) { + } else if (Array.isArray(plugins)) { + while (++index2 < plugins.length) { + const thing = plugins[index2]; + add(thing); + } + } else { + throw new TypeError("Expected a list of plugins, not `" + plugins + "`"); + } + } + function addPlugin(plugin, value2) { + let index2 = -1; + let entry; + while (++index2 < attachers.length) { + if (attachers[index2][0] === plugin) { + entry = attachers[index2]; + break; + } + } + if (entry) { + if (isPlainObject(entry[1]) && isPlainObject(value2)) { + value2 = (0, import_extend.default)(true, entry[1], value2); + } + entry[1] = value2; + } else { + attachers.push([...arguments]); + } + } + } + function parse4(doc) { + processor.freeze(); + const file = vfile(doc); + const Parser = processor.Parser; + assertParser("parse", Parser); + if (newable(Parser, "parse")) { + return new Parser(String(file), file).parse(); + } + return Parser(String(file), file); + } + function stringify(node, doc) { + processor.freeze(); + const file = vfile(doc); + const Compiler = processor.Compiler; + assertCompiler("stringify", Compiler); + assertNode(node); + if (newable(Compiler, "compile")) { + return new Compiler(node, file).compile(); + } + return Compiler(node, file); + } + function run(node, doc, callback) { + assertNode(node); + processor.freeze(); + if (!callback && typeof doc === "function") { + callback = doc; + doc = void 0; + } + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + transformers.run(node, vfile(doc), done); + function done(error, tree, file) { + tree = tree || node; + if (error) { + reject(error); + } else if (resolve) { + resolve(tree); + } else { + callback(null, tree, file); + } + } + } + } + function runSync(node, file) { + let result; + let complete; + processor.run(node, file, done); + assertDone("runSync", "run", complete); + return result; + function done(error, tree) { + bail(error); + result = tree; + complete = true; + } + } + function process(doc, callback) { + processor.freeze(); + assertParser("process", processor.Parser); + assertCompiler("process", processor.Compiler); + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + const file = vfile(doc); + processor.run(processor.parse(file), file, (error, tree, file2) => { + if (error || !tree || !file2) { + done(error); + } else { + const result = processor.stringify(tree, file2); + if (result === void 0 || result === null) { + } else if (looksLikeAVFileValue(result)) { + file2.value = result; + } else { + file2.result = result; + } + done(error, file2); + } + }); + function done(error, file2) { + if (error || !file2) { + reject(error); + } else if (resolve) { + resolve(file2); + } else { + callback(null, file2); + } + } + } + } + function processSync(doc) { + let complete; + processor.freeze(); + assertParser("processSync", processor.Parser); + assertCompiler("processSync", processor.Compiler); + const file = vfile(doc); + processor.process(file, done); + assertDone("processSync", "process", complete); + return file; + function done(error) { + complete = true; + bail(error); + } + } +} +function newable(value, name) { + return typeof value === "function" && // Prototypes do exist. + // type-coverage:ignore-next-line + value.prototype && // A function with keys in its prototype is probably a constructor. + // Classes’ prototype methods are not enumerable, so we check if some value + // exists in the prototype. + // type-coverage:ignore-next-line + (keys(value.prototype) || name in value.prototype); +} +function keys(value) { + let key; + for (key in value) { + if (own.call(value, key)) { + return true; + } + } + return false; +} +function assertParser(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Parser`"); + } +} +function assertCompiler(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Compiler`"); + } +} +function assertUnfrozen(name, frozen) { + if (frozen) { + throw new Error( + "Cannot call `" + name + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`." + ); + } +} +function assertNode(node) { + if (!isPlainObject(node) || typeof node.type !== "string") { + throw new TypeError("Expected node, got `" + node + "`"); + } +} +function assertDone(name, asyncName, complete) { + if (!complete) { + throw new Error( + "`" + name + "` finished async. Use `" + asyncName + "` instead" + ); + } +} +function vfile(value) { + return looksLikeAVFile(value) ? value : new VFile(value); +} +function looksLikeAVFile(value) { + return Boolean( + value && typeof value === "object" && "message" in value && "messages" in value + ); +} +function looksLikeAVFileValue(value) { + return typeof value === "string" || (0, import_is_buffer2.default)(value); +} + +// ../unified-latex-util-split/dist/index.js +function splitOnCondition(nodes, splitFunc = () => false, options) { + if (!Array.isArray(nodes)) { + throw new Error(`Can only split an Array, not ${nodes}`); + } + const { onlySplitOnFirstOccurrence = false } = options || {}; + const splitIndices = []; + for (let i = 0; i < nodes.length; i++) { + if (splitFunc(nodes[i])) { + splitIndices.push(i); + if (onlySplitOnFirstOccurrence) { + break; + } + } + } + if (splitIndices.length === 0) { + return { segments: [nodes], separators: [] }; + } + let separators = splitIndices.map((i) => nodes[i]); + let segments = splitIndices.map((splitEnd, i) => { + const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1; + return nodes.slice(splitStart, splitEnd); + }); + segments.push( + nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length) + ); + return { segments, separators }; +} +function splitOnMacro(ast, macroName) { + if (typeof macroName === "string") { + macroName = [macroName]; + } + if (!Array.isArray(macroName)) { + throw new Error("Type coercion failed"); + } + const isSeparator = match.createMacroMatcher(macroName); + const { segments, separators } = splitOnCondition(ast, isSeparator); + return { segments, macros: separators }; +} + +// ../unified-latex-util-replace/dist/index.js +function lastSignificantNodeIndex(nodes, parbreaksAreInsignificant) { + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (match.whitespace(node) || match.comment(node) || parbreaksAreInsignificant && match.parbreak(node)) { + continue; + } + return i; + } + return void 0; +} + +// ../unified-latex-ctan/dist/index.js +var import_color = __toESM(require_color(), 1); +var import_color2 = __toESM(require_color(), 1); +var macros = { + cref: { signature: "s m" }, + Cref: { signature: "s m" }, + crefrange: { signature: "s m m" }, + Crefrange: { signature: "s m m" }, + cpageref: { signature: "s m" }, + Cpageref: { signature: "s m" }, + ref: { signature: "m" }, + pageref: { signature: "m" }, + namecref: { signature: "m" }, + nameCref: { signature: "m" }, + lcnamecref: { signature: "m" }, + namecrefs: { signature: "m" }, + nameCrefs: { signature: "m" }, + lcnamecrefs: { signature: "m" }, + labelcref: { signature: "m" }, + labelcpageref: { signature: "m" }, + crefalias: { signature: "m m" }, + crefname: { signature: "m m m" }, + // XXX there are many more obscure commands to add here + // https://ctan.org/pkg/cleveref + crefdefaultlabelformat: { signature: "m" }, + crefrangeconjunction: { signature: "m" } +}; +var environments = {}; +function cleanEnumerateBody(ast, itemName = "item") { + let { segments, macros: macros17 } = splitOnMacro(ast, itemName); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + if (i === 0) { + trimEnd(segment); + } else { + trim3(segment); + } + if (segment.length > 0 && i > 0) { + segment.unshift({ type: "whitespace" }); + } + } + let insertParbreakBefore = /* @__PURE__ */ new WeakSet(); + let body = macros17.flatMap((node, i) => { + var _a; + const segment = segments[i + 1]; + const trailingComments = popTrailingComments(segment); + node.args = node.args || []; + node.args.push(arg(segment, { openMark: "", closeMark: "" })); + updateRenderInfo(node, { inParMode: true }); + if (i > 0 || ((_a = segments[0]) == null ? void 0 : _a.length) > 0) { + insertParbreakBefore.add(node); + } + return [node, ...trailingComments]; + }); + body = body.flatMap( + (node) => insertParbreakBefore.has(node) ? [{ type: "parbreak" }, node] : node + ); + body.unshift(...segments[0]); + for (let i = 0; i < body.length - 1; i++) { + const node = body[i]; + const nextNode = body[i + 1]; + if (!match.parbreak(nextNode)) { + continue; + } + if (match.comment(node)) { + node.suffixParbreak = true; + } + if (match.macro(node) && node.args && node.args[node.args.length - 1].closeMark === "") { + const args = node.args[node.args.length - 1].content; + const lastArg = args[args.length - 1]; + if (match.comment(lastArg)) { + lastArg.suffixParbreak = true; + } + } + } + return body; +} +function popTrailingComments(nodes) { + let lastNodeIndex = lastSignificantNodeIndex(nodes, true); + if (lastNodeIndex === nodes.length - 1 || lastNodeIndex == null && nodes.length === 0) { + return []; + } + if (lastNodeIndex == null) { + lastNodeIndex = -1; + } + return nodes.splice(lastNodeIndex + 1); +} +var macros2 = { + answerline: { signature: "o" }, + fillin: { signature: "o o" }, + fullwidth: { signature: "m" }, + fillwidthlines: { signature: "m" }, + fillwidthdottedlines: { signature: "m" }, + fillwidthgrid: { signature: "m" }, + makeemptybox: { signature: "m" }, + CorrectChoiceEmphasis: { + signature: "m", + renderInfo: { breakAround: true } + }, + SolutionEmphasis: { signature: "m", renderInfo: { breakAround: true } }, + uplevel: { signature: "m", renderInfo: { breakAround: true } }, + checkboxchar: { signature: "m", renderInfo: { breakAround: true } }, + checkedchar: { signature: "m", renderInfo: { breakAround: true } }, + pointname: { signature: "m", renderInfo: { breakAround: true } }, + marginpointname: { signature: "m", renderInfo: { breakAround: true } }, + extrawidth: { signature: "m", renderInfo: { breakAround: true } }, + pointformat: { signature: "m", renderInfo: { breakAround: true } }, + bonuspointformat: { signature: "m", renderInfo: { breakAround: true } }, + totalformat: { signature: "m", renderInfo: { breakAround: true } }, + qformat: { signature: "m", renderInfo: { breakAround: true } }, + titledquestion: { signature: "m o", renderInfo: { breakAround: true } }, + pointpoints: { signature: "m m", renderInfo: { breakAround: true } }, + bonuspointpoints: { signature: "m m", renderInfo: { breakAround: true } } +}; +var environments2 = { + choices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + checkboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparchoices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparcheckboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + parts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "part") + }, + subparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subpart") + }, + subsubparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subsubpart") + }, + questions: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "question") + } +}; +var macros3 = { + geometry: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + } +}; +var environments3 = {}; +var macros4 = { + hypersetup: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + href: { signature: "o m m" }, + url: { signature: "m" }, + nolinkurl: { signature: "m" }, + hyperbaseurl: { signature: "m" }, + hyperimage: { signature: "m m" }, + hyperdef: { signature: "m m m" }, + hyperref: { signature: "o m" }, + hyperlink: { signature: "m m" }, + hypertarget: { signature: "m m" }, + autoref: { signature: "s m" }, + pageref: { signature: "s m" }, + autopageref: { signature: "s m" }, + pdfstringdef: { signature: "m m" }, + pdfbookmark: { signature: "o m m" }, + currentpdfbookmark: { signature: "m m" }, + subpdfbookmark: { signature: "m m" }, + belowpdfbookmark: { signature: "m m" }, + texorpdfstring: { signature: "m m" }, + thispdfpagelabel: { signature: "m" }, + hypercalcbp: { signature: "m" } +}; +var environments4 = {}; +var macros5 = { + // Special + "\\": { signature: "!s !o" }, + _: { signature: "m", escapeToken: "" }, + "^": { signature: "m", escapeToken: "" }, + // \newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands + // List can be found in latex2e.pdf "An unofficial reference manual" + newcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + renewcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + providecommand: { + signature: "s +m o +o +m", + renderInfo: { breakAround: true } + }, + // Counters + newcounter: { + signature: "m o", + renderInfo: { breakAround: true } + }, + usecounter: { + signature: "m" + }, + setcounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + addtocounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + stepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + refstepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + // Lengths + newlength: { + signature: "m", + renderInfo: { breakAround: true } + }, + addtolength: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settodepth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settoheight: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settowidth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Spaces + stretch: { signature: "m" }, + hspace: { signature: "s m" }, + vspace: { signature: "s m", renderInfo: { breakAround: true } }, + vfill: { renderInfo: { breakAround: true } }, + indent: { renderInfo: { breakAround: true } }, + phantom: { signature: "m" }, + vphantom: { signature: "m" }, + hphantom: { signature: "m" }, + noindent: { renderInfo: { breakAround: true } }, + smallskip: { renderInfo: { breakAround: true } }, + medskip: { renderInfo: { breakAround: true } }, + bigskip: { renderInfo: { breakAround: true } }, + smallbreak: { renderInfo: { breakAround: true } }, + medbreak: { renderInfo: { breakAround: true } }, + bigbreak: { renderInfo: { breakAround: true } }, + newline: { renderInfo: { breakAround: true } }, + linebreak: { signature: "o", renderInfo: { breakAround: true } }, + nolinebreak: { signature: "o", renderInfo: { breakAround: true } }, + clearpage: { renderInfo: { breakAround: true } }, + cleardoublepage: { renderInfo: { breakAround: true } }, + newpage: { renderInfo: { breakAround: true } }, + enlargethispage: { signature: "s", renderInfo: { breakAround: true } }, + pagebreak: { signature: "o", renderInfo: { breakAround: true } }, + nopagebreak: { signature: "o", renderInfo: { breakAround: true } }, + // Boxes + newsavebox: { + signature: "m", + renderInfo: { breakAround: true } + }, + sbox: { + signature: "m m", + renderInfo: { breakAround: true } + }, + savebox: { + signature: "m o o m", + renderInfo: { breakAround: true } + }, + mbox: { signature: "m" }, + makebox: { signature: "d() o o m", renderInfo: { breakAround: true } }, + fbox: { signature: "m" }, + framebox: { signature: "o o m", renderInfo: { breakAround: true } }, + frame: { signature: "m", renderInfo: { breakAround: true } }, + parbox: { signature: "o o o m m", renderInfo: { breakAround: true } }, + raisebox: { signature: "m o o m" }, + marginpar: { signature: "o m", renderInfo: { breakAround: true } }, + colorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + fcolorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + rotatebox: { signature: "o m m" }, + scalebox: { signature: "m o m" }, + reflectbox: { signature: "m" }, + resizebox: { signature: "s m m m" }, + // Define environments + newenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + newtheorem: { + signature: "s m o m o", + renderInfo: { breakAround: true } + }, + newfont: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Counters + alph: { signature: "m" }, + Alph: { signature: "m" }, + arabic: { signature: "m" }, + roman: { signature: "m" }, + Roman: { signature: "m" }, + fnsymbol: { signature: "m" }, + // Other + documentclass: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepackage: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + item: { + signature: "o", + renderInfo: { hangingIndent: true, namedArguments: ["label"] } + }, + value: { signature: "m" }, + centering: { renderInfo: { breakAround: true } }, + input: { signature: "m", renderInfo: { breakAround: true } }, + include: { signature: "m", renderInfo: { breakAround: true } }, + includeonly: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + discretionary: { signature: "m m m" }, + hyphenation: { signature: "m m m" }, + footnote: { signature: "o m", renderInfo: { inParMode: true } }, + footnotemark: { signature: "o" }, + footnotetext: { signature: "o m", renderInfo: { inParMode: true } }, + caption: { + signature: "o m", + renderInfo: { inParMode: true, breakAround: true } + }, + // Math Commands + sqrt: { signature: "o m", renderInfo: { inMathMode: true } }, + frac: { signature: "m m", renderInfo: { inMathMode: true } }, + stackrel: { signature: "m m" }, + ensuremath: { signature: "m", renderInfo: { inMathMode: true } }, + // Layout commands + abstract: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + maketitle: { renderInfo: { breakAround: true } }, + doublespacing: { renderInfo: { breakAround: true } }, + singlespacing: { renderInfo: { breakAround: true } }, + author: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + date: { signature: "o m", renderInfo: { breakAround: true } }, + thanks: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + // amsart document class adds an optional argument + title: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + pagenumbering: { signature: "m", renderInfo: { breakAround: true } }, + pagestyle: { signature: "m", renderInfo: { breakAround: true } }, + thispagestyle: { signature: "m", renderInfo: { breakAround: true } }, + // Colors + definecolor: { signature: "m m m", renderInfo: { breakAround: true } }, + pagecolor: { signature: "o m", renderInfo: { breakAround: true } }, + nopagecolor: { renderInfo: { breakAround: true } }, + multicolumn: { signature: "m m m" }, + // Graphics + includegraphics: { + signature: "s o o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + rule: { signature: "o m m" }, + // Sectioning + part: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + chapter: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + section: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + paragraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subparagraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + appendix: { renderInfo: { breakAround: true, inParMode: true } }, + frontmatter: { renderInfo: { breakAround: true, inParMode: true } }, + mainmatter: { renderInfo: { breakAround: true, inParMode: true } }, + backmatter: { renderInfo: { breakAround: true, inParMode: true } }, + // Citing and references + bibitem: { signature: "o m", renderInfo: { hangingIndent: true } }, + cite: { signature: "o m" }, + // Fonts + textrm: { signature: "m", renderInfo: { inParMode: true } }, + textit: { signature: "m", renderInfo: { inParMode: true } }, + textmd: { signature: "m", renderInfo: { inParMode: true } }, + textbf: { signature: "m", renderInfo: { inParMode: true } }, + textup: { signature: "m", renderInfo: { inParMode: true } }, + textsl: { signature: "m", renderInfo: { inParMode: true } }, + textsf: { signature: "m", renderInfo: { inParMode: true } }, + textsc: { signature: "m", renderInfo: { inParMode: true } }, + texttt: { signature: "m", renderInfo: { inParMode: true } }, + emph: { signature: "m", renderInfo: { inParMode: true } }, + textnormal: { signature: "m", renderInfo: { inParMode: true } }, + uppercase: { signature: "m", renderInfo: { inParMode: true } }, + mathbf: { signature: "m" }, + mathsf: { signature: "m" }, + mathtt: { signature: "m" }, + mathit: { signature: "m" }, + mathnormal: { signature: "m" }, + mathcal: { signature: "m" }, + mathrm: { signature: "m" }, + // Other + setlength: { signature: "m m", renderInfo: { breakAround: true } }, + ref: { signature: "s m" }, + label: { signature: "o m" }, + // cleveref changes \label to have this signature + printbibliography: { renderInfo: { breakAround: true } }, + addtocontents: { signature: "m m", renderInfo: { breakAround: true } }, + addcontentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + contentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + bibliography: { signature: "m", renderInfo: { breakAround: true } }, + bibliographystyle: { signature: "m", renderInfo: { breakAround: true } } +}; +var environments5 = { + document: { + processContent: (nodes) => { + trim3(nodes); + return nodes; + } + }, + array: { signature: "o m", renderInfo: { alignContent: true } }, + description: { signature: "o", processContent: cleanEnumerateBody }, + enumerate: { + signature: "o", + processContent: cleanEnumerateBody, + renderInfo: { pgfkeysArgs: true } + }, + itemize: { signature: "o", processContent: cleanEnumerateBody }, + trivlist: { signature: "o", processContent: cleanEnumerateBody }, + list: { signature: "m m", processContent: cleanEnumerateBody }, + figure: { signature: "o" }, + "figure*": { signature: "o" }, + filecontents: { signature: "o m" }, + "filecontents*": { signature: "o m" }, + minipage: { signature: "o o o m" }, + picture: { signature: "r() d()" }, + tabbing: { renderInfo: { alignContent: true } }, + table: { signature: "o" }, + tabular: { signature: "o m", renderInfo: { alignContent: true } }, + "tabular*": { signature: "m o m", renderInfo: { alignContent: true } }, + thebibliography: { + signature: "m", + processContent: (nodes) => cleanEnumerateBody(nodes, "bibitem") + }, + // Math + math: { renderInfo: { inMathMode: true } } +}; +var argSpecM = parse("m")[0]; +var argSpecO = parse("o")[0]; +var argSpecRDelim = {}; +var argumentParser = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim[delim] = argSpecRDelim[delim] || parse(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [optionalArg || arg(null), codeArg || arg(null)], + nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved + }; +}; +var macros6 = { + lstset: { signature: "m" }, + lstinline: { argumentParser }, + lstinputlisting: { signature: "o m" }, + lstdefinestyle: { signature: "m m" }, + lstnewenvironment: { signature: "m o o m m" }, + lstMakeShortInline: { signature: "o m" }, + lstDeleteShortInline: { signature: "m" }, + lstdefineformat: { signature: "m m" }, + lstdefinelanguage: { signature: "o m o m o" }, + lstalias: { signature: "o m o m" }, + lstloadlanguages: { signature: "m" } +}; +var environments6 = {}; +var macros7 = { + see: { signature: "m m" }, + seealso: { signature: "m m" }, + seename: { signature: "m" }, + alsoname: { signature: "m" }, + index: { signature: "m" } +}; +var environments7 = {}; +var macros8 = { + mathtoolsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + mathllap: { + signature: "o m" + }, + mathrlap: { + signature: "o m" + }, + mathclap: { + signature: "o m" + }, + clap: { + signature: "m" + }, + mathmbox: { + signature: "m" + }, + mathmakebox: { + signature: "o o m" + }, + cramped: { + signature: "o m" + }, + crampedllap: { + signature: "o m" + }, + crampedrlap: { + signature: "o m" + }, + crampedclap: { + signature: "o m" + }, + crampedsubstack: { + signature: "o m" + }, + smashoperator: { + signature: "o m" + }, + newtagform: { + signature: "m o m m" + }, + renewtagform: { + signature: "m o m m" + }, + usetagform: { + signature: "m" + }, + xleftrightarrow: { signature: "o m" }, + xLeftarrow: { signature: "o m" }, + xhookleftarrow: { signature: "o m" }, + xmapsto: { signature: "o m" }, + xRightarrow: { signature: "o m" }, + xLeftrightarrow: { signature: "o m" }, + xhookrightarrow: { signature: "o m" }, + underbracket: { signature: "o o m" }, + overbracket: { signature: "o o m" }, + underbrace: { signature: "m" }, + overbrace: { signature: "m" }, + shoveleft: { signature: "o m" }, + shoveright: { signature: "o m" }, + ArrowBetweenLines: { signature: "s o" }, + vdotswithin: { signature: "m" }, + shortdotswithin: { signature: "s m" }, + DeclarePairedDelimiter: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterX: { + signature: "m o m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterXPP: { + signature: "m o m m m m m", + renderInfo: { breakAround: true } + }, + prescript: { signature: "m m m" }, + DeclareMathSizes: { signature: "m m m m" }, + newgathered: { signature: "m m m m" }, + renewgathered: { signature: "m m m m" }, + splitfrac: { signature: "m m" }, + splitdfrac: { signature: "m m" }, + xmathstrut: { signature: "o m" }, + // amsthm + newtheorem: { signature: "s m o m o", renderInfo: { breakAround: true } }, + theoremstyle: { signature: "m", renderInfo: { breakAround: true } }, + newtheoremstyle: { + signature: "m m m m m m m m m", + renderInfo: { breakAround: true } + }, + // amsmath + text: { signature: "m", renderInfo: { inMathMode: false } }, + // amsfonts + mathbb: { signature: "m" }, + mathscr: { signature: "m" }, + mathfrak: { signature: "m" }, + frak: { signature: "m" }, + Bdd: { signature: "m" }, + bold: { signature: "m" }, + // amsopn + operatorname: { signature: "s m" }, + DeclareMathOperator: { + signature: "s m m", + renderInfo: { breakAround: true } + } +}; +var environments8 = { + crampedsubarray: { + signature: "m", + renderInfo: { alignContent: true, inMathMode: true } + }, + matrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + pmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + "matrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "pmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "smallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "psmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + multilined: { signature: "o o", renderInfo: { inMathMode: true } }, + cases: { renderInfo: { alignContent: true, inMathMode: true } }, + "cases*": { renderInfo: { alignContent: true, inMathMode: true } }, + dcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "dcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + rcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "rcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + drcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "drcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + spreadlines: { signature: "m", renderInfo: { inMathMode: true } }, + lgathered: { signature: "o", renderInfo: { inMathMode: true } }, + rgathered: { signature: "o", renderInfo: { inMathMode: true } }, + // amsmath + "align*": { renderInfo: { inMathMode: true, alignContent: true } }, + align: { renderInfo: { inMathMode: true, alignContent: true } }, + aligned: { renderInfo: { inMathMode: true, alignContent: true } }, + "alignat*": { renderInfo: { inMathMode: true, alignContent: true } }, + alignat: { renderInfo: { inMathMode: true, alignContent: true } }, + "equation*": { renderInfo: { inMathMode: true } }, + equation: { renderInfo: { inMathMode: true } }, + "gather*": { renderInfo: { inMathMode: true } }, + gather: { renderInfo: { inMathMode: true } }, + "multline*": { renderInfo: { inMathMode: true } }, + multline: { renderInfo: { inMathMode: true } }, + "flalign*": { renderInfo: { inMathMode: true, alignContent: true } }, + flalign: { renderInfo: { inMathMode: true, alignContent: true } }, + split: { renderInfo: { inMathMode: true } }, + // Math environments + displaymath: { renderInfo: { inMathMode: true } }, + // Typical amsthm environments + theorem: { signature: "o" }, + lemma: { signature: "o" }, + definition: { signature: "o" }, + proposition: { signature: "o" }, + corollary: { signature: "o" }, + remark: { signature: "!o" }, + example: { signature: "!o" }, + proof: { signature: "o" } +}; +var argSpecM2 = parse("m")[0]; +var argSpecO2 = parse("o")[0]; +var argSpecRDelim2 = {}; +var argumentParser2 = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO2, startPos); + const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecM2, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM2, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim2[delim] = argSpecRDelim2[delim] || parse(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim2[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [ + optionalArg || arg(null), + languageArg || arg(null), + codeArg || arg(null) + ], + nodesRemoved: optionalArgNodesRemoved + languageArgNodesRemoved + codeArgNodesRemoved + }; +}; +var macros9 = { + mint: { argumentParser: argumentParser2 }, + mintinline: { argumentParser: argumentParser2 }, + inputminted: { argumentParser: argumentParser2 }, + usemintedstyle: { signature: "m" }, + setminted: { signature: "o m" }, + setmintedinline: { signature: "o m" }, + newmint: { signature: "o m m" }, + newminted: { signature: "o m m" }, + newmintinline: { signature: "o m m" }, + newmintedfile: { signature: "o m m" } +}; +var environments9 = {}; +var macros10 = { + NiceMatrixOptions: { + signature: "m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + } +}; +var environments10 = { + NiceTabular: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrixBlock: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArrayWithDelims: { + signature: "m m o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + } +}; +var macros11 = { + systeme: { + signature: "s o o m", + renderInfo: { inMathMode: true } + }, + sysdelim: { + signature: "m m" + }, + syseqsep: { signature: "m" }, + sysalign: { signature: "m" }, + syssignspace: { signature: "m" }, + syseqspace: { signature: "m" }, + syslineskipcoeff: { signature: "m" }, + syseqivsign: { signature: "m" }, + sysaddeqsign: { signature: "m" }, + sysremoveeqsign: { signature: "m" }, + sysextracolonsign: { signature: "m" }, + syscodeextracol: { signature: "m" }, + sysautonum: { signature: "m" }, + syssubstitute: { signature: "m" } +}; +var environments11 = {}; +(function() { + if (typeof globalThis === "object") + return; + Object.defineProperty(Object.prototype, "__magic__", { + get: function() { + return this; + }, + configurable: true + // This makes it possible to `delete` the getter later. + }); + __magic__.globalThis = __magic__; + delete Object.prototype.__magic__; +})(); +var clone = typeof globalThis.structuredClone === "function" ? globalThis.structuredClone : (obj) => JSON.parse(JSON.stringify(obj)); +var OPTIONAL_ARGUMENT_ARG_SPEC2 = parse("o")[0]; +function blankArg() { + return arg([], { openMark: "", closeMark: "" }); +} +var tikzCommandArgumentParser2 = (nodes, startPos) => { + const origStartPos = startPos; + let pos = startPos; + let nodesRemoved = 0; + const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos); + let animationArg = blankArg(); + if (cursorPosAfterAnimations !== pos) { + const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos); + trim3(argContent); + animationArg = arg(argContent, { + openMark: " ", + closeMark: " " + }); + } + nodesRemoved += cursorPosAfterAnimations - pos; + const { + argument: _optionalArgument, + nodesRemoved: optionalArgumentNodesRemoved + } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC2, pos); + nodesRemoved += optionalArgumentNodesRemoved; + const optionalArg = _optionalArgument || blankArg(); + while (match.whitespace(nodes[pos])) { + pos++; + } + const firstNode = nodes[pos]; + if (!firstNode) { + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; + } + if (match.group(firstNode)) { + const args = [animationArg, optionalArg, arg(firstNode.content)]; + nodes.splice(origStartPos, pos - origStartPos + 1); + return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved }; + } + const semicolonPosition = scan(nodes, ";", { startIndex: pos }); + if (semicolonPosition != null) { + const argNodes = nodes.splice( + origStartPos, + semicolonPosition - origStartPos + 1 + ); + trim3(argNodes); + const args = [animationArg, optionalArg, arg(argNodes)]; + return { + args, + nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved + }; + } + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; +}; +function eatAllAnimationSpecs(nodes, startPos) { + const colonPos = scan(nodes, ":", { + startIndex: startPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (!colonPos) { + return startPos; + } + let lastMatchPos = startPos; + let i = colonPos + 1; + for (; i < nodes.length; i++) { + const node = nodes[i]; + if (match.string(node, "[")) { + break; + } + if (match.string(node, "=")) { + i++; + while (match.whitespace(nodes[i]) || match.comment(nodes[i])) { + i++; + } + if (!match.group(nodes[i])) { + break; + } + lastMatchPos = i + 1; + const colonPos2 = scan(nodes, ":", { + startIndex: lastMatchPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (colonPos2 == null) { + break; + } + i = colonPos2 + 1; + } + } + return lastMatchPos; +} +var macros12 = { + pgfkeys: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzoption: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzstyle: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usetikzlibrary: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepgfmodule: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + usepgflibrary: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfplotsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + pgfplotstabletypeset: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikz: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser2, + renderInfo: { namedArguments: ["animation", "options", "command"] } + } +}; +var environments12 = { + tikzpicture: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + axis: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + scope: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfonlayer: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgflowlevelscope: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfviewboxscope: { + signature: "m m m m m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgftransparencygroup: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + behindforegroundpath: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + pgfmetadecoration: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + colormixin: { signature: "m", renderInfo: { pgfkeysArgs: true } } +}; +function processTikzEnvironmentContent(nodes) { + attachMacroArgsInArray(nodes, conditionalMacros); + return nodes; +} +var conditionalMacros = { + pgfextra: { signature: "m" }, + beginpgfgraphicnamed: { signature: "m" }, + pgfrealjobname: { signature: "m" }, + pgfplotstreampoint: { signature: "m" }, + pgfplotstreampointoutlier: { signature: "m" }, + pgfplotstreamspecial: { signature: "m" }, + pgfplotxyfile: { signature: "m" }, + pgfplotxyzfile: { signature: "m" }, + pgfplotfunction: { signature: "mmm" }, + pgfplotgnuplot: { signature: "o m" }, + pgfplothandlerrecord: { signature: "m" }, + pgfdeclareplothandler: { signature: "m m m" }, + pgfdeclarelayer: { signature: "m" }, + pgfsetlayers: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfonlayer: { signature: "m" }, + startpgfonlayer: { signature: "m" }, + pgfdeclarehorizontalshading: { signature: "o m m m " }, + pgfdeclareradialshading: { signature: "o m m m" }, + pgfdeclarefunctionalshading: { signature: "o m m m m m" }, + pgfshadecolortorgb: { signature: "m m" }, + pgfshadecolortocmyk: { signature: "m m" }, + pgfshadecolortogray: { signature: "m m" }, + pgfuseshading: { signature: "m" }, + pgfshadepath: { signature: "m m" }, + pgfsetadditionalshadetransform: { signature: "m" }, + pgfsetstrokeopacity: { signature: "m" }, + pgfsetfillopacity: { signature: "m" }, + pgfsetblendmode: { signature: "m" }, + pgfdeclarefading: { signature: "m m" }, + pgfsetfading: { signature: "m m" }, + pgfsetfadingforcurrentpath: { signature: "m m" }, + pgfsetfadingforcurrentpathstroked: { signature: "m m" }, + pgfanimateattribute: { signature: "m m" }, + pgfsnapshot: { signature: "m" }, + pgfqpoint: { signature: "m m" }, + pgfqpointxy: { signature: "m m" }, + pgfqpointxyz: { signature: "m m m" }, + pgfqpointscale: { signature: "m m" }, + pgfpathqmoveto: { signature: "m m" }, + pgfpathqlineto: { signature: "m m" }, + pgfpathqcurveto: { signature: "m m m m m m" }, + pgfpathqcircle: { signature: "m" }, + pgfqbox: { signature: "m" }, + pgfqboxsynced: { signature: "m" }, + pgfaliasimage: { signature: "m m" }, + pgfuseimage: { signature: "m" }, + pgfimage: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclaremask: { signature: "o m m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclarepatternformonly: { signature: "o m m m m m" }, + pgfdeclarepatterninherentlycolored: { signature: "o m m m m m" }, + pgfsetfillpattern: { signature: "m m" }, + // Coordinate canvas and nonlinear transformations + pgftransformshift: { signature: "m" }, + pgftransformxshift: { signature: "m" }, + pgftransformyshift: { signature: "m" }, + pgftransformscale: { signature: "m" }, + pgftransformxscale: { signature: "m" }, + pgftransformyscale: { signature: "m" }, + pgftransformxslant: { signature: "m" }, + pgftransformyslant: { signature: "m" }, + pgftransformrotate: { signature: "m" }, + pgftransformtriangle: { signature: "m m m" }, + pgftransformcm: { signature: "m m m m m" }, + pgftransformarrow: { signature: "m m" }, + pgftransformlineattime: { signature: "m m m" }, + pgftransformcurveattime: { signature: "m m m m m" }, + pgftransformarcaxesattime: { signature: "m m m m m m" }, + pgfgettransform: { signature: "m" }, + pgfsettransform: { signature: "m" }, + pgfgettransformentries: { signature: "m m m m m m" }, + pgfsettransformentries: { signature: "m m m m m m" }, + pgfpointtransformed: { signature: "m" }, + pgflowlevel: { signature: "m" }, + pgflowlevelobj: { signature: "m m" }, + pgflowlevelscope: { signature: "m" }, + startpgflowlevelscope: { signature: "m" }, + pgfviewboxscope: { signature: "m m m m m" }, + startpgfviewboxscope: { signature: "m m m m m" }, + pgftransformnonlinear: { signature: "m" }, + pgfpointtransformednonlinear: { signature: "m" }, + pgfsetcurvilinearbeziercurve: { signature: "m m m m" }, + pgfcurvilineardistancetotime: { signature: "m" }, + pgfpointcurvilinearbezierorthogonal: { signature: "m m" }, + pgfpointcurvilinearbezierpolar: { signature: "m m" }, + // Matrices + pgfmatrix: { signature: "m m m m m m m" }, + pgfsetmatrixcolumnsep: { signature: "m" }, + pgfmatrixnextcell: { signature: "o" }, + pgfsetmatrixrowsep: { signature: "m" }, + pgfmatrixendrow: { signature: "o" }, + // Nodes and shapes + pgfnode: { signature: "m m m m m" }, + pgfmultipartnode: { signature: "m m m m" }, + pgfcoordinate: { signature: "m m" }, + pgfnodealias: { signature: "m m" }, + pgfnoderename: { signature: "m m" }, + pgfpositionnodelater: { signature: "m" }, + pgfpositionnodenow: { signature: "m" }, + pgfnodepostsetupcode: { signature: "m m" }, + pgfpointanchor: { signature: "m m" }, + pgfpointshapeborder: { signature: "m m" }, + pgfdeclareshape: { signature: "m m" }, + saveddimen: { signature: "m m" }, + savedmacro: { signature: " m" }, + anchor: { signature: "m m" }, + deferredanchor: { signature: "m m" }, + anchorborder: { signature: "m" }, + backgroundpath: { signature: "m" }, + foregroundpath: { signature: "m" }, + behindbackgroundpath: { signature: "m" }, + beforebackgroundpath: { signature: "m" }, + beforeforegroundpath: { signature: "m" }, + behindforegroundpath: { signature: "m" }, + // Arrows + pgfdeclarearrow: { signature: "m" }, + pgfarrowssettipend: { signature: "m" }, + pgfarrowssetbackend: { signature: "m" }, + pgfarrowssetlineend: { signature: "m" }, + pgfarrowssetvisualbackend: { signature: "m" }, + pgfarrowssetvisualtipend: { signature: "m" }, + pgfarrowshullpoint: { signature: "m m" }, + pgfarrowsupperhullpoint: { signature: "m m" }, + pgfarrowssave: { signature: "m" }, + pgfarrowssavethe: { signature: "m" }, + pgfarrowsaddtooptions: { signature: "m" }, + pgfarrowsaddtolateoptions: { signature: "m" }, + pgfarrowsaddtolengthscalelist: { signature: "m" }, + pgfarrowsaddtowidthscalelist: { signature: "m" }, + pgfarrowsthreeparameters: { signature: "m" }, + pgfarrowslinewidthdependent: { signature: "m m m" }, + pgfarrowslengthdependent: { signature: "m" }, + // Path + pgfusepath: { signature: "m" }, + pgfsetlinewidth: { signature: "m" }, + pgfsetmiterlimit: { signature: "m" }, + pgfsetdash: { signature: "m m" }, + pgfsetstrokecolor: { signature: "m" }, + pgfsetcolor: { signature: "m" }, + pgfsetinnerlinewidth: { signature: "m" }, + pgfsetinnerstrokecolor: { signature: "m" }, + pgfsetarrowsstart: { signature: "m" }, + pgfsetarrowsend: { signature: "m" }, + pgfsetarrows: { signature: "m" }, + pgfsetshortenstart: { signature: "m" }, + pgfsetshortenend: { signature: "m" }, + pgfsetfillcolor: { signature: "m" }, + // Decorations + pgfdeclaredecoration: { signature: "m m m" }, + state: { signature: "m o m" }, + pgfdecoratepath: { signature: "m m" }, + startpgfdecoration: { signature: "m" }, + pgfdecoration: { signature: "m" }, + pgfdecoratecurrentpath: { signature: "m" }, + pgfsetdecorationsegmenttransformation: { signature: "m" }, + pgfdeclaremetadecorate: { signature: "m m m" }, + pgfmetadecoration: { signature: "m" }, + startpgfmetadecoration: { signature: "m" }, + // Constructing paths + pgfpathmoveto: { signature: "m" }, + pgfpathlineto: { signature: "m" }, + pgfpathcurveto: { signature: "m m m" }, + pgfpathquadraticcurveto: { signature: "m m" }, + pgfpathcurvebetweentime: { signature: "m m m m m m" }, + pgfpathcurvebetweentimecontinue: { signature: "m m m m m m" }, + pgfpatharc: { signature: "m m m" }, + pgfpatharcaxes: { signature: "m m m m" }, + pgfpatharcto: { signature: "m m m m m m" }, + pgfpatharctoprecomputed: { signature: "m m m m m m m m" }, + pgfpathellipse: { signature: "m m m" }, + pgfpathcircle: { signature: "m m" }, + pgfpathrectangle: { signature: "m m" }, + pgfpathrectanglecorners: { signature: "m m" }, + pgfpathgrid: { signature: " o m m" }, + pgfpathparabola: { signature: "m m" }, + pgfpathsine: { signature: "m" }, + pgfpathcosine: { signature: "m" }, + pgfsetcornersarced: { signature: "m" }, + "pgf@protocolsizes": { signature: "m m" }, + // Specifying coordinates + pgfpoint: { signature: "m m" }, + pgfpointpolar: { signature: "m m m" }, + pgfpointxy: { signature: "m m" }, + pgfsetxvec: { signature: "m" }, + pgfsetyvec: { signature: "m" }, + pgfpointpolarxy: { signature: "m m" }, + pgfpointxyz: { signature: "m m m" }, + pgfsetzvec: { signature: "m" }, + pgfpointcylindrical: { signature: "m m m" }, + pgfpointspherical: { signature: "m m m" }, + pgfpointadd: { signature: "m m" }, + pgfpointscale: { signature: "m m" }, + pgfpointdiff: { signature: "m m" }, + pgfpointnormalised: { signature: "m" }, + pgfpointlineattime: { signature: "m m m" }, + pgfpointlineatdistance: { signature: "m m m" }, + pgfpointarcaxesattime: { signature: "m m m m m m" }, + pgfpointcurveattime: { signature: "m m m m m" }, + pgfpointborderrectangle: { signature: "m m" }, + pgfpointborderellipse: { signature: "m m" }, + pgfpointintersectionoflines: { signature: "m m m m" }, + pgfpointintersectionofcircles: { signature: "m m m m m" }, + pgfintersectionofpaths: { signature: "m m" }, + pgfpointintersectionsolution: { signature: "m" }, + pgfextractx: { signature: "m m" }, + pgfextracty: { signature: "m m" }, + pgfgetlastxy: { signature: "m m" }, + "pgf@process": { signature: "m" }, + // Heirarchical structres ... + pgfsetbaseline: { signature: "m" }, + pgfsetbaselinepointnow: { signature: "m" }, + pgfsetbaselinepointlater: { signature: "m" }, + pgftext: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfuseid: { signature: "m" }, + pgfusetype: { signature: "m" }, + pgfidrefnextuse: { signature: "m m" }, + pgfidrefprevuse: { signature: "m m" }, + pgfaliasid: { signature: "m m" }, + pgfgaliasid: { signature: "m m" }, + pgfifidreferenced: { signature: "m m m" }, + pgfrdfabout: { signature: "m" }, + pgfrdfcontent: { signature: "m" }, + pgfrdfdatatype: { signature: "m" }, + pgfrdfhref: { signature: "m" }, + pgfrdfprefix: { signature: "m" }, + pgfrdfproperty: { signature: "m" }, + pgfrdfrel: { signature: "m" }, + pgfrdfresource: { signature: "m" }, + pgfrdfrev: { signature: "m" }, + pgfrdfsrc: { signature: "m" }, + pgfrdftypeof: { signature: "m" }, + pgfrdfvocab: { signature: "m" }, + pgferror: { signature: "m" }, + pgfwarning: { signature: "m" }, + path: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + draw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + fill: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + filldraw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + pattern: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + shade: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + clip: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + useasboundingbox: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + node: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + coordinate: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + graph: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + scoped: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser2, + renderInfo: { + namedArguments: ["animation", "options", "command"], + breakAround: true + } + } +}; +function createMatchers5() { + return { + isChar: match.string, + isTerminal: (node) => match.string(node, ";"), + isOperation: (node) => match.anyString(node) && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => match.whitespace(node) || match.parbreak(node), + isComment: match.comment, + isGroup: match.group, + isMacro: match.macro, + isAnyMacro: match.anyMacro + }; +} +var matchers2 = createMatchers5(); +var macros13 = { + substitutecolormodel: { + signature: "m m", + renderInfo: { breakAround: true } + }, + selectcolormodel: { + signature: "m", + renderInfo: { breakAround: true } + }, + definecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + colorlet: { + signature: "o m o m", + renderInfo: { breakAround: true } + }, + definecolorset: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + preparecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + preparecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + DefineNamedColor: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + definecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + providecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + color: { signature: "o m", renderInfo: { breakAround: true } }, + textcolor: { signature: "o m m", renderInfo: { inParMode: true } }, + pagecolor: { signature: "o m" }, + colorbox: { signature: "o m m" }, + fcolorbox: { signature: "o m o m m" }, + boxframe: { signature: "o m" }, + testcolor: { signature: "o m" }, + blendcolors: { signature: "s m" }, + maskcolors: { signature: "o m" }, + definecolorseries: { + signature: "m m m o m o m", + renderInfo: { breakAround: true } + }, + resetcolorseries: { + signature: "o m", + renderInfo: { breakAround: true } + }, + rowcolors: { signature: "s o m m m" }, + extractcolorspec: { signature: "m m" }, + extractcolorspecs: { signature: "m m m" }, + convertcolorspec: { signature: "m m m m" } +}; +var environments13 = { + testcolors: { signature: "o", renderInfo: { pgfkeysArgs: true } } +}; +var fromRgb = ([r, g, b]) => (0, import_color2.default)([r * 255, g * 255, b * 255], "rgb"); +var DVI_PS_NAMES = { + Apricot: (0, import_color2.default)("#FBB982"), + Aquamarine: (0, import_color2.default)("#00B5BE"), + Bittersweet: (0, import_color2.default)("#C04F17"), + Black: (0, import_color2.default)("#221E1F"), + Blue: (0, import_color2.default)("#2D2F92"), + BlueGreen: (0, import_color2.default)("#00B3B8"), + BlueViolet: (0, import_color2.default)("#473992"), + BrickRed: (0, import_color2.default)("#B6321C"), + Brown: (0, import_color2.default)("#792500"), + BurntOrange: (0, import_color2.default)("#F7921D"), + CadetBlue: (0, import_color2.default)("#74729A"), + CarnationPink: (0, import_color2.default)("#F282B4"), + Cerulean: (0, import_color2.default)("#00A2E3"), + CornflowerBlue: (0, import_color2.default)("#41B0E4"), + Cyan: (0, import_color2.default)("#00AEEF"), + Dandelion: (0, import_color2.default)("#FDBC42"), + DarkOrchid: (0, import_color2.default)("#A4538A"), + Emerald: (0, import_color2.default)("#00A99D"), + ForestGreen: (0, import_color2.default)("#009B55"), + Fuchsia: (0, import_color2.default)("#8C368C"), + Goldenrod: (0, import_color2.default)("#FFDF42"), + Gray: (0, import_color2.default)("#949698"), + Green: (0, import_color2.default)("#00A64F"), + GreenYellow: (0, import_color2.default)("#DFE674"), + JungleGreen: (0, import_color2.default)("#00A99A"), + Lavender: (0, import_color2.default)("#F49EC4"), + LimeGreen: (0, import_color2.default)("#8DC73E"), + Magenta: (0, import_color2.default)("#EC008C"), + Mahogany: (0, import_color2.default)("#A9341F"), + Maroon: (0, import_color2.default)("#AF3235"), + Melon: (0, import_color2.default)("#F89E7B"), + MidnightBlue: (0, import_color2.default)("#006795"), + Mulberry: (0, import_color2.default)("#A93C93"), + NavyBlue: (0, import_color2.default)("#006EB8"), + OliveGreen: (0, import_color2.default)("#3C8031"), + Orange: (0, import_color2.default)("#F58137"), + OrangeRed: (0, import_color2.default)("#ED135A"), + Orchid: (0, import_color2.default)("#AF72B0"), + Peach: (0, import_color2.default)("#F7965A"), + Periwinkle: (0, import_color2.default)("#7977B8"), + PineGreen: (0, import_color2.default)("#008B72"), + Plum: (0, import_color2.default)("#92268F"), + ProcessBlue: (0, import_color2.default)("#00B0F0"), + Purple: (0, import_color2.default)("#99479B"), + RawSienna: (0, import_color2.default)("#974006"), + Red: (0, import_color2.default)("#ED1B23"), + RedOrange: (0, import_color2.default)("#F26035"), + RedViolet: (0, import_color2.default)("#A1246B"), + Rhodamine: (0, import_color2.default)("#EF559F"), + RoyalBlue: (0, import_color2.default)("#0071BC"), + RoyalPurple: (0, import_color2.default)("#613F99"), + RubineRed: (0, import_color2.default)("#ED017D"), + Salmon: (0, import_color2.default)("#F69289"), + SeaGreen: (0, import_color2.default)("#3FBC9D"), + Sepia: (0, import_color2.default)("#671800"), + SkyBlue: (0, import_color2.default)("#46C5DD"), + SpringGreen: (0, import_color2.default)("#C6DC67"), + Tan: (0, import_color2.default)("#DA9D76"), + TealBlue: (0, import_color2.default)("#00AEB3"), + Thistle: (0, import_color2.default)("#D883B7"), + Turquoise: (0, import_color2.default)("#00B4CE"), + Violet: (0, import_color2.default)("#58429B"), + VioletRed: (0, import_color2.default)("#EF58A0"), + White: (0, import_color2.default)("#FFFFFF"), + WildStrawberry: (0, import_color2.default)("#EE2967"), + Yellow: (0, import_color2.default)("#FFF200"), + YellowGreen: (0, import_color2.default)("#98CC70"), + YellowOrange: (0, import_color2.default)("#FAA21A") +}; +var SVG_NAMES = { + AliceBlue: fromRgb([0.94, 0.972, 1]), + AntiqueWhite: fromRgb([0.98, 0.92, 0.844]), + Aqua: fromRgb([0, 1, 1]), + Aquamarine: fromRgb([0.498, 1, 0.83]), + Azure: fromRgb([0.94, 1, 1]), + Beige: fromRgb([0.96, 0.96, 0.864]), + Bisque: fromRgb([1, 0.894, 0.77]), + Black: fromRgb([0, 0, 0]), + BlanchedAlmond: fromRgb([1, 0.92, 0.804]), + Blue: fromRgb([0, 0, 1]), + BlueViolet: fromRgb([0.54, 0.17, 0.888]), + Brown: fromRgb([0.648, 0.165, 0.165]), + BurlyWood: fromRgb([0.87, 0.72, 0.53]), + CadetBlue: fromRgb([0.372, 0.62, 0.628]), + Chartreuse: fromRgb([0.498, 1, 0]), + Chocolate: fromRgb([0.824, 0.41, 0.116]), + Coral: fromRgb([1, 0.498, 0.312]), + CornflowerBlue: fromRgb([0.392, 0.585, 0.93]), + Cornsilk: fromRgb([1, 0.972, 0.864]), + Crimson: fromRgb([0.864, 0.08, 0.235]), + Cyan: fromRgb([0, 1, 1]), + DarkBlue: fromRgb([0, 0, 0.545]), + DarkCyan: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]), + DarkGray: fromRgb([0.664, 0.664, 0.664]), + DarkGreen: fromRgb([0, 0.392, 0]), + DarkGrey: fromRgb([0.664, 0.664, 0.664]), + DarkKhaki: fromRgb([0.74, 0.716, 0.42]), + DarkMagenta: fromRgb([0.545, 0, 0.545]), + DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]), + DarkOrange: fromRgb([1, 0.55, 0]), + DarkOrchid: fromRgb([0.6, 0.196, 0.8]), + DarkRed: fromRgb([0.545, 0, 0]), + DarkSalmon: fromRgb([0.912, 0.59, 0.48]), + DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]), + DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]), + DarkSlateGray: fromRgb([0.185, 0.31, 0.31]), + DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]), + DarkTurquoise: fromRgb([0, 0.808, 0.82]), + DarkViolet: fromRgb([0.58, 0, 0.828]), + DeepPink: fromRgb([1, 0.08, 0.576]), + DeepSkyBlue: fromRgb([0, 0.75, 1]), + DimGray: fromRgb([0.41, 0.41, 0.41]), + DimGrey: fromRgb([0.41, 0.41, 0.41]), + DodgerBlue: fromRgb([0.116, 0.565, 1]), + FireBrick: fromRgb([0.698, 0.132, 0.132]), + FloralWhite: fromRgb([1, 0.98, 0.94]), + ForestGreen: fromRgb([0.132, 0.545, 0.132]), + Fuchsia: fromRgb([1, 0, 1]), + Gainsboro: fromRgb([0.864, 0.864, 0.864]), + GhostWhite: fromRgb([0.972, 0.972, 1]), + Gold: fromRgb([1, 0.844, 0]), + Goldenrod: fromRgb([0.855, 0.648, 0.125]), + Gray: fromRgb([0.5, 0.5, 0.5]), + Green: fromRgb([0, 0.5, 0]), + GreenYellow: fromRgb([0.68, 1, 0.185]), + Grey: fromRgb([0.5, 0.5, 0.5]), + Honeydew: fromRgb([0.94, 1, 0.94]), + HotPink: fromRgb([1, 0.41, 0.705]), + IndianRed: fromRgb([0.804, 0.36, 0.36]), + Indigo: fromRgb([0.294, 0, 0.51]), + Ivory: fromRgb([1, 1, 0.94]), + Khaki: fromRgb([0.94, 0.9, 0.55]), + Lavender: fromRgb([0.9, 0.9, 0.98]), + LavenderBlush: fromRgb([1, 0.94, 0.96]), + LawnGreen: fromRgb([0.488, 0.99, 0]), + LemonChiffon: fromRgb([1, 0.98, 0.804]), + LightBlue: fromRgb([0.68, 0.848, 0.9]), + LightCoral: fromRgb([0.94, 0.5, 0.5]), + LightCyan: fromRgb([0.88, 1, 1]), + LightGoldenrod: fromRgb([0.933, 0.867, 0.51]), + LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]), + LightGray: fromRgb([0.828, 0.828, 0.828]), + LightGreen: fromRgb([0.565, 0.932, 0.565]), + LightGrey: fromRgb([0.828, 0.828, 0.828]), + LightPink: fromRgb([1, 0.712, 0.756]), + LightSalmon: fromRgb([1, 0.628, 0.48]), + LightSeaGreen: fromRgb([0.125, 0.698, 0.668]), + LightSkyBlue: fromRgb([0.53, 0.808, 0.98]), + LightSlateBlue: fromRgb([0.518, 0.44, 1]), + LightSlateGray: fromRgb([0.468, 0.532, 0.6]), + LightSlateGrey: fromRgb([0.468, 0.532, 0.6]), + LightSteelBlue: fromRgb([0.69, 0.77, 0.87]), + LightYellow: fromRgb([1, 1, 0.88]), + Lime: fromRgb([0, 1, 0]), + LimeGreen: fromRgb([0.196, 0.804, 0.196]), + Linen: fromRgb([0.98, 0.94, 0.9]), + Magenta: fromRgb([1, 0, 1]), + Maroon: fromRgb([0.5, 0, 0]), + MediumAquamarine: fromRgb([0.4, 0.804, 0.668]), + MediumBlue: fromRgb([0, 0, 0.804]), + MediumOrchid: fromRgb([0.73, 0.332, 0.828]), + MediumPurple: fromRgb([0.576, 0.44, 0.86]), + MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]), + MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]), + MediumSpringGreen: fromRgb([0, 0.98, 0.604]), + MediumTurquoise: fromRgb([0.284, 0.82, 0.8]), + MediumVioletRed: fromRgb([0.78, 0.084, 0.52]), + MidnightBlue: fromRgb([0.098, 0.098, 0.44]), + MintCream: fromRgb([0.96, 1, 0.98]), + MistyRose: fromRgb([1, 0.894, 0.884]), + Moccasin: fromRgb([1, 0.894, 0.71]), + NavajoWhite: fromRgb([1, 0.87, 0.68]), + Navy: fromRgb([0, 0, 0.5]), + NavyBlue: fromRgb([0, 0, 0.5]), + OldLace: fromRgb([0.992, 0.96, 0.9]), + Olive: fromRgb([0.5, 0.5, 0]), + OliveDrab: fromRgb([0.42, 0.556, 0.136]), + Orange: fromRgb([1, 0.648, 0]), + OrangeRed: fromRgb([1, 0.27, 0]), + Orchid: fromRgb([0.855, 0.44, 0.84]), + PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]), + PaleGreen: fromRgb([0.596, 0.985, 0.596]), + PaleTurquoise: fromRgb([0.688, 0.932, 0.932]), + PaleVioletRed: fromRgb([0.86, 0.44, 0.576]), + PapayaWhip: fromRgb([1, 0.936, 0.835]), + PeachPuff: fromRgb([1, 0.855, 0.725]), + Peru: fromRgb([0.804, 0.52, 0.248]), + Pink: fromRgb([1, 0.752, 0.796]), + Plum: fromRgb([0.868, 0.628, 0.868]), + PowderBlue: fromRgb([0.69, 0.88, 0.9]), + Purple: fromRgb([0.5, 0, 0.5]), + Red: fromRgb([1, 0, 0]), + RosyBrown: fromRgb([0.736, 0.56, 0.56]), + RoyalBlue: fromRgb([0.255, 0.41, 0.884]), + SaddleBrown: fromRgb([0.545, 0.27, 0.075]), + Salmon: fromRgb([0.98, 0.5, 0.448]), + SandyBrown: fromRgb([0.956, 0.644, 0.376]), + SeaGreen: fromRgb([0.18, 0.545, 0.34]), + Seashell: fromRgb([1, 0.96, 0.932]), + Sienna: fromRgb([0.628, 0.32, 0.176]), + Silver: fromRgb([0.752, 0.752, 0.752]), + SkyBlue: fromRgb([0.53, 0.808, 0.92]), + SlateBlue: fromRgb([0.415, 0.352, 0.804]), + SlateGray: fromRgb([0.44, 0.5, 0.565]), + SlateGrey: fromRgb([0.44, 0.5, 0.565]), + Snow: fromRgb([1, 0.98, 0.98]), + SpringGreen: fromRgb([0, 1, 0.498]), + SteelBlue: fromRgb([0.275, 0.51, 0.705]), + Tan: fromRgb([0.824, 0.705, 0.55]), + Teal: fromRgb([0, 0.5, 0.5]), + Thistle: fromRgb([0.848, 0.75, 0.848]), + Tomato: fromRgb([1, 0.39, 0.28]), + Turquoise: fromRgb([0.25, 0.88, 0.815]), + Violet: fromRgb([0.932, 0.51, 0.932]), + VioletRed: fromRgb([0.816, 0.125, 0.565]), + Wheat: fromRgb([0.96, 0.87, 0.7]), + White: fromRgb([1, 1, 1]), + WhiteSmoke: fromRgb([0.96, 0.96, 0.96]), + Yellow: fromRgb([1, 1, 0]), + YellowGreen: fromRgb([0.604, 0.804, 0.196]) +}; +var X11_NAMES = { + AntiqueWhite1: fromRgb([1, 0.936, 0.86]), + AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]), + AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]), + AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]), + Aquamarine1: fromRgb([0.498, 1, 0.83]), + Aquamarine2: fromRgb([0.464, 0.932, 0.776]), + Aquamarine3: fromRgb([0.4, 0.804, 0.668]), + Aquamarine4: fromRgb([0.27, 0.545, 0.455]), + Azure1: fromRgb([0.94, 1, 1]), + Azure2: fromRgb([0.88, 0.932, 0.932]), + Azure3: fromRgb([0.756, 0.804, 0.804]), + Azure4: fromRgb([0.512, 0.545, 0.545]), + Bisque1: fromRgb([1, 0.894, 0.77]), + Bisque2: fromRgb([0.932, 0.835, 0.716]), + Bisque3: fromRgb([0.804, 0.716, 0.62]), + Bisque4: fromRgb([0.545, 0.49, 0.42]), + Blue1: fromRgb([0, 0, 1]), + Blue2: fromRgb([0, 0, 0.932]), + Blue3: fromRgb([0, 0, 0.804]), + Blue4: fromRgb([0, 0, 0.545]), + Brown1: fromRgb([1, 0.25, 0.25]), + Brown2: fromRgb([0.932, 0.23, 0.23]), + Brown3: fromRgb([0.804, 0.2, 0.2]), + Brown4: fromRgb([0.545, 0.136, 0.136]), + Burlywood1: fromRgb([1, 0.828, 0.608]), + Burlywood2: fromRgb([0.932, 0.772, 0.57]), + Burlywood3: fromRgb([0.804, 0.668, 0.49]), + Burlywood4: fromRgb([0.545, 0.45, 0.332]), + CadetBlue1: fromRgb([0.596, 0.96, 1]), + CadetBlue2: fromRgb([0.556, 0.898, 0.932]), + CadetBlue3: fromRgb([0.48, 0.772, 0.804]), + CadetBlue4: fromRgb([0.325, 0.525, 0.545]), + Chartreuse1: fromRgb([0.498, 1, 0]), + Chartreuse2: fromRgb([0.464, 0.932, 0]), + Chartreuse3: fromRgb([0.4, 0.804, 0]), + Chartreuse4: fromRgb([0.27, 0.545, 0]), + Chocolate1: fromRgb([1, 0.498, 0.14]), + Chocolate2: fromRgb([0.932, 0.464, 0.13]), + Chocolate3: fromRgb([0.804, 0.4, 0.112]), + Chocolate4: fromRgb([0.545, 0.27, 0.075]), + Coral1: fromRgb([1, 0.448, 0.336]), + Coral2: fromRgb([0.932, 0.415, 0.312]), + Coral3: fromRgb([0.804, 0.356, 0.27]), + Coral4: fromRgb([0.545, 0.244, 0.185]), + Cornsilk1: fromRgb([1, 0.972, 0.864]), + Cornsilk2: fromRgb([0.932, 0.91, 0.804]), + Cornsilk3: fromRgb([0.804, 0.785, 0.694]), + Cornsilk4: fromRgb([0.545, 0.532, 0.47]), + Cyan1: fromRgb([0, 1, 1]), + Cyan2: fromRgb([0, 0.932, 0.932]), + Cyan3: fromRgb([0, 0.804, 0.804]), + Cyan4: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod1: fromRgb([1, 0.725, 0.06]), + DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]), + DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]), + DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]), + DarkOliveGreen1: fromRgb([0.792, 1, 0.44]), + DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]), + DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]), + DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]), + DarkOrange1: fromRgb([1, 0.498, 0]), + DarkOrange2: fromRgb([0.932, 0.464, 0]), + DarkOrange3: fromRgb([0.804, 0.4, 0]), + DarkOrange4: fromRgb([0.545, 0.27, 0]), + DarkOrchid1: fromRgb([0.75, 0.244, 1]), + DarkOrchid2: fromRgb([0.698, 0.228, 0.932]), + DarkOrchid3: fromRgb([0.604, 0.196, 0.804]), + DarkOrchid4: fromRgb([0.408, 0.132, 0.545]), + DarkSeaGreen1: fromRgb([0.756, 1, 0.756]), + DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]), + DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]), + DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]), + DarkSlateGray1: fromRgb([0.592, 1, 1]), + DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]), + DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]), + DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]), + DeepPink1: fromRgb([1, 0.08, 0.576]), + DeepPink2: fromRgb([0.932, 0.07, 0.536]), + DeepPink3: fromRgb([0.804, 0.064, 0.464]), + DeepPink4: fromRgb([0.545, 0.04, 0.312]), + DeepSkyBlue1: fromRgb([0, 0.75, 1]), + DeepSkyBlue2: fromRgb([0, 0.698, 0.932]), + DeepSkyBlue3: fromRgb([0, 0.604, 0.804]), + DeepSkyBlue4: fromRgb([0, 0.408, 0.545]), + DodgerBlue1: fromRgb([0.116, 0.565, 1]), + DodgerBlue2: fromRgb([0.11, 0.525, 0.932]), + DodgerBlue3: fromRgb([0.094, 0.455, 0.804]), + DodgerBlue4: fromRgb([0.064, 0.305, 0.545]), + Firebrick1: fromRgb([1, 0.19, 0.19]), + Firebrick2: fromRgb([0.932, 0.172, 0.172]), + Firebrick3: fromRgb([0.804, 0.15, 0.15]), + Firebrick4: fromRgb([0.545, 0.1, 0.1]), + Gold1: fromRgb([1, 0.844, 0]), + Gold2: fromRgb([0.932, 0.79, 0]), + Gold3: fromRgb([0.804, 0.68, 0]), + Gold4: fromRgb([0.545, 0.46, 0]), + Goldenrod1: fromRgb([1, 0.756, 0.145]), + Goldenrod2: fromRgb([0.932, 0.705, 0.132]), + Goldenrod3: fromRgb([0.804, 0.608, 0.112]), + Goldenrod4: fromRgb([0.545, 0.41, 0.08]), + Green1: fromRgb([0, 1, 0]), + Green2: fromRgb([0, 0.932, 0]), + Green3: fromRgb([0, 0.804, 0]), + Green4: fromRgb([0, 0.545, 0]), + Honeydew1: fromRgb([0.94, 1, 0.94]), + Honeydew2: fromRgb([0.88, 0.932, 0.88]), + Honeydew3: fromRgb([0.756, 0.804, 0.756]), + Honeydew4: fromRgb([0.512, 0.545, 0.512]), + HotPink1: fromRgb([1, 0.43, 0.705]), + HotPink2: fromRgb([0.932, 0.415, 0.655]), + HotPink3: fromRgb([0.804, 0.376, 0.565]), + HotPink4: fromRgb([0.545, 0.228, 0.385]), + IndianRed1: fromRgb([1, 0.415, 0.415]), + IndianRed2: fromRgb([0.932, 0.39, 0.39]), + IndianRed3: fromRgb([0.804, 0.332, 0.332]), + IndianRed4: fromRgb([0.545, 0.228, 0.228]), + Ivory1: fromRgb([1, 1, 0.94]), + Ivory2: fromRgb([0.932, 0.932, 0.88]), + Ivory3: fromRgb([0.804, 0.804, 0.756]), + Ivory4: fromRgb([0.545, 0.545, 0.512]), + Khaki1: fromRgb([1, 0.965, 0.56]), + Khaki2: fromRgb([0.932, 0.9, 0.52]), + Khaki3: fromRgb([0.804, 0.776, 0.45]), + Khaki4: fromRgb([0.545, 0.525, 0.305]), + LavenderBlush1: fromRgb([1, 0.94, 0.96]), + LavenderBlush2: fromRgb([0.932, 0.88, 0.898]), + LavenderBlush3: fromRgb([0.804, 0.756, 0.772]), + LavenderBlush4: fromRgb([0.545, 0.512, 0.525]), + LemonChiffon1: fromRgb([1, 0.98, 0.804]), + LemonChiffon2: fromRgb([0.932, 0.912, 0.75]), + LemonChiffon3: fromRgb([0.804, 0.79, 0.648]), + LemonChiffon4: fromRgb([0.545, 0.536, 0.44]), + LightBlue1: fromRgb([0.75, 0.936, 1]), + LightBlue2: fromRgb([0.698, 0.875, 0.932]), + LightBlue3: fromRgb([0.604, 0.752, 0.804]), + LightBlue4: fromRgb([0.408, 0.512, 0.545]), + LightCyan1: fromRgb([0.88, 1, 1]), + LightCyan2: fromRgb([0.82, 0.932, 0.932]), + LightCyan3: fromRgb([0.705, 0.804, 0.804]), + LightCyan4: fromRgb([0.48, 0.545, 0.545]), + LightGoldenrod1: fromRgb([1, 0.925, 0.545]), + LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]), + LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]), + LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]), + LightPink1: fromRgb([1, 0.684, 0.725]), + LightPink2: fromRgb([0.932, 0.635, 0.68]), + LightPink3: fromRgb([0.804, 0.55, 0.585]), + LightPink4: fromRgb([0.545, 0.372, 0.396]), + LightSalmon1: fromRgb([1, 0.628, 0.48]), + LightSalmon2: fromRgb([0.932, 0.585, 0.448]), + LightSalmon3: fromRgb([0.804, 0.505, 0.385]), + LightSalmon4: fromRgb([0.545, 0.34, 0.26]), + LightSkyBlue1: fromRgb([0.69, 0.888, 1]), + LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]), + LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]), + LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]), + LightSteelBlue1: fromRgb([0.792, 0.884, 1]), + LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]), + LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]), + LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]), + LightYellow1: fromRgb([1, 1, 0.88]), + LightYellow2: fromRgb([0.932, 0.932, 0.82]), + LightYellow3: fromRgb([0.804, 0.804, 0.705]), + LightYellow4: fromRgb([0.545, 0.545, 0.48]), + Magenta1: fromRgb([1, 0, 1]), + Magenta2: fromRgb([0.932, 0, 0.932]), + Magenta3: fromRgb([0.804, 0, 0.804]), + Magenta4: fromRgb([0.545, 0, 0.545]), + Maroon1: fromRgb([1, 0.204, 0.7]), + Maroon2: fromRgb([0.932, 0.19, 0.655]), + Maroon3: fromRgb([0.804, 0.16, 0.565]), + Maroon4: fromRgb([0.545, 0.11, 0.385]), + MediumOrchid1: fromRgb([0.88, 0.4, 1]), + MediumOrchid2: fromRgb([0.82, 0.372, 0.932]), + MediumOrchid3: fromRgb([0.705, 0.32, 0.804]), + MediumOrchid4: fromRgb([0.48, 0.215, 0.545]), + MediumPurple1: fromRgb([0.67, 0.51, 1]), + MediumPurple2: fromRgb([0.624, 0.475, 0.932]), + MediumPurple3: fromRgb([0.536, 0.408, 0.804]), + MediumPurple4: fromRgb([0.365, 0.28, 0.545]), + MistyRose1: fromRgb([1, 0.894, 0.884]), + MistyRose2: fromRgb([0.932, 0.835, 0.824]), + MistyRose3: fromRgb([0.804, 0.716, 0.71]), + MistyRose4: fromRgb([0.545, 0.49, 0.484]), + NavajoWhite1: fromRgb([1, 0.87, 0.68]), + NavajoWhite2: fromRgb([0.932, 0.81, 0.63]), + NavajoWhite3: fromRgb([0.804, 0.7, 0.545]), + NavajoWhite4: fromRgb([0.545, 0.475, 0.37]), + OliveDrab1: fromRgb([0.752, 1, 0.244]), + OliveDrab2: fromRgb([0.7, 0.932, 0.228]), + OliveDrab3: fromRgb([0.604, 0.804, 0.196]), + OliveDrab4: fromRgb([0.41, 0.545, 0.132]), + Orange1: fromRgb([1, 0.648, 0]), + Orange2: fromRgb([0.932, 0.604, 0]), + Orange3: fromRgb([0.804, 0.52, 0]), + Orange4: fromRgb([0.545, 0.352, 0]), + OrangeRed1: fromRgb([1, 0.27, 0]), + OrangeRed2: fromRgb([0.932, 0.25, 0]), + OrangeRed3: fromRgb([0.804, 0.215, 0]), + OrangeRed4: fromRgb([0.545, 0.145, 0]), + Orchid1: fromRgb([1, 0.512, 0.98]), + Orchid2: fromRgb([0.932, 0.48, 0.912]), + Orchid3: fromRgb([0.804, 0.41, 0.79]), + Orchid4: fromRgb([0.545, 0.28, 0.536]), + PaleGreen1: fromRgb([0.604, 1, 0.604]), + PaleGreen2: fromRgb([0.565, 0.932, 0.565]), + PaleGreen3: fromRgb([0.488, 0.804, 0.488]), + PaleGreen4: fromRgb([0.33, 0.545, 0.33]), + PaleTurquoise1: fromRgb([0.732, 1, 1]), + PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]), + PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]), + PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]), + PaleVioletRed1: fromRgb([1, 0.51, 0.67]), + PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]), + PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]), + PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]), + PeachPuff1: fromRgb([1, 0.855, 0.725]), + PeachPuff2: fromRgb([0.932, 0.796, 0.68]), + PeachPuff3: fromRgb([0.804, 0.688, 0.585]), + PeachPuff4: fromRgb([0.545, 0.468, 0.396]), + Pink1: fromRgb([1, 0.71, 0.772]), + Pink2: fromRgb([0.932, 0.664, 0.72]), + Pink3: fromRgb([0.804, 0.57, 0.62]), + Pink4: fromRgb([0.545, 0.39, 0.424]), + Plum1: fromRgb([1, 0.732, 1]), + Plum2: fromRgb([0.932, 0.684, 0.932]), + Plum3: fromRgb([0.804, 0.59, 0.804]), + Plum4: fromRgb([0.545, 0.4, 0.545]), + Purple1: fromRgb([0.608, 0.19, 1]), + Purple2: fromRgb([0.57, 0.172, 0.932]), + Purple3: fromRgb([0.49, 0.15, 0.804]), + Purple4: fromRgb([0.332, 0.1, 0.545]), + Red1: fromRgb([1, 0, 0]), + Red2: fromRgb([0.932, 0, 0]), + Red3: fromRgb([0.804, 0, 0]), + Red4: fromRgb([0.545, 0, 0]), + RosyBrown1: fromRgb([1, 0.756, 0.756]), + RosyBrown2: fromRgb([0.932, 0.705, 0.705]), + RosyBrown3: fromRgb([0.804, 0.608, 0.608]), + RosyBrown4: fromRgb([0.545, 0.41, 0.41]), + RoyalBlue1: fromRgb([0.284, 0.464, 1]), + RoyalBlue2: fromRgb([0.264, 0.43, 0.932]), + RoyalBlue3: fromRgb([0.228, 0.372, 0.804]), + RoyalBlue4: fromRgb([0.152, 0.25, 0.545]), + Salmon1: fromRgb([1, 0.55, 0.41]), + Salmon2: fromRgb([0.932, 0.51, 0.385]), + Salmon3: fromRgb([0.804, 0.44, 0.33]), + Salmon4: fromRgb([0.545, 0.298, 0.224]), + SeaGreen1: fromRgb([0.33, 1, 0.624]), + SeaGreen2: fromRgb([0.305, 0.932, 0.58]), + SeaGreen3: fromRgb([0.264, 0.804, 0.5]), + SeaGreen4: fromRgb([0.18, 0.545, 0.34]), + Seashell1: fromRgb([1, 0.96, 0.932]), + Seashell2: fromRgb([0.932, 0.898, 0.87]), + Seashell3: fromRgb([0.804, 0.772, 0.75]), + Seashell4: fromRgb([0.545, 0.525, 0.51]), + Sienna1: fromRgb([1, 0.51, 0.28]), + Sienna2: fromRgb([0.932, 0.475, 0.26]), + Sienna3: fromRgb([0.804, 0.408, 0.224]), + Sienna4: fromRgb([0.545, 0.28, 0.15]), + SkyBlue1: fromRgb([0.53, 0.808, 1]), + SkyBlue2: fromRgb([0.494, 0.752, 0.932]), + SkyBlue3: fromRgb([0.424, 0.65, 0.804]), + SkyBlue4: fromRgb([0.29, 0.44, 0.545]), + SlateBlue1: fromRgb([0.512, 0.435, 1]), + SlateBlue2: fromRgb([0.48, 0.404, 0.932]), + SlateBlue3: fromRgb([0.41, 0.35, 0.804]), + SlateBlue4: fromRgb([0.28, 0.235, 0.545]), + SlateGray1: fromRgb([0.776, 0.888, 1]), + SlateGray2: fromRgb([0.725, 0.828, 0.932]), + SlateGray3: fromRgb([0.624, 0.712, 0.804]), + SlateGray4: fromRgb([0.424, 0.484, 0.545]), + Snow1: fromRgb([1, 0.98, 0.98]), + Snow2: fromRgb([0.932, 0.912, 0.912]), + Snow3: fromRgb([0.804, 0.79, 0.79]), + Snow4: fromRgb([0.545, 0.536, 0.536]), + SpringGreen1: fromRgb([0, 1, 0.498]), + SpringGreen2: fromRgb([0, 0.932, 0.464]), + SpringGreen3: fromRgb([0, 0.804, 0.4]), + SpringGreen4: fromRgb([0, 0.545, 0.27]), + SteelBlue1: fromRgb([0.39, 0.72, 1]), + SteelBlue2: fromRgb([0.36, 0.675, 0.932]), + SteelBlue3: fromRgb([0.31, 0.58, 0.804]), + SteelBlue4: fromRgb([0.21, 0.392, 0.545]), + Tan1: fromRgb([1, 0.648, 0.31]), + Tan2: fromRgb([0.932, 0.604, 0.288]), + Tan3: fromRgb([0.804, 0.52, 0.248]), + Tan4: fromRgb([0.545, 0.352, 0.17]), + Thistle1: fromRgb([1, 0.884, 1]), + Thistle2: fromRgb([0.932, 0.824, 0.932]), + Thistle3: fromRgb([0.804, 0.71, 0.804]), + Thistle4: fromRgb([0.545, 0.484, 0.545]), + Tomato1: fromRgb([1, 0.39, 0.28]), + Tomato2: fromRgb([0.932, 0.36, 0.26]), + Tomato3: fromRgb([0.804, 0.31, 0.224]), + Tomato4: fromRgb([0.545, 0.21, 0.15]), + Turquoise1: fromRgb([0, 0.96, 1]), + Turquoise2: fromRgb([0, 0.898, 0.932]), + Turquoise3: fromRgb([0, 0.772, 0.804]), + Turquoise4: fromRgb([0, 0.525, 0.545]), + VioletRed1: fromRgb([1, 0.244, 0.59]), + VioletRed2: fromRgb([0.932, 0.228, 0.55]), + VioletRed3: fromRgb([0.804, 0.196, 0.47]), + VioletRed4: fromRgb([0.545, 0.132, 0.32]), + Wheat1: fromRgb([1, 0.905, 0.73]), + Wheat2: fromRgb([0.932, 0.848, 0.684]), + Wheat3: fromRgb([0.804, 0.73, 0.59]), + Wheat4: fromRgb([0.545, 0.494, 0.4]), + Yellow1: fromRgb([1, 1, 0]), + Yellow2: fromRgb([0.932, 0.932, 0]), + Yellow3: fromRgb([0.804, 0.804, 0]), + Yellow4: fromRgb([0.545, 0.545, 0]), + Gray0: fromRgb([0.745, 0.745, 0.745]), + Green0: fromRgb([0, 1, 0]), + Grey0: fromRgb([0.745, 0.745, 0.745]), + Maroon0: fromRgb([0.69, 0.19, 0.376]), + Purple0: fromRgb([0.628, 0.125, 0.94]) +}; +var XColorCoreModelToColor = { + rgb: ([r, g, b]) => (0, import_color.default)([r * 255, g * 255, b * 255], "rgb"), + cmy: ([c, m, y]) => XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]), + cmyk: ([c, m, y, k]) => (0, import_color.default)([c * 255, m * 255, y * 255, k * 100], "cmyk"), + hsb: ([h, s2, b]) => (0, import_color.default)([h * 360, s2 * 100, b * 100], "hsv"), + gray: ([v]) => (0, import_color.default)([v * 255, v * 255, v * 255], "rgb") +}; +var XColorModelToColor = { + wave: ([lambda]) => { + const gamma = 0.8; + let baseRgb = [0, 0, 0]; + if (380 <= lambda && lambda < 440) { + baseRgb = [(440 - lambda) / (440 - 380), 0, 1]; + } + if (440 <= lambda && lambda < 490) { + baseRgb = [0, (lambda - 440) / (490 - 440), 1]; + } + if (490 <= lambda && lambda < 510) { + baseRgb = [0, 1, (510 - lambda) / (510 - 490)]; + } + if (510 <= lambda && lambda < 580) { + baseRgb = [(lambda - 510) / (580 - 510), 1, 0]; + } + if (580 <= lambda && lambda < 6450) { + baseRgb = [1, (645 - lambda) / (645 - 580), 0]; + } + if (645 <= lambda && lambda <= 780) { + baseRgb = [1, 0, 0]; + } + let f = 1; + if (380 <= lambda && 420 < lambda) { + f = 0.3 + 0.7 * (lambda - 380) / (420 - 380); + } + if (700 < lambda && lambda <= 780) { + f = 0.3 + 0.7 * (780 - lambda) / (780 - 700); + } + const rgb = [ + Math.pow(baseRgb[0] * f, gamma), + Math.pow(baseRgb[1] * f, gamma), + Math.pow(baseRgb[2] * f, gamma) + ]; + return (0, import_color.default)([rgb[0] * 255, rgb[1] * 255, rgb[2] * 255], "rgb"); + }, + Hsb: ([h, s2, b]) => XColorCoreModelToColor.hsb([h / 360, s2, b]), + HSB: ([h, s2, b]) => XColorCoreModelToColor.hsb([h / 240, s2 / 240, b / 240]), + HTML: ([v]) => v.startsWith("#") ? (0, import_color.default)(v) : (0, import_color.default)(`#${v}`), + RGB: ([r, g, b]) => (0, import_color.default)([r, g, b], "rgb"), + Gray: ([v]) => XColorCoreModelToColor.gray([v / 15]), + ...XColorCoreModelToColor +}; +var PREDEFINED_XCOLOR_COLORS = { + // Core colors + red: XColorCoreModelToColor.rgb([1, 0, 0]), + green: XColorCoreModelToColor.rgb([0, 1, 0]), + blue: XColorCoreModelToColor.rgb([0, 0, 1]), + brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]), + lime: XColorCoreModelToColor.rgb([0.75, 1, 0]), + orange: XColorCoreModelToColor.rgb([1, 0.5, 0]), + pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]), + purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]), + teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]), + violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]), + cyan: XColorCoreModelToColor.rgb([0, 1, 1]), + magenta: XColorCoreModelToColor.rgb([1, 0, 1]), + yellow: XColorCoreModelToColor.rgb([1, 1, 0]), + olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]), + black: XColorCoreModelToColor.rgb([0, 0, 0]), + darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]), + gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]), + lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]), + white: XColorCoreModelToColor.rgb([1, 1, 1]), + ...DVI_PS_NAMES, + ...SVG_NAMES, + ...X11_NAMES +}; +var macros14 = { + NewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + NewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + NewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RequirePackage: { + signature: "o m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + }, + DeclareOption: { signature: "m m", renderInfo: { breakAround: true } } +}; +var environments14 = {}; +var macros15 = { + mode: { signature: "s d<> d{}", renderInfo: { breakAround: true } }, + insertnavigation: { signature: "m", renderInfo: { breakAround: true } }, + insertsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortdate: { signature: "o", renderInfo: { breakAround: true } }, + insertshortinstitute: { signature: "o", renderInfo: { breakAround: true } }, + insertshortpart: { signature: "o", renderInfo: { breakAround: true } }, + insertshorttitle: { signature: "o", renderInfo: { breakAround: true } }, + insertsubsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsubsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertverticalnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + usebeamercolor: { signature: "s m", renderInfo: { breakAround: true } }, + usebeamertemplate: { signature: "s m", renderInfo: { breakAround: true } }, + setbeamercolor: { + signature: "m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamersize: { + signature: "m o o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamertemplate: { + signature: "m o o d{}", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + newcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + renewcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + newenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + resetcounteronoverlays: { + signature: "m", + renderInfo: { breakAround: true } + }, + resetcountonoverlays: { signature: "m", renderInfo: { breakAround: true } }, + logo: { signature: "m", renderInfo: { breakAround: true } }, + frametitle: { signature: "d<> o m", renderInfo: { breakAround: true } }, + framesubtitle: { signature: "d<> m", renderInfo: { breakAround: true } }, + pause: { signature: "o" }, + onslide: { signature: "t+ t* d<> d{}" }, + only: { signature: "d<> m d<>" }, + uncover: { signature: "d<> m" }, + visible: { signature: "d<> m" }, + invisible: { signature: "d<> m" }, + alt: { signature: "d<> m m d<>" }, + temporal: { signature: "r<> m m m" }, + item: { + signature: "d<> o d<>", + renderInfo: { + hangingIndent: true, + namedArguments: [null, "label", null] + } + }, + label: { signature: "d<> o m" }, + // cleveref adds an optional argument to label; this gives maximum compatibility. + action: { signature: "d<> m" }, + beamerdefaultoverlayspecification: { signature: "m" }, + titlegraphic: { signature: "m", renderInfo: { breakAround: true } }, + subject: { signature: "m", renderInfo: { breakAround: true } }, + keywords: { signature: "m", renderInfo: { breakAround: true } }, + lecture: { signature: "o m m", renderInfo: { breakAround: true } }, + partpage: { renderInfo: { breakAround: true } }, + sectionpage: { renderInfo: { breakAround: true } }, + subsectionpage: { renderInfo: { breakAround: true } }, + AtBeginLecture: { signature: "m", renderInfo: { breakAround: true } }, + AtBeginPart: { signature: "m", renderInfo: { breakAround: true } }, + tableofcontents: { + signature: "o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + againframe: { signature: "d<> o o m", renderInfo: { breakAround: true } }, + framezoom: { + signature: "r<> r<> o r() r()", + renderInfo: { breakAround: true } + }, + column: { signature: "d<> o m", renderInfo: { breakAround: true } }, + animate: { signature: "r<>", renderInfo: { breakAround: true } }, + animatevalue: { signature: "r<> m m m", renderInfo: { breakAround: true } }, + sound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinksound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinkmute: { signature: "m", renderInfo: { breakAround: true } }, + // These signatures conflict with the default signatures. + // Care must be taken when processing an AST. + section: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + part: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + bibitem: { + signature: "s d<> o m", + renderInfo: { + hangingIndent: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + } +}; +var environments15 = { + frame: { + signature: "!d<> !o !o !d{} !d{}" + }, + block: { + signature: "!d<> !d{} !d<>" + }, + alertblock: { + signature: "!d<> !d{} !d<>" + }, + exampleblock: { + signature: "!d<> !d{} !d<>" + }, + onlyenv: { + signature: "!d<>" + }, + altenv: { + signature: "!d<> m m m m !d<>" + }, + overlayarea: { signature: "m m" }, + overprint: { signature: "o" }, + actionenv: { signature: "!d<>" }, + columns: { signature: "d<> o" }, + column: { signature: "d<> o m" } +}; +var macros16 = { + columnbreak: { renderInfo: { breakAround: true } } +}; +var environments16 = { + multicols: { + signature: "m o o" + }, + "multicols*": { + signature: "m o o" + } +}; +var macroInfo = { + cleveref: macros, + exam: macros2, + geometry: macros3, + hyperref: macros4, + latex2e: macros5, + listings: macros6, + makeidx: macros7, + mathtools: macros8, + minted: macros9, + nicematrix: macros10, + systeme: macros11, + tikz: macros12, + xcolor: macros13, + xparse: macros14, + beamer: macros15, + multicol: macros16 +}; +var environmentInfo = { + cleveref: environments, + exam: environments2, + geometry: environments3, + hyperref: environments4, + latex2e: environments5, + listings: environments6, + makeidx: environments7, + mathtools: environments8, + minted: environments9, + nicematrix: environments10, + systeme: environments11, + tikz: environments12, + xcolor: environments13, + xparse: environments14, + beamer: environments15, + multicol: environments16 +}; + +// ../unified-latex-util-environments/dist/index.js +function processEnvironment(envNode, envInfo) { + if (envInfo.signature && envNode.args == null) { + const { args } = gobbleArguments(envNode.content, envInfo.signature); + envNode.args = args; + } + updateRenderInfo(envNode, envInfo.renderInfo); + if (typeof envInfo.processContent === "function") { + envNode.content = envInfo.processContent(envNode.content); + } +} + +// ../unified-latex-util-catcode/dist/index.js +function findRegionInArray(tree, start, end) { + const ret = []; + let currRegion = { start: void 0, end: tree.length }; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (start(node)) { + currRegion.start = i; + } + if (end(node)) { + currRegion.end = i + 1; + ret.push(currRegion); + currRegion = { start: void 0, end: tree.length }; + } + } + if (currRegion.start != null) { + ret.push(currRegion); + } + return ret; +} +function refineRegions(regions) { + const _regions = [...regions]; + _regions.sort((a, b) => a.start - b.start); + const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end])); + const cutPoints = Array.from(cutPointsSet); + cutPoints.sort((a, b) => a - b); + const retRegions = []; + const retRegionsContainedIn = []; + let seekIndex = 0; + for (let i = 0; i < cutPoints.length - 1; i++) { + const start = cutPoints[i]; + const end = cutPoints[i + 1]; + const region = { start, end }; + const regionContainedIn = /* @__PURE__ */ new Set(); + let encounteredEndPastStart = false; + for (let j = seekIndex; j < _regions.length; j++) { + const superRegion = _regions[j]; + if (superRegion.end >= region.start) { + encounteredEndPastStart = true; + } + if (!encounteredEndPastStart && superRegion.end < region.start) { + seekIndex = j + 1; + continue; + } + if (superRegion.start > end) { + break; + } + if (superRegion.start <= region.start && superRegion.end >= region.end) { + encounteredEndPastStart = true; + regionContainedIn.add(superRegion); + } + } + if (regionContainedIn.size > 0) { + retRegions.push(region); + retRegionsContainedIn.push(regionContainedIn); + } + } + return { regions: retRegions, regionsContainedIn: retRegionsContainedIn }; +} +function splitByRegions(array, regionsRecord) { + const ret = []; + const indices = [0, array.length]; + const reverseMap = {}; + for (const [key, records] of Object.entries(regionsRecord)) { + indices.push( + ...records.flatMap((r) => { + reverseMap["" + [r.start, r.end]] = key; + return [r.start, r.end]; + }) + ); + } + indices.sort((a, b) => a - b); + for (let i = 0; i < indices.length - 1; i++) { + const start = indices[i]; + const end = indices[i + 1]; + if (start === end) { + continue; + } + const regionKey = reverseMap["" + [start, end]]; + ret.push([regionKey || null, array.slice(start, end)]); + } + return ret; +} +function escapeRegExp(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function buildWordRegex(allowedSet) { + const regexpStr = `^(${["\\p{L}"].concat(Array.from(allowedSet).map(escapeRegExp)).join("|")})*`; + return new RegExp(regexpStr, "u"); +} +function hasReparsableMacroNamesInArray(tree, allowedTokens) { + for (let i = 0; i < tree.length; i++) { + const macro2 = tree[i]; + const string2 = tree[i + 1]; + if (match.anyMacro(macro2) && match.anyString(string2)) { + if (allowedTokens.has( + macro2.content.charAt(macro2.content.length - 1) + ) || allowedTokens.has(string2.content.charAt(0))) { + return true; + } + } + } + return false; +} +function hasReparsableMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + let ret = false; + visit( + tree, + (nodes) => { + if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) { + ret = true; + return EXIT; + } + }, + { includeArrays: true, test: Array.isArray } + ); + return ret; +} +function reparseMacroNamesInArray(tree, allowedTokens) { + var _a, _b, _c; + const regex = buildWordRegex(allowedTokens); + let i = 0; + while (i < tree.length) { + const macro2 = tree[i]; + const string2 = tree[i + 1]; + if (match.anyMacro(macro2) && // The _^ macros in math mode should not be extended no-matter what; + // So we check to make sure that the macro we're dealing with has the default escape token. + (macro2.escapeToken == null || macro2.escapeToken === "\\") && match.anyString(string2) && // There are two options. Either the macro ends with the special character, + // e.g. `\@foo` or the special character starts the next string, e.g. `\foo@`. + (allowedTokens.has( + macro2.content.charAt(macro2.content.length - 1) + ) || allowedTokens.has(string2.content.charAt(0)))) { + const match3 = string2.content.match(regex); + const takeable = match3 ? match3[0] : ""; + if (takeable.length > 0) { + if (takeable.length === string2.content.length) { + macro2.content += string2.content; + tree.splice(i + 1, 1); + if (macro2.position && ((_a = string2.position) == null ? void 0 : _a.end)) { + macro2.position.end = string2.position.end; + } + } else { + macro2.content += takeable; + string2.content = string2.content.slice(takeable.length); + if ((_b = macro2.position) == null ? void 0 : _b.end) { + macro2.position.end.offset += takeable.length; + macro2.position.end.column += takeable.length; + } + if ((_c = string2.position) == null ? void 0 : _c.start) { + string2.position.start.offset += takeable.length; + string2.position.start.column += takeable.length; + } + } + } else { + i++; + } + } else { + ++i; + } + } +} +function reparseMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + visit( + tree, + (nodes) => { + reparseMacroNamesInArray(nodes, _allowedTokens); + }, + { includeArrays: true, test: Array.isArray } + ); +} +var expl3Find = { + start: match.createMacroMatcher(["ExplSyntaxOn"]), + end: match.createMacroMatcher(["ExplSyntaxOff"]) +}; +var atLetterFind = { + start: match.createMacroMatcher(["makeatletter"]), + end: match.createMacroMatcher(["makeatother"]) +}; +function findExpl3AndAtLetterRegionsInArray(tree) { + const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end); + const atLetter = findRegionInArray( + tree, + atLetterFind.start, + atLetterFind.end + ); + const regionMap = new Map([ + ...expl3.map((x) => [x, "expl"]), + ...atLetter.map((x) => [x, "atLetter"]) + ]); + const all = refineRegions([...expl3, ...atLetter]); + const ret = { + explOnly: [], + atLetterOnly: [], + both: [] + }; + for (let i = 0; i < all.regions.length; i++) { + const region = all.regions[i]; + const containedIn = all.regionsContainedIn[i]; + if (containedIn.size === 2) { + ret.both.push(region); + continue; + } + for (const v of containedIn.values()) { + if (regionMap.get(v) === "expl") { + ret.explOnly.push(region); + } + if (regionMap.get(v) === "atLetter") { + ret.atLetterOnly.push(region); + } + } + } + ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1); + ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1); + ret.both = ret.both.filter((r) => r.end - r.start > 1); + return ret; +} +var atLetterSet = /* @__PURE__ */ new Set(["@"]); +var explSet = /* @__PURE__ */ new Set(["_", ":"]); +var bothSet = /* @__PURE__ */ new Set(["_", ":", "@"]); +function reparseExpl3AndAtLetterRegions(tree) { + visit( + tree, + { + leave: (nodes) => { + const regions = findExpl3AndAtLetterRegionsInArray(nodes); + const totalNumRegions = regions.both.length + regions.atLetterOnly.length + regions.explOnly.length; + if (totalNumRegions === 0) { + return; + } + const splits = splitByRegions(nodes, regions); + const processed = []; + for (const [key, slice] of splits) { + switch (key) { + case null: + processed.push(...slice); + continue; + case "atLetterOnly": + reparseMacroNames(slice, atLetterSet); + processed.push(...slice); + continue; + case "explOnly": + reparseMacroNames(slice, explSet); + processed.push(...slice); + continue; + case "both": + reparseMacroNames(slice, bothSet); + processed.push(...slice); + continue; + default: + throw new Error( + `Unexpected case when splitting ${key}` + ); + } + } + nodes.length = 0; + nodes.push(...processed); + return SKIP; + } + }, + { includeArrays: true, test: Array.isArray } + ); +} + +// ../unified-latex-util-parse/dist/index.js +var unifiedLatexAstComplier = function unifiedLatexAstComplier2() { + Object.assign(this, { Compiler: (x) => x }); +}; +function parseMinimal(str) { + return LatexPegParser.parse(str); +} +function parseMathMinimal(str) { + return LatexPegParser.parse(str, { startRule: "math" }); +} +var unifiedLatexFromStringMinimal = function unifiedLatexFromStringMinimal2(options) { + const parser2 = (str) => { + if ((options == null ? void 0 : options.mode) === "math") { + return { + type: "root", + content: parseMathMinimal(str), + _renderInfo: { inMathMode: true } + }; + } + return parseMinimal(str); + }; + Object.assign(this, { Parser: parser2 }); +}; +function unifiedLatexReparseMathConstructPlugin({ + mathEnvs, + mathMacros +}) { + const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + const isMathMacro = match.createMacroMatcher(mathMacros); + return (tree) => { + visit( + tree, + (node) => { + if (match.anyMacro(node)) { + for (const arg2 of node.args || []) { + if (arg2.content.length > 0 && !wasParsedInMathMode(arg2.content)) { + arg2.content = parseMathMinimal( + printRaw(arg2.content) + ); + } + } + } + if (match.anyEnvironment(node)) { + if (!wasParsedInMathMode(node.content)) { + node.content = parseMathMinimal(printRaw(node.content)); + } + } + }, + { + test: (node) => isMathEnvironment(node) || isMathMacro(node) + } + ); + }; +} +function wasParsedInMathMode(nodes) { + return !nodes.some( + (node) => ( + // If there are multi-char strings or ^ and _ have been parsed as strings, we know + // that we were not parsed in math mode. + match.anyString(node) && node.content.length > 1 || match.string(node, "^") || match.string(node, "_") + ) + ); +} +var unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse2(options) { + const { environments: environments17 = {}, macros: macros17 = {} } = options || {}; + const mathMacros = Object.fromEntries( + Object.entries(macros17).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathEnvs = Object.fromEntries( + Object.entries(environments17).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathReparser = unifiedLatexReparseMathConstructPlugin({ + mathEnvs: Object.keys(mathEnvs), + mathMacros: Object.keys(mathMacros) + }); + const isRelevantEnvironment = match.createEnvironmentMatcher(environments17); + const isRelevantMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + return (tree) => { + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, mathMacros); + }, + leave: (node) => { + if (!isRelevantMathEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments17[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + mathReparser(tree); + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, macros17); + }, + leave: (node) => { + if (!isRelevantEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments17[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + }; +}; +var unifiedLatexProcessAtLetterAndExplMacros = function unifiedLatexProcessAtLetterAndExplMacros2(options) { + let { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = options || {}; + return (tree) => { + reparseExpl3AndAtLetterRegions(tree); + if (atLetter || expl3) { + autodetectExpl3AndAtLetter = false; + } + if (autodetectExpl3AndAtLetter) { + atLetter = hasReparsableMacroNames(tree, "@"); + expl3 = hasReparsableMacroNames(tree, "_"); + } + const charSet = /* @__PURE__ */ new Set(); + if (atLetter) { + charSet.add("@"); + } + if (expl3) { + charSet.add(":"); + charSet.add("_"); + } + if (charSet.size > 0) { + reparseMacroNames(tree, charSet); + } + }; +}; +var unifiedLatexFromString = function unifiedLatexFromString2(options) { + const { + mode = "regular", + macros: macros17 = {}, + environments: environments17 = {}, + flags: { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = {} + } = options || {}; + const allMacroInfo = Object.assign( + {}, + ...Object.values(macroInfo), + macros17 + ); + const allEnvInfo = Object.assign( + {}, + ...Object.values(environmentInfo), + environments17 + ); + const fullParser = unified().use(unifiedLatexFromStringMinimal, { mode }).use(unifiedLatexProcessAtLetterAndExplMacros, { + atLetter, + expl3, + autodetectExpl3AndAtLetter + }).use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, { + macros: allMacroInfo, + environments: allEnvInfo + }).use(unifiedLatexTrimEnvironmentContents).use(unifiedLatexTrimRoot).use(unifiedLatexAstComplier); + const parser2 = (str) => { + const file = fullParser.processSync({ value: str }); + return file.result; + }; + Object.assign(this, { Parser: parser2 }); +}; +var parser = unified().use(unifiedLatexFromString).freeze(); +function parse3(str) { + return parser.parse(str); +} + +// libs/prettier-plugin-latex.ts +var languages = [ + { + name: "latex", + extensions: [".tex"], + parsers: ["latex-parser"] + } +]; +var parsers = { + "latex-parser": { + parse: parse3, + astFormat: "latex-ast", + locStart: (node) => node.position ? node.position.start.offset : 0, + locEnd: (node) => node.position ? node.position.end.offset : 1 + } +}; +var printers = { + "latex-ast": { + print: printLatexAst + } +}; +var prettierPluginLatex = { languages, parsers, printers }; +/*! Bundled license information: + +is-buffer/index.js: + (*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + *) +*/ +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-prettier/index.cjs.map b/node_modules/@unified-latex/unified-latex-prettier/index.cjs.map new file mode 100644 index 0000000..0e465ec --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/index.cjs.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../node_modules/trie-prefix-tree/dist/config.js", "../../../node_modules/trie-prefix-tree/dist/append.js", "../../../node_modules/trie-prefix-tree/dist/create.js", "../../../node_modules/trie-prefix-tree/dist/utils.js", "../../../node_modules/trie-prefix-tree/dist/checkPrefix.js", "../../../node_modules/trie-prefix-tree/dist/recursePrefix.js", "../../../node_modules/trie-prefix-tree/dist/recurseRandomWord.js", "../../../node_modules/trie-prefix-tree/dist/permutations.js", "../../../node_modules/trie-prefix-tree/dist/index.js", "../../../node_modules/is-buffer/index.js", "../../../node_modules/extend/index.js", "../../../node_modules/color-name/index.js", "../../../node_modules/simple-swizzle/node_modules/is-arrayish/index.js", "../../../node_modules/simple-swizzle/index.js", "../../../node_modules/color-string/index.js", "../../../node_modules/color-convert/conversions.js", "../../../node_modules/color-convert/route.js", "../../../node_modules/color-convert/index.js", "../../../node_modules/color/index.js", "../index.ts", "../node_modules/prettier/doc.mjs", "../../unified-latex-util-print-raw/libs/print-raw.ts", "../../unified-latex-util-match/libs/match.ts", "../libs/printer/common.ts", "../libs/zip.ts", "../libs/printer/macro.ts", "../../unified-latex-util-visit/libs/list-math-children.ts", "../../unified-latex-util-visit/libs/visit.ts", "../../unified-latex-util-trim/libs/trim.ts", "../../unified-latex-util-trim/libs/unified-latex-trim-environment-contents.ts", "../../unified-latex-util-trim/libs/unified-latex-trim-root.ts", "../../unified-latex-util-trim/libs/has-whitespace-equivalent.ts", "../../unified-latex-util-pegjs/libs/decorate-array-for-pegjs.ts", "../../unified-latex-util-pegjs/libs/split-strings.ts", "../../unified-latex-util-pegjs/grammars/latex.pegjs", "../../unified-latex-util-pegjs/grammars/align-environment.pegjs", "../../unified-latex-util-pegjs/grammars/xparse-argspec.pegjs", "../../unified-latex-util-pegjs/grammars/pgfkeys.pegjs", "../../unified-latex-util-pegjs/grammars/macro-substitutions.pegjs", "../../unified-latex-util-pegjs/grammars/ligatures.pegjs", "../../unified-latex-util-pegjs/grammars/xcolor-expressions.pegjs", "../../unified-latex-util-pegjs/grammars/tabular-spec.pegjs", "../../unified-latex-util-pegjs/grammars/systeme-environment.pegjs", "../../unified-latex-util-pegjs/grammars/tex-glue.pegjs", "../../unified-latex-util-pegjs/grammars/tikz.pegjs", "../../unified-latex-util-pegjs/libs/pegjs-parsers.ts", "../../unified-latex-util-argspec/libs/argspec-parser.ts", "../../unified-latex-util-argspec/libs/argspec-types.ts", "../../unified-latex-builder/libs/builders.ts", "../../unified-latex-util-scan/libs/scan.ts", "../../unified-latex-util-scan/libs/prefix-match.ts", "../../unified-latex-util-render-info/index.ts", "../../unified-latex-util-arguments/libs/gobble-arguments.ts", "../../unified-latex-util-arguments/libs/gobble-single-argument.ts", "../../unified-latex-util-arguments/libs/attach-arguments.ts", "../../unified-latex-util-arguments/libs/unified-latex-attach-macro-arguments.ts", "../../unified-latex-util-arguments/libs/get-args-content.ts", "../../unified-latex-ctan/package/tikz/libs/tikz-command-argument-parser.ts", "../../unified-latex-ctan/package/tikz/libs/parser.ts", "../../unified-latex-util-pgfkeys/libs/pgfkeys-parser.ts", "../../unified-latex-util-pgfkeys/libs/pgfkeys-to-object.ts", "../libs/printer/print-argument-pgfkeys.ts", "../libs/printer/tikz.ts", "../libs/printer/argument.ts", "../libs/printer/root.ts", "../libs/printer/comment.ts", "../libs/printer/math.ts", "../../unified-latex-util-align/libs/parse-align-environment.ts", "../libs/printer/environment.ts", "../libs/reference-map.ts", "../libs/printer/printer.ts", "../../../node_modules/bail/index.js", "../../../node_modules/unified/lib/index.js", "../../../node_modules/unified/node_modules/is-plain-obj/index.js", "../../../node_modules/trough/index.js", "../../../node_modules/vfile/lib/index.js", "../../../node_modules/unist-util-stringify-position/lib/index.js", "../../../node_modules/vfile-message/index.js", "../../../node_modules/vfile/lib/minpath.browser.js", "../../../node_modules/vfile/lib/minproc.browser.js", "../../../node_modules/vfile/lib/minurl.shared.js", "../../../node_modules/vfile/lib/minurl.browser.js", "../../unified-latex-util-split/libs/split-on-macro.ts", "../../unified-latex-util-split/libs/split-on-condition.ts", "../../unified-latex-util-split/libs/unsplit-on-macro.ts", "../../unified-latex-util-split/libs/array-join.ts", "../../unified-latex-util-replace/libs/replace-node.ts", "../../unified-latex-util-replace/libs/unified-latex-streaming-command.ts", "../../unified-latex-util-replace/libs/replace-streaming-command.ts", "../../unified-latex-util-replace/libs/utils/significant-node.ts", "../../unified-latex-util-replace/libs/utils/replace-streaming-command-in-array.ts", "../../unified-latex-util-replace/libs/utils/join-without-excess-whitespace.ts", "../../unified-latex-util-replace/libs/utils/wrap-significant-content.ts", "../../unified-latex-util-replace/libs/replace-node-during-visit.ts", "../../unified-latex-ctan/package/cleveref/provides.ts", "../../unified-latex-ctan/utils/enumerate.ts", "../../unified-latex-ctan/package/exam/provides.ts", "../../unified-latex-ctan/package/geometry/provides.ts", "../../unified-latex-ctan/package/hyperref/provides.ts", "../../unified-latex-ctan/package/latex2e/provides.ts", "../../unified-latex-ctan/package/listings/libs/argument-parser.ts", "../../unified-latex-ctan/package/listings/provides.ts", "../../unified-latex-ctan/package/makeidx/provides.ts", "../../unified-latex-ctan/package/mathtools/provides.ts", "../../unified-latex-ctan/package/minted/libs/argument-parser.ts", "../../unified-latex-ctan/package/minted/provides.ts", "../../unified-latex-ctan/package/nicematrix/provides.ts", "../../unified-latex-ctan/package/systeme/provides.ts", "../../unified-latex-ctan/package/systeme/libs/parser.ts", "../../unified-latex-ctan/package/systeme/libs/print-raw.ts", "../../unified-latex-ctan/package/systeme/libs/systeme.ts", "../../structured-clone/index.ts", "../../unified-latex-ctan/package/tikz/provides.ts", "../../unified-latex-ctan/package/tikz/libs/tikz-command-argument-parser.ts", "../../unified-latex-ctan/package/tikz/libs/print-raw.ts", "../../unified-latex-ctan/package/tikz/libs/parser.ts", "../../unified-latex-ctan/package/xcolor/provides.ts", "../../unified-latex-ctan/package/xcolor/libs/xcolor.ts", "../../unified-latex-ctan/package/xcolor/libs/predefined-colors.ts", "../../unified-latex-ctan/package/xcolor/libs/parser.ts", "../../unified-latex-ctan/package/xcolor/libs/xcolor-macro-to-hex.ts", "../../unified-latex-ctan/package/xcolor/libs/color-to-textcolor-macro.ts", "../../unified-latex-ctan/package/xparse/provides.ts", "../../unified-latex-ctan/package/beamer/provides.ts", "../../unified-latex-ctan/package/multicol/provides.ts", "../../unified-latex-ctan/index.ts", "../../unified-latex-util-environments/libs/process-environment.ts", "../../unified-latex-util-environments/libs/unified-latex-process-environment.ts", "../../unified-latex-util-catcode/libs/find-region.ts", "../../unified-latex-util-catcode/libs/special-regions.ts", "../../unified-latex-util-catcode/libs/regions.ts", "../../unified-latex-util-catcode/libs/reparse-macro-names.ts", "../../unified-latex-util-parse/libs/compiler-ast.ts", "../../unified-latex-util-parse/libs/plugin-from-string.ts", "../../unified-latex-util-parse/libs/parse-minimal.ts", "../../unified-latex-util-parse/libs/plugin-from-string-minimal.ts", "../../unified-latex-util-parse/libs/process-macros-and-environments.ts", "../../unified-latex-util-parse/libs/reparse-math.ts", "../../unified-latex-util-parse/libs/process-at-letter-and-expl-macros.ts", "../../unified-latex-util-parse/libs/parse.ts", "../../unified-latex-util-parse/libs/parse-math.ts", "../libs/prettier-plugin-latex.ts"], + "sourcesContent": ["'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n END_WORD: '$',\n END_WORD_REPLACER: '9a219a89-91cd-42e2-abd5-eb113af08ca8',\n PERMS_MIN_LEN: 2\n};\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = append;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction append(trie, letter, index, array) {\n var isEndWordLetter = letter === _config2.default.END_WORD;\n var isLastLetter = index === array.length - 1;\n\n if (isEndWordLetter && !isLastLetter) {\n trie[_config2.default.END_WORD] = 1;\n trie[_config2.default.END_WORD_REPLACER] = {};\n trie = trie[_config2.default.END_WORD_REPLACER];\n } else {\n trie[letter] = trie[letter] || {};\n trie = trie[letter];\n }\n\n if (isLastLetter) {\n trie[_config2.default.END_WORD] = 1;\n }\n\n return trie;\n}\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = create;\n\nvar _append = require('./append');\n\nvar _append2 = _interopRequireDefault(_append);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction create(input) {\n if (!Array.isArray(input)) {\n throw 'Expected parameter Array, received ' + (typeof input === 'undefined' ? 'undefined' : _typeof(input));\n }\n\n var trie = input.reduce(function (accumulator, item) {\n item.toLowerCase().split('').reduce(_append2.default, accumulator);\n\n return accumulator;\n }, {});\n\n return trie;\n};\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n objectCopy: function objectCopy(obj) {\n if (typeof obj === 'undefined') {\n return {};\n }\n return JSON.parse(JSON.stringify(obj));\n },\n stringify: function stringify(obj) {\n var spacer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n\n if (typeof obj === 'undefined') {\n return '';\n }\n return JSON.stringify(obj, null, spacer);\n }\n};\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = checkPrefix;\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction checkPrefix(prefixNode, prefix) {\n var input = prefix.toLowerCase().split('');\n var prefixFound = input.every(function (letter, index) {\n if (!prefixNode[letter]) {\n return false;\n }\n return prefixNode = prefixNode[letter];\n });\n\n return {\n prefixFound: prefixFound,\n prefixNode: prefixNode\n };\n};\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = recursePrefix;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// sort items as they're being found\n// to prevent slow .sort() in NodeJs\nvar pushInOrder = function pushInOrder(word, prefixes) {\n var i = 0;\n\n while (i < prefixes.length) {\n if (word < prefixes[i]) {\n break;\n }\n i += 1;\n }\n\n prefixes.splice(i, 0, word);\n\n return prefixes;\n};\n\nfunction recursePrefix(node, prefix, sorted) {\n var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n var word = prefix;\n\n for (var branch in node) {\n var currentLetter = branch;\n if (branch === _config2.default.END_WORD && typeof node[branch] === 'number') {\n if (sorted) {\n pushInOrder(word, prefixes);\n } else {\n prefixes.push(word);\n }\n word = '';\n } else if (branch === _config2.default.END_WORD_REPLACER) {\n currentLetter = _config2.default.END_WORD;\n }\n recursePrefix(node[branch], prefix + currentLetter, sorted, prefixes);\n }\n\n return prefixes;\n}\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = recurseRandomWord;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction recurseRandomWord(node, prefix) {\n var word = prefix;\n var branches = Object.keys(node);\n var branch = branches[Math.floor(Math.random() * branches.length)];\n\n if (branch === _config2.default.END_WORD) {\n return word;\n }\n return recurseRandomWord(node[branch], prefix + branch);\n};\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = permutations;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction permutations(letters, trie) {\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n type: 'anagram'\n };\n\n if (typeof letters !== 'string') {\n throw 'Permutations expects string letters, received ' + (typeof letters === 'undefined' ? 'undefined' : _typeof(letters));\n }\n\n var words = [];\n\n var permute = function permute(word, node) {\n var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n var wordIsEmpty = word.length === 0;\n var wordFound = words.indexOf(prefix) !== -1;\n var endWordFound = node[_config2.default.END_WORD] === 1;\n\n if (wordIsEmpty && endWordFound && !wordFound) {\n words.push(prefix);\n }\n\n for (var i = 0, len = word.length; i < len; i++) {\n var letter = word[i];\n\n if (opts.type === 'sub-anagram') {\n if (endWordFound && !(words.indexOf(prefix) !== -1)) {\n words.push(prefix);\n }\n }\n\n if (node[letter]) {\n var remaining = word.substring(0, i) + word.substring(i + 1, len);\n permute(remaining, node[letter], prefix + letter, words);\n }\n }\n\n return words.sort();\n };\n\n return permute(letters, trie);\n};\nmodule.exports = exports['default'];", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = function (input) {\n if (!Array.isArray(input)) {\n throw 'Expected parameter Array, received ' + (typeof input === 'undefined' ? 'undefined' : _typeof(input));\n }\n\n var trie = (0, _create2.default)([].concat(_toConsumableArray(input)));\n\n return {\n /**\n * Get the generated raw trie object\n */\n tree: function tree() {\n return trie;\n },\n\n\n /**\n * Get a string representation of the trie\n */\n dump: function dump() {\n var spacer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n return _utils2.default.stringify(trie, spacer);\n },\n\n\n /**\n * Add a new word to the trie\n */\n addWord: function addWord(word) {\n if (typeof word !== 'string' || word === '') {\n throw 'Expected parameter string, received ' + (typeof word === 'undefined' ? 'undefined' : _typeof(word));\n }\n\n var reducer = function reducer() {\n return _append2.default.apply(undefined, arguments);\n };\n\n var input = word.toLowerCase().split('');\n input.reduce(reducer, trie);\n\n return this;\n },\n\n\n /**\n * Remove an existing word from the trie\n */\n removeWord: function removeWord(word) {\n if (typeof word !== 'string' || word === '') {\n throw 'Expected parameter string, received ' + (typeof word === 'undefined' ? 'undefined' : _typeof(word));\n }\n\n var _checkPrefix = (0, _checkPrefix6.default)(trie, word),\n prefixFound = _checkPrefix.prefixFound,\n prefixNode = _checkPrefix.prefixNode;\n\n if (prefixFound) {\n delete prefixNode[_config2.default.END_WORD];\n }\n\n return this;\n },\n\n\n /**\n * Check a prefix is valid\n * @returns Boolean\n */\n isPrefix: function isPrefix(prefix) {\n if (typeof prefix !== 'string') {\n throw 'Expected string prefix, received ' + (typeof prefix === 'undefined' ? 'undefined' : _typeof(prefix));\n }\n\n var _checkPrefix2 = (0, _checkPrefix6.default)(trie, prefix),\n prefixFound = _checkPrefix2.prefixFound;\n\n return prefixFound;\n },\n\n\n /**\n * Get a list of all words in the trie with the given prefix\n * @returns Array\n */\n getPrefix: function getPrefix(strPrefix) {\n var sorted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (typeof strPrefix !== 'string') {\n throw 'Expected string prefix, received ' + (typeof strPrefix === 'undefined' ? 'undefined' : _typeof(strPrefix));\n }\n\n if (typeof sorted !== 'boolean') {\n throw 'Expected sort parameter as boolean, received ' + (typeof sorted === 'undefined' ? 'undefined' : _typeof(sorted));\n }\n\n if (!this.isPrefix(strPrefix)) {\n return [];\n }\n\n var prefixNode = strPrefix.length ? (0, _checkPrefix6.default)(trie, strPrefix).prefixNode : trie;\n\n return (0, _recursePrefix2.default)(prefixNode, strPrefix, sorted);\n },\n\n\n /**\n * Get a random word in the trie with the given prefix\n * @returns Array\n */\n getRandomWordWithPrefix: function getRandomWordWithPrefix(strPrefix) {\n if (typeof strPrefix !== 'string') {\n throw 'Expected string prefix, received ' + (typeof strPrefix === 'undefined' ? 'undefined' : _typeof(strPrefix));\n }\n\n if (!this.isPrefix(strPrefix)) {\n return '';\n }\n\n var _checkPrefix3 = (0, _checkPrefix6.default)(trie, strPrefix),\n prefixNode = _checkPrefix3.prefixNode;\n\n return (0, _recurseRandomWord2.default)(prefixNode, strPrefix);\n },\n\n\n /**\n * Count the number of words with the given prefixSearch\n * @returns Number\n */\n countPrefix: function countPrefix(strPrefix) {\n var prefixes = this.getPrefix(strPrefix);\n\n return prefixes.length;\n },\n\n\n /**\n * Get all words in the trie\n * @returns Array\n */\n getWords: function getWords() {\n var sorted = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n return this.getPrefix('', sorted);\n },\n\n\n /**\n * Check the existence of a word in the trie\n * @returns Boolean\n */\n hasWord: function hasWord(word) {\n if (typeof word !== 'string') {\n throw 'Expected string word, received ' + (typeof word === 'undefined' ? 'undefined' : _typeof(word));\n }\n\n var _checkPrefix4 = (0, _checkPrefix6.default)(trie, word),\n prefixFound = _checkPrefix4.prefixFound,\n prefixNode = _checkPrefix4.prefixNode;\n\n if (prefixFound) {\n return prefixNode[_config2.default.END_WORD] === 1;\n }\n\n return false;\n },\n\n\n /**\n * Get a list of valid anagrams that can be made from the given letters\n * @returns Array\n */\n getAnagrams: function getAnagrams(letters) {\n if (typeof letters !== 'string') {\n throw 'Anagrams expected string letters, received ' + (typeof letters === 'undefined' ? 'undefined' : _typeof(letters));\n }\n\n if (letters.length < PERMS_MIN_LEN) {\n throw 'getAnagrams expects at least ' + PERMS_MIN_LEN + ' letters';\n }\n\n return (0, _permutations2.default)(letters, trie, {\n type: 'anagram'\n });\n },\n\n\n /**\n * Get a list of all sub-anagrams that can be made from the given letters\n * @returns Array\n */\n getSubAnagrams: function getSubAnagrams(letters) {\n if (typeof letters !== 'string') {\n throw 'Expected string letters, received ' + (typeof letters === 'undefined' ? 'undefined' : _typeof(letters));\n }\n\n if (letters.length < PERMS_MIN_LEN) {\n throw 'getSubAnagrams expects at least ' + PERMS_MIN_LEN + ' letters';\n }\n\n return (0, _permutations2.default)(letters, trie, {\n type: 'sub-anagram'\n });\n }\n };\n};\n\nvar _create = require('./create');\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _append = require('./append');\n\nvar _append2 = _interopRequireDefault(_append);\n\nvar _checkPrefix5 = require('./checkPrefix');\n\nvar _checkPrefix6 = _interopRequireDefault(_checkPrefix5);\n\nvar _recursePrefix = require('./recursePrefix');\n\nvar _recursePrefix2 = _interopRequireDefault(_recursePrefix);\n\nvar _recurseRandomWord = require('./recurseRandomWord');\n\nvar _recurseRandomWord2 = _interopRequireDefault(_recurseRandomWord);\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _permutations = require('./permutations');\n\nvar _permutations2 = _interopRequireDefault(_permutations);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar PERMS_MIN_LEN = _config2.default.PERMS_MIN_LEN;\n\n;\nmodule.exports = exports['default'];", "/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n", "'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n", "'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n", "module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n", "'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n", "/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n", "/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n", "const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n", "const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n", "const colorString = require('color-string');\nconst convert = require('color-convert');\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...args) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (args.length > 0) {\n\t\t\treturn new Color(args, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...args) {\n\t\tlet color = args[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(args, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nmodule.exports = Color;\n", "export * from \"./libs/printer\";\nexport * from \"./libs/prettier-plugin-latex\";\n\n// NOTE: The docstring comment must be the last item in the index.ts file!\n/**\n * ## What is this?\n *\n * A [Prettier](https://prettier.io/) plugin for formatting and pretty-printing LaTeX source code.\n *\n * ## When should I use this?\n *\n * If you want to construct a `Prettier` instance that has LaTeX parsing abilities.\n * \n * You should probably use the `prettier-plugin-latex` package instead of directly accessing this package.\n */\n", "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/document/public.js\nvar public_exports = {};\n__export(public_exports, {\n builders: () => builders,\n printer: () => printer,\n utils: () => utils\n});\n\n// src/document/constants.js\nvar DOC_TYPE_STRING = \"string\";\nvar DOC_TYPE_ARRAY = \"array\";\nvar DOC_TYPE_CURSOR = \"cursor\";\nvar DOC_TYPE_INDENT = \"indent\";\nvar DOC_TYPE_ALIGN = \"align\";\nvar DOC_TYPE_TRIM = \"trim\";\nvar DOC_TYPE_GROUP = \"group\";\nvar DOC_TYPE_FILL = \"fill\";\nvar DOC_TYPE_IF_BREAK = \"if-break\";\nvar DOC_TYPE_INDENT_IF_BREAK = \"indent-if-break\";\nvar DOC_TYPE_LINE_SUFFIX = \"line-suffix\";\nvar DOC_TYPE_LINE_SUFFIX_BOUNDARY = \"line-suffix-boundary\";\nvar DOC_TYPE_LINE = \"line\";\nvar DOC_TYPE_LABEL = \"label\";\nvar DOC_TYPE_BREAK_PARENT = \"break-parent\";\nvar VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([\n DOC_TYPE_CURSOR,\n DOC_TYPE_INDENT,\n DOC_TYPE_ALIGN,\n DOC_TYPE_TRIM,\n DOC_TYPE_GROUP,\n DOC_TYPE_FILL,\n DOC_TYPE_IF_BREAK,\n DOC_TYPE_INDENT_IF_BREAK,\n DOC_TYPE_LINE_SUFFIX,\n DOC_TYPE_LINE_SUFFIX_BOUNDARY,\n DOC_TYPE_LINE,\n DOC_TYPE_LABEL,\n DOC_TYPE_BREAK_PARENT\n]);\n\n// src/document/utils/get-doc-type.js\nfunction getDocType(doc) {\n if (typeof doc === \"string\") {\n return DOC_TYPE_STRING;\n }\n if (Array.isArray(doc)) {\n return DOC_TYPE_ARRAY;\n }\n if (!doc) {\n return;\n }\n const { type } = doc;\n if (VALID_OBJECT_DOC_TYPES.has(type)) {\n return type;\n }\n}\nvar get_doc_type_default = getDocType;\n\n// src/document/invalid-doc-error.js\nvar disjunctionListFormat = (list) => new Intl.ListFormat(\"en-US\", { type: \"disjunction\" }).format(list);\nfunction getDocErrorMessage(doc) {\n const type = doc === null ? \"null\" : typeof doc;\n if (type !== \"string\" && type !== \"object\") {\n return `Unexpected doc '${type}', \nExpected it to be 'string' or 'object'.`;\n }\n if (get_doc_type_default(doc)) {\n throw new Error(\"doc is valid.\");\n }\n const objectType = Object.prototype.toString.call(doc);\n if (objectType !== \"[object Object]\") {\n return `Unexpected doc '${objectType}'.`;\n }\n const EXPECTED_TYPE_VALUES = disjunctionListFormat(\n [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`)\n );\n return `Unexpected doc.type '${doc.type}'.\nExpected it to be ${EXPECTED_TYPE_VALUES}.`;\n}\nvar InvalidDocError = class extends Error {\n name = \"InvalidDocError\";\n constructor(doc) {\n super(getDocErrorMessage(doc));\n this.doc = doc;\n }\n};\nvar invalid_doc_error_default = InvalidDocError;\n\n// src/document/utils/traverse-doc.js\nvar traverseDocOnExitStackMarker = {};\nfunction traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) {\n const docsStack = [doc];\n while (docsStack.length > 0) {\n const doc2 = docsStack.pop();\n if (doc2 === traverseDocOnExitStackMarker) {\n onExit(docsStack.pop());\n continue;\n }\n if (onExit) {\n docsStack.push(doc2, traverseDocOnExitStackMarker);\n }\n const docType = get_doc_type_default(doc2);\n if (!docType) {\n throw new invalid_doc_error_default(doc2);\n }\n if ((onEnter == null ? void 0 : onEnter(doc2)) === false) {\n continue;\n }\n switch (docType) {\n case DOC_TYPE_ARRAY:\n case DOC_TYPE_FILL: {\n const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts;\n for (let ic = parts.length, i = ic - 1; i >= 0; --i) {\n docsStack.push(parts[i]);\n }\n break;\n }\n case DOC_TYPE_IF_BREAK:\n docsStack.push(doc2.flatContents, doc2.breakContents);\n break;\n case DOC_TYPE_GROUP:\n if (shouldTraverseConditionalGroups && doc2.expandedStates) {\n for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) {\n docsStack.push(doc2.expandedStates[i]);\n }\n } else {\n docsStack.push(doc2.contents);\n }\n break;\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_LINE_SUFFIX:\n docsStack.push(doc2.contents);\n break;\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc2);\n }\n }\n}\nvar traverse_doc_default = traverseDoc;\n\n// src/document/utils/assert-doc.js\nvar noop = () => {\n};\nvar assertDoc = true ? noop : function(doc) {\n traverse_doc_default(doc, (doc2) => {\n if (checked.has(doc2)) {\n return false;\n }\n if (typeof doc2 !== \"string\") {\n checked.add(doc2);\n }\n });\n};\nvar assertDocArray = true ? noop : function(docs, optional = false) {\n if (optional && !docs) {\n return;\n }\n if (!Array.isArray(docs)) {\n throw new TypeError(\"Unexpected doc array.\");\n }\n for (const doc of docs) {\n assertDoc(doc);\n }\n};\n\n// src/document/builders.js\nfunction indent(contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_INDENT, contents };\n}\nfunction align(widthOrString, contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_ALIGN, contents, n: widthOrString };\n}\nfunction group(contents, opts = {}) {\n assertDoc(contents);\n assertDocArray(\n opts.expandedStates,\n /* optional */\n true\n );\n return {\n type: DOC_TYPE_GROUP,\n id: opts.id,\n contents,\n break: Boolean(opts.shouldBreak),\n expandedStates: opts.expandedStates\n };\n}\nfunction dedentToRoot(contents) {\n return align(Number.NEGATIVE_INFINITY, contents);\n}\nfunction markAsRoot(contents) {\n return align({ type: \"root\" }, contents);\n}\nfunction dedent(contents) {\n return align(-1, contents);\n}\nfunction conditionalGroup(states, opts) {\n return group(states[0], { ...opts, expandedStates: states });\n}\nfunction fill(parts) {\n assertDocArray(parts);\n return { type: DOC_TYPE_FILL, parts };\n}\nfunction ifBreak(breakContents, flatContents = \"\", opts = {}) {\n assertDoc(breakContents);\n if (flatContents !== \"\") {\n assertDoc(flatContents);\n }\n return {\n type: DOC_TYPE_IF_BREAK,\n breakContents,\n flatContents,\n groupId: opts.groupId\n };\n}\nfunction indentIfBreak(contents, opts) {\n assertDoc(contents);\n return {\n type: DOC_TYPE_INDENT_IF_BREAK,\n contents,\n groupId: opts.groupId,\n negate: opts.negate\n };\n}\nfunction lineSuffix(contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_LINE_SUFFIX, contents };\n}\nvar lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY };\nvar breakParent = { type: DOC_TYPE_BREAK_PARENT };\nvar trim = { type: DOC_TYPE_TRIM };\nvar hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true };\nvar literallineWithoutBreakParent = {\n type: DOC_TYPE_LINE,\n hard: true,\n literal: true\n};\nvar line = { type: DOC_TYPE_LINE };\nvar softline = { type: DOC_TYPE_LINE, soft: true };\nvar hardline = [hardlineWithoutBreakParent, breakParent];\nvar literalline = [literallineWithoutBreakParent, breakParent];\nvar cursor = { type: DOC_TYPE_CURSOR };\nfunction join(separator, docs) {\n assertDoc(separator);\n assertDocArray(docs);\n const parts = [];\n for (let i = 0; i < docs.length; i++) {\n if (i !== 0) {\n parts.push(separator);\n }\n parts.push(docs[i]);\n }\n return parts;\n}\nfunction addAlignmentToDoc(doc, size, tabWidth) {\n assertDoc(doc);\n let aligned = doc;\n if (size > 0) {\n for (let i = 0; i < Math.floor(size / tabWidth); ++i) {\n aligned = indent(aligned);\n }\n aligned = align(size % tabWidth, aligned);\n aligned = align(Number.NEGATIVE_INFINITY, aligned);\n }\n return aligned;\n}\nfunction label(label2, contents) {\n assertDoc(contents);\n return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents;\n}\n\n// scripts/build/shims/at.js\nvar at = (isOptionalObject, object, index) => {\n if (isOptionalObject && (object === void 0 || object === null)) {\n return;\n }\n if (Array.isArray(object) || typeof object === \"string\") {\n return object[index < 0 ? object.length + index : index];\n }\n return object.at(index);\n};\nvar at_default = at;\n\n// scripts/build/shims/string-replace-all.js\nvar stringReplaceAll = (isOptionalObject, original, pattern, replacement) => {\n if (isOptionalObject && (original === void 0 || original === null)) {\n return;\n }\n if (original.replaceAll) {\n return original.replaceAll(pattern, replacement);\n }\n if (pattern.global) {\n return original.replace(pattern, replacement);\n }\n return original.split(pattern).join(replacement);\n};\nvar string_replace_all_default = stringReplaceAll;\n\n// src/common/end-of-line.js\nfunction convertEndOfLineToChars(value) {\n switch (value) {\n case \"cr\":\n return \"\\r\";\n case \"crlf\":\n return \"\\r\\n\";\n default:\n return \"\\n\";\n }\n}\n\n// node_modules/emoji-regex/index.mjs\nvar emoji_regex_default = () => {\n return /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n\n// node_modules/eastasianwidth/eastasianwidth.js\nvar eastasianwidth_default = {\n eastAsianWidth(character) {\n var x = character.charCodeAt(0);\n var y = character.length == 2 ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) {\n x &= 1023;\n y &= 1023;\n codePoint = x << 10 | y;\n codePoint += 65536;\n }\n if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) {\n return \"F\";\n }\n if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) {\n return \"W\";\n }\n return \"N\";\n }\n};\n\n// src/utils/get-string-width.js\nvar notAsciiRegex = /[^\\x20-\\x7F]/;\nfunction getStringWidth(text) {\n if (!text) {\n return 0;\n }\n if (!notAsciiRegex.test(text)) {\n return text.length;\n }\n text = text.replace(emoji_regex_default(), \" \");\n let width = 0;\n for (const character of text) {\n const codePoint = character.codePointAt(0);\n if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {\n continue;\n }\n if (codePoint >= 768 && codePoint <= 879) {\n continue;\n }\n const code = eastasianwidth_default.eastAsianWidth(character);\n width += code === \"F\" || code === \"W\" ? 2 : 1;\n }\n return width;\n}\nvar get_string_width_default = getStringWidth;\n\n// src/document/utils.js\nvar getDocParts = (doc) => {\n if (Array.isArray(doc)) {\n return doc;\n }\n if (doc.type !== DOC_TYPE_FILL) {\n throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`);\n }\n return doc.parts;\n};\nfunction mapDoc(doc, cb) {\n if (typeof doc === \"string\") {\n return cb(doc);\n }\n const mapped = /* @__PURE__ */ new Map();\n return rec(doc);\n function rec(doc2) {\n if (mapped.has(doc2)) {\n return mapped.get(doc2);\n }\n const result = process2(doc2);\n mapped.set(doc2, result);\n return result;\n }\n function process2(doc2) {\n switch (get_doc_type_default(doc2)) {\n case DOC_TYPE_ARRAY:\n return cb(doc2.map(rec));\n case DOC_TYPE_FILL:\n return cb({\n ...doc2,\n parts: doc2.parts.map(rec)\n });\n case DOC_TYPE_IF_BREAK:\n return cb({\n ...doc2,\n breakContents: rec(doc2.breakContents),\n flatContents: rec(doc2.flatContents)\n });\n case DOC_TYPE_GROUP: {\n let {\n expandedStates,\n contents\n } = doc2;\n if (expandedStates) {\n expandedStates = expandedStates.map(rec);\n contents = expandedStates[0];\n } else {\n contents = rec(contents);\n }\n return cb({\n ...doc2,\n contents,\n expandedStates\n });\n }\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_LINE_SUFFIX:\n return cb({\n ...doc2,\n contents: rec(doc2.contents)\n });\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n return cb(doc2);\n default:\n throw new invalid_doc_error_default(doc2);\n }\n }\n}\nfunction findInDoc(doc, fn, defaultValue) {\n let result = defaultValue;\n let shouldSkipFurtherProcessing = false;\n function findInDocOnEnterFn(doc2) {\n if (shouldSkipFurtherProcessing) {\n return false;\n }\n const maybeResult = fn(doc2);\n if (maybeResult !== void 0) {\n shouldSkipFurtherProcessing = true;\n result = maybeResult;\n }\n }\n traverse_doc_default(doc, findInDocOnEnterFn);\n return result;\n}\nfunction willBreakFn(doc) {\n if (doc.type === DOC_TYPE_GROUP && doc.break) {\n return true;\n }\n if (doc.type === DOC_TYPE_LINE && doc.hard) {\n return true;\n }\n if (doc.type === DOC_TYPE_BREAK_PARENT) {\n return true;\n }\n}\nfunction willBreak(doc) {\n return findInDoc(doc, willBreakFn, false);\n}\nfunction breakParentGroup(groupStack) {\n if (groupStack.length > 0) {\n const parentGroup = at_default(\n /* isOptionalObject*/\n false,\n groupStack,\n -1\n );\n if (!parentGroup.expandedStates && !parentGroup.break) {\n parentGroup.break = \"propagated\";\n }\n }\n return null;\n}\nfunction propagateBreaks(doc) {\n const alreadyVisitedSet = /* @__PURE__ */ new Set();\n const groupStack = [];\n function propagateBreaksOnEnterFn(doc2) {\n if (doc2.type === DOC_TYPE_BREAK_PARENT) {\n breakParentGroup(groupStack);\n }\n if (doc2.type === DOC_TYPE_GROUP) {\n groupStack.push(doc2);\n if (alreadyVisitedSet.has(doc2)) {\n return false;\n }\n alreadyVisitedSet.add(doc2);\n }\n }\n function propagateBreaksOnExitFn(doc2) {\n if (doc2.type === DOC_TYPE_GROUP) {\n const group2 = groupStack.pop();\n if (group2.break) {\n breakParentGroup(groupStack);\n }\n }\n }\n traverse_doc_default(\n doc,\n propagateBreaksOnEnterFn,\n propagateBreaksOnExitFn,\n /* shouldTraverseConditionalGroups */\n true\n );\n}\nfunction removeLinesFn(doc) {\n if (doc.type === DOC_TYPE_LINE && !doc.hard) {\n return doc.soft ? \"\" : \" \";\n }\n if (doc.type === DOC_TYPE_IF_BREAK) {\n return doc.flatContents;\n }\n return doc;\n}\nfunction removeLines(doc) {\n return mapDoc(doc, removeLinesFn);\n}\nfunction stripTrailingHardlineFromParts(parts) {\n parts = [...parts];\n while (parts.length >= 2 && at_default(\n /* isOptionalObject*/\n false,\n parts,\n -2\n ).type === DOC_TYPE_LINE && at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ).type === DOC_TYPE_BREAK_PARENT) {\n parts.length -= 2;\n }\n if (parts.length > 0) {\n const lastPart = stripTrailingHardlineFromDoc(at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ));\n parts[parts.length - 1] = lastPart;\n }\n return parts;\n}\nfunction stripTrailingHardlineFromDoc(doc) {\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_GROUP:\n case DOC_TYPE_LINE_SUFFIX:\n case DOC_TYPE_LABEL: {\n const contents = stripTrailingHardlineFromDoc(doc.contents);\n return {\n ...doc,\n contents\n };\n }\n case DOC_TYPE_IF_BREAK:\n return {\n ...doc,\n breakContents: stripTrailingHardlineFromDoc(doc.breakContents),\n flatContents: stripTrailingHardlineFromDoc(doc.flatContents)\n };\n case DOC_TYPE_FILL:\n return {\n ...doc,\n parts: stripTrailingHardlineFromParts(doc.parts)\n };\n case DOC_TYPE_ARRAY:\n return stripTrailingHardlineFromParts(doc);\n case DOC_TYPE_STRING:\n return doc.replace(/[\\n\\r]*$/, \"\");\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc);\n }\n return doc;\n}\nfunction stripTrailingHardline(doc) {\n return stripTrailingHardlineFromDoc(cleanDoc(doc));\n}\nfunction cleanDocFn(doc) {\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_FILL:\n if (doc.parts.every((part) => part === \"\")) {\n return \"\";\n }\n break;\n case DOC_TYPE_GROUP:\n if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) {\n return \"\";\n }\n if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) {\n return doc.contents;\n }\n break;\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LINE_SUFFIX:\n if (!doc.contents) {\n return \"\";\n }\n break;\n case DOC_TYPE_IF_BREAK:\n if (!doc.flatContents && !doc.breakContents) {\n return \"\";\n }\n break;\n case DOC_TYPE_ARRAY: {\n const parts = [];\n for (const part of doc) {\n if (!part) {\n continue;\n }\n const [currentPart, ...restParts] = Array.isArray(part) ? part : [part];\n if (typeof currentPart === \"string\" && typeof at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ) === \"string\") {\n parts[parts.length - 1] += currentPart;\n } else {\n parts.push(currentPart);\n }\n parts.push(...restParts);\n }\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts;\n }\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc);\n }\n return doc;\n}\nfunction cleanDoc(doc) {\n return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc));\n}\nfunction replaceEndOfLine(doc, replacement = literalline) {\n return mapDoc(doc, (currentDoc) => typeof currentDoc === \"string\" ? join(replacement, currentDoc.split(\"\\n\")) : currentDoc);\n}\nfunction canBreakFn(doc) {\n if (doc.type === DOC_TYPE_LINE) {\n return true;\n }\n}\nfunction canBreak(doc) {\n return findInDoc(doc, canBreakFn, false);\n}\n\n// src/document/printer.js\nvar MODE_BREAK = Symbol(\"MODE_BREAK\");\nvar MODE_FLAT = Symbol(\"MODE_FLAT\");\nvar CURSOR_PLACEHOLDER = Symbol(\"cursor\");\nfunction rootIndent() {\n return {\n value: \"\",\n length: 0,\n queue: []\n };\n}\nfunction makeIndent(ind, options) {\n return generateInd(ind, {\n type: \"indent\"\n }, options);\n}\nfunction makeAlign(indent2, widthOrDoc, options) {\n if (widthOrDoc === Number.NEGATIVE_INFINITY) {\n return indent2.root || rootIndent();\n }\n if (widthOrDoc < 0) {\n return generateInd(indent2, {\n type: \"dedent\"\n }, options);\n }\n if (!widthOrDoc) {\n return indent2;\n }\n if (widthOrDoc.type === \"root\") {\n return {\n ...indent2,\n root: indent2\n };\n }\n const alignType = typeof widthOrDoc === \"string\" ? \"stringAlign\" : \"numberAlign\";\n return generateInd(indent2, {\n type: alignType,\n n: widthOrDoc\n }, options);\n}\nfunction generateInd(ind, newPart, options) {\n const queue = newPart.type === \"dedent\" ? ind.queue.slice(0, -1) : [...ind.queue, newPart];\n let value = \"\";\n let length = 0;\n let lastTabs = 0;\n let lastSpaces = 0;\n for (const part of queue) {\n switch (part.type) {\n case \"indent\":\n flush();\n if (options.useTabs) {\n addTabs(1);\n } else {\n addSpaces(options.tabWidth);\n }\n break;\n case \"stringAlign\":\n flush();\n value += part.n;\n length += part.n.length;\n break;\n case \"numberAlign\":\n lastTabs += 1;\n lastSpaces += part.n;\n break;\n default:\n throw new Error(`Unexpected type '${part.type}'`);\n }\n }\n flushSpaces();\n return {\n ...ind,\n value,\n length,\n queue\n };\n function addTabs(count) {\n value += \"\t\".repeat(count);\n length += options.tabWidth * count;\n }\n function addSpaces(count) {\n value += \" \".repeat(count);\n length += count;\n }\n function flush() {\n if (options.useTabs) {\n flushTabs();\n } else {\n flushSpaces();\n }\n }\n function flushTabs() {\n if (lastTabs > 0) {\n addTabs(lastTabs);\n }\n resetLast();\n }\n function flushSpaces() {\n if (lastSpaces > 0) {\n addSpaces(lastSpaces);\n }\n resetLast();\n }\n function resetLast() {\n lastTabs = 0;\n lastSpaces = 0;\n }\n}\nfunction trim2(out) {\n let trimCount = 0;\n let cursorCount = 0;\n let outIndex = out.length;\n outer:\n while (outIndex--) {\n const last = out[outIndex];\n if (last === CURSOR_PLACEHOLDER) {\n cursorCount++;\n continue;\n }\n if (false) {\n throw new Error(`Unexpected value in trim: '${typeof last}'`);\n }\n for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) {\n const char = last[charIndex];\n if (char === \" \" || char === \"\t\") {\n trimCount++;\n } else {\n out[outIndex] = last.slice(0, charIndex + 1);\n break outer;\n }\n }\n }\n if (trimCount > 0 || cursorCount > 0) {\n out.length = outIndex + 1;\n while (cursorCount-- > 0) {\n out.push(CURSOR_PLACEHOLDER);\n }\n }\n return trimCount;\n}\nfunction fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) {\n if (width === Number.POSITIVE_INFINITY) {\n return true;\n }\n let restIdx = restCommands.length;\n const cmds = [next];\n const out = [];\n while (width >= 0) {\n if (cmds.length === 0) {\n if (restIdx === 0) {\n return true;\n }\n cmds.push(restCommands[--restIdx]);\n continue;\n }\n const {\n mode,\n doc\n } = cmds.pop();\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_STRING:\n out.push(doc);\n width -= get_string_width_default(doc);\n break;\n case DOC_TYPE_ARRAY:\n case DOC_TYPE_FILL: {\n const parts = getDocParts(doc);\n for (let i = parts.length - 1; i >= 0; i--) {\n cmds.push({\n mode,\n doc: parts[i]\n });\n }\n break;\n }\n case DOC_TYPE_INDENT:\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n cmds.push({\n mode,\n doc: doc.contents\n });\n break;\n case DOC_TYPE_TRIM:\n width += trim2(out);\n break;\n case DOC_TYPE_GROUP: {\n if (mustBeFlat && doc.break) {\n return false;\n }\n const groupMode = doc.break ? MODE_BREAK : mode;\n const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default(\n /* isOptionalObject*/\n false,\n doc.expandedStates,\n -1\n ) : doc.contents;\n cmds.push({\n mode: groupMode,\n doc: contents\n });\n break;\n }\n case DOC_TYPE_IF_BREAK: {\n const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode;\n const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents;\n if (contents) {\n cmds.push({\n mode,\n doc: contents\n });\n }\n break;\n }\n case DOC_TYPE_LINE:\n if (mode === MODE_BREAK || doc.hard) {\n return true;\n }\n if (!doc.soft) {\n out.push(\" \");\n width--;\n }\n break;\n case DOC_TYPE_LINE_SUFFIX:\n hasLineSuffix = true;\n break;\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n if (hasLineSuffix) {\n return false;\n }\n break;\n }\n }\n return false;\n}\nfunction printDocToString(doc, options) {\n const groupModeMap = {};\n const width = options.printWidth;\n const newLine = convertEndOfLineToChars(options.endOfLine);\n let pos = 0;\n const cmds = [{\n ind: rootIndent(),\n mode: MODE_BREAK,\n doc\n }];\n const out = [];\n let shouldRemeasure = false;\n const lineSuffix2 = [];\n let printedCursorCount = 0;\n propagateBreaks(doc);\n while (cmds.length > 0) {\n const {\n ind,\n mode,\n doc: doc2\n } = cmds.pop();\n switch (get_doc_type_default(doc2)) {\n case DOC_TYPE_STRING: {\n const formatted = newLine !== \"\\n\" ? string_replace_all_default(\n /* isOptionalObject*/\n false,\n doc2,\n \"\\n\",\n newLine\n ) : doc2;\n out.push(formatted);\n if (cmds.length > 0) {\n pos += get_string_width_default(formatted);\n }\n break;\n }\n case DOC_TYPE_ARRAY:\n for (let i = doc2.length - 1; i >= 0; i--) {\n cmds.push({\n ind,\n mode,\n doc: doc2[i]\n });\n }\n break;\n case DOC_TYPE_CURSOR:\n if (printedCursorCount >= 2) {\n throw new Error(\"There are too many 'cursor' in doc.\");\n }\n out.push(CURSOR_PLACEHOLDER);\n printedCursorCount++;\n break;\n case DOC_TYPE_INDENT:\n cmds.push({\n ind: makeIndent(ind, options),\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_ALIGN:\n cmds.push({\n ind: makeAlign(ind, doc2.n, options),\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_TRIM:\n pos -= trim2(out);\n break;\n case DOC_TYPE_GROUP:\n switch (mode) {\n case MODE_FLAT:\n if (!shouldRemeasure) {\n cmds.push({\n ind,\n mode: doc2.break ? MODE_BREAK : MODE_FLAT,\n doc: doc2.contents\n });\n break;\n }\n case MODE_BREAK: {\n shouldRemeasure = false;\n const next = {\n ind,\n mode: MODE_FLAT,\n doc: doc2.contents\n };\n const rem = width - pos;\n const hasLineSuffix = lineSuffix2.length > 0;\n if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) {\n cmds.push(next);\n } else {\n if (doc2.expandedStates) {\n const mostExpanded = at_default(\n /* isOptionalObject*/\n false,\n doc2.expandedStates,\n -1\n );\n if (doc2.break) {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: mostExpanded\n });\n break;\n } else {\n for (let i = 1; i < doc2.expandedStates.length + 1; i++) {\n if (i >= doc2.expandedStates.length) {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: mostExpanded\n });\n break;\n } else {\n const state = doc2.expandedStates[i];\n const cmd = {\n ind,\n mode: MODE_FLAT,\n doc: state\n };\n if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) {\n cmds.push(cmd);\n break;\n }\n }\n }\n }\n } else {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: doc2.contents\n });\n }\n }\n break;\n }\n }\n if (doc2.id) {\n groupModeMap[doc2.id] = at_default(\n /* isOptionalObject*/\n false,\n cmds,\n -1\n ).mode;\n }\n break;\n case DOC_TYPE_FILL: {\n const rem = width - pos;\n const {\n parts\n } = doc2;\n if (parts.length === 0) {\n break;\n }\n const [content, whitespace] = parts;\n const contentFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: content\n };\n const contentBreakCmd = {\n ind,\n mode: MODE_BREAK,\n doc: content\n };\n const contentFits = fits(contentFlatCmd, [], rem, lineSuffix2.length > 0, groupModeMap, true);\n if (parts.length === 1) {\n if (contentFits) {\n cmds.push(contentFlatCmd);\n } else {\n cmds.push(contentBreakCmd);\n }\n break;\n }\n const whitespaceFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: whitespace\n };\n const whitespaceBreakCmd = {\n ind,\n mode: MODE_BREAK,\n doc: whitespace\n };\n if (parts.length === 2) {\n if (contentFits) {\n cmds.push(whitespaceFlatCmd, contentFlatCmd);\n } else {\n cmds.push(whitespaceBreakCmd, contentBreakCmd);\n }\n break;\n }\n parts.splice(0, 2);\n const remainingCmd = {\n ind,\n mode,\n doc: fill(parts)\n };\n const secondContent = parts[0];\n const firstAndSecondContentFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: [content, whitespace, secondContent]\n };\n const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix2.length > 0, groupModeMap, true);\n if (firstAndSecondContentFits) {\n cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd);\n } else if (contentFits) {\n cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd);\n } else {\n cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd);\n }\n break;\n }\n case DOC_TYPE_IF_BREAK:\n case DOC_TYPE_INDENT_IF_BREAK: {\n const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode;\n if (groupMode === MODE_BREAK) {\n const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents);\n if (breakContents) {\n cmds.push({\n ind,\n mode,\n doc: breakContents\n });\n }\n }\n if (groupMode === MODE_FLAT) {\n const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents;\n if (flatContents) {\n cmds.push({\n ind,\n mode,\n doc: flatContents\n });\n }\n }\n break;\n }\n case DOC_TYPE_LINE_SUFFIX:\n lineSuffix2.push({\n ind,\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n if (lineSuffix2.length > 0) {\n cmds.push({\n ind,\n mode,\n doc: hardlineWithoutBreakParent\n });\n }\n break;\n case DOC_TYPE_LINE:\n switch (mode) {\n case MODE_FLAT:\n if (!doc2.hard) {\n if (!doc2.soft) {\n out.push(\" \");\n pos += 1;\n }\n break;\n } else {\n shouldRemeasure = true;\n }\n case MODE_BREAK:\n if (lineSuffix2.length > 0) {\n cmds.push({\n ind,\n mode,\n doc: doc2\n }, ...lineSuffix2.reverse());\n lineSuffix2.length = 0;\n break;\n }\n if (doc2.literal) {\n if (ind.root) {\n out.push(newLine, ind.root.value);\n pos = ind.root.length;\n } else {\n out.push(newLine);\n pos = 0;\n }\n } else {\n pos -= trim2(out);\n out.push(newLine + ind.value);\n pos = ind.length;\n }\n break;\n }\n break;\n case DOC_TYPE_LABEL:\n cmds.push({\n ind,\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc2);\n }\n if (cmds.length === 0 && lineSuffix2.length > 0) {\n cmds.push(...lineSuffix2.reverse());\n lineSuffix2.length = 0;\n }\n }\n const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER);\n if (cursorPlaceholderIndex !== -1) {\n const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1);\n const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(\"\");\n const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(\"\");\n const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(\"\");\n return {\n formatted: beforeCursor + aroundCursor + afterCursor,\n cursorNodeStart: beforeCursor.length,\n cursorNodeText: aroundCursor\n };\n }\n return {\n formatted: out.join(\"\")\n };\n}\n\n// src/document/public.js\nvar builders = {\n join,\n line,\n softline,\n hardline,\n literalline,\n group,\n conditionalGroup,\n fill,\n lineSuffix,\n lineSuffixBoundary,\n cursor,\n breakParent,\n ifBreak,\n trim,\n indent,\n indentIfBreak,\n align,\n addAlignmentToDoc,\n markAsRoot,\n dedentToRoot,\n dedent,\n hardlineWithoutBreakParent,\n literallineWithoutBreakParent,\n label,\n // TODO: Remove this in v4\n concat: (parts) => parts\n};\nvar printer = { printDocToString };\nvar utils = {\n willBreak,\n traverseDoc: traverse_doc_default,\n findInDoc,\n mapDoc,\n removeLines,\n stripTrailingHardline,\n replaceEndOfLine,\n canBreak\n};\n\n// with-default-export:src/document/public.js\nvar public_default = public_exports;\nexport {\n builders,\n public_default as default,\n printer,\n utils\n};\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\n\ntype Printable = Ast.Node | Ast.Argument | string;\ntype PrintToken = string | typeof linebreak;\n\nexport const linebreak = Symbol(\"linebreak\");\nconst ESCAPE = \"\\\\\";\n\n/**\n * Renders the AST to an array inserting `linebreak` where needed;\n * This array may be nested.\n *\n * @param {*} node\n */\nfunction _printRaw(node: Printable | Printable[]): PrintToken[] {\n if (typeof node === \"string\") {\n return [node];\n }\n if (Array.isArray(node)) {\n return ([] as PrintToken[]).concat(\n ...node.map((n: Printable) => _printRaw(n))\n );\n }\n // tmp variables\n let argsString, escape;\n switch (node.type) {\n case \"root\":\n return _printRaw(node.content);\n case \"argument\":\n return [node.openMark, ..._printRaw(node.content), node.closeMark];\n case \"comment\":\n var suffix = node.suffixParbreak ? \"\" : linebreak;\n // A comment is responsible for printing its own leading whitespace\n var leadingWhitespace = \"\";\n if (node.sameline && node.leadingWhitespace) {\n leadingWhitespace = \" \";\n }\n if (node.sameline) {\n return [\n leadingWhitespace,\n \"%\",\n ..._printRaw(node.content),\n suffix,\n ];\n }\n return [linebreak, \"%\", ..._printRaw(node.content), suffix];\n case \"environment\":\n case \"mathenv\":\n case \"verbatim\":\n var env = _printRaw(node.env);\n var envStart: PrintToken[] = [ESCAPE + \"begin{\", ...env, \"}\"];\n var envEnd: PrintToken[] = [ESCAPE + \"end{\", ...env, \"}\"];\n argsString =\n (node as any).args == null ? [] : _printRaw((node as any).args);\n return [\n ...envStart,\n ...argsString,\n ..._printRaw(node.content),\n ...envEnd,\n ];\n case \"displaymath\":\n return [ESCAPE + \"[\", ..._printRaw(node.content), ESCAPE + \"]\"];\n case \"group\":\n return [\"{\", ..._printRaw(node.content), \"}\"];\n case \"inlinemath\":\n return [\"$\", ..._printRaw(node.content), \"$\"];\n case \"macro\":\n argsString = node.args == null ? [] : _printRaw(node.args);\n escape = node.escapeToken == null ? ESCAPE : node.escapeToken;\n return [escape, ..._printRaw(node.content), ...argsString];\n case \"parbreak\":\n return [linebreak, linebreak];\n case \"string\":\n return [node.content];\n case \"verb\":\n return [\n ESCAPE,\n node.env,\n node.escape,\n ..._printRaw(node.content),\n node.escape,\n ];\n case \"whitespace\":\n return [\" \"];\n\n default:\n console.warn(\n \"Cannot find render for node \",\n node,\n `(of type ${typeof node})`\n );\n return [\"\" + node];\n }\n}\n\n/**\n * Renders the AST to a string without any pretty printing.\n *\n * @param {*} node\n * @param {*} options - Setting `asArray` to `true` will return an array of strings and the symbol `linebreak`, so that printing can be customized.\n */\nexport function printRaw(\n node: Printable | Printable[],\n options?: { asArray: false }\n): string;\nexport function printRaw(\n node: Printable | Printable[],\n options: { asArray: true }\n): PrintToken[];\nexport function printRaw(node: Printable | Printable[], options?: object): any {\n const asArray = options != null ? (options as any).asArray : false;\n const printedTokens = _printRaw(node);\n if (asArray) {\n return printedTokens;\n }\n return printedTokens.map((x) => (x === linebreak ? \"\\n\" : x)).join(\"\");\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfo,\n MacroInfo,\n MacroInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros\n * and generates a hash for quick lookup.\n */\nfunction createMacroMatcher(\n macros: Ast.Macro[] | S[] | Record\n) {\n // We first make sure we have a record type with keys being the macro's contents\n const macrosHash: Record = Array.isArray(macros)\n ? macros.length > 0\n ? typeof macros[0] === \"string\"\n ? Object.fromEntries(\n macros.map((macro) => {\n if (typeof macro !== \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n return [macro, {}] as [string, MacroInfo];\n })\n )\n : Object.fromEntries(\n macros.map((macro) => {\n if (typeof macro === \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n if (macro.escapeToken != null) {\n return [\n macro.content,\n { escapeToken: macro.escapeToken },\n ] as [string, MacroInfo];\n }\n return [macro.content, {}] as [string, MacroInfo];\n })\n )\n : {}\n : macros;\n\n return function matchAgainstMacros(node: any | Ast.Macro) {\n if (node == null || node.type !== \"macro\") {\n return false;\n }\n // At this point we have a macro type\n const spec = macrosHash[node.content];\n if (!spec) {\n return false;\n }\n\n if (typeof spec === \"object\" && \"escapeToken\" in spec) {\n return (\n (spec as MacroInfoRecord).escapeToken == null ||\n (spec as MacroInfoRecord).escapeToken === node.escapeToken\n );\n }\n return true;\n } as Ast.TypeGuard;\n}\n\n/**\n * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros\n * and generates a hash for quick lookup.\n */\nfunction createEnvironmentMatcher(macros: string[] | Record) {\n // We first make sure we have a record type with keys being the macro's contents\n const environmentsHash = Array.isArray(macros)\n ? Object.fromEntries(\n macros.map((str) => {\n return [str, {}] as [string, EnvInfo];\n })\n )\n : macros;\n\n return function matchAgainstEnvironments(node: any | Ast.Environment) {\n if (!match.anyEnvironment(node)) {\n return false;\n }\n // At this point we have an environment type\n const envName = printRaw(node.env);\n const spec = environmentsHash[envName];\n if (!spec) {\n return false;\n }\n\n return true;\n } as Ast.TypeGuard;\n}\n\n/**\n * Functions to match different types of nodes.\n */\nexport const match = {\n macro(node: any, macroName?: string): node is Ast.Macro {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"macro\" &&\n (macroName == null || node.content === macroName)\n );\n },\n anyMacro(node: any): node is Ast.Macro {\n return match.macro(node);\n },\n environment(node: any, envName?: string): node is Ast.Environment {\n if (node == null) {\n return false;\n }\n return (\n (node.type === \"environment\" || node.type === \"mathenv\") &&\n (envName == null || printRaw(node.env) === envName)\n );\n },\n anyEnvironment(node: any): node is Ast.Environment {\n return match.environment(node);\n },\n comment(node: any): node is Ast.Comment {\n if (node == null) {\n return false;\n }\n return node.type === \"comment\";\n },\n parbreak(node: any): node is Ast.Parbreak {\n if (node == null) {\n return false;\n }\n return node.type === \"parbreak\";\n },\n whitespace(node: any): node is Ast.Whitespace {\n if (node == null) {\n return false;\n }\n return node.type === \"whitespace\";\n },\n /**\n * Matches whitespace or a comment with leading whitespace.\n */\n whitespaceLike(\n node: any\n ): node is Ast.Whitespace | (Ast.Comment & { leadingWhitespace: true }) {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"whitespace\" ||\n (node.type === \"whitespace\" && node.leadingWhitespace === true)\n );\n },\n string(node: any, value?: string): node is Ast.String {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"string\" && (value == null || node.content === value)\n );\n },\n anyString(node: any): node is Ast.String {\n return match.string(node);\n },\n group(node: any): node is Ast.Group {\n if (node == null) {\n return false;\n }\n return node.type === \"group\";\n },\n argument(node: any): node is Ast.Argument {\n if (node == null) {\n return false;\n }\n return node.type === \"argument\";\n },\n blankArgument(node: any): boolean {\n if (!match.argument(node)) {\n return false;\n }\n return (\n node.openMark === \"\" &&\n node.closeMark === \"\" &&\n node.content.length === 0\n );\n },\n math(node: any): node is Ast.DisplayMath | Ast.InlineMath {\n if (node == null) {\n return false;\n }\n return node.type === \"displaymath\" || node.type === \"inlinemath\";\n },\n createMacroMatcher,\n createEnvironmentMatcher,\n};\n\nexport const {\n anyEnvironment,\n anyMacro,\n anyString,\n argument,\n blankArgument,\n comment,\n environment,\n group,\n macro,\n math,\n parbreak,\n string,\n whitespace,\n} = match;\n", "import { builders } from \"prettier/doc\";\nimport type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { ReferenceMap } from \"../reference-map\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Computes the environment name, start/end, and args.\n * E.g., for \"\\begin{x}abc\\end{x}\", it returns\n * ```\n * {\n * envName: \"x\",\n * start: \"\\\\begin{x}\",\n * end: \"\\\\end{x}\",\n * }\n * ```\n *\n * @param {*} node\n * @returns\n */\nexport function formatEnvSurround(node: Ast.Environment) {\n const env = printRaw(node.env);\n\n return {\n envName: env,\n start: ESCAPE + \"begin{\" + env + \"}\",\n end: ESCAPE + \"end{\" + env + \"}\",\n };\n}\n\n/**\n * Determine if `elm` is a line type (softline/hardline/etc). If `elm` is an\n * array or a concat, the first element is checked.\n */\nfunction isLineType(elm: Doc): boolean {\n if (elm == null || typeof elm === \"string\") {\n return false;\n }\n if (Array.isArray(elm)) {\n return isLineType(elm[0]);\n }\n // Perhaps we can sneak by with Prettier v2 compatibility?\n // @ts-ignore\n if (elm.type === \"concat\") {\n // @ts-ignore\n return isLineType(elm.parts);\n }\n return elm.type === \"line\";\n}\n\n/**\n * Join an array with `softline`. However, if a `line` is\n * found, do not insert an additional softline. For example\n * `[a, b, c]` -> `[a, softline, b, softline, c]`\n *\n * but\n *\n * `[a, line, b, c]` -> `[a, line, b, softline, c]`\n *\n * @param {*} arr\n * @returns\n */\nexport function joinWithSoftline(arr: Doc[]) {\n if (arr.length === 0 || arr.length === 1) {\n return arr;\n }\n const ret = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n const prevNode = arr[i - 1];\n const nextNode = arr[i];\n if (!isLineType(prevNode) && !isLineType(nextNode)) {\n ret.push(softline);\n }\n ret.push(nextNode);\n }\n return ret;\n}\n\nexport function getNodeInfo(\n node: any,\n options: PrettierTypes.Options & { referenceMap?: ReferenceMap }\n): {\n renderInfo: Record;\n renderCache?: object;\n previousNode?: Ast.Node;\n nextNode?: Ast.Node;\n referenceMap?: ReferenceMap;\n} {\n if (!node) {\n return { renderInfo: {} };\n }\n const renderInfo = node._renderInfo || {};\n const previousNode =\n options.referenceMap && options.referenceMap.getPreviousNode(node);\n const nextNode =\n options.referenceMap && options.referenceMap.getNextNode(node);\n const renderCache =\n options.referenceMap && options.referenceMap.getRenderCache(node);\n // It's useful to know whether we're the start or end node in an array,\n // so compute this information.\n return {\n renderInfo,\n renderCache,\n previousNode,\n nextNode,\n referenceMap: options.referenceMap,\n };\n}\n\nexport const ESCAPE = \"\\\\\";\n\n// Commands to build the prettier syntax tree\nexport const {\n group,\n fill,\n ifBreak,\n line,\n softline,\n hardline,\n lineSuffix,\n lineSuffixBoundary,\n breakParent,\n indent,\n markAsRoot,\n join,\n} = builders;\n\n/**\n * Given an array of nodes and the corresponding printed versions, prepares\n * a final Doc array. This function does things like ensures there are `hardlines`\n * around environments and that there aren't excess hardlines at the start or end.\n * It also unwraps `inParMode` macro contents.\n *\n * @export\n * @param {Ast.Node[]} nodes\n * @param {Doc[]} docArray\n * @param {*} options\n * @returns {Doc[]}\n */\nexport function formatDocArray(\n nodes: Ast.Node[],\n docArray: Doc[],\n options: any\n): Doc[] {\n const ret: Doc[] = [];\n\n for (let i = 0; i < nodes.length; i++) {\n const rawNode = nodes[i];\n const printedNode = docArray[i];\n const { renderInfo, referenceMap, previousNode, nextNode } =\n getNodeInfo(rawNode, options);\n const renderCache =\n referenceMap && referenceMap.getRenderCache(rawNode);\n\n switch (rawNode.type) {\n case \"comment\":\n // Comments don't insert hardlines themselves; they depend on appropriate\n // hardlines being inserted here.\n\n // This comment printer inserts hardlines after comments, so do not insert\n // a hardline before a comment if there is a comment right before.\n if (\n !rawNode.sameline &&\n previousNode &&\n !match.comment(previousNode) &&\n !match.parbreak(previousNode)\n ) {\n ret.push(hardline);\n }\n ret.push(printedNode);\n if (nextNode && !rawNode.suffixParbreak) {\n ret.push(hardline);\n }\n break;\n case \"environment\":\n case \"displaymath\":\n case \"mathenv\":\n // Environments always start on a new line (unless they are the first\n // item). Peek to see if there is a newline inserted already.\n if (previousNode && previousNode?.type !== \"parbreak\") {\n if (ret[ret.length - 1] === line) {\n // A preceding `line` should be converted into a `hardline`.\n // Remove the line so a hardline can be added\n ret.pop();\n }\n if (ret[ret.length - 1] !== hardline) {\n ret.push(hardline);\n }\n }\n ret.push(printedNode);\n // If an environment is followed by whitespace, replace it with a hardline\n // instead\n if (nextNode?.type === \"whitespace\") {\n ret.push(hardline);\n i++;\n }\n\n break;\n case \"macro\":\n if (renderInfo.breakBefore || renderInfo.breakAround) {\n // Commands like \\section{} should always be preceded by a hardline\n if (previousNode) {\n if (\n ret[ret.length - 1] === line ||\n ret[ret.length - 1] === hardline\n ) {\n // We may be replacing a hardline here for no reason. However,\n // if there is already a hardline, we don't want to continue\n // and accidentally add too many linebreaks\n ret.pop();\n ret.push(hardline);\n } else if (\n !match.comment(previousNode) &&\n !match.parbreak(previousNode)\n ) {\n ret.push(hardline);\n }\n }\n }\n // Macros marked as `inParMode` should be unwrapped\n // unless they have a hanging indent, in which case the macro\n // has already be wrapped in an `indent` block\n if (\n renderInfo.inParMode &&\n !renderInfo.hangingIndent &&\n renderCache\n ) {\n ret.push(\n (renderCache as any).content,\n ...((renderCache as any).rawArgs || [])\n );\n } else {\n ret.push(printedNode);\n }\n if (renderInfo.breakAfter || renderInfo.breakAround) {\n // Commands like \\section{} should always be followed by a hardline\n if (nextNode) {\n if (match.whitespace(nextNode)) {\n ret.push(hardline);\n i++;\n } else if (match.parbreak(nextNode)) {\n // If the next node is a parbreak, it will insert its own newline\n } else if (!match.comment(nextNode)) {\n ret.push(hardline);\n }\n }\n }\n break;\n case \"parbreak\":\n ret.push(hardline, hardline);\n break;\n default:\n ret.push(printedNode);\n break;\n }\n }\n\n return ret;\n}\n", "export function zip(array1: T[], array2: U[]): [T, U][] {\n const ret: [T, U][] = [];\n const len = Math.min(array1.length, array2.length);\n for (let i = 0; i < len; i++) {\n ret.push([array1[i], array2[i]]);\n }\n return ret;\n}\n", "import type { Doc } from \"prettier\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { getNodeInfo, fill, ESCAPE, indent, group } from \"./common\";\nimport { zip } from \"../zip\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\nexport function printMacro(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Macro;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const content =\n (node.escapeToken != null ? node.escapeToken : ESCAPE) + node.content;\n const args = node.args ? path.map(print, \"args\" as any) : [];\n\n // Some of the arguments want to be printed \"inline\".\n // We loop through the arguments and unwrap the inline ones.\n const rawArgs = [];\n for (const [arg, printedArg] of zip(node.args || [], args)) {\n const renderCache = referenceMap && referenceMap.getRenderCache(arg);\n if (renderInfo.inParMode && renderCache) {\n rawArgs.push(...(renderCache as any[]));\n } else {\n rawArgs.push(printedArg);\n }\n }\n\n if (referenceMap) {\n referenceMap.setRenderCache(node, { rawArgs, content });\n }\n\n if (renderInfo.hangingIndent) {\n return indent(fill([content, ...rawArgs]));\n }\n\n return group([content, ...rawArgs]);\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * List all props of the current node that should be processed\n * in math mode or not in math mode. If math mode is not specified in the node's render\n * info, empty lists are returned.\n *\n * For example `\\text{foo}` will report that `args` should *not* be processed in math mode,\n * since it's contents should always be processed in text mode.\n */\nexport function listMathChildren(node: Ast.Ast): {\n enter: string[];\n leave: string[];\n} {\n const NULL_RETURN = { enter: [], leave: [] };\n if (Array.isArray(node)) {\n return NULL_RETURN;\n }\n if (match.math(node)) {\n // When we enter a math environment, our content is always\n // considered math mode\n return { enter: [\"content\"], leave: [] };\n }\n\n const renderInfo: { inMathMode?: boolean } = node._renderInfo || {};\n if (renderInfo.inMathMode == null) {\n return NULL_RETURN;\n }\n if (match.macro(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"args\"], leave: [] };\n } else if (renderInfo.inMathMode === false) {\n return { enter: [], leave: [\"args\"] };\n }\n }\n if (match.environment(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"content\"], leave: [] };\n } else {\n return { enter: [], leave: [\"content\"] };\n }\n }\n return NULL_RETURN;\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { listMathChildren } from \"./list-math-children\";\n\nexport type VisitorContext = {\n /**\n * Whether the node is being processed in math mode.\n *\n * This happens when the node is a director or indirect child\n * of a math environment (e.g. `$abc$`), but not when an environment\n * re-establishes text mode (e.g. `$\\text{abc}$`)\n */\n inMathMode?: boolean;\n /**\n * Whether the node has any ancestor that is processed in math mode.\n */\n hasMathModeAncestor?: boolean;\n};\n\ntype GetGuard = T extends (x: any, ...y: any[]) => x is infer R ? R : never;\n/**\n * Gets the type that a type-guard function is guarding. If\n * the guard type cannot be determined, the input type is returned.\n */\ntype GuardTypeOf boolean> = GetGuard extends never\n ? T extends (x: infer A) => any\n ? A\n : never\n : GetGuard;\n\n/**\n * Extracts the guard type from the `test` function provided in a\n * `VisitOptions` argument.\n */\ntype GuardFromOptions<\n Opts extends VisitOptions,\n PossibleTypes = Ast.Ast\n> = Opts extends {\n test: infer R;\n}\n ? R extends (x: any, ...y: any[]) => boolean\n ? // A guard like `typeof Array.isArray` will return `any[]` as the type.\n // This type cannot be narrowed, so instead we use it to pick from\n // the set of all possible types.\n Extract>\n : PossibleTypes\n : PossibleTypes;\n\n/**\n * Narrow the type `T` based on the `VisitOptions` supplied. If `{includeArrays: false}`\n * is specified in the `VisitOptions`, then arrays are excluded from `T`.\n */\ntype NarrowArraysBasedOnOptions = Opts extends {\n includeArrays: infer A;\n}\n ? A extends true\n ? T\n : Exclude\n : Exclude;\n\n/**\n * Get the type of the parameter to the `Visitor` function based on the\n * `VisitOptions` that are supplied.\n */\ntype VisitorTypeFromOptions =\n NarrowArraysBasedOnOptions, Opts>;\n\n/**\n * Continue traversing as normal\n */\nexport const CONTINUE = Symbol(\"continue\");\n/**\n * Do not traverse this node\u2019s children\n */\nexport const SKIP = Symbol(\"skip\");\n/**\n * Stop traversing immediately\n */\nexport const EXIT = Symbol(\"exit\");\n\ntype Action = typeof CONTINUE | typeof SKIP | typeof EXIT;\ntype Index = number;\ntype ActionTuple = [Action] | [typeof SKIP, Index] | [typeof CONTINUE, Index];\n\n/**\n * A visitor takes a `node`, `key`, `index`, and ...\n *\n * @param key - The key of the parent that we were accessed through.\n */\ntype Visitor = (\n node: T,\n info: VisitInfo\n) => null | undefined | Action | Index | ActionTuple | void;\ntype Visitors = { enter?: Visitor; leave?: Visitor };\n\ntype VisitOptions = {\n startingContext?: VisitorContext;\n /**\n * Type guard for types that are passed to the `visitor` function.\n */\n test?: (node: Ast.Ast, info: VisitInfo) => boolean;\n /**\n * Whether arrays will be sent to the `visitor` function. If falsy,\n * only nodes will be past to `visitor`.\n */\n includeArrays?: boolean;\n};\n\nconst DEFAULT_CONTEXT: VisitorContext = {\n inMathMode: false,\n hasMathModeAncestor: false,\n};\n\nexport type VisitInfo = {\n /**\n * If the element was accessed via an attribute, the attribute key is specified.\n */\n readonly key: string | undefined;\n /**\n * If the element was accessed in an array, the index is specified.\n */\n readonly index: number | undefined;\n /**\n * A list of ancestor nodes, `[parent, grandparent, great-grandparent, ...]`\n */\n readonly parents: (Ast.Node | Ast.Argument)[];\n /**\n * If the element was accessed in an array, the array that it is part of.\n */\n readonly containingArray: (Ast.Node | Ast.Argument)[] | undefined;\n /**\n * The LaTeX context of the current match.\n */\n readonly context: VisitorContext;\n};\n\n/**\n * Visit children of tree which pass a test\n *\n * @param {Node} tree Abstract syntax tree to walk\n * @param {Visitor|Visitors} [visitor] Function to run for each node\n */\nexport function visit(\n tree: Ast.Ast,\n visitor:\n | Visitor>\n | Visitors>,\n options?: Opts\n) {\n const {\n startingContext = DEFAULT_CONTEXT,\n test = () => true,\n includeArrays = false,\n } = options || {};\n let enter: Visitor> | undefined;\n let leave: Visitor> | undefined;\n\n if (typeof visitor === \"function\") {\n enter = visitor;\n } else if (visitor && typeof visitor === \"object\") {\n enter = visitor.enter;\n leave = visitor.leave;\n }\n\n walk(tree, {\n key: undefined,\n index: undefined,\n parents: [],\n containingArray: undefined,\n context: { ...startingContext },\n });\n\n /**\n * @param {Node} node\n * @param {string?} key\n * @param {number?} index\n * @param {Array.} parents\n */\n function walk(\n node: Ast.Ast,\n { key, index, parents, context, containingArray }: VisitInfo\n ): ActionTuple {\n const nodePassesTest = includeArrays\n ? test(node, { key, index, parents, context, containingArray })\n : !Array.isArray(node) &&\n test(node, { key, index, parents, context, containingArray });\n\n const result: ActionTuple =\n enter && nodePassesTest\n ? toResult(\n enter(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : [CONTINUE];\n\n if (result[0] === EXIT) {\n return result;\n }\n\n if (result[0] === SKIP) {\n return leave && nodePassesTest\n ? toResult(\n leave(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : result;\n }\n\n if (Array.isArray(node)) {\n // The `value` array might be modified in place as we traverse it, so\n // we use a traditional for loop.\n for (let index = 0; index > -1 && index < node.length; index++) {\n const item = node[index];\n const result = walk(item, {\n key,\n index,\n parents,\n context,\n containingArray: node,\n });\n if (result[0] === EXIT) {\n return result;\n }\n if (typeof result[1] === \"number\") {\n // The for loop will increment i every pass. However,\n // if an index was returned, that's where we want to start next time.\n index = result[1] - 1;\n }\n }\n } else {\n // We don't want to recursively apply to the `content`\n // of all types (e.g., comments and macros), so specify\n // a blacklist.\n let childProps: (\"content\" | \"args\")[] = [\"content\", \"args\"];\n switch (node.type) {\n case \"macro\":\n childProps = [\"args\"];\n break;\n case \"comment\":\n case \"string\":\n case \"verb\":\n case \"verbatim\":\n childProps = [];\n break;\n default:\n break;\n }\n\n const mathModeProps = listMathChildren(node);\n for (const key of childProps) {\n const value = node[key as keyof typeof node] as\n | Ast.Ast\n | undefined;\n const grandparents = [node].concat(parents);\n\n if (value == null) {\n continue;\n }\n\n // We may switch in/out of math mode as we pass to node[key]\n const newContext = { ...context };\n if (mathModeProps.enter.includes(key)) {\n newContext.inMathMode = true;\n newContext.hasMathModeAncestor = true;\n } else if (mathModeProps.leave.includes(key)) {\n newContext.inMathMode = false;\n }\n\n const result = walk(value, {\n key,\n index: undefined,\n parents: grandparents,\n context: newContext,\n containingArray: undefined,\n });\n if (result[0] === EXIT) {\n return result;\n }\n }\n }\n\n return leave && nodePassesTest\n ? toResult(\n leave(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : result;\n }\n}\n\n/**\n * Ensures a result is an `ActionTuple`s\n */\nfunction toResult(\n value: null | undefined | void | Action | Index | ActionTuple\n): ActionTuple {\n if (value == null) {\n return [CONTINUE];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === \"number\") {\n return [CONTINUE, value];\n }\n\n return [value];\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\n\n/**\n * Trims whitespace and parbreaks from the start and end\n * of an array. The number of trimmed nodes is returned.\n * Special care is taken to preserve comments, though any whitespace\n * before the first comment(s) or after the last comment(s) is trimmed.\n */\nexport function trim(nodes: Ast.Node[]): {\n trimmedStart: number;\n trimmedEnd: number;\n} {\n if (!Array.isArray(nodes)) {\n console.warn(\"Trying to trim a non-array ast\", nodes);\n return nodes;\n }\n\n const { trimmedStart } = trimStart(nodes);\n const { trimmedEnd } = trimEnd(nodes);\n\n return { trimmedStart, trimmedEnd };\n}\n\n/**\n * Trim whitespace and parbreaks from the left of an array.\n */\nexport function trimStart(nodes: Ast.Node[]): { trimmedStart: number } {\n const { start } = amountOfLeadingAndTrailingWhitespace(nodes);\n\n nodes.splice(0, start);\n\n // If there are comments at the start, they might have leading whitespace.\n // This leading whitespace should be trimmed\n for (const leadingToken of nodes) {\n if (!match.comment(leadingToken)) {\n break;\n }\n if (leadingToken.leadingWhitespace || leadingToken.sameline) {\n leadingToken.leadingWhitespace = false;\n // We remove the position information from this token to indicate that we've edited it\n delete leadingToken.position;\n }\n // Special care must be taken. If the comment was on the same line as a\n // parskip, it will no longer be on the same line after the trimming.\n // Thus, we must modify the comment.\n if (start > 0 && leadingToken.sameline) {\n leadingToken.sameline = false;\n delete leadingToken.position;\n }\n }\n\n return { trimmedStart: start };\n}\n\n/**\n * Trim whitespace and parbreaks from the right of an array.\n */\nexport function trimEnd(nodes: Ast.Node[]): { trimmedEnd: number } {\n const { end } = amountOfLeadingAndTrailingWhitespace(nodes);\n\n nodes.splice(nodes.length - end, end);\n\n // Trim off any spaces belonging to trailing comments\n for (let i = nodes.length - 1; i >= 0; i--) {\n const trailingToken = nodes[i];\n if (!match.comment(trailingToken)) {\n break;\n }\n\n // Any parbreaks have been trimmed, so there is no suffix parbreak here!\n delete trailingToken.suffixParbreak;\n\n // We don't trim spaces before trailing same-line comments. This is a stylistic choice\n // so that\n // `foo %xxx` does not become `foo%xxx`.\n // The latter is strictly \"correct\" for a trim function, but it is prettier to format\n // code preserving the space before the sameline comment\n if (\n match.comment(trailingToken) &&\n trailingToken.leadingWhitespace &&\n !trailingToken.sameline\n ) {\n trailingToken.leadingWhitespace = false;\n delete trailingToken.position;\n }\n }\n\n return { trimmedEnd: end };\n}\n\n/**\n * Returns the number of whitespace/parbreak nodes at the start and end of an array.\n */\nfunction amountOfLeadingAndTrailingWhitespace(ast: Ast.Node[]): {\n start: number;\n end: number;\n} {\n let start = 0;\n let end = 0;\n for (const node of ast) {\n if (match.whitespace(node) || match.parbreak(node)) {\n start++;\n } else {\n break;\n }\n }\n\n if (start === ast.length) {\n return { start, end: 0 };\n }\n\n // Find the padding on the right\n for (let i = ast.length - 1; i >= 0; i--) {\n const node = ast[i];\n if (match.whitespace(node) || match.parbreak(node)) {\n end++;\n } else {\n break;\n }\n }\n\n return { start, end };\n}\n", "import type { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { trim, trimEnd, trimStart } from \"./trim\";\n\ntype PluginOptions = void;\n\n/**\n * Unified plugin to trim the whitespace from the start/end of any environments, including\n * math environments.\n */\nexport const unifiedLatexTrimEnvironmentContents: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexTrimEnvironmentContents() {\n return (tree) => {\n visit(tree, (node) => {\n if (!(match.math(node) || match.anyEnvironment(node))) {\n return;\n }\n\n // If the first thing in the environment is a sameline comment,\n // we actually want to start trimming *after* it.\n let firstNode = node.content[0];\n if (match.comment(firstNode) && firstNode.sameline) {\n firstNode.suffixParbreak = false;\n trimEnd(node.content);\n\n // We play a nasty trick here. This call to `trimStart`\n // will actually modify `node.content` if `node.content.slice(1)` starts\n // with a comment that has leading whitespace (it will remove that whitespace).\n // However, it won't remove any elements from `node.content`; we need\n // to do that ourselves.\n const { trimmedStart } = trimStart(node.content.slice(1));\n node.content.splice(1, trimmedStart);\n } else {\n trim(node.content);\n }\n });\n };\n};\n", "import type { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"./trim\";\n\ntype PluginOptions = void;\n\n/**\n * Unified plugin to trim the whitespace from the start/end of the root element.\n */\nexport const unifiedLatexTrimRoot: Plugin =\n function unifiedLatexTrimRoot() {\n return (tree) => {\n trim(tree.content);\n };\n };\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns whether the array has whitespace at the start/end. Comments with `leadingWhitespace === true`\n * are counted as whitespace. Other comments are ignored.\n */\nexport function hasWhitespaceEquivalent(nodes: Ast.Node[]): {\n start: boolean;\n end: boolean;\n} {\n let start = false;\n let end = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.comment(node)) {\n // A comment with leading whitespace will render with leading whitespace,\n // so if we encounter one, we should consider ourselves to have leading whitespace.\n if (node.leadingWhitespace) {\n start = true;\n break;\n }\n continue;\n }\n if (match.whitespace(node)) {\n start = true;\n }\n break;\n }\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j];\n if (match.comment(node)) {\n if (node.leadingWhitespace) {\n end = true;\n break;\n }\n continue;\n }\n if (match.whitespace(node)) {\n end = true;\n }\n break;\n }\n return { start, end };\n}\n", "type StringlikeArray = any[] & string;\n\n/**\n * Pegjs operates on strings. However, strings and arrays are very similar!\n * This function adds `charAt`, `charCodeAt`, and `substring` methods to\n * `array` so that `array` can then be fed to a Pegjs generated parser.\n *\n * @param {[object]} array\n * @returns {[object]}\n */\nexport function decorateArrayForPegjs(array: any[]): StringlikeArray {\n (array as any).charAt = function (i: number) {\n return this[i];\n };\n // We don't have a hope of imitating `charCodeAt`, so\n // make it something that won't interfere\n (array as any).charCodeAt = () => 0;\n (array as any).substring = function (i: number, j: number) {\n return this.slice(i, j);\n };\n // This function is called when reporting an error,\n // so we convert back to a string.\n (array as any).replace = function (a: string, b: string) {\n const ret = JSON.stringify(this);\n return ret.replace(a, b);\n };\n return array as StringlikeArray;\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Splits all multi-character strings into strings that are all single characters.\n */\nexport function splitStringsIntoSingleChars(nodes: Ast.Node[]): Ast.Node[] {\n return nodes.flatMap((node) =>\n match.anyString(node)\n ? (Array.from(node.content).map((c) => ({\n type: \"string\",\n content: c,\n })) as Ast.Node[])\n : node\n );\n}\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath };\n var peg$startRuleFunction = peg$parsedocument;\n\n var peg$c0 = \"%\";\n var peg$c1 = \".\";\n var peg$c2 = \"verb*\";\n var peg$c3 = \"verb\";\n var peg$c4 = \"[\";\n var peg$c5 = \"]\";\n var peg$c6 = \"lstinline\";\n var peg$c7 = \"mintinline\";\n var peg$c8 = \"mint\";\n var peg$c9 = \"minted\";\n var peg$c10 = \"verbatim*\";\n var peg$c11 = \"verbatim\";\n var peg$c12 = \"filecontents*\";\n var peg$c13 = \"filecontents\";\n var peg$c14 = \"comment\";\n var peg$c15 = \"lstlisting\";\n var peg$c16 = \"(\";\n var peg$c17 = \")\";\n var peg$c18 = \"begin\";\n var peg$c19 = \"end\";\n var peg$c20 = \"equation*\";\n var peg$c21 = \"equation\";\n var peg$c22 = \"align*\";\n var peg$c23 = \"align\";\n var peg$c24 = \"alignat*\";\n var peg$c25 = \"alignat\";\n var peg$c26 = \"gather*\";\n var peg$c27 = \"gather\";\n var peg$c28 = \"multline*\";\n var peg$c29 = \"multline\";\n var peg$c30 = \"flalign*\";\n var peg$c31 = \"flalign\";\n var peg$c32 = \"split\";\n var peg$c33 = \"math\";\n var peg$c34 = \"displaymath\";\n var peg$c35 = \"\\\\\";\n var peg$c36 = \"{\";\n var peg$c37 = \"}\";\n var peg$c38 = \"$\";\n var peg$c39 = \"&\";\n var peg$c40 = \"\\r\";\n var peg$c41 = \"\\n\";\n var peg$c42 = \"\\r\\n\";\n var peg$c43 = \"#\";\n var peg$c44 = \"^\";\n var peg$c45 = \"_\";\n var peg$c46 = \"\\0\";\n\n var peg$r0 = /^[^ \\t\\n\\r]/;\n var peg$r1 = /^[ \\t]/;\n var peg$r2 = /^[a-zA-Z]/;\n var peg$r3 = /^[0-9]/;\n var peg$r4 = /^[.,;:\\-*\\/()!?=+<>[\\]`'\"~]/;\n\n var peg$e0 = peg$otherExpectation(\"document\");\n var peg$e1 = peg$otherExpectation(\"math\");\n var peg$e2 = peg$otherExpectation(\"token\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"parbreak\");\n var peg$e5 = peg$otherExpectation(\"math token\");\n var peg$e6 = peg$otherExpectation(\"nonchar token\");\n var peg$e7 = peg$literalExpectation(\"%\", false);\n var peg$e8 = peg$otherExpectation(\"whitespace\");\n var peg$e9 = peg$otherExpectation(\"number\");\n var peg$e10 = peg$literalExpectation(\".\", false);\n var peg$e11 = peg$otherExpectation(\"special macro\");\n var peg$e12 = peg$literalExpectation(\"verb*\", false);\n var peg$e13 = peg$literalExpectation(\"verb\", false);\n var peg$e14 = peg$literalExpectation(\"[\", false);\n var peg$e15 = peg$literalExpectation(\"]\", false);\n var peg$e16 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], true, false);\n var peg$e17 = peg$otherExpectation(\"verbatim listings\");\n var peg$e18 = peg$literalExpectation(\"lstinline\", false);\n var peg$e19 = peg$otherExpectation(\"verbatim minted\");\n var peg$e20 = peg$literalExpectation(\"mintinline\", false);\n var peg$e21 = peg$literalExpectation(\"mint\", false);\n var peg$e22 = peg$otherExpectation(\"verbatim minted environment\");\n var peg$e23 = peg$literalExpectation(\"minted\", false);\n var peg$e24 = peg$otherExpectation(\"verbatim environment\");\n var peg$e25 = peg$literalExpectation(\"verbatim*\", false);\n var peg$e26 = peg$literalExpectation(\"verbatim\", false);\n var peg$e27 = peg$literalExpectation(\"filecontents*\", false);\n var peg$e28 = peg$literalExpectation(\"filecontents\", false);\n var peg$e29 = peg$literalExpectation(\"comment\", false);\n var peg$e30 = peg$literalExpectation(\"lstlisting\", false);\n var peg$e31 = peg$otherExpectation(\"macro\");\n var peg$e32 = peg$otherExpectation(\"group\");\n var peg$e33 = peg$otherExpectation(\"environment\");\n var peg$e34 = peg$otherExpectation(\"math environment\");\n var peg$e35 = peg$otherExpectation(\"math group\");\n var peg$e36 = peg$literalExpectation(\"(\", false);\n var peg$e37 = peg$literalExpectation(\")\", false);\n var peg$e38 = peg$literalExpectation(\"begin\", false);\n var peg$e39 = peg$literalExpectation(\"end\", false);\n var peg$e40 = peg$literalExpectation(\"equation*\", false);\n var peg$e41 = peg$literalExpectation(\"equation\", false);\n var peg$e42 = peg$literalExpectation(\"align*\", false);\n var peg$e43 = peg$literalExpectation(\"align\", false);\n var peg$e44 = peg$literalExpectation(\"alignat*\", false);\n var peg$e45 = peg$literalExpectation(\"alignat\", false);\n var peg$e46 = peg$literalExpectation(\"gather*\", false);\n var peg$e47 = peg$literalExpectation(\"gather\", false);\n var peg$e48 = peg$literalExpectation(\"multline*\", false);\n var peg$e49 = peg$literalExpectation(\"multline\", false);\n var peg$e50 = peg$literalExpectation(\"flalign*\", false);\n var peg$e51 = peg$literalExpectation(\"flalign\", false);\n var peg$e52 = peg$literalExpectation(\"split\", false);\n var peg$e53 = peg$literalExpectation(\"math\", false);\n var peg$e54 = peg$literalExpectation(\"displaymath\", false);\n var peg$e55 = peg$otherExpectation(\"escape\");\n var peg$e56 = peg$literalExpectation(\"\\\\\", false);\n var peg$e57 = peg$literalExpectation(\"{\", false);\n var peg$e58 = peg$literalExpectation(\"}\", false);\n var peg$e59 = peg$literalExpectation(\"$\", false);\n var peg$e60 = peg$literalExpectation(\"&\", false);\n var peg$e61 = peg$otherExpectation(\"newline\");\n var peg$e62 = peg$literalExpectation(\"\\r\", false);\n var peg$e63 = peg$literalExpectation(\"\\n\", false);\n var peg$e64 = peg$literalExpectation(\"\\r\\n\", false);\n var peg$e65 = peg$literalExpectation(\"#\", false);\n var peg$e66 = peg$literalExpectation(\"^\", false);\n var peg$e67 = peg$literalExpectation(\"_\", false);\n var peg$e68 = peg$literalExpectation(\"\\0\", false);\n var peg$e69 = peg$classExpectation([\" \", \"\\t\"], false, false);\n var peg$e70 = peg$otherExpectation(\"letter\");\n var peg$e71 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$e72 = peg$otherExpectation(\"digit\");\n var peg$e73 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e74 = peg$otherExpectation(\"punctuation\");\n var peg$e75 = peg$classExpectation([\".\", \",\", \";\", \":\", \"-\", \"*\", \"/\", \"(\", \")\", \"!\", \"?\", \"=\", \"+\", \"<\", \">\", \"[\", \"]\", \"`\", \"'\", \"\\\"\", \"~\"], false, false);\n var peg$e76 = peg$otherExpectation(\"full comment\");\n var peg$e77 = peg$otherExpectation(\"comment\");\n\n var peg$f0 = function(content) {\n return createNode(\"root\", { content: content.flatMap((x) => x) });\n };\n var peg$f1 = function(t) { return t; };\n var peg$f2 = function(eq) {\n return createNode(\"inlinemath\", { content: eq.flatMap((x) => x) });\n };\n var peg$f3 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f4 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f5 = function() { return createNode(\"parbreak\"); };\n var peg$f6 = function(x) { return x; };\n var peg$f7 = function(x) { return x; };\n var peg$f8 = function() {\n return createNode(\"macro\", { content: \"^\", escapeToken: \"\" });\n };\n var peg$f9 = function() {\n return createNode(\"macro\", { content: \"_\", escapeToken: \"\" });\n };\n var peg$f10 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f11 = function() {\n return createNode(\"whitespace\");\n };\n var peg$f12 = function(a, b) { return a.join(\"\") + \".\" + b.join(\"\"); };\n var peg$f13 = function(b) { return \".\" + b.join(\"\"); };\n var peg$f14 = function(a) { return a.join(\"\") + \".\"; };\n var peg$f15 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f16 = function(env, e, end) { return end == e; };\n var peg$f17 = function(env, e, x) { return x; };\n var peg$f18 = function(env, e, x, end) { return end == e; };\n var peg$f19 = function(env, e, x) {\n return createNode(\"verb\", {\n env: env,\n escape: e,\n content: x.join(\"\"),\n });\n };\n var peg$f20 = function(x) { return x; };\n var peg$f21 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x) => x) });\n };\n var peg$f22 = function(x) { return x; };\n var peg$f23 = function(x) {\n return createNode(\"inlinemath\", { content: x.flatMap((x) => x) });\n };\n var peg$f24 = function(x) { return x; };\n var peg$f25 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x) => x) });\n };\n var peg$f26 = function(end) {\n return (\n end.type === \"string\" && end.content === \"]\"\n );\n };\n var peg$f27 = function(x) { return x; };\n var peg$f28 = function(o) {\n return [\n createNode(\"string\", { content: \"[\" }),\n ...o,\n createNode(\"string\", { content: \"]\" }),\n ];\n };\n var peg$f29 = function(x) { return x; };\n var peg$f30 = function(v) {\n return createNode(\"group\", {\n content: createNode(\"string\", { content: v.join(\"\") }),\n });\n };\n var peg$f31 = function(d, end) { return end == d; };\n var peg$f32 = function(d, x) { return x; };\n var peg$f33 = function(d, v, end) { return end == d; };\n var peg$f34 = function(d, v) {\n return [\n createNode(\"string\", { content: d }),\n createNode(\"string\", { content: v.join(\"\") }),\n createNode(\"string\", { content: d }),\n ];\n };\n var peg$f35 = function(macro, option, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...(option || []),\n ...[].concat(verbatim),\n ];\n };\n var peg$f36 = function(macro, option, language, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...(option || []),\n language,\n ...[].concat(verbatim),\n ];\n };\n var peg$f37 = function(env, lang, end_env) { return compare_env({ content: [env] }, end_env); };\n var peg$f38 = function(env, lang, x) { return x; };\n var peg$f39 = function(env, lang, body) {\n return createNode(\"verbatim\", {\n env: `${env}{${lang.content.content}}`,\n content: body.join(\"\"),\n });\n };\n var peg$f40 = function(env, end_env) { return compare_env({ content: [env] }, end_env); };\n var peg$f41 = function(env, x) { return x; };\n var peg$f42 = function(env, body) {\n return createNode(\"verbatim\", {\n env: env,\n content: body.join(\"\"),\n });\n };\n var peg$f43 = function(n) { return n.join(\"\"); };\n var peg$f44 = function(n) { return n; };\n var peg$f45 = function(m) {\n return createNode(\"macro\", { content: m });\n };\n var peg$f46 = function(c) { return c; };\n var peg$f47 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x) => x) });\n };\n var peg$f48 = function(g) { return text().slice(1, -1); };\n var peg$f49 = function(env, env_comment, end_env) { return compare_env(env, end_env); };\n var peg$f50 = function(env, env_comment, x) { return x; };\n var peg$f51 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"environment\", {\n env,\n content: env_comment ? [env_comment, ...body] : body,\n });\n };\n var peg$f52 = function(env, env_comment, end_env) { return compare_env({ content: [env] }, end_env); };\n var peg$f53 = function(env, env_comment, x) { return x; };\n var peg$f54 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"mathenv\", {\n env: env,\n content: env_comment ? [env_comment, ...body] : body,\n });\n };\n var peg$f55 = function(c) { return c; };\n var peg$f56 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x) => x) });\n };\n var peg$f57 = function(e) { return createNode(\"string\", { content: e }); };\n var peg$f58 = function() { return createNode(\"string\", { content: \"\\\\\" }); };\n var peg$f59 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f60 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f61 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f62 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f63 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f64 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f65 = function(s) { return createNode(\"string\", { content: s }); };\n var peg$f66 = function() { return \" \"; };\n var peg$f67 = function(p) {\n return createNode(\"string\", { content: p });\n };\n var peg$f68 = function(leading_sp, comment) {\n return createNode(\"comment\", {\n ...comment,\n sameline: false,\n leadingWhitespace: leading_sp.length > 0,\n });\n };\n var peg$f69 = function(spaces, x) {\n return createNode(\"comment\", {\n ...x,\n sameline: true,\n leadingWhitespace: spaces.length > 0,\n });\n };\n var peg$f70 = function(c) { return c; };\n var peg$f71 = function(c) {\n return { content: c.join(\"\"), suffixParbreak: true };\n };\n var peg$f72 = function(c) { return c; };\n var peg$f73 = function(c) { return { content: c.join(\"\") }; };\n var peg$f74 = function() {\n var loc = location();\n return loc.start.column === 1;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsedocument() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n s0 = s1;\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n\n return s0;\n }\n\n function peg$parsemath() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n s1 = peg$parsemath_token();\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemath_token();\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n\n return s0;\n }\n\n function peg$parsetoken() {\n var s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsegroup();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_shift();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parseparbreak();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n\n return s0;\n }\n\n function peg$parseparbreak() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n\n return s0;\n }\n\n function peg$parsemath_token() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsealignment_tab();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesuperscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f8();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesubscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n\n return s0;\n }\n\n function peg$parsenonchar_token() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parseescape();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenl();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesp();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseEOF();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsenl();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsecomment_start();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsenl();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = [];\n s2 = peg$parsesp();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n } else {\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsenum();\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsenum();\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f12(s2, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenum();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenum();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f13(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f14(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n\n return s0;\n }\n\n function peg$parsespecial_macro() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c2) {\n s2 = peg$c2;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c3) {\n s2 = peg$c3;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = undefined;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = undefined;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f18(s2, s3, s4, s6);\n if (s7) {\n s7 = undefined;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_listings();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_minted();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_display_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_display_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_inline_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_inline_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemath_shift();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s4 = peg$parsemath_shift();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_shift();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseenvironment();\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n\n return s0;\n }\n\n function peg$parsesquare_bracket_argument() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = undefined;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = undefined;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseverbatim_group() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseverbatim_delimited_by_char() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = undefined;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = undefined;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$f33(s1, s2, s4);\n if (s5) {\n s5 = undefined;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseverbatim_listings() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c6) {\n s2 = peg$c6;\n peg$currPos += 9;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseverbatim_group();\n if (s4 === peg$FAILED) {\n s4 = peg$parseverbatim_delimited_by_char();\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n\n return s0;\n }\n\n function peg$parseverbatim_minted() {\n var s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c7) {\n s2 = peg$c7;\n peg$currPos += 10;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s2 = peg$c8;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseverbatim_group();\n if (s5 === peg$FAILED) {\n s5 = peg$parseverbatim_delimited_by_char();\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n\n return s0;\n }\n\n function peg$parseverbatim_minted_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c9) {\n s3 = peg$c9;\n peg$currPos += 6;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f37(s3, s5, s11);\n if (s12) {\n s12 = undefined;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = undefined;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f38(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f37(s3, s5, s11);\n if (s12) {\n s12 = undefined;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = undefined;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f38(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s7 = peg$parseend_env();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsebegin_group();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseverbatim_env_name();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseend_group();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f39(s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n\n return s0;\n }\n\n function peg$parseverbatim_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseverbatim_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$currPos;\n s9 = peg$parseend_env();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsegroup();\n if (s10 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s11 = peg$f40(s3, s10);\n if (s11) {\n s11 = undefined;\n } else {\n s11 = peg$FAILED;\n }\n if (s11 !== peg$FAILED) {\n s9 = [s9, s10, s11];\n s8 = s9;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s6;\n s6 = peg$f41(s3, s8);\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$currPos;\n s9 = peg$parseend_env();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsegroup();\n if (s10 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s11 = peg$f40(s3, s10);\n if (s11) {\n s11 = undefined;\n } else {\n s11 = peg$FAILED;\n }\n if (s11 !== peg$FAILED) {\n s9 = [s9, s10, s11];\n s8 = s9;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s6;\n s6 = peg$f41(s3, s8);\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n s6 = peg$parseend_env();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsebegin_group();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseverbatim_env_name();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseend_group();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f42(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n\n return s0;\n }\n\n function peg$parseverbatim_env_name() {\n var s0;\n\n if (input.substr(peg$currPos, 9) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 13;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 12;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsemacro() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsechar();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsechar();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f43(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f44(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f45(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n\n return s0;\n }\n\n function peg$parsegroup() {\n var s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f46(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f46(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f47(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n\n return s0;\n }\n\n function peg$parsegroup_contents_as_string() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsegroup();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f48(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseenvironment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup_contents_as_string();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesameline_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f49(s2, s3, s9);\n if (s10) {\n s10 = undefined;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f50(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f49(s2, s3, s9);\n if (s10) {\n s10 = undefined;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f50(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$parseend_env();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsegroup_contents_as_string();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f51(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n\n return s0;\n }\n\n function peg$parsemath_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesameline_comment();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f52(s3, s5, s11);\n if (s12) {\n s12 = undefined;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = undefined;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f53(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f52(s3, s5, s11);\n if (s12) {\n s12 = undefined;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = undefined;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f53(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s7 = peg$parseend_env();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsebegin_group();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_env_name();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseend_group();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f54(s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n\n return s0;\n }\n\n function peg$parsemath_group() {\n var s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f55(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f55(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f56(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n }\n\n return s0;\n }\n\n function peg$parsebegin_display_math() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 91) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseend_display_math() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s2 = peg$c5;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsebegin_inline_math() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseend_inline_math() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsebegin_env() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c18) {\n s2 = peg$c18;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e38); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseend_env() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c19) {\n s2 = peg$c19;\n peg$currPos += 3;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e39); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsemath_env_name() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c20) {\n s1 = peg$c20;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e40); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e41); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e42); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c23) {\n s1 = peg$c23;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e43); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c24) {\n s1 = peg$c24;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e44); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c25) {\n s1 = peg$c25;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e45); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c26) {\n s1 = peg$c26;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e46); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e47); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e48); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c29) {\n s1 = peg$c29;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e49); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c30) {\n s1 = peg$c30;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e50); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c31) {\n s1 = peg$c31;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e51); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c32) {\n s1 = peg$c32;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e52); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c33) {\n s1 = peg$c33;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e53); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c34) {\n s1 = peg$c34;\n peg$currPos += 11;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e54); }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f57(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseescape() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e56); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f58();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e55); }\n }\n\n return s0;\n }\n\n function peg$parsebegin_group() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e57); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f59(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseend_group() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s1 = peg$c37;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e58); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f60(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsemath_shift() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 36) {\n s1 = peg$c38;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e59); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f61(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsealignment_tab() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 38) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e60); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f62(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsenl() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 13) {\n s2 = peg$c40;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e62); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s2 = peg$c41;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e63); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c40;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e62); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c42) {\n s0 = peg$c42;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e64); }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e61); }\n }\n\n return s0;\n }\n\n function peg$parsemacro_parameter() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c43;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e65); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f63(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsesuperscript() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 94) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e66); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f64(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsesubscript() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 95) {\n s1 = peg$c45;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e67); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f65(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseignore() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 0) {\n s0 = peg$c46;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e68); }\n }\n\n return s0;\n }\n\n function peg$parsesp() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e69); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e69); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f66();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n\n return s0;\n }\n\n function peg$parsechar() {\n var s0, s1;\n\n peg$silentFails++;\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e71); }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e70); }\n }\n\n return s0;\n }\n\n function peg$parsenum() {\n var s0, s1;\n\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e73); }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e72); }\n }\n\n return s0;\n }\n\n function peg$parsepunctuation() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e75); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f67(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e74); }\n }\n\n return s0;\n }\n\n function peg$parsecomment_start() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n\n return s0;\n }\n\n function peg$parsefull_comment() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parseownline_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesameline_comment();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e76); }\n }\n\n return s0;\n }\n\n function peg$parseownline_comment() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseleading_sp();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f68(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesameline_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsesp();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n s2 = peg$parsecomment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f69(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecomment() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f70(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f70(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseparbreak();\n peg$silentFails--;\n if (s4 !== peg$FAILED) {\n peg$currPos = s3;\n s3 = undefined;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f71(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f72(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f72(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n s4 = peg$parsenl();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 === peg$FAILED) {\n s3 = peg$parseEOF();\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f73(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e77); }\n }\n\n return s0;\n }\n\n function peg$parseleading_sp() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsestart_of_line();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsestart_of_line() {\n var s0;\n\n peg$savedPos = peg$currPos;\n s0 = peg$f74();\n if (s0) {\n s0 = undefined;\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEOF() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n function toString(e) {\n if (typeof e === \"string\") {\n return e;\n }\n if (typeof e.content === \"string\") {\n return e.content;\n }\n if (e && e.type === \"whitespace\") {\n return \" \";\n }\n return e;\n }\n\n function compare_env(g1, g2) {\n const g1Name =\n typeof g1 === \"string\" ? g1 : g1.content.map(toString).join(\"\");\n const g2Name =\n typeof g2 === \"string\" ? g2 : g2.content.map(toString).join(\"\");\n return g1Name === g2Name;\n }\n\n function createNode(type, extra = {}) {\n return { type, ...extra, position: location() };\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n\n\n\n var peg$e0 = peg$anyExpectation();\n\n var peg$f0 = function() { return []; };\n var peg$f1 = function(x) { return { cells: [], colSeps: [], ...x }; };\n var peg$f2 = function(rowItems, rowSep, trailingComment) {\n return { ...rowItems, rowSep, trailingComment };\n };\n var peg$f3 = function(rowItems, trailingComment) {\n return { ...rowItems, rowSep: null, trailingComment };\n };\n var peg$f4 = function(x) { return x; };\n var peg$f5 = function(x) {\n return {\n cells: [],\n colSeps: [],\n rowSep: null,\n trailingComment: x,\n };\n };\n var peg$f6 = function(x) {\n return x;\n };\n var peg$f7 = function(colSep, cell) { return { colSep, cell }; };\n var peg$f8 = function(colSep) { return { colSep }; };\n var peg$f9 = function(a, b) { return processRow(a, b); };\n var peg$f10 = function(b) { return processRow(null, b); };\n var peg$f11 = function(tok) { return options.isSameLineComment(tok); };\n var peg$f12 = function(tok) { return tok; };\n var peg$f13 = function(tok) { return options.isOwnLineComment(tok); };\n var peg$f14 = function(tok) { return tok; };\n var peg$f15 = function(tok) { return options.isWhitespace(tok); };\n var peg$f16 = function(tok) { return tok; };\n var peg$f17 = function(tok) { return options.isRowSep(tok); };\n var peg$f18 = function(tok) { return tok; };\n var peg$f19 = function(tok) { return options.isColSep(tok); };\n var peg$f20 = function(tok) { return tok; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsebody() {\n var s0, s1;\n\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parserow_with_end() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s1;\n s2 = peg$f1(s2);\n s1 = s2;\n s2 = peg$parserow_sep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parserow_without_end() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parserow_items();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetoken() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parserow_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsecol_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecell() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseseparated_cell() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsecell();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsecell();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_cell();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_cell();\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_cell();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_cell();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f11(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f13(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parserow_sep() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecol_sep() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n function processRow(leadCell, otherCells) {\n const cells = [leadCell || []];\n const seps = [];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n seps.push(x.colSep);\n }\n return { cells, colSeps: seps };\n }\n\n //\n // These are compatability functions used when running in the browser\n //\n // Check if the `options` object has the functions that we need.\n // If not, try to add them\n if (!options.isWhitespace) {\n try {\n Object.assign(\n options,\n createMatchers([\"\\\\\", \"hline\", \"cr\"], [\"&\"])\n );\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list };\n var peg$startRuleFunction = peg$parseargs_spec_list;\n\n var peg$c0 = \"+\";\n var peg$c1 = \"v\";\n var peg$c2 = \"b\";\n var peg$c3 = \"!\";\n var peg$c4 = \"D\";\n var peg$c5 = \"d\";\n var peg$c6 = \"s\";\n var peg$c7 = \"O\";\n var peg$c8 = \"o\";\n var peg$c9 = \"e\";\n var peg$c10 = \"E\";\n var peg$c11 = \"t\";\n var peg$c12 = \"R\";\n var peg$c13 = \"r\";\n var peg$c14 = \"u\";\n var peg$c15 = \"m\";\n var peg$c16 = \"{\";\n var peg$c17 = \"}\";\n var peg$c18 = \" \";\n var peg$c19 = \"\\n\";\n var peg$c20 = \"\\r\";\n\n var peg$r0 = /^[{ ]/;\n\n var peg$e0 = peg$literalExpectation(\"+\", false);\n var peg$e1 = peg$literalExpectation(\"v\", false);\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$literalExpectation(\"b\", false);\n var peg$e4 = peg$literalExpectation(\"!\", false);\n var peg$e5 = peg$literalExpectation(\"D\", false);\n var peg$e6 = peg$literalExpectation(\"d\", false);\n var peg$e7 = peg$literalExpectation(\"s\", false);\n var peg$e8 = peg$literalExpectation(\"O\", false);\n var peg$e9 = peg$literalExpectation(\"o\", false);\n var peg$e10 = peg$literalExpectation(\"e\", false);\n var peg$e11 = peg$literalExpectation(\"E\", false);\n var peg$e12 = peg$literalExpectation(\"t\", false);\n var peg$e13 = peg$literalExpectation(\"R\", false);\n var peg$e14 = peg$literalExpectation(\"r\", false);\n var peg$e15 = peg$literalExpectation(\"u\", false);\n var peg$e16 = peg$classExpectation([\"{\", \" \"], false, false);\n var peg$e17 = peg$literalExpectation(\"m\", false);\n var peg$e18 = peg$literalExpectation(\"{\", false);\n var peg$e19 = peg$literalExpectation(\"}\", false);\n var peg$e20 = peg$literalExpectation(\" \", false);\n var peg$e21 = peg$literalExpectation(\"\\n\", false);\n var peg$e22 = peg$literalExpectation(\"\\r\", false);\n\n var peg$f0 = function(x) { return x; };\n var peg$f1 = function(spec) { return spec; };\n var peg$f2 = function(spec) {\n return spec;\n };\n var peg$f3 = function(openBrace) {\n return createNode(\"verbatim\", { openBrace, closeBrace: openBrace });\n };\n var peg$f4 = function() { return createNode(\"body\"); };\n var peg$f5 = function(leading_bang, spec) {\n return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec;\n };\n var peg$f6 = function(braceSpec, defaultArg) {\n return createNode(\"optional\", { ...braceSpec, defaultArg });\n };\n var peg$f7 = function(braceSpec) { return createNode(\"optional\", braceSpec); };\n var peg$f8 = function() { return createNode(\"optionalStar\"); };\n var peg$f9 = function(g) { return createNode(\"optional\", { defaultArg: g }); };\n var peg$f10 = function() { return createNode(\"optional\"); };\n var peg$f11 = function(args) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args.content,\n });\n };\n var peg$f12 = function(args, g) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args.content,\n defaultArg: g,\n });\n };\n var peg$f13 = function(tok) { return createNode(\"optionalToken\", { token: tok }); };\n var peg$f14 = function(braceSpec, defaultArg) {\n return createNode(\"mandatory\", { ...braceSpec, defaultArg });\n };\n var peg$f15 = function(braceSpec) { return createNode(\"mandatory\", braceSpec); };\n var peg$f16 = function(stopTokens) {\n return createNode(\"until\", { stopTokens });\n };\n var peg$f17 = function(x) { return [x]; };\n var peg$f18 = function(g) { return g.content; };\n var peg$f19 = function() { return createNode(\"mandatory\"); };\n var peg$f20 = function(openBrace, closeBrace) {\n return { openBrace, closeBrace };\n };\n var peg$f21 = function(content) {\n return { type: \"group\", content: content };\n };\n var peg$f22 = function() { return \"\"; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parseargs_spec_list() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n s2 = peg$parsewhitespace();\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n\n return s0;\n }\n\n function peg$parsearg_spec() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemandatory();\n if (s2 === peg$FAILED) {\n s2 = peg$parseverbatim();\n if (s2 === peg$FAILED) {\n s2 = peg$parserequired();\n if (s2 === peg$FAILED) {\n s2 = peg$parsebody();\n if (s2 === peg$FAILED) {\n s2 = peg$parseuntil();\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseverbatim() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 118) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsebody() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 98) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseoptional() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional_star();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_standard();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_delimited();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_embellishment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_token();\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseoptional_delimited() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 68) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsebraced_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 100) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseoptional_star() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 115) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseoptional_standard() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 79) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebraced_group();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 111) {\n s1 = peg$c8;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseoptional_embellishment() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s1 = peg$c9;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebraced_group();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 69) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebraced_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsebraced_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseoptional_token() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 116) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parserequired() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 82) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsebraced_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 114) {\n s1 = peg$c13;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseuntil() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseuntil_stop_token();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseuntil_stop_token() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebraced_group();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f18(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsemandatory() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 109) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsebrace_spec() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = undefined;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s2 = input.substring(s2, peg$currPos);\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n\n return s0;\n }\n\n function peg$parsebraced_group() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n }\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c17;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace_token();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace_token();\n }\n peg$savedPos = s0;\n s1 = peg$f22();\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsewhitespace_token() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 32) {\n s0 = peg$c18;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n }\n }\n\n return s0;\n }\n\n\n const DEFAULT_OPTIONS = {\n optional: { openBrace: \"[\", closeBrace: \"]\" },\n mandatory: { openBrace: \"{\", closeBrace: \"}\" },\n };\n function createNode(type, options) {\n const computedOptions = DEFAULT_OPTIONS[type] || {};\n return { type, ...computedOptions, ...options };\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n\n\n\n var peg$e0 = peg$anyExpectation();\n\n var peg$f0 = function() { return []; };\n var peg$f1 = function(rowItems, trailingComment) {\n return {\n itemParts: [],\n ...rowItems,\n trailingComment,\n trailingComma: true,\n };\n };\n var peg$f2 = function(rowItems, trailingComment) {\n return { ...rowItems, trailingComment };\n };\n var peg$f3 = function(a, b) { return processItem(a, b); };\n var peg$f4 = function(b) { return processItem(null, b); };\n var peg$f5 = function(cell) { return { cell }; };\n var peg$f6 = function() { return {}; };\n var peg$f7 = function(part) { return part; };\n var peg$f8 = function(x) { return x; };\n var peg$f9 = function(space, x) {\n return {\n trailingComment: x,\n leadingParbreak: space.parbreak > 0,\n };\n };\n var peg$f10 = function(list) {\n return {\n whitespace: list.filter((x) => options.isWhitespace(x)).length,\n parbreak: list.filter((x) => options.isParbreak(x)).length,\n };\n };\n var peg$f11 = function() { return !options.allowParenGroups; };\n var peg$f12 = function(tok) { return options.isSameLineComment(tok); };\n var peg$f13 = function(tok) { return tok; };\n var peg$f14 = function(tok) { return options.isOwnLineComment(tok); };\n var peg$f15 = function(tok) { return tok; };\n var peg$f16 = function(tok) { return options.isWhitespace(tok); };\n var peg$f17 = function(tok) { return tok; };\n var peg$f18 = function(tok) { return options.isParbreak(tok); };\n var peg$f19 = function(tok) { return tok; };\n var peg$f20 = function(tok) { return options.isComma(tok); };\n var peg$f21 = function(tok) { return tok; };\n var peg$f22 = function(tok) { return options.isEquals(tok); };\n var peg$f23 = function(tok) { return tok; };\n var peg$f24 = function(tok) { return options.isChar(tok, \"(\"); };\n var peg$f25 = function(tok) { return tok; };\n var peg$f26 = function(tok) { return options.isChar(tok, \")\"); };\n var peg$f27 = function(tok) { return tok; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsebody() {\n var s0, s1, s2;\n\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseitem_with_end() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsewhitespace_or_parbreaks();\n s4 = peg$parseitem_sep();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsewhitespace();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsewhitespace();\n }\n s6 = peg$parsetrailing_comment();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewhitespace();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s2, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseitem_without_end() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseitem_part();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_part();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_part();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_part();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_part();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseseparated_part() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseparbreak();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseparbreak();\n }\n s4 = peg$parseitem_part();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parseitem_part() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = undefined;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = undefined;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetoken() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsenon_token();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsenon_whitespace_non_parbreak_token() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsewhitespace();\n if (s3 === peg$FAILED) {\n s3 = peg$parseparbreak();\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = undefined;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseparen_block();\n if (s3 === peg$FAILED) {\n s3 = peg$parsetoken();\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsenon_token() {\n var s0;\n\n s0 = peg$parseitem_sep();\n if (s0 === peg$FAILED) {\n s0 = peg$parseequals();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetrailing_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseown_line_comment();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsewhitespace_or_parbreaks() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n }\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseparen_block() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$f11();\n if (s1) {\n s1 = peg$FAILED;\n } else {\n s1 = undefined;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseopen_paren();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = undefined;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n s6 = peg$parseclose_paren();\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseparbreak() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseitem_sep() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseequals() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseopen_paren() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseclose_paren() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n function processItem(leadCell, otherCells) {\n const cells = [leadCell || []];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n }\n return { itemParts: cells };\n }\n\n //\n // These are compatability functions used when running in the browser\n //\n // Check if the `options` object has the functions that we need.\n // If not, try to add them\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) =>\n node.type === \"string\" && node.content === char,\n isComma(node) {\n return node.type === \"string\" && node.content === \",\";\n },\n isEquals(node) {\n return node.type === \"string\" && node.content === \"=\";\n },\n isParbreak(node) {\n return node.type === \"parbreak\";\n },\n isWhitespace(node) {\n return node.type === \"whitespace\";\n },\n isSameLineComment: (node) =>\n node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) =>\n node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n allowParenGroups: true,\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n\n\n\n var peg$e0 = peg$anyExpectation();\n\n var peg$f0 = function(e) {\n // We may have inserted nested arrays.\n // Flatten everything before we're done and remove any\n // resitual `null`s\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() { return []; };\n var peg$f2 = function(tok) { return options.isHash(tok); };\n var peg$f3 = function(tok) { return tok; };\n var peg$f4 = function(tok) { return options.isNumber(tok); };\n var peg$f5 = function(tok) { return tok; };\n var peg$f6 = function() { return { type: \"string\", content: \"#\" }; };\n var peg$f7 = function(num) {\n const split = options.splitNumber(num);\n return [{ type: \"hash_number\", number: split.number }, split.rest];\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsebody() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsehash() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f4(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedouble_hash() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehash();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsehash_number() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n //\n // These are compatability functions used when running in the browser\n //\n // Check if the `options` object has the functions that we need.\n // If not, try to add them\n if (!options.isHash) {\n try {\n Object.assign(options, {\n isHash: (node) =>\n node.type === \"string\" && node.content === \"#\",\n isNumber: (node) =>\n node.type === \"string\" && 0 < +node.content.charAt(0),\n splitNumber: (node) => {\n const number = +node.content.charAt(0);\n if (node.content.length > 1) {\n return {\n number,\n rest: {\n type: \"string\",\n content: node.content.slice(1),\n },\n };\n }\n return { number };\n },\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n\n\n\n var peg$e0 = peg$anyExpectation();\n\n var peg$f0 = function(e) {\n // We may have inserted nested arrays.\n // Flatten everything before we're done and remove any\n // resitual `null`s\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() { return []; };\n var peg$f2 = function(toks) { return options.isRecognized(toks); };\n var peg$f3 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f4 = function(tok1, tok2) {\n const split = options.split(tok2);\n return options.isRecognized([tok1, split[0]]);\n };\n var peg$f5 = function(tok1, tok2) {\n const split = options.split(tok2);\n return [options.isRecognized([tok1, split[0]]), split[1]];\n };\n var peg$f6 = function(tok1, tok2) { return options.isRecognized([tok1, tok2]); };\n var peg$f7 = function(tok1, tok2) {\n return options.isRecognized([tok1, tok2]);\n };\n var peg$f8 = function(toks) { return options.isRecognized(toks); };\n var peg$f9 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f10 = function(tok) { return options.isRecognized([tok]); };\n var peg$f11 = function(tok) {\n return options.isRecognized([tok]);\n };\n var peg$f12 = function(tok) { return options.isMacro(tok); };\n var peg$f13 = function(tok) { return tok; };\n var peg$f14 = function(tok) { return options.isWhitespace(tok); };\n var peg$f15 = function(tok) { return tok; };\n var peg$f16 = function(tok) { return options.isSplitable(tok); };\n var peg$f17 = function(tok) { return tok; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsebody() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsetriple_ligature() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedouble_ligature() {\n var s0;\n\n s0 = peg$parsedouble_macro_ligature();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_macro_ligature_extracted();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_char_ligature();\n }\n }\n\n return s0;\n }\n\n function peg$parsedouble_macro_ligature_extracted() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n s3 = peg$parsesplitable();\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f4(s1, s3);\n if (s4) {\n s4 = undefined;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedouble_macro_ligature() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f6(s1, s3);\n if (s4) {\n s4 = undefined;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedouble_char_ligature() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f8(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsemono_ligature() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f10(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsemacro() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsewhitespace() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesplitable() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n //\n // These are compatability functions used when running in the browser\n //\n // Check if the `options` object has the functions that we need.\n // If not, try to add them\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isMacro: (node) => node.type === \"macro\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isRecognized: (nodes) => {\n if (\n nodes.length == 2 &&\n nodes[0].content === \"^\" &&\n nodes[1].content === \"o\"\n ) {\n return { type: \"string\", content: \"\u00F4\" };\n }\n\n return null;\n },\n isSplitable: (node) =>\n node.type === \"string\" && node.content.length > 1,\n split: (node) => [\n { type: \"string\", content: node.content.charAt(0) },\n { type: \"string\", content: node.content.slice(1) },\n ],\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { start: peg$parsestart };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = \";\";\n var peg$c1 = \",\";\n var peg$c2 = \":\";\n var peg$c3 = \"/\";\n var peg$c4 = \">\";\n var peg$c5 = \"!\";\n var peg$c6 = \".\";\n var peg$c7 = \"!![\";\n var peg$c8 = \"]\";\n var peg$c9 = \"!!\";\n var peg$c10 = \"+\";\n var peg$c11 = \"-\";\n\n var peg$r0 = /^[a-zA-Z0-9]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[ \\t\\n\\r]/;\n var peg$r3 = /^[0-9a-fA-F]/;\n\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\";\", false);\n var peg$e2 = peg$literalExpectation(\",\", false);\n var peg$e3 = peg$otherExpectation(\"model list\");\n var peg$e4 = peg$literalExpectation(\":\", false);\n var peg$e5 = peg$literalExpectation(\"/\", false);\n var peg$e6 = peg$otherExpectation(\"model\");\n var peg$e7 = peg$otherExpectation(\"color spec list\");\n var peg$e8 = peg$otherExpectation(\"color spec\");\n var peg$e9 = peg$otherExpectation(\"color\");\n var peg$e10 = peg$otherExpectation(\"function expression\");\n var peg$e11 = peg$literalExpectation(\">\", false);\n var peg$e12 = peg$otherExpectation(\"function\");\n var peg$e13 = peg$otherExpectation(\"extended expression\");\n var peg$e14 = peg$otherExpectation(\"core model\");\n var peg$e15 = peg$otherExpectation(\"expr\");\n var peg$e16 = peg$literalExpectation(\"!\", false);\n var peg$e17 = peg$otherExpectation(\"mix expr\");\n var peg$e18 = peg$otherExpectation(\"name\");\n var peg$e19 = peg$literalExpectation(\".\", false);\n var peg$e20 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"]], false, false);\n var peg$e21 = peg$otherExpectation(\"postfix\");\n var peg$e22 = peg$literalExpectation(\"!![\", false);\n var peg$e23 = peg$literalExpectation(\"]\", false);\n var peg$e24 = peg$literalExpectation(\"!!\", false);\n var peg$e25 = peg$otherExpectation(\"prefix\");\n var peg$e26 = peg$otherExpectation(\"plus\");\n var peg$e27 = peg$literalExpectation(\"+\", false);\n var peg$e28 = peg$otherExpectation(\"minus\");\n var peg$e29 = peg$literalExpectation(\"-\", false);\n var peg$e30 = peg$otherExpectation(\"num\");\n var peg$e31 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e32 = peg$otherExpectation(\"positive float\");\n var peg$e33 = peg$otherExpectation(\"divisor\");\n var peg$e34 = peg$otherExpectation(\"int\");\n var peg$e35 = peg$otherExpectation(\"whitespace\");\n var peg$e36 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false);\n var peg$e37 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"], [\"A\", \"F\"]], false, false);\n\n var peg$f0 = function(m) { return m; };\n var peg$f1 = function(m) { return m; };\n var peg$f2 = function(m) { return m; };\n var peg$f3 = function(m) { return m; };\n var peg$f4 = function(m) { return m; };\n var peg$f5 = function(a) { return { type: \"invalid_spec\", content: a }; };\n var peg$f6 = function(f, c) { return c; };\n var peg$f7 = function(f, r) {\n return { type: \"color_set\", content: [f].concat(r) };\n };\n var peg$f8 = function(n, s) {\n return { type: \"color_set_item\", name: n, spec_list: s };\n };\n var peg$f9 = function(c, m) {\n return { type: \"model_list\", contents: m, core_model: c };\n };\n var peg$f10 = function(m) {\n return { type: \"model_list\", contents: m, core_model: null };\n };\n var peg$f11 = function(m, a) { return a; };\n var peg$f12 = function(m, r) { return [m].concat(r); };\n var peg$f13 = function(s, a) { return a; };\n var peg$f14 = function(s, r) {\n return { type: \"spec_list\", content: [s].concat(r) };\n };\n var peg$f15 = function(c) {\n return { type: \"hex_spec\", content: [c] };\n };\n var peg$f16 = function(c, d) { return d; };\n var peg$f17 = function(c, d) { return d; };\n var peg$f18 = function(c, r) {\n return { type: \"num_spec\", content: r ? [c].concat(r) : [c] };\n };\n var peg$f19 = function(c, fs) {\n return { type: \"color\", color: c, functions: fs };\n };\n var peg$f20 = function(f, n) { return n; };\n var peg$f21 = function(f, args) {\n return { type: \"function\", name: f, args };\n };\n var peg$f22 = function(core, d, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: d,\n expressions: [e].concat(es),\n };\n };\n var peg$f23 = function(core, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: null,\n expressions: [e].concat(es),\n };\n };\n var peg$f24 = function(e, d) {\n return { type: \"weighted_expr\", color: e, weight: d };\n };\n var peg$f25 = function(e) { return e; };\n var peg$f26 = function(p, n, e, po) {\n return {\n type: \"expr\",\n prefix: p,\n name: n,\n mix_expr: e,\n postfix: po,\n };\n };\n var peg$f27 = function(p, n) {\n return { type: \"complete_mix\", mix_percent: p, name: n };\n };\n var peg$f28 = function(p) { return { type: \"partial_mix\", mix_percent: p }; };\n var peg$f29 = function(c, p) { return c.concat(p || []); };\n var peg$f30 = function(n) { return { type: \"postfix\", num: n }; };\n var peg$f31 = function(p) { return { type: \"postfix\", plusses: p }; };\n var peg$f32 = function(n) { return parseInt(n, 10); };\n var peg$f33 = function(n) { return parseFloat(n); };\n var peg$f34 = function(n) { return n; };\n var peg$f35 = function(n) { return -n; };\n var peg$f36 = function(m, n) { return m ? -n : n; };\n var peg$f37 = function(h) { return h.toUpperCase(); };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsestart() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsespec_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_spec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n s1 = input.substring(s1, peg$currPos);\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n s0 = s1;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsecolor_set_spec() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_item();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecolor_set_item() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsename();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsespec_list();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsemodel_list() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemodel_list_tail();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list_tail();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n\n return s0;\n }\n\n function peg$parsemodel_list_tail() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parsemodel();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsemodel() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parsecore_model();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n\n return s0;\n }\n\n function peg$parsespec_list() {\n var s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n\n return s0;\n }\n\n function peg$parsespec() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsehex();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehex();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehex();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsehex();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsehex();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsehex();\n if (s8 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6, s7, s8];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n\n return s0;\n }\n\n function peg$parsecolor() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecolor_expr();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsefunc_expr();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsefunc_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f19(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n\n return s0;\n }\n\n function peg$parsecolor_expr() {\n var s0;\n\n s0 = peg$parseext_expr();\n if (s0 === peg$FAILED) {\n s0 = peg$parseexpr();\n if (s0 === peg$FAILED) {\n s0 = peg$parsename();\n }\n }\n\n return s0;\n }\n\n function peg$parsefunc_expr() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 62) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsefunction();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f21(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n\n return s0;\n }\n\n function peg$parsefunction() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n\n return s0;\n }\n\n function peg$parseext_expr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsediv();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c2;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseweighted_expr();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parseadditional_weighted_expr();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f22(s1, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseweighted_expr();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseadditional_weighted_expr();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s1, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n\n return s0;\n }\n\n function peg$parseweighted_expr() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseexpr();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsedec();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseadditional_weighted_expr() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseweighted_expr();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecore_model() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n\n return s0;\n }\n\n function peg$parseexpr() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseprefix();\n s2 = peg$parsename();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemix_expr();\n s4 = peg$parsepostfix();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f26(s1, s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n\n return s0;\n }\n\n function peg$parsecomplete_mix() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 33) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsename();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s2, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepartial_mix() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsemix_expr() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomplete_mix();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomplete_mix();\n }\n s2 = peg$parsepartial_mix();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f29(s1, s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n\n return s0;\n }\n\n function peg$parsename() {\n var s0, s1, s2;\n\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 46) {\n s0 = peg$c6;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n\n return s0;\n }\n\n function peg$parsepostfix() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e24); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parseplus();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseplus();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n\n return s0;\n }\n\n function peg$parseprefix() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parseminus();\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e25); }\n\n return s0;\n }\n\n function peg$parseplus() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e26); }\n }\n\n return s0;\n }\n\n function peg$parseminus() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e28); }\n }\n\n return s0;\n }\n\n function peg$parsenum() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f32(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e30); }\n }\n\n return s0;\n }\n\n function peg$parsepct() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c6;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n }\n s7 = input.substring(s7, peg$currPos);\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s4 = input.substring(s4, peg$currPos);\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c6;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e31); }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = input.substring(s4, peg$currPos);\n } else {\n s4 = s5;\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f33(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e32); }\n }\n\n return s0;\n }\n\n function peg$parsediv() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parsepct();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e33); }\n }\n\n return s0;\n }\n\n function peg$parsedec() {\n var s0, s1, s2;\n\n s0 = peg$parsepct();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e27); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e29); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseint() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e34); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e35); }\n\n return s0;\n }\n\n function peg$parsesp() {\n var s0, s1;\n\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e36); }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsehex() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e37); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f37(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n\n\n\n var peg$e0 = peg$otherExpectation(\"decl_start\");\n var peg$e1 = peg$otherExpectation(\"decl_end\");\n var peg$e2 = peg$otherExpectation(\"vert\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"l\");\n var peg$e5 = peg$otherExpectation(\"r\");\n var peg$e6 = peg$otherExpectation(\"c\");\n var peg$e7 = peg$otherExpectation(\"p\");\n var peg$e8 = peg$otherExpectation(\"m\");\n var peg$e9 = peg$otherExpectation(\"b\");\n var peg$e10 = peg$otherExpectation(\"w\");\n var peg$e11 = peg$otherExpectation(\"W\");\n var peg$e12 = peg$otherExpectation(\"X\");\n var peg$e13 = peg$otherExpectation(\"!\");\n var peg$e14 = peg$otherExpectation(\"@\");\n var peg$e15 = peg$otherExpectation(\"<\");\n var peg$e16 = peg$otherExpectation(\">\");\n var peg$e17 = peg$otherExpectation(\"group\");\n var peg$e18 = peg$otherExpectation(\"whitespace\");\n\n var peg$f0 = function(c) { return c; };\n var peg$f1 = function(cols) { return cols; };\n var peg$f2 = function() { return []; };\n var peg$f3 = function(divs1, start, a, end, divs2) {\n return {\n type: \"column\",\n pre_dividers: divs1,\n post_dividers: divs2,\n before_start_code: start,\n before_end_code: end,\n alignment: a,\n };\n };\n var peg$f4 = function() {\n return {\n type: \"vert_divider\",\n };\n };\n var peg$f5 = function(b, g) {\n return {\n type: \"bang_divider\",\n content: g[0].content,\n };\n };\n var peg$f6 = function(g) {\n return {\n type: \"at_divider\",\n content: g[0].content,\n };\n };\n var peg$f7 = function(div) { return div; };\n var peg$f8 = function(g) { return { type: \"decl_code\", code: g[0].content }; };\n var peg$f9 = function(g) { return { type: \"decl_code\", code: g[0].content }; };\n var peg$f10 = function() { return { type: \"alignment\", alignment: \"left\" }; };\n var peg$f11 = function() { return { type: \"alignment\", alignment: \"center\" }; };\n var peg$f12 = function() { return { type: \"alignment\", alignment: \"right\" }; };\n var peg$f13 = function() { return { type: \"alignment\", alignment: \"X\" }; };\n var peg$f14 = function() { return \"top\"; };\n var peg$f15 = function() { return \"default\"; };\n var peg$f16 = function() { return \"bottom\"; };\n var peg$f17 = function(a, g) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: a,\n size: g[0].content,\n };\n };\n var peg$f18 = function(g1, g2) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: g1[0].content,\n size: g2[0].content,\n };\n };\n var peg$f19 = function(tok) { return options.matchChar(tok, \"|\"); };\n var peg$f20 = function(tok) { return options.matchChar(tok, \"l\"); };\n var peg$f21 = function(tok) { return options.matchChar(tok, \"r\"); };\n var peg$f22 = function(tok) { return options.matchChar(tok, \"c\"); };\n var peg$f23 = function(tok) { return options.matchChar(tok, \"p\"); };\n var peg$f24 = function(tok) { return options.matchChar(tok, \"m\"); };\n var peg$f25 = function(tok) { return options.matchChar(tok, \"b\"); };\n var peg$f26 = function(tok) { return options.matchChar(tok, \"w\"); };\n var peg$f27 = function(tok) { return options.matchChar(tok, \"W\"); };\n var peg$f28 = function(tok) { return options.matchChar(tok, \"X\"); };\n var peg$f29 = function(tok) { return options.matchChar(tok, \"!\"); };\n var peg$f30 = function(tok) { return options.matchChar(tok, \"@\"); };\n var peg$f31 = function(tok) { return options.matchChar(tok, \"<\"); };\n var peg$f32 = function(tok) { return options.matchChar(tok, \">\"); };\n var peg$f33 = function(tok) { return options.isGroup(tok); };\n var peg$f34 = function(tok) { return options.isWhitespace(tok); };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsebody() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f2();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsecolumn() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecolumn_divider();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecolumn_divider();\n }\n s2 = peg$parsedecl_start();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsealignment();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsedecl_end();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parsecolumn_divider();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsecolumn_divider();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecolumn_divider() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$currPos;\n s3 = peg$parsevert();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$f4();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsebang();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f5(s3, s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseat();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f6(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedecl_start() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsegreater();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n\n return s0;\n }\n\n function peg$parsedecl_end() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseless();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n\n return s0;\n }\n\n function peg$parsealignment() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parsel();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsec();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parser();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f12();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseX();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f13();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsep();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f14();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parsem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f15();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseb();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f16();\n }\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsew();\n if (s1 === peg$FAILED) {\n s1 = peg$parseW();\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsevert() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n\n return s0;\n }\n\n function peg$parsel() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n\n return s0;\n }\n\n function peg$parser() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n\n return s0;\n }\n\n function peg$parsec() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n\n return s0;\n }\n\n function peg$parsep() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f23(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n\n return s0;\n }\n\n function peg$parsem() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n\n return s0;\n }\n\n function peg$parseb() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f25(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n\n return s0;\n }\n\n function peg$parsew() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n\n return s0;\n }\n\n function peg$parseW() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f27(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n\n return s0;\n }\n\n function peg$parseX() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n\n return s0;\n }\n\n function peg$parsebang() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f29(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n\n return s0;\n }\n\n function peg$parseat() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n\n return s0;\n }\n\n function peg$parseless() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f31(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n\n return s0;\n }\n\n function peg$parsegreater() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n\n return s0;\n }\n\n function peg$parsegroup() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f33(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n //\n // These are compatability functions used when running in the browser\n //\n // Check if the `options` object has the functions that we need.\n // If not, try to add them\n if (!options.isHash) {\n try {\n Object.assign(options, {\n matchChar: (node, char) =>\n node.type === \"string\" && node.content === char,\n isGroup: (node) => node.type === \"group\",\n isWhitespace: (node) => node.type === \"whitespace\",\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n\n\n\n var peg$e0 = peg$otherExpectation(\"partial item\");\n var peg$e1 = peg$otherExpectation(\"item\");\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$otherExpectation(\"equation\");\n var peg$e4 = peg$otherExpectation(\"trailing comment\");\n var peg$e5 = peg$otherExpectation(\"comment only line\");\n var peg$e6 = peg$otherExpectation(\"non-var token\");\n var peg$e7 = peg$otherExpectation(\"token\");\n var peg$e8 = peg$otherExpectation(\"same line comment\");\n var peg$e9 = peg$otherExpectation(\"own line comment\");\n var peg$e10 = peg$otherExpectation(\",\");\n var peg$e11 = peg$otherExpectation(\"@\");\n var peg$e12 = peg$otherExpectation(\"variable token\");\n var peg$e13 = peg$otherExpectation(\"+/-\");\n var peg$e14 = peg$otherExpectation(\"=\");\n\n var peg$f0 = function(a, b) { return a.concat(b ? b : []); };\n var peg$f1 = function() { return []; };\n var peg$f2 = function(a, b, c) { return a.concat(b, c); };\n var peg$f3 = function(op, a, b, c) {\n return { type: \"item\", op, variable: b, content: a.concat(b, c) };\n };\n var peg$f4 = function(op, a) {\n return { type: \"item\", op, variable: null, content: a };\n };\n var peg$f5 = function(line, sep, comment) {\n return { ...line, sep: [].concat(sep), trailingComment: comment };\n };\n var peg$f6 = function(line, comment) {\n return { ...line, trailingComment: comment };\n };\n var peg$f7 = function(eq, ann) {\n return {\n type: \"line\",\n equation: eq,\n annotation: ann,\n sep: null,\n };\n };\n var peg$f8 = function(at, ann) {\n return at ? { type: \"annotation\", marker: at, content: ann } : null;\n };\n var peg$f9 = function(left, eq, right) {\n return { type: \"equation\", left, right, equals: eq };\n };\n var peg$f10 = function(x) { return x; };\n var peg$f11 = function(x) {\n return {\n type: \"line\",\n trailingComment: x,\n };\n };\n var peg$f12 = function(v, s) { return [v].concat(s ? s : []); };\n var peg$f13 = function(t) { return t; };\n var peg$f14 = function(x) { return x; };\n var peg$f15 = function(x) { return x; };\n var peg$f16 = function(tok) { return options.isSameLineComment(tok); };\n var peg$f17 = function(tok) { return tok; };\n var peg$f18 = function(tok) { return options.isOwnLineComment(tok); };\n var peg$f19 = function(tok) { return tok; };\n var peg$f20 = function(tok) { return options.isWhitespace(tok); };\n var peg$f21 = function(tok) { return tok; };\n var peg$f22 = function(tok) { return options.isSep(tok); };\n var peg$f23 = function(tok) { return tok; };\n var peg$f24 = function(tok) { return options.isAt(tok); };\n var peg$f25 = function(tok) { return tok; };\n var peg$f26 = function(tok) { return options.isVar(tok); };\n var peg$f27 = function(tok) { return tok; };\n var peg$f28 = function(tok) { return options.isOperation(tok); };\n var peg$f29 = function(tok) { return tok; };\n var peg$f30 = function(tok) { return options.isEquals(tok); };\n var peg$f31 = function(tok) { return tok; };\n var peg$f32 = function(tok) { return options.isSubscript(tok); };\n var peg$f33 = function(tok) { return tok; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsebody() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n }\n s2 = peg$parseline_without_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseEOL();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsepartial_item() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = [];\n s3 = peg$parsenon_var_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_var_token();\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parsevar();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n s6 = [];\n s7 = peg$parsetoken();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsetoken();\n }\n s7 = [];\n s8 = peg$parse_();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n\n return s0;\n }\n\n function peg$parseitem() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsevar();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parse_();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parse_();\n }\n s7 = [];\n s8 = peg$parsetoken();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsetoken();\n }\n s8 = [];\n s9 = peg$parse_();\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s5, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f4(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n\n return s0;\n }\n\n function peg$parseline_with_sep() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepartial_line_with_comment() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseline_without_sep() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n peg$silentFails--;\n if (s2 !== peg$FAILED) {\n peg$currPos = s1;\n s1 = undefined;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequation();\n s3 = peg$parseannotation();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseannotation() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseat();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsenon_sep_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_sep_token();\n }\n peg$savedPos = s0;\n s0 = peg$f8(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseequation() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseitem();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseitem();\n }\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2, s3);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n\n return s0;\n }\n\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n\n return s0;\n }\n\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n\n return s0;\n }\n\n function peg$parsevar() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsevar_token();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsesubscript();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsenon_var_token() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsevar();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n\n return s0;\n }\n\n function peg$parsenon_sep_token() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsetoken() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseat();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoperation();\n if (s2 === peg$FAILED) {\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = undefined;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n\n return s0;\n }\n\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n\n return s0;\n }\n\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesep() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n\n return s0;\n }\n\n function peg$parseat() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n\n return s0;\n }\n\n function peg$parsevar_token() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n\n return s0;\n }\n\n function peg$parseoperation() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = peg$currPos;\n s4 = peg$f28(s2);\n if (s4) {\n s4 = undefined;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n\n return s0;\n }\n\n function peg$parseequals() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n\n return s0;\n }\n\n function peg$parsesubscript() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n //\n // These are compatability functions used when running in the browser\n //\n // Check if the `options` object has the functions that we need.\n // If not, try to add them\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isSep: (node) => node.type === \"string\" && node.content === \",\",\n isVar: (node) =>\n node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isOperation: (node) =>\n node.type === \"string\" && node.content.match(/[+-]/),\n isEquals: (node) =>\n node.type === \"string\" && node.content === \"=\",\n isAt: (node) => node.type === \"string\" && node.content === \"@\",\n isSubscript: (node) => node.content === \"_\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isSameLineComment: (node) =>\n node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) =>\n node.type === \"comment\" && !node.sameline,\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { root: peg$parseroot };\n var peg$startRuleFunction = peg$parseroot;\n\n var peg$c0 = \"plus\";\n var peg$c1 = \"minus\";\n var peg$c2 = \"pt\";\n var peg$c3 = \"mm\";\n var peg$c4 = \"cm\";\n var peg$c5 = \"in\";\n var peg$c6 = \"ex\";\n var peg$c7 = \"em\";\n var peg$c8 = \"bp\";\n var peg$c9 = \"pc\";\n var peg$c10 = \"dd\";\n var peg$c11 = \"cc\";\n var peg$c12 = \"nd\";\n var peg$c13 = \"nc\";\n var peg$c14 = \"sp\";\n var peg$c15 = \"filll\";\n var peg$c16 = \"fill\";\n var peg$c17 = \"fil\";\n var peg$c18 = \".\";\n var peg$c19 = \"+\";\n var peg$c20 = \"-\";\n\n var peg$r0 = /^[0-9]/;\n\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\"plus\", false);\n var peg$e2 = peg$literalExpectation(\"minus\", false);\n var peg$e3 = peg$literalExpectation(\"pt\", false);\n var peg$e4 = peg$literalExpectation(\"mm\", false);\n var peg$e5 = peg$literalExpectation(\"cm\", false);\n var peg$e6 = peg$literalExpectation(\"in\", false);\n var peg$e7 = peg$literalExpectation(\"ex\", false);\n var peg$e8 = peg$literalExpectation(\"em\", false);\n var peg$e9 = peg$literalExpectation(\"bp\", false);\n var peg$e10 = peg$literalExpectation(\"pc\", false);\n var peg$e11 = peg$literalExpectation(\"dd\", false);\n var peg$e12 = peg$literalExpectation(\"cc\", false);\n var peg$e13 = peg$literalExpectation(\"nd\", false);\n var peg$e14 = peg$literalExpectation(\"nc\", false);\n var peg$e15 = peg$literalExpectation(\"sp\", false);\n var peg$e16 = peg$literalExpectation(\"filll\", false);\n var peg$e17 = peg$literalExpectation(\"fill\", false);\n var peg$e18 = peg$literalExpectation(\"fil\", false);\n var peg$e19 = peg$otherExpectation(\"number\");\n var peg$e20 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e21 = peg$literalExpectation(\".\", false);\n var peg$e22 = peg$literalExpectation(\"+\", false);\n var peg$e23 = peg$literalExpectation(\"-\", false);\n\n var peg$f0 = function(b, st, sh) {\n // Only return the non-null glue items\n return {\n type: \"glue\",\n fixed: b,\n stretchable: st,\n shrinkable: sh,\n position: location(),\n };\n };\n var peg$f1 = function(glue) { return glue; };\n var peg$f2 = function(n, u) { return { type: \"dim\", value: n, unit: u }; };\n var peg$f3 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f4 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f5 = function(n) { return parseFloat(n); };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parseroot() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsebase();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsestretchable();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseshrinkable();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s1;\n s1 = peg$f0(s2, s3, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsebase() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseunit();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsestretchable() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseshrinkable() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c1) {\n s1 = peg$c1;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseunit() {\n var s0;\n\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s0 = peg$c2;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c3) {\n s0 = peg$c3;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s0 = peg$c4;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c5) {\n s0 = peg$c5;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s0 = peg$c6;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e7); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s0 = peg$c7;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e8); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s0 = peg$c8;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e9); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s0 = peg$c9;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e10); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e11); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e12); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e13); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e14); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e15); }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parserubber_unit() {\n var s0;\n\n s0 = peg$parseunit();\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e16); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c16) {\n s0 = peg$c16;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e17); }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c17) {\n s0 = peg$c17;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e18); }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsesign();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$currPos;\n s5 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c18;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e21); }\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e20); }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e19); }\n }\n\n return s0;\n }\n\n function peg$parsesign() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 43) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e22); }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e23); }\n }\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "export default // Generated by Peggy 2.0.1.\n//\n// https://peggyjs.org/\n(function() {\n \"use strict\";\n\nfunction peg$subclass(child, parent) {\n function C() { this.constructor = child; }\n C.prototype = parent.prototype;\n child.prototype = new C();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n // istanbul ignore next Check is a necessary evil to support older environments\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\nfunction peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) { return str; }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\n\npeg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, ' ');\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = (last - s.column) || 1;\n str += \"\\n --> \" + loc + \"\\n\"\n + filler + \" |\\n\"\n + s.line + \" | \" + line + \"\\n\"\n + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n};\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part)\n ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n : classEscape(part);\n });\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n\n any: function() {\n return \"any character\";\n },\n\n end: function() {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, \"\\\\\\\"\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\^/g, \"\\\\^\")\n .replace(/-/g, \"\\\\-\")\n .replace(/\\0/g, \"\\\\0\")\n .replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/[\\x00-\\x0F]/g, function(ch) { return \"\\\\x0\" + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\" + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = expected.map(describeExpectation);\n var i, j;\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n\n var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body };\n var peg$startRuleFunction = peg$parsepath_spec;\n\n\n\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$otherExpectation(\"same line comment\");\n var peg$e2 = peg$otherExpectation(\"own line comment\");\n var peg$e3 = peg$otherExpectation(\"comment\");\n var peg$e4 = peg$otherExpectation(\"floating comment\");\n var peg$e5 = peg$otherExpectation(\"operation\");\n var peg$e6 = peg$otherExpectation(\"=\");\n\n var peg$f0 = function(v) { return v; };\n var peg$f1 = function(ops) { return { type: \"path_spec\", content: ops }; };\n var peg$f2 = function(c1, op, comment) { return { op, comment }; };\n var peg$f3 = function(c1, ops, c2, body) {\n const comments = [c1, ...ops.map((x) => x.comment), c2].filter(\n (x) => x\n );\n const attribute = ops.map((x) => x.op.content.content).join(\" \");\n return {\n type: \"animation\",\n comments,\n attribute,\n content: body.content,\n };\n };\n var peg$f4 = function(start, b) {\n return { ...b, start, type: \"foreach\" };\n };\n var peg$f5 = function(c1, variables, options, c2, c3, list, c4, command) {\n const comments = [c1, c2, c3, c4].filter((x) => x);\n return {\n type: \"foreach_body\",\n variables,\n options: options && options.content,\n list,\n command,\n comments,\n };\n };\n var peg$f6 = function(c1, options, c2, body) {\n const comments = [c1, c2].filter((x) => x);\n return {\n type: \"svg_operation\",\n options: options && options.content,\n content: body,\n comments,\n };\n };\n var peg$f7 = function(c1, c2, coord, c3, c4, x) {\n return { coord: x, comment: c4 };\n };\n var peg$f8 = function(c1, c2, coord, c3, a, c5) {\n const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x);\n return {\n type: \"curve_to\",\n controls: a ? [coord, a.coord] : [coord],\n comments,\n };\n };\n var peg$f9 = function() { return { type: \"line_to\", command: \"|-\" }; };\n var peg$f10 = function() { return { type: \"line_to\", command: \"-|\" }; };\n var peg$f11 = function() { return { type: \"line_to\", command: \"--\" }; };\n var peg$f12 = function(prefix, content) {\n return { type: \"coordinate\", content, prefix };\n };\n var peg$f13 = function(content) {\n return { type: \"square_brace_group\", content };\n };\n var peg$f14 = function(v) { return { type: \"unknown\", content: v }; };\n var peg$f15 = function(tok) { return options.isSameLineComment(tok); };\n var peg$f16 = function(tok) { return tok; };\n var peg$f17 = function(tok) { return options.isOwnLineComment(tok); };\n var peg$f18 = function(tok) { return tok; };\n var peg$f19 = function(tok) { return options.isComment(tok); };\n var peg$f20 = function(tok) { return tok; };\n var peg$f21 = function(tok) { return options.isWhitespace(tok); };\n var peg$f22 = function(tok) { return tok; };\n var peg$f23 = function(c) { return c; };\n var peg$f24 = function(tok) { return options.isOperation(tok); };\n var peg$f25 = function(tok) {\n return { type: \"operation\", content: tok };\n };\n var peg$f26 = function(tok) { return options.isChar(tok, \"=\"); };\n var peg$f27 = function(tok) { return tok; };\n var peg$f28 = function(tok) { return options.isChar(tok, \"[\"); };\n var peg$f29 = function(tok) { return tok; };\n var peg$f30 = function(tok) { return options.isChar(tok, \"]\"); };\n var peg$f31 = function(tok) { return tok; };\n var peg$f32 = function(tok) { return options.isChar(tok, \"(\"); };\n var peg$f33 = function(tok) { return tok; };\n var peg$f34 = function(tok) { return options.isChar(tok, \")\"); };\n var peg$f35 = function(tok) { return tok; };\n var peg$f36 = function(tok) { return options.isChar(tok, \"+\"); };\n var peg$f37 = function(tok) { return tok; };\n var peg$f38 = function(tok) { return options.isChar(tok, \"-\"); };\n var peg$f39 = function(tok) { return tok; };\n var peg$f40 = function(tok) { return options.isChar(tok, \"|\"); };\n var peg$f41 = function(tok) { return tok; };\n var peg$f42 = function(tok) { return options.isChar(tok, \".\"); };\n var peg$f43 = function(tok) { return tok; };\n var peg$f44 = function(tok) { return options.isChar(tok, \"controls\"); };\n var peg$f45 = function(tok) { return tok; };\n var peg$f46 = function(tok) { return options.isChar(tok, \"and\"); };\n var peg$f47 = function(tok) { return tok; };\n var peg$f48 = function(tok) { return options.isChar(tok, \"svg\"); };\n var peg$f49 = function(tok) { return tok; };\n var peg$f50 = function(tok) { return options.isGroup(tok); };\n var peg$f51 = function(tok) { return tok; };\n var peg$f52 = function(tok) { return options.isAnyMacro(tok); };\n var peg$f53 = function(tok) { return tok; };\n var peg$f54 = function(tok) { return options.isChar(tok, \"foreach\"); };\n var peg$f55 = function(tok) { return tok; };\n var peg$f56 = function(tok) { return options.isMacro(tok, \"foreach\"); };\n var peg$f57 = function(tok) { return tok; };\n var peg$f58 = function(tok) { return options.isChar(tok, \"in\"); };\n var peg$f59 = function(tok) { return tok; };\n var peg$f60 = function(tok) { return options.isChar(tok, \":\"); };\n var peg$f61 = function(tok) { return tok; };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n\n var peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function offset() {\n return peg$savedPos;\n }\n\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== undefined\n ? location\n : peg$computeLocation(peg$savedPos, peg$currPos);\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsepath_spec() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseanimation() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = peg$parsecolon();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseequals();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_comment_();\n s6 = peg$parsegroup();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseforeach() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parseforeach_keyword();\n if (s1 === peg$FAILED) {\n s1 = peg$parseforeach_macro();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseforeach_body();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseforeach_body() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n s0 = peg$currPos;\n s1 = peg$parse_comment_();\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsein_keyword();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$parsegroup();\n if (s7 === peg$FAILED) {\n s7 = peg$parsemacro();\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_comment_();\n s9 = peg$parseforeach();\n if (s9 === peg$FAILED) {\n s9 = peg$parsegroup();\n if (s9 === peg$FAILED) {\n s9 = peg$parsemacro();\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesvg() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parsesvg_keyword();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecurve_to() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n s0 = peg$currPos;\n s1 = peg$parsedotdot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsecontrols_keyword();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_comment_();\n s5 = peg$parsecoordinate();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$currPos;\n s8 = peg$parseand_keyword();\n if (s8 !== peg$FAILED) {\n s9 = peg$parse_comment_();\n s10 = peg$parsecoordinate();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f7(s2, s4, s5, s6, s9, s10);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = peg$parse_comment_();\n s9 = peg$parsedotdot();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2, s4, s5, s6, s7, s8);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseline_to() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsepipe();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepipe();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsecoordinate() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parseplus();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseplus();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$parseopen_paren();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = undefined;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s3 = input.substring(s3, peg$currPos);\n s4 = peg$parseclose_paren();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesquare_brace_group() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = peg$parseopen_square_brace();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = undefined;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parseclose_square_brace();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedotdot() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsedot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedot();\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseunknown() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f14(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e1); }\n }\n\n return s0;\n }\n\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e2); }\n }\n\n return s0;\n }\n\n function peg$parsecomment() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e3); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parse_comment_() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsecomment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e4); }\n\n return s0;\n }\n\n function peg$parseoperation() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e5); }\n }\n\n return s0;\n }\n\n function peg$parseequals() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e6); }\n }\n\n return s0;\n }\n\n function peg$parseopen_square_brace() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseclose_square_brace() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseopen_paren() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseclose_paren() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseplus() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f36(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f37(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseminus() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f38(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f39(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepipe() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f40(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f41(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedot() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f42(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f43(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecontrols_keyword() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f44(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f45(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseand_keyword() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f46(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f47(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesvg_keyword() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f48(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f49(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsegroup() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f50(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f51(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsemacro() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f52(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f53(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseforeach_keyword() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f54(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f55(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseforeach_macro() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f56(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f57(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsein_keyword() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f58(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f59(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecolon() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f60(s1);\n if (s2) {\n s2 = undefined;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f61(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseEOL() {\n var s0, s1;\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$e0); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = undefined;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n\n //\n // These are compatability functions used when running in the browser\n //\n // Check if the `options` object has the functions that we need.\n // If not, try to add them\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) =>\n node.type === \"string\" && node.content === char,\n isOperation: (node) =>\n node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node) =>\n node.type === \"whitespace\" || node.type === \"parbreak\",\n isSameLineComment: (node) =>\n node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) =>\n node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n isGroup: (node) => node.type === \"group\",\n isMacro: (node, name) =>\n node.type === \"macro\" && node.content === name,\n isAnyMacro: (node) => node.type === \"macro\",\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})()\n", "// This file needs to be here because typescript does not know how to use babel's transpiler\n// to directly load Pegjs grammars.\n// @ts-nocheck\nimport _LatexPegParser from \"../grammars/latex.pegjs\";\nimport _AlignEnvironmentPegParser from \"../grammars/align-environment.pegjs\";\nimport _ArgSpecPegParser from \"../grammars/xparse-argspec.pegjs\";\nimport _PgfkeysPegParser from \"../grammars/pgfkeys.pegjs\";\nimport _MacroSubstitutionPegParser from \"../grammars/macro-substitutions.pegjs\";\nimport _LigaturesPegParser from \"../grammars/ligatures.pegjs\";\nimport _XColorPegParser from \"../grammars/xcolor-expressions.pegjs\";\nimport _TabularPegParser from \"../grammars/tabular-spec.pegjs\";\nimport _SystemePegParser from \"../grammars/systeme-environment.pegjs\";\nimport _GluePegParser from \"../grammars/tex-glue.pegjs\";\nimport _TikzPegParser from \"../grammars/tikz.pegjs\";\n\ntype PegParser = {\n parse: (input: string | unknown[], options?: unknown) => any;\n SyntaxError: (\n message: string,\n expected: string,\n found: unknown,\n location: unknown\n ) => unknown;\n};\n\nconst LatexPegParser = _LatexPegParser as PegParser;\nconst AlignEnvironmentPegParser = _AlignEnvironmentPegParser as PegParser;\nconst ArgSpecPegParser = _ArgSpecPegParser as PegParser;\nconst PgfkeysPegParser = _PgfkeysPegParser as PegParser;\nconst MacroSubstitutionPegParser = _MacroSubstitutionPegParser as PegParser;\nconst LigaturesPegParser = _LigaturesPegParser as PegParser;\nconst XColorPegParser = _XColorPegParser as PegParser;\nconst TabularPegParser = _TabularPegParser as PegParser;\nconst SystemePegParser = _SystemePegParser as PegParser;\nconst GluePegParser = _GluePegParser as PegParser;\nconst TikzPegParser = _TikzPegParser as PegParser;\n\nexport {\n LatexPegParser,\n AlignEnvironmentPegParser,\n ArgSpecPegParser,\n PgfkeysPegParser,\n MacroSubstitutionPegParser,\n LigaturesPegParser,\n XColorPegParser,\n TabularPegParser,\n SystemePegParser,\n GluePegParser,\n TikzPegParser,\n};\n", "import { ArgSpecPegParser as PegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as ArgSpec from \"./argspec-types\";\n\n/**\n * Produce a string containing any decorators for the argspec node.\n * For example, `!` in front of a node means \"don't accept leading whitespace\"\n */\nfunction getDecorators(node: ArgSpec.Node): string {\n let ret = \"\";\n if ((node as ArgSpec.LeadingWhitespace).noLeadingWhitespace) {\n ret += \"!\";\n }\n return ret;\n}\n\n/**\n * Print an `xparse` argument specification AST\n * to a string.\n */\nexport function printRaw(node: ArgSpec.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 const decorators = getDecorators(node);\n const defaultArg = (node as ArgSpec.DefaultArgument).defaultArg\n ? printRaw((node as ArgSpec.DefaultArgument).defaultArg)\n : \"\";\n let spec = decorators;\n\n const type = node.type;\n switch (type) {\n case \"body\":\n return decorators + \"b\";\n case \"optionalStar\":\n return decorators + \"s\";\n case \"optionalToken\":\n return spec + \"t\" + node.token;\n case \"optional\":\n // [...] is the default enclosure for optional arguments\n if (node.openBrace === \"[\" && node.closeBrace === \"]\") {\n spec += node.defaultArg ? \"O\" : \"o\";\n } else {\n spec += node.defaultArg ? \"D\" : \"d\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"mandatory\":\n // {...} is the default enclosure for mandatory arguments\n if (node.openBrace === \"{\" && node.closeBrace === \"}\") {\n spec += \"m\";\n } else {\n spec += node.defaultArg ? \"R\" : \"r\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"embellishment\":\n spec += node.defaultArg ? \"E\" : \"e\";\n return (\n spec +\n \"{\" +\n printRaw(node.embellishmentTokens) +\n \"}\" +\n defaultArg\n );\n case \"verbatim\":\n return spec + \"v\" + node.openBrace;\n case \"group\":\n return spec + \"{\" + printRaw(node.content) + \"}\";\n case \"until\": {\n const stopTokens = printRaw(node.stopTokens);\n return stopTokens.length > 1 || stopTokens[0] === \" \"\n ? `u{${stopTokens}}`\n : `u${stopTokens}`;\n }\n default:\n const neverType: never = type;\n console.warn(`Unknown node type \"${neverType}\" for node`, node);\n return \"\";\n }\n}\n\nconst parseCache: { [argStr: string]: ArgSpec.Node[] } = {};\n\n/**\n * Parse an `xparse` argument specification string to an AST.\n * This function caches results. Don't mutate the returned AST!\n *\n * @param {string} [str=\"\"] - LaTeX string input\n * @returns - AST for LaTeX string\n */\nexport function parse(str = \"\"): ArgSpec.Node[] {\n parseCache[str] = parseCache[str] || PegParser.parse(str);\n return parseCache[str];\n}\n", "export type Ast = Node[] | Node;\nexport type Node =\n | Optional\n | Mandatory\n | Verbatim\n | Body\n | Group\n | Until\n | string;\ntype Optional = OptionalArg | OptionalStar | OptionalToken | Embellishment;\ninterface AstNode {\n type: string;\n}\ninterface Arg extends AstNode {\n openBrace: string;\n closeBrace: string;\n}\nexport interface LeadingWhitespace {\n noLeadingWhitespace: boolean | undefined;\n}\nexport interface DefaultArgument {\n defaultArg: Group;\n}\ninterface Verbatim extends Arg {\n type: \"verbatim\";\n}\ninterface OptionalArg extends LeadingWhitespace, DefaultArgument, Arg {\n type: \"optional\";\n}\ninterface OptionalStar extends LeadingWhitespace, AstNode {\n type: \"optionalStar\";\n}\ninterface OptionalToken extends LeadingWhitespace, AstNode {\n type: \"optionalToken\";\n token: string;\n}\ninterface Embellishment extends DefaultArgument, AstNode {\n type: \"embellishment\";\n embellishmentTokens: string[];\n}\ninterface Mandatory extends LeadingWhitespace, DefaultArgument, Arg {\n type: \"mandatory\";\n}\ninterface Group extends AstNode {\n type: \"group\";\n content: (Group | string)[];\n}\ninterface Body extends AstNode {\n type: \"body\";\n}\ninterface Until extends AstNode {\n type: \"until\";\n stopTokens: string[];\n}\n", "import type * as Ast from \"@unified-latex/unified-latex-types\";\n\ntype CoercibleNode = string | Ast.Node;\ntype CoercibleArgument = null | CoercibleNode | Ast.Argument;\ntype MacroSpecialOptions = {\n escapeToken?: string;\n};\ntype ArgumentsSpecialOptions = {\n braces?: string;\n defaultOpenMark?: string;\n defaultCloseMark?: string;\n};\ntype ArgumentSpecialOptions = {\n braces?: string;\n openMark?: string;\n closeMark?: string;\n};\n\nfunction normalizeNode(node: CoercibleNode): Ast.Node {\n if (typeof node === \"string\") {\n return s(node);\n }\n return node;\n}\n\nfunction normalizeArgument(\n arg: CoercibleArgument,\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument {\n if (arg == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof arg === \"string\") {\n return {\n type: \"argument\",\n openMark,\n closeMark,\n content: [s(arg)],\n };\n }\n if (arg.type === \"argument\") {\n return arg;\n }\n return { type: \"argument\", openMark, closeMark, content: [arg] };\n}\n\nfunction normalizeArgumentsList(\n args?: CoercibleArgument | CoercibleArgument[],\n openMark = \"{\",\n closeMark = \"}\"\n): Ast.Argument[] {\n if (args == null) {\n return [];\n }\n if (Array.isArray(args)) {\n return args.map((arg) => normalizeArgument(arg, openMark, closeMark));\n }\n return [normalizeArgument(args, openMark, closeMark)];\n}\n\ntype BracesPair = { openMark: string; closeMark: string };\nconst BRACES_MAP: Record = {\n \"*\": { openMark: \"\", closeMark: \"\" },\n \"{\": { openMark: \"{\", closeMark: \"}\" },\n \"[\": { openMark: \"[\", closeMark: \"]\" },\n \"(\": { openMark: \"(\", closeMark: \")\" },\n \"<\": { openMark: \"<\", closeMark: \">\" },\n};\nconst CLOSE_BRACES = new Set(\n Object.values(BRACES_MAP)\n .map((x) => x.closeMark)\n .filter((x) => x)\n);\n\n/**\n * Turn a braces signature into an array of braces.\n */\nfunction bracesToOpenAndCloseMarks(braces: string): BracesPair[] {\n const ret: BracesPair[] = [];\n\n for (const char of braces.split(\"\")) {\n if (CLOSE_BRACES.has(char)) {\n continue;\n }\n const braces = BRACES_MAP[char];\n if (braces == null) {\n throw new Error(`Unknown open/close mark type \"${char}\"`);\n }\n braces;\n ret.push(braces);\n }\n\n return ret;\n}\n\n/**\n * Create an Argument list. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * args([\"a\", \"b\"], { braces: \"[]{}\" });\n * ```\n * will result in arguments `[a]{b}`. Valid braces are `*`, `[`, `{`, `(`, and `<`.\n *\n * `null` may be passed as the value of an empty optional argument. If `null` is passed,\n * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the\n * contents will be set to an empty array. For example,\n * ```\n * args([null, \"b\"], { braces: \"[]{}\" });\n * ```\n * will produce the same structure as if the the first \"optional argument\" were omitted in regular parsing.\n */\nexport function args(\n args: CoercibleArgument | CoercibleArgument[],\n special?: ArgumentsSpecialOptions\n): Ast.Argument[] {\n if (!Array.isArray(args)) {\n args = [args];\n }\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces.length !== args.length) {\n throw new Error(\n `There is a difference between the number of supplied braces and the number of supplied arguments. ${args.length} supplied with braces signature ${special.braces}`\n );\n }\n return args.map((arg, i) =>\n normalizeArgument(arg, braces[i].openMark, braces[i].closeMark)\n );\n }\n\n const openMark = special?.defaultOpenMark ?? \"{\";\n const closeMark = special?.defaultCloseMark ?? \"}\";\n return normalizeArgumentsList(args, openMark, closeMark);\n}\n\n/**\n * Create an Argument. `special.braces` can optionally specify\n * the signature of the open/close marks that each argument uses. For example\n * ```\n * arg(\"a\", { braces: \"[]\" });\n * ```\n * will result in arguments `[a]`. Valid braces are `*`, `[`, `{`, `<`, and `(`.\n *\n * `null` may be passed as the value of an empty optional argument. If `null` is passed,\n * the `openBrace` and `closeBrace` of the argument will be set to empty strings and the\n * contents will be set to an empty array. For example,\n * ```\n * args([null, \"b\"], { braces: \"[]{}\" });\n * ```\n * will produce the same structure as if the the first \"optional argument\" were omitted in regular parsing.\n */\nexport function arg(\n args: CoercibleArgument | Ast.Node[],\n special?: ArgumentSpecialOptions\n): Ast.Argument {\n if (args == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof args === \"string\") {\n args = s(args);\n }\n if (!Array.isArray(args) && args.type === \"argument\") {\n return args;\n }\n\n let openMark = special?.openMark ?? \"{\";\n let closeMark = special?.closeMark ?? \"}\";\n if (special?.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces[0]) {\n openMark = braces[0].openMark;\n closeMark = braces[0].closeMark;\n }\n }\n\n if (!Array.isArray(args)) {\n args = [args];\n }\n\n return { type: \"argument\", content: args, openMark, closeMark };\n}\n\n/**\n * Create a Macro with the given `name`. The macro\n * may be followed by any number of arguments.\n */\nexport function m(\n name: string,\n marcoArgs?: CoercibleArgument | CoercibleArgument[],\n special?: MacroSpecialOptions\n): Ast.Macro {\n const args = normalizeArgumentsList(marcoArgs);\n const escapeToken = special?.escapeToken;\n const ret: Ast.Macro = { type: \"macro\", content: name };\n\n if (args.length > 0) {\n ret.args = args;\n }\n if (escapeToken != null) {\n ret.escapeToken = escapeToken;\n }\n\n return ret;\n}\n\n/**\n * Create a String node from `value`\n */\nexport function s(value: string | Ast.String): Ast.String {\n if (typeof value === \"string\") {\n return { type: \"string\", content: value };\n }\n return value;\n}\n\n/**\n * Create an Environment node.\n */\nexport function env(\n name: string,\n body: CoercibleNode | CoercibleNode[],\n envArgs?: CoercibleArgument | CoercibleArgument[],\n special?: unknown\n): Ast.Environment {\n if (!Array.isArray(body)) {\n body = [body];\n }\n const args = normalizeArgumentsList(envArgs, \"[\", \"]\");\n const ret: Ast.Environment = {\n type: \"environment\",\n env: name,\n content: body.map(normalizeNode),\n };\n if (args.length > 0) {\n ret.args = args;\n }\n\n return ret;\n}\n\n/**\n * Whitespace node.\n */\nexport const SP: Ast.Whitespace = { type: \"whitespace\" };\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Scan `nodes` looking for the first occurrence of `token`.\n * If `options.onlySkipWhitespaceAndComments==true`, then the scan\n * will only skip whitespace/comment nodes.\n */\nexport function scan(\n nodes: (Ast.Node | Ast.Argument)[],\n token: string | Ast.Node | Ast.Argument,\n options?: {\n /**\n * Index to start scanning.\n */\n startIndex?: number;\n /**\n * If `true`, whitespace and comments will be skilled but any other\n * node that doesn't match `token` will cause the scan to terminate.\n */\n onlySkipWhitespaceAndComments?: boolean;\n /**\n * If `true`, will look inside `Ast.String` nodes to see if the string contents\n * contain `token`.\n */\n allowSubstringMatches?: boolean;\n }\n): number | null {\n const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } =\n options || {};\n if (typeof token === \"string\") {\n token = { type: \"string\", content: token } as Ast.String;\n }\n\n for (let i = startIndex || 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.type === token.type) {\n switch (node.type) {\n case \"comment\":\n case \"displaymath\":\n case \"inlinemath\":\n case \"root\":\n case \"parbreak\":\n case \"whitespace\":\n case \"verb\":\n case \"verbatim\":\n case \"group\":\n return i;\n case \"macro\":\n if (node.content === (token as Ast.Macro).content) {\n return i;\n }\n break;\n case \"environment\":\n case \"mathenv\":\n if (\n printRaw(node.env) ===\n printRaw((token as Ast.Environment).env)\n ) {\n return i;\n }\n break;\n case \"string\":\n if (node.content === (token as Ast.String).content) {\n return i;\n }\n if (\n allowSubstringMatches &&\n node.content.indexOf((token as Ast.String).content) >= 0\n ) {\n return i;\n }\n break;\n }\n }\n if (\n onlySkipWhitespaceAndComments &&\n !match.whitespace(node) &&\n !match.comment(node)\n ) {\n return null;\n }\n }\n\n return null;\n}\n", "import Trie from \"trie-prefix-tree\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nexport { Trie };\n\n/**\n * Efficiently search for a large number of strings using a prefix-tree.\n * The longest match is returned.\n *\n * @param options.startIndex the index to start scanning at. Defaults to 0.\n * @param options.matchSubstrings whether to allow matching only part of a substring.\n * @param options.assumeOneCharStrings assume that all strings are one character long (for example, like they are in math mode)\n */\nexport function prefixMatch(\n nodes: Ast.Node[],\n prefixes: string | string[] | ReturnType,\n options?: {\n startIndex?: number;\n matchSubstrings?: boolean;\n assumeOneCharStrings?: boolean;\n }\n): {\n match: string;\n endNodeIndex: number;\n endNodePartialMatch: string | null;\n} | null {\n const {\n startIndex = 0,\n matchSubstrings = false,\n assumeOneCharStrings = false,\n } = options || {};\n\n if (typeof prefixes === \"string\") {\n prefixes = [prefixes];\n }\n if (Array.isArray(prefixes)) {\n prefixes = Trie(prefixes);\n }\n const prefixTree = prefixes;\n\n const history = {\n lastPrefix: \"\",\n lastWord: \"\",\n index: startIndex,\n partialMatch: \"\",\n };\n\n /**\n * Try to match the next character. If it matches,\n * record it properly in the `history` object.\n */\n function tryToMatchNextChar(char: string, index: number): boolean {\n let ret = false;\n if (prefixTree.isPrefix(history.lastPrefix + char)) {\n history.lastPrefix += char;\n history.index = index;\n ret = true;\n }\n if (prefixTree.hasWord(history.lastPrefix)) {\n history.lastWord = history.lastPrefix;\n }\n return ret;\n }\n\n // Loop through the nodes looking for the longest prefix match\n for (let i = 0; startIndex + i < nodes.length; i++) {\n const node = nodes[startIndex + i];\n if (!match.string(node)) {\n break;\n }\n if (assumeOneCharStrings && node.content.length !== 1) {\n break;\n }\n if (matchSubstrings) {\n // We need to test letter-by-letter for substring matches\n let fullMatch = true;\n history.partialMatch = \"\";\n for (let j = 0; j < node.content.length; j++) {\n const char = node.content[j];\n if (tryToMatchNextChar(char, startIndex + i)) {\n history.partialMatch += char;\n } else {\n fullMatch = false;\n break;\n }\n }\n if (fullMatch) {\n history.partialMatch = \"\";\n } else {\n break;\n }\n } else {\n if (!tryToMatchNextChar(node.content, startIndex + i)) {\n break;\n }\n }\n }\n\n return history.lastWord\n ? {\n match: history.lastWord,\n endNodeIndex: history.index,\n endNodePartialMatch: history.partialMatch\n ? history.partialMatch\n : null,\n }\n : null;\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Updates the `._renderInfo` property on a node to include\n * whatever has been supplied to `renderInfo`. If `renderInfo`\n * is null, no update is performed.\n *\n * *This operation mutates `node`*\n */\nexport function updateRenderInfo(\n node: Ast.Node,\n renderInfo: object | null | undefined\n) {\n if (renderInfo != null) {\n node._renderInfo = { ...(node._renderInfo || {}), ...renderInfo };\n }\n return node;\n}\n\n/**\n * Removes any `_renderInfo` and `position` tags present in the AST. This\n * operation is _destructive_.\n */\nexport function trimRenderInfo(ast: T) {\n visit(ast, (node) => {\n delete node._renderInfo;\n delete node.position;\n });\n return ast;\n}\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 help modify the `_renderInfo` of a `unified-latex` Abstract Syntax Tree (AST).\n *\n * ## When should I use this?\n *\n * If you want to compare the structure of an AST without position information or extra information\n * that is kept for pretty-printing, these functions can be used to remove/modify the `_renderInfo`\n * of an `Ast.Node`.\n */\n", "import {\n ArgSpecAst as ArgSpec,\n parse as parseArgspec,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { arg } from \"@unified-latex/unified-latex-builder\";\nimport { gobbleSingleArgument } from \"./gobble-single-argument\";\nimport { ArgumentParser } from \"@unified-latex/unified-latex-types\";\n\n/**\n * Gobbles an argument of whose type is specified\n * by `argSpec` starting at the position `startPos`. If an argument couldn't be found,\n * `argument` will be `null`.\n */\nexport function gobbleArguments(\n nodes: Ast.Node[],\n argSpec: string | ArgSpec.Node[] | ArgumentParser,\n startPos = 0\n): {\n args: Ast.Argument[];\n nodesRemoved: number;\n} {\n if (typeof argSpec === \"function\") {\n return argSpec(nodes, startPos);\n }\n\n if (typeof argSpec === \"string\") {\n argSpec = parseArgspec(argSpec);\n }\n\n const args: Ast.Argument[] = [];\n let nodesRemoved = 0;\n for (const spec of argSpec) {\n const { argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n spec,\n startPos\n );\n if (argument) {\n args.push(argument);\n nodesRemoved += removed;\n } else {\n args.push(arg([], { openMark: \"\", closeMark: \"\" }));\n }\n }\n\n return { args, nodesRemoved };\n}\n", "import { ArgSpecAst as ArgSpec } from \"@unified-latex/unified-latex-util-argspec\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { arg } from \"@unified-latex/unified-latex-builder\";\n\n/**\n * Gobbles an argument of whose type is specified\n * by `argSpec` starting at the position `startPos`. If an argument couldn't be found,\n * `argument` will be `null`.\n */\nexport function gobbleSingleArgument(\n nodes: Ast.Node[],\n argSpec: ArgSpec.Node,\n startPos = 0\n): {\n argument: Ast.Argument | null;\n nodesRemoved: number;\n} {\n if (typeof argSpec === \"string\" || !argSpec.type) {\n throw new Error(\n `argSpec must be an already-parsed argument specification, not \"${JSON.stringify(\n argSpec\n )}\"`\n );\n }\n\n let argument: Ast.Argument | null = null;\n\n let currPos = startPos;\n\n // Gobble whitespace from `currPos` onward, updating `currPos`.\n // If `argSpec` specifies leading whitespace is not allowed,\n // this function does nothing.\n const gobbleWhitespace = (argSpec as ArgSpec.LeadingWhitespace)\n .noLeadingWhitespace\n ? () => {}\n : () => {\n while (currPos < nodes.length) {\n if (!match.whitespace(nodes[currPos])) {\n break;\n }\n currPos++;\n }\n };\n\n const openMark: string = (argSpec as any).openBrace || \"\";\n const closeMark: string = (argSpec as any).closeBrace || \"\";\n\n // Only mandatory arguments can be wrapped in {...}.\n // Since we already parse such things as groups, we need to\n // check the open and closing symbols to see if we allow for\n // groups to be accepted as arguments\n const acceptGroup =\n (argSpec.type === \"mandatory\" || argSpec.type === \"optional\") &&\n openMark === \"{\" &&\n closeMark === \"}\";\n\n // Find the position of the open brace and the closing brace.\n // The position(s) are null if the brace isn't found.\n function findBracePositions(): [number | null, number | null] {\n let openMarkPos: number | null = null;\n if (openMark) {\n openMarkPos = nodes.findIndex(\n (node, i) => i >= currPos && match.string(node, openMark)\n );\n if (openMarkPos < currPos) {\n openMarkPos = null;\n }\n }\n let closeMarkPos: number | null = null;\n if (openMarkPos != null) {\n closeMarkPos = nodes.findIndex(\n (node, i) =>\n i >= (openMarkPos as number) + 1 &&\n match.string(node, closeMark)\n );\n if (closeMarkPos < openMarkPos + 1) {\n closeMarkPos = null;\n }\n }\n return [openMarkPos, closeMarkPos];\n }\n\n // Do the actual matching\n gobbleWhitespace();\n const currNode = nodes[currPos];\n if (\n currNode == null ||\n match.comment(currNode) ||\n match.parbreak(currNode)\n ) {\n return { argument, nodesRemoved: 0 };\n }\n\n switch (argSpec.type) {\n case \"mandatory\":\n if (acceptGroup) {\n // We have already gobbled whitespace, so at this point, `currNode`\n // is either an openMark or we don't have an optional argument.\n let content: Ast.Node[] = [currNode];\n if (match.group(currNode)) {\n // Unwrap a group if there is one.\n content = currNode.content;\n }\n argument = arg(content, {\n openMark,\n closeMark,\n });\n currPos++;\n break;\n }\n // NOTE: Fallthrough is on purpose.\n // Matching a mandatory argument and an optional argument is the same for our purposes\n // because we're not going to fail to parse because of a missing argument.\n case \"optional\":\n // It is possible that an optional argument accepts a group if its open/close braces are `{}`\n if (acceptGroup && match.group(currNode)) {\n argument = arg(currNode.content, {\n openMark,\n closeMark,\n });\n currPos++;\n break;\n }\n if (match.string(currNode, openMark)) {\n // If we're here, we have custom braces to match\n const [openMarkPos, closeMarkPos] = findBracePositions();\n if (openMarkPos != null && closeMarkPos != null) {\n argument = arg(nodes.slice(openMarkPos + 1, closeMarkPos), {\n openMark,\n closeMark,\n });\n currPos = closeMarkPos + 1;\n break;\n }\n }\n break;\n case \"optionalStar\":\n case \"optionalToken\":\n if (\n match.string(\n currNode,\n argSpec.type === \"optionalStar\" ? \"*\" : argSpec.token\n )\n ) {\n argument = arg([currNode], { openMark: \"\", closeMark: \"\" });\n currPos++;\n break;\n }\n break;\n case \"until\": {\n if (argSpec.stopTokens.length > 1) {\n console.warn(\n `\"until\" matches with multi-token stop conditions are not yet implemented`\n );\n break;\n }\n const rawToken = argSpec.stopTokens[0];\n const stopToken: Ast.String | Ast.Whitespace =\n rawToken === \" \"\n ? { type: \"whitespace\" }\n : { type: \"string\", content: argSpec.stopTokens[0] };\n let matchPos = scan(nodes, stopToken, {\n startIndex: startPos,\n allowSubstringMatches: true,\n });\n if (\n matchPos != null &&\n partialStringMatch(nodes[matchPos], stopToken)\n ) {\n console.warn(\n `\"until\" arguments that stop at non-punctuation symbols is not yet implemented`\n );\n break;\n }\n // If the corresponding token is not found, eat nothing;\n if (matchPos == null) {\n break;\n }\n argument = arg(nodes.slice(startPos, matchPos), {\n openMark: \"\",\n closeMark: rawToken,\n });\n currPos = matchPos;\n if (currPos < nodes.length) {\n currPos++;\n }\n break;\n }\n default:\n console.warn(\n `Don't know how to find an argument of argspec type \"${argSpec.type}\"`\n );\n }\n\n // `currPos` is has already stepped past any whitespace. However,\n // if we did not consume an argument, we don't want to consume the whitespace.\n const nodesRemoved = argument ? currPos - startPos : 0;\n nodes.splice(startPos, nodesRemoved);\n return { argument, nodesRemoved };\n}\n\n/**\n * Returns whether the presumed match \"node\" contains \"token\" as a strict\n * substring.\n */\nfunction partialStringMatch(node: Ast.Node, token: Ast.Node): boolean {\n return (\n match.anyString(node) &&\n match.anyString(token) &&\n node.content.length > token.content.length\n );\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { MacroInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { gobbleArguments } from \"./gobble-arguments\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Search (in a right-associative way) through the array for instances of\n * `macros` and attach arguments to the macro. Argument signatures are\n * specified by `macros[].signature`.\n *\n * Info stored in `macros[].renderInfo` will be attached to the node\n * with attribute `_renderInfo`.\n */\nexport function attachMacroArgsInArray(\n nodes: Ast.Node[],\n macros: MacroInfoRecord\n): void {\n // Some preliminaries that are only used if `ast` is an array.\n let currIndex: number;\n\n /**\n * Determine whether `node` matches one of the macros in `macros`.\n * Care is taken when matching because not all macros have\n * `\\` as their escape token.\n */\n const isRelevantMacro = match.createMacroMatcher(macros);\n\n function gobbleUntilMacro() {\n // Step backwards until we find the required macro\n while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) {\n currIndex--;\n }\n }\n\n // Search for an occurrence of any of the macros `macroName` and its arguments.\n // Some macros are right-associative, so we should start searching from\n // the right\n currIndex = nodes.length - 1;\n while (currIndex >= 0) {\n gobbleUntilMacro();\n if (currIndex < 0) {\n // We didn't find an occurrence of the macro\n return;\n }\n\n // Store the currIndex, which is where the macro is. Start searching\n // for its arguments at the next index.\n const macroIndex = currIndex;\n const macro = nodes[macroIndex] as Ast.Macro;\n const macroName = macro.content;\n const macroInfo = macros[macroName];\n\n // Add `._renderInfo` if we have any\n updateRenderInfo(macro, macroInfo.renderInfo);\n\n const signatureOrParser = macroInfo.argumentParser || macroInfo.signature\n\n // If the macro has no signature, it shouldn't consume any arguments. Just move along.\n // Note: It is important that this happens *after* `updateRenderInfo` is called, since\n // we still want to update the render info even if there are no args.\n if (signatureOrParser == null) {\n currIndex--;\n continue;\n }\n\n // We don't want to search for macro arguments if we already\n // found them. If the macro has arguments, we assume that\n // they've already been attached\n if (macro.args != null) {\n currIndex = macroIndex - 1;\n continue;\n }\n\n // `currIndex` is the position of the macro. We want to start\n // looking for the arguments right after the macro\n currIndex++;\n const { args } = gobbleArguments(nodes, signatureOrParser, currIndex);\n macro.args = args;\n // After we've gobbled the arguments, set\n // ourselves one space before the macro so we can continue.\n currIndex = macroIndex - 1;\n }\n}\n\n/**\n * Recursively search for and attach the arguments for a\n * particular macro to its AST node. `macros` should\n * contain a `signature` property which specifies the arguments\n * signature in xparse syntax.\n */\nexport function attachMacroArgs(tree: Ast.Ast, macros: MacroInfoRecord) {\n visit(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n", "import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { MacroInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { attachMacroArgsInArray } from \"./attach-arguments\";\n\ntype PluginOptions = { macros: MacroInfoRecord } | undefined;\n\n/**\n * Unified plugin to attach macro arguments to the macros specified via the `macros`\n * option.\n *\n * @param macros An object whose keys are macro names and values contains information about the macro and its argument signature.\n */\nexport const unifiedLatexAttachMacroArguments: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexAttachMacroArguments(options) {\n return (tree) => {\n const { macros = {} } = options || {};\n if (Object.keys(macros).length === 0) {\n console.warn(\n \"Attempting to attach macro arguments but no macros are specified.\"\n );\n }\n visit(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Returns the content of `args` for a macro or environment as an array. If an argument\n * was omitted (e.g., because it was an optional arg that wasn't included), then `null` is returned.\n */\nexport function getArgsContent(\n node: Ast.Macro | Ast.Environment\n): (Ast.Node[] | null)[] {\n if (!Array.isArray(node.args)) {\n return [];\n }\n\n return node.args.map((arg) => {\n if (arg.openMark === \"\" && arg.content.length === 0) {\n return null;\n }\n return arg.content;\n });\n}\n\n/**\n * Returns the content of `args` for a macro or environment as an object whose keys are the \"names\"\n * of each argument. These names of the arguments must be specified in the `_renderInfo` prop. If `_renderInfo`\n * does not contain a `namedArguments` array, then an empty object will be returned.\n *\n * @namedArgumentsFallback - If `_renderInfo.namedArguments` is not provided, `namedArgumentsFallback` is ued.\n */\nexport function getNamedArgsContent(\n node: Ast.Macro | Ast.Environment,\n namedArgumentsFallback: readonly (string | null)[] = []\n): Record {\n const names = node._renderInfo?.namedArguments || namedArgumentsFallback;\n\n if (\n !Array.isArray(node.args) ||\n !Array.isArray(names) ||\n names.length === 0\n ) {\n return {};\n }\n const ret: Record = {};\n\n node.args.forEach((arg, i) => {\n const name = names[i];\n if (name == null) {\n // If a null name was given, it shouldn't be listed as a named argument.\n return;\n }\n let val: Ast.Node[] | null = arg.content;\n if (arg.openMark === \"\" && arg.content.length === 0) {\n val = null;\n }\n ret[name] = val;\n });\n\n return ret;\n}\n", "import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n parse as parseArgspec,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\nconst OPTIONAL_ARGUMENT_ARG_SPEC = parseArgspec(\"o\")[0];\n\nfunction blankArg() {\n return arg([], { openMark: \"\", closeMark: \"\" });\n}\n\n/**\n * Find the arguments of a tikz command. Many tikz commands accept either\n * the a group as their only argument, or they scan their arguments until the first\n * `;` is found.\n *\n * This behavior cannot be achieved via a standard xparse spec.\n */\nexport const tikzCommandArgumentParser: ArgumentParser = (nodes, startPos) => {\n const origStartPos = startPos;\n let pos = startPos;\n let nodesRemoved = 0;\n\n const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos);\n let animationArg = blankArg();\n if (cursorPosAfterAnimations !== pos) {\n const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos);\n trim(argContent);\n animationArg = arg(argContent, {\n openMark: \" \",\n closeMark: \" \",\n });\n }\n nodesRemoved += cursorPosAfterAnimations - pos;\n\n const {\n argument: _optionalArgument,\n nodesRemoved: optionalArgumentNodesRemoved,\n } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos);\n nodesRemoved += optionalArgumentNodesRemoved;\n const optionalArg = _optionalArgument || blankArg();\n\n // Eat whitespace\n while (match.whitespace(nodes[pos])) {\n pos++;\n }\n const firstNode = nodes[pos];\n\n // If we're past the end of the array, give up.\n if (!firstNode) {\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n }\n\n // If we're a group, grab the contents and call it good.\n if (match.group(firstNode)) {\n const args = [animationArg, optionalArg, arg(firstNode.content)];\n nodes.splice(origStartPos, pos - origStartPos + 1);\n return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved };\n }\n\n // No group, so scan for a semicolon.\n const semicolonPosition = scan(nodes, \";\", { startIndex: pos });\n if (semicolonPosition != null) {\n const argNodes = nodes.splice(\n origStartPos,\n semicolonPosition - origStartPos + 1\n );\n trim(argNodes);\n const args = [animationArg, optionalArg, arg(argNodes)];\n return {\n args,\n nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved,\n };\n }\n\n // If there was no semicolon, give up.\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n};\n\n/**\n * Find the next index after all animation specs. If no animation specs are present,\n * return `startPos`.\n *\n * An animation spec looks like\n * ```\n * :rotate = { 0s=\"0\", 2s=\"90\", begin on=click }\n * ```\n * Any number can be listed. They start with a colon and have an equals sign followed by a group.\n */\nfunction eatAllAnimationSpecs(nodes: Ast.Node[], startPos: number): number {\n const colonPos = scan(nodes, \":\", {\n startIndex: startPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n\n if (!colonPos) {\n return startPos;\n }\n\n let lastMatchPos = startPos;\n let i = colonPos + 1;\n for (; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.string(node, \"[\")) {\n // XXX As per the tikz manual, we stop scanning if we find an open square brace.\n break;\n }\n if (match.string(node, \"=\")) {\n i++;\n // Look for a group next\n while (match.whitespace(nodes[i]) || match.comment(nodes[i])) {\n i++;\n }\n if (!match.group(nodes[i])) {\n break;\n }\n // We have a match!\n lastMatchPos = i + 1;\n\n // Start the process again\n const colonPos = scan(nodes, \":\", {\n startIndex: lastMatchPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n if (colonPos == null) {\n break;\n }\n i = colonPos + 1;\n }\n }\n\n return lastMatchPos;\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as TikzSpec from \"./types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { TikzPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\ntype TikzParseOptions = {\n startRule?: \"path_spec\" | \"foreach_body\";\n};\n\nfunction createMatchers() {\n return {\n isChar: match.string,\n isTerminal: (node: any) => match.string(node, \";\"),\n isOperation: (node: any) =>\n match.anyString(node) && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node: any) =>\n match.whitespace(node) || match.parbreak(node),\n isComment: match.comment,\n isGroup: match.group,\n isMacro: match.macro,\n isAnyMacro: match.anyMacro,\n };\n}\n\nconst matchers = createMatchers();\n\n/**\n * Parse the contents of the `\\systeme{...}` macro\n */\nexport function parse(\n ast: Ast.Node[],\n options?: Options\n): Options extends { startRule: infer R }\n ? R extends \"path_spec\"\n ? TikzSpec.PathSpec\n : TikzSpec.ForeachBody\n : TikzSpec.PathSpec {\n const { startRule = \"path_spec\" } = options || {};\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 TikzPegParser.parse(ast, {\n ...matchers,\n startRule,\n });\n}\n", "import { PgfkeysPegParser } 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 { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\n\n// The types returned by the grammar\n\nexport type Item = {\n itemParts?: Ast.Node[][];\n trailingComment: Ast.Comment | null;\n trailingComma?: boolean;\n leadingParbreak?: boolean;\n};\n\nexport function createMatchers() {\n return {\n isChar: (node: Ast.Node, char: string) => match.string(node, char),\n isComma: (node: Ast.Node) => match.string(node, \",\"),\n isEquals: (node: Ast.Node) => match.string(node, \"=\"),\n isWhitespace: (node: Ast.Node) => match.whitespace(node),\n isParbreak: (node: Ast.Node) => match.parbreak(node),\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the arguments of a Pgfkeys macro. The `ast`\n * is expected to be a comma separated list of `Item`s.\n * Each item can have 0 or more item parts, which are separated\n * by \"=\". If `itemPart` is undefined,\n *\n * If `options.allowParenGroups === true`, then commas that occur inside groups of parenthesis\n * will not be parsed as separators. This is useful for parsing tikz `\\foreach` loops.\n */\nexport function parsePgfkeys(\n ast: Ast.Node[],\n options?: { allowParenGroups: boolean }\n): Item[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\n const { allowParenGroups = false } = options || {};\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 PgfkeysPegParser.parse(ast, {\n ...createMatchers(),\n allowParenGroups,\n }) as Item[];\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parsePgfkeys } from \"./pgfkeys-parser\";\n\n/**\n * Parse `arg` as pgfkeys and return a JavaScript object with the results.\n * The keys will be normalized to strings and the values will be arrays of nodes.\n */\nexport function pgfkeysArgToObject(\n arg: Ast.Argument | Ast.Node[]\n): Record {\n function parseFront(nodes: Ast.Node[]): string {\n return printRaw(nodes);\n }\n function parseBack(nodes: Ast.Node[] | undefined): Ast.Node[] {\n if (!nodes) {\n return [];\n }\n // If the only element is a group, we unwrap it\n if (nodes.length === 1 && match.group(nodes[0])) {\n return nodes[0].content;\n }\n return nodes;\n }\n\n let nodeList: Ast.Node[];\n if (match.argument(arg)) {\n nodeList = arg.content;\n } else {\n nodeList = arg;\n }\n const parsedArgs = parsePgfkeys(nodeList);\n return Object.fromEntries(\n parsedArgs\n .filter((part) => part.itemParts)\n .map((part) => [\n parseFront(part.itemParts![0]),\n parseBack(part.itemParts![1]),\n ])\n );\n}\n", "import { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n hardline,\n join,\n breakParent,\n line,\n group,\n indent,\n softline,\n} from \"./common\";\nimport {\n linebreak,\n printRaw,\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parsePgfkeys } from \"@unified-latex/unified-latex-util-pgfkeys\";\n\n/**\n * Format a sequence of Pgfkeys key-value pairs. `nodes` will be parsed\n * by a grammar defining Pgfkeys\n */\nexport function printArgumentPgfkeys(\n nodes: Ast.Node[],\n options: {\n openMark: string;\n closeMark: string;\n leadingComment?: Ast.Comment | null | undefined;\n allowParenGroups?: boolean;\n }\n): Doc {\n const { allowParenGroups = false } = options;\n const parsed = parsePgfkeys(nodes, { allowParenGroups });\n\n const content: Doc[] = [];\n for (const part of parsed) {\n const isLastItem = part === parsed[parsed.length - 1];\n\n if (part.itemParts) {\n // parts are printed using `printRaw`, `hardline` is used in place\n // of \"\\n\"\n const parts = part.itemParts.map((node) =>\n printRaw(node, { asArray: true }).map((token) =>\n token === linebreak ? hardline : token\n )\n );\n const row = join(\"=\", parts);\n content.push(row);\n if (part.trailingComma) {\n content.push(\",\");\n }\n }\n if (part.trailingComment) {\n const leadingContent: Doc[] = part.itemParts ? [\" \"] : [];\n if (part.leadingParbreak) {\n // We preserve parbreaks before comments, so if we have\n // one, insert an extra hardline\n leadingContent.push(hardline);\n }\n\n content.push(\n ...leadingContent,\n // We're carefully and manually controlling the newlines,\n // so print the comment directly without any newlines\n \"%\",\n part.trailingComment.content,\n breakParent\n );\n }\n\n if (!isLastItem) {\n content.push(line);\n }\n }\n\n let leadingComment: Doc[] = [\"\"];\n if (options.leadingComment) {\n if (options.leadingComment.leadingWhitespace) {\n leadingComment.push(\" \");\n }\n leadingComment.push(\"%\" + options.leadingComment.content, breakParent);\n }\n\n return group([\n options.openMark,\n ...leadingComment,\n // If there is no content, we don't want to push an extra `softline`.\n // This matters because the braces group could still be broken by `leadingComment`\n content.length > 0 ? indent([softline, ...content]) : \"\",\n softline,\n options.closeMark,\n ]);\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport {\n getNodeInfo,\n formatDocArray,\n hardline,\n join,\n ifBreak,\n breakParent,\n line,\n group,\n indent,\n softline,\n fill,\n} from \"./common\";\nimport {\n printRaw,\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport {\n parse as parseTikz,\n PathSpec,\n PathSpecNode,\n printRaw as tikzPrintRaw,\n} from \"@unified-latex/unified-latex-ctan/package/tikz\";\nimport { printArgumentPgfkeys } from \"./print-argument-pgfkeys\";\n\nexport function printTikzArgument(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Argument;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const content: Doc[] = [];\n const nodes = [...node.content];\n trim(nodes);\n try {\n const tikzAst = parseTikz(nodes);\n if (tikzAst.content.length === 0) {\n content.push(\";\");\n return content;\n }\n\n const printer = new TikzArgumentPrinter(tikzAst, path, print);\n return printer.toDoc();\n } catch (e) {\n console.warn(\"Encountered error when trying to parse tikz argument\", e);\n }\n\n content.push(\";\");\n\n return content;\n}\n\n/**\n * Print a fragment of an AST to a `Doc`.\n */\nfunction printFragment(\n fragment: Ast.Node | Ast.Argument,\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc\n): Doc {\n const tmpKey = Symbol();\n const currNode = path.getNode();\n if (!currNode) {\n throw new Error(\n \"tried to print a fragment, but the current node is `null`\"\n );\n }\n (currNode as any)[tmpKey] = fragment;\n const ret = print(tmpKey);\n delete (currNode as any)[tmpKey];\n return ret;\n}\n\n/**\n * Turn an item in a tikz PathSpec into a Doc for printing.\n */\nfunction printTikzPathSpecNode(\n node: PathSpecNode,\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc\n): Doc {\n switch (node.type) {\n case \"comment\":\n return printFragment(node, path, print);\n case \"unknown\":\n // `\"unknown\"` nodes contain regular AST nodes as children which couldn't be identified by the parser\n return printFragment(node.content, path, print);\n case \"coordinate\":\n return [printRaw(node.prefix), \"(\", printRaw(node.content), \")\"];\n case \"line_to\":\n return node.command;\n case \"square_brace_group\":\n return printOptionalArgs(node.content);\n case \"operation\":\n return node.content.content;\n case \"svg_operation\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n const options = node.options ? printOptionalArgs(node.options) : [];\n const rest: Doc[] = node.options\n ? [group(indent([line, printRaw(node.content)]))]\n : [\" \", printRaw(node.content)];\n return [...comments, \"svg\", options, ...rest];\n }\n case \"curve_to\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n const printedControls =\n node.controls.length > 1\n ? [\n printTikzPathSpecNode(node.controls[0], path, print),\n \" \",\n \"and\",\n line,\n printTikzPathSpecNode(node.controls[1]!, path, print),\n ]\n : [printTikzPathSpecNode(node.controls[0], path, print)];\n return [\n ...comments,\n \"..\",\n \" \",\n group(\n indent([\"controls\", line, ...printedControls, \" \", \"..\"])\n ),\n ];\n }\n case \"animation\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n\n return [\n ...comments,\n \":\",\n node.attribute,\n \" \",\n \"=\",\n \" \",\n group(\n indent([\n printArgumentPgfkeys(node.content, {\n openMark: \"{\",\n closeMark: \"}\",\n }),\n ])\n ),\n ];\n }\n case \"foreach\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n const variables = [...node.variables];\n trim(variables);\n const list =\n node.list.type === \"macro\"\n ? printFragment(node.list, path, print)\n : printArgumentPgfkeys(node.list.content, {\n openMark: \"{\",\n closeMark: \"}\",\n allowParenGroups: true,\n });\n const doc = [\n ...comments,\n printRaw(node.start),\n \" \",\n printRaw(variables),\n ];\n if (node.options) {\n doc.push(\" \", indent(printOptionalArgs(node.options)));\n }\n\n // The list, e.g. `{1,2,...,9}`\n doc.push(\" \", \"in\", \" \", group(indent(list)));\n // The loop body\n // XXX: if we are in a tikz node, whitespace doesn't matter. If we are in a regular\n // part of the document, the loop body is whitespace-sensitive\n const commandType = node.command.type;\n switch (commandType) {\n case \"foreach\":\n doc.push(\n indent([\n line,\n printTikzPathSpecNode(node.command, path, print),\n ])\n );\n break;\n case \"macro\":\n doc.push(\n indent([line, printFragment(node.command, path, print)])\n );\n break;\n case \"group\": {\n const groupContent = [...node.command.content];\n trim(groupContent);\n doc.push(\n \" \",\n indent(\n group([\n \"{\",\n indent([\n softline,\n ...groupContent.map((n) =>\n printFragment(n, path, print)\n ),\n ]),\n softline,\n \"}\",\n ])\n )\n );\n break;\n }\n default:\n const invalidType: void = commandType;\n console.warn(\n `Unhandled command type when printing \"foreach\": ${invalidType}`\n );\n }\n\n return indent(doc);\n }\n }\n console.warn(\n `Encountered unknown type when trying to print tikz PathSpec: \"${\n (node as any).type\n }\"`\n );\n return [];\n}\n\nfunction printOptionalArgs(nodes: Ast.Node[]): Doc {\n return printArgumentPgfkeys(nodes, {\n openMark: \"[\",\n closeMark: \"]\",\n });\n}\n\n/**\n * Utility to turn a Tikz PathSpec into a Prettier Doc.\n */\nclass TikzArgumentPrinter {\n #path: PrettierTypes.AstPath;\n #print: PrettierTypes.RecursivePrintFunc;\n nodes: PathSpec[\"content\"];\n constructor(\n spec: PathSpec,\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc\n ) {\n this.#path = path;\n this.#print = print;\n this.nodes = [...spec.content];\n }\n\n nodeToDoc(node: PathSpecNode): Doc {\n return printTikzPathSpecNode(node, this.#path, this.#print);\n }\n\n toDoc(): Doc {\n const doc: Doc = [];\n const startArg = this.eatOptionalArg();\n if (startArg.optionalArg) {\n doc.push(\n ...startArg.comments.map((c) =>\n printFragment(c, this.#path, this.#print)\n )\n );\n doc.push(printOptionalArgs(startArg.optionalArg.content));\n }\n\n const innerDoc: Doc = [];\n doc.push(group([indent(innerDoc), \";\"]));\n let cycle = -1;\n while (this.nodes.length > 0) {\n cycle++;\n // If this is the first item being printed and the draw command has no optional\n // argument, then we force the command to start printing on the same line.\n const firstSep = cycle === 0 && !startArg.optionalArg ? \" \" : line;\n const comingUp = this.peek();\n switch (comingUp) {\n case \"short_path\": {\n const [n0, n1, n2] = this.nodes.splice(0, 3);\n // A short path does not break\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.nodeToDoc(n1),\n \" \",\n this.nodeToDoc(n2)\n );\n continue;\n }\n case \"long_path\": {\n // A long path consists of at least a node followed by a joiner\n const [n0, n1] = this.nodes.splice(0, 2);\n if (n1.type === \"operation\") {\n this.nodes.unshift(n1);\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.eatOperation()\n );\n } else {\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.nodeToDoc(n1)\n );\n }\n continue;\n }\n case \"node\":\n {\n const eatenNode = this.eatNode();\n if (eatenNode) {\n innerDoc.push(line, ...eatenNode);\n continue;\n }\n console.warn(\n \"Expected to print a tikz `node` PathSpec but couldn't find the text `node`\"\n );\n }\n continue;\n case \"operation\":\n innerDoc.push(firstSep, this.eatOperation());\n continue;\n case \"unknown\": {\n const node = this.nodes.shift()!;\n innerDoc.push(firstSep, this.nodeToDoc(node));\n continue;\n }\n }\n this.nodes.shift();\n }\n\n return doc;\n }\n\n /**\n * Look at the current node and the nodes that follow. Return what\n * \"type\" is recognized.\n */\n peek() {\n // A short path is two coordinates, joined by a line_to (with no coordinates/line_to's following).\n // If there are comments intermixed, the short path is broken.\n const [n0, n1, n2, n3] = [\n this.nodes[0],\n this.nodes[1],\n this.nodes[2],\n this.nodes[3],\n ];\n if (n0?.type === \"coordinate\" && isPathJoinOperation(n1)) {\n if (\n n2?.type === \"coordinate\" &&\n !(n3?.type === \"coordinate\" || isPathJoinOperation(n3))\n ) {\n return \"short_path\";\n }\n return \"long_path\";\n }\n if (n0?.type === \"operation\") {\n if (n0.content.content === \"node\") {\n // Nodes are a special type of operation.\n return \"node\";\n }\n return \"operation\";\n }\n\n return \"unknown\";\n }\n\n /**\n * Eat comments and an optional arg if present. If no optional\n * arg is present, do nothing.\n */\n eatOptionalArg() {\n let i = 0;\n const comments: Ast.Comment[] = [];\n let optionalArg:\n | (PathSpecNode & { type: \"square_brace_group\" })\n | null = null;\n for (; i < this.nodes.length; i++) {\n const node = this.nodes[i];\n if (node.type === \"square_brace_group\") {\n optionalArg = node;\n i++;\n break;\n }\n if (node.type === \"comment\") {\n comments.push(node);\n continue;\n }\n break;\n }\n if (optionalArg) {\n // If we grabbed an optional argument, remove it and everything\n // preceding it.\n this.nodes.splice(0, i);\n }\n return { optionalArg, comments };\n }\n\n /**\n * Eat a `type === \"operation\"` node whose contents is `\"node\"`. I.e.,\n * the type of thing that shows up in `\\path node at (1,1) {foo};`\n */\n eatNode(): Doc[] | null {\n const firstNode = this.nodes[0];\n if (\n firstNode?.type === \"operation\" &&\n firstNode.content.content === \"node\"\n ) {\n this.nodes.shift();\n } else {\n return null;\n }\n\n // From the tikz documentation:\n // \\path \u2026 node \u27E8foreach statements\u27E9 [\u27E8options\u27E9] (\u27E8name\u27E9) at(\u27E8coordinate\u27E9)\n // :\u27E8animation attribute\u27E9={\u27E8options\u27E9} {\u27E8node contents\u27E9} \u2026;\n //\n // Order of the parts of the specification.\n // Everything between \u201Cnode\u201D and the opening brace of a node is optional.\n // If there are \u27E8foreach statements\u27E9, they must come first, directly following \u201Cnode\u201D.\n // Other than that, the ordering of all the other elements of a node specification\n // (the \u27E8options\u27E9, the \u27E8name\u27E9, \u27E8coordinate\u27E9, and \u27E8animation attribute\u27E9) is arbitrary, indeed,\n // there can be multiple occurrences of any of these elements (although for the name and the\n // coordinate this makes no sense).\n\n const innerDoc: Doc = [];\n const commentBlock: Doc = [];\n const doc: Doc = [commentBlock, \"node\", group(indent(innerDoc))];\n // We now peek to see if a group `{...}` is the next thing. If so,\n // we're going to eat everything up to it and call it quits. Otherwise,\n // we bail.\n let hasNodeArgument = false;\n let shouldBail = false;\n let i = 0;\n const comments: Doc[] = [];\n const options: Doc[] = [];\n const name: Doc[] = [];\n const atLocations: Doc[] = [];\n const animations: Doc[] = [];\n let content: Doc = [];\n for (; i < this.nodes.length && !shouldBail; i++) {\n const node = this.nodes[i];\n switch (node.type) {\n case \"animation\":\n animations.push(this.nodeToDoc(node));\n continue;\n case \"comment\": {\n const comment: Ast.Comment = {\n ...node,\n leadingWhitespace: false,\n };\n comments.push(this.nodeToDoc(comment));\n continue;\n }\n case \"square_brace_group\":\n options.push(printOptionalArgs(node.content));\n continue;\n case \"coordinate\":\n name.push(this.nodeToDoc(node));\n continue;\n case \"operation\": {\n // An \"at\" should be followed by a coordinate or a macro. If it is,\n // then we slurp it. Otherwise we bail.\n if (node.content.content === \"at\") {\n const nextNode = this.nodes[i + 1];\n if (\n !nextNode ||\n !(\n nextNode.type === \"coordinate\" ||\n (nextNode.type === \"unknown\" &&\n match.anyMacro(nextNode.content))\n )\n ) {\n shouldBail = true;\n continue;\n }\n atLocations.push([\"at\", \" \", this.nodeToDoc(nextNode)]);\n i++;\n continue;\n }\n shouldBail = true;\n continue;\n }\n case \"unknown\": {\n // If we're here, we must be the termination group.\n if (match.group(node.content)) {\n hasNodeArgument = true;\n content = this.nodeToDoc(node);\n }\n // NOTE: the fallthrough here is on purpose. Finding the terminating\n // groups should end our loop.\n }\n }\n break;\n }\n if (!hasNodeArgument) {\n return innerDoc;\n }\n // We have collected docs for all the nodes we've scanned, so delete\n // them from the list.\n this.nodes.splice(0, i + 1);\n\n // We standardize node rendering as `[options] :animations (name) at (pos) {content}`\n let isFirstElement = true;\n let isNamed = !(Array.isArray(name) && name.length === 0);\n // Comments get hoisted to before the \"node\" keyword\n for (const comment of comments) {\n commentBlock.push(comment, hardline);\n }\n if (options.length > 0) {\n innerDoc.push(join(\" \", options));\n isFirstElement = false;\n }\n if (animations.length > 0) {\n innerDoc.push(isFirstElement ? \" \" : line);\n innerDoc.push(join(line, animations));\n isFirstElement = false;\n }\n if (isNamed) {\n innerDoc.push(isFirstElement ? \" \" : line);\n innerDoc.push(name);\n isFirstElement = false;\n }\n if (atLocations.length > 0) {\n innerDoc.push(isFirstElement || isNamed ? \" \" : line);\n innerDoc.push(join(line, atLocations));\n isFirstElement = false;\n }\n innerDoc.push(line, content);\n\n return doc;\n }\n\n /**\n * Eat a `type === \"operation\"` node, including its optional arguments.\n */\n eatOperation(): Doc[] {\n const node = this.nodes[0];\n if (node?.type === \"operation\") {\n this.nodes.shift();\n } else {\n return [];\n }\n\n const doc: Doc[] = [];\n if (node?.type !== \"operation\") {\n throw new Error(\"Expecting `operation` node.\");\n }\n const options = this.eatOptionalArg();\n doc.push(\n ...options.comments.map((c) =>\n printFragment(c, this.#path, this.#print)\n ),\n node.content.content\n );\n if (options.optionalArg) {\n doc.push(indent(printOptionalArgs(options.optionalArg.content)));\n }\n\n return doc;\n }\n}\n\nconst PATH_JOIN_OPERATIONS = new Set([\"rectangle\", \"grid\", \"sin\", \"cos\", \"to\"]);\n/**\n * Return whether `node` is a \"path join\", like `--`, `rectangle`, etc.\n *\n * A path join is an operation that sits between two coordinates, like\n * `(a) -- (b)` or `(a) rectangle (b)`.\n */\nfunction isPathJoinOperation(node?: PathSpecNode): boolean {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case \"line_to\":\n case \"curve_to\":\n return true;\n case \"operation\":\n return PATH_JOIN_OPERATIONS.has(node.content.content);\n }\n return false;\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { getNodeInfo, formatDocArray, hardline, ifBreak, fill } from \"./common\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { printTikzArgument } from \"./tikz\";\nimport { printArgumentPgfkeys } from \"./print-argument-pgfkeys\";\n\nexport function printArgument(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Argument;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n // We can return early for empty arguments (this is common for omitted optional arguments)\n if (\n node.openMark === \"\" &&\n node.closeMark === \"\" &&\n node.content.length === 0\n ) {\n return [];\n }\n const parentNode = path.getParentNode();\n const { renderInfo: parentRenderInfo } = getNodeInfo(parentNode, options);\n // We handle printing pgfkeys arguments manually\n if (parentRenderInfo.pgfkeysArgs) {\n const leadingComment =\n node.content.length > 0 &&\n match.comment(node.content[0]) &&\n node.content[0].sameline\n ? node.content[0]\n : null;\n const content = leadingComment ? node.content.slice(1) : node.content;\n trim(content);\n return printArgumentPgfkeys(content, {\n openMark: node.openMark,\n closeMark: node.closeMark,\n leadingComment,\n });\n }\n if (parentRenderInfo.tikzPathCommand) {\n return printTikzArgument(path, print, options);\n }\n\n // Regular argument printing\n const openMark = node.openMark;\n const closeMark = node.closeMark;\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n\n // if the last item is a comment, we need to insert a hardline\n if (match.comment(node.content[node.content.length - 1])) {\n content.push(hardline);\n }\n\n let rawRet: Doc[] = [openMark, fill(content), closeMark];\n if (renderInfo.inParMode) {\n // In paragraph node, arguments should flow just like text\n rawRet = [openMark, ...content, closeMark];\n }\n if (referenceMap) {\n // Save the raw rendered data in case a renderer higher up\n // wants to unwrap it\n referenceMap.setRenderCache(node, rawRet);\n }\n\n return rawRet;\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { getNodeInfo, fill, formatDocArray } from \"./common\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns true if a `\\documentclass` macro is detected,\n * which would indicate that the node list contains the preamble.\n *\n * @param {[object]} nodes\n */\nexport function hasPreambleCode(nodes: Ast.Node[]) {\n return nodes.some((node) => match.macro(node, \"documentclass\"));\n}\n\nexport function printRoot(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Root;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const content = path.map(print, \"content\");\n const rawContent = formatDocArray(node.content, content, options);\n\n const concatFunction = hasPreambleCode(node.content) ? (x: any) => x : fill;\n return concatFunction(rawContent);\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport * as PrettierTypes from \"./prettier-types\";\n\nexport function printComment(\n path: PrettierTypes.AstPath,\n _print: PrettierTypes.RecursivePrintFunc,\n _options: any\n): Doc {\n const node = path.getNode() as Ast.Comment;\n\n // If a comment is on the same line as other content and it has leading whitespace,\n // add a single whitespace token.\n let leadingWhitespace = \"\";\n if (node.leadingWhitespace && node.sameline) {\n leadingWhitespace = \" \";\n }\n\n const content: Doc[] = [leadingWhitespace, \"%\" + printRaw(node.content)];\n return content;\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport {\n getNodeInfo,\n softline,\n fill,\n hardline,\n line,\n indent,\n ESCAPE,\n joinWithSoftline,\n formatDocArray,\n} from \"./common\";\n\nexport function printInlineMath(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.InlineMath;\n\n // Since `$$` starts display math mode (in plain TeX),\n // an empty inline math environment must be printed as `$ $`.\n // We special case this.\n if (node.content.length === 0) {\n // We won't allow an empty math environment to be broken\n return [\"$\", \" \", \"$\"];\n }\n\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n content = joinWithSoftline(content);\n\n // If the last node is a comment, we need a linebreak before the closing `$`\n if (node.content[node.content.length - 1].type === \"comment\") {\n content.push(hardline);\n }\n\n return fill([\"$\", ...content, \"$\"]);\n}\n\nexport function printDisplayMath(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.InlineMath;\n\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n content = joinWithSoftline(content);\n\n // If we start with a comment on the same line as the environment\n // We should not insert a newline at the start of the environment body\n const bodyStartToken: PrettierTypes.Doc[] = [hardline];\n if (\n node.content.length === 0 ||\n (node.content[0].type === \"comment\" && node.content[0].sameline)\n ) {\n bodyStartToken.pop();\n }\n\n return [\n ESCAPE + \"[\",\n indent(fill(bodyStartToken.concat(content))),\n hardline,\n ESCAPE + \"]\",\n ];\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n AlignEnvironmentPegParser,\n decorateArrayForPegjs,\n} from \"@unified-latex/unified-latex-util-pegjs\";\n\n// The types returned by the grammar\ninterface RowItems {\n cells: Ast.Node[][];\n colSeps: Ast.String[];\n}\n\ninterface Row extends RowItems {\n rowSep: Ast.Macro | null;\n trailingComment: Ast.Comment | null;\n}\n\nexport function createMatchers(rowSepMacros: string[], colSep: string[]) {\n const isRowSep = match.createMacroMatcher(rowSepMacros);\n return {\n isRowSep,\n isColSep: (node: Ast.Node) =>\n colSep.some((sep) => match.string(node, sep)),\n isWhitespace: (node: Ast.Node) => match.whitespace(node),\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the content of an align environment into an array of row objects.\n * Each row object looks like\n * ```\n * {\n * cells: [...],\n * colSeps: [...],\n * rowSep: ...,\n * trailingComment: ...\n * }\n * ```\n * `...` may be an ast node or `null`.\n *\n * @export\n * @param {[object]} ast\n * @param {string} [colSep=[\"&\"]]\n * @param {string} [rowSepMacros=[\"\\\\\", \"hline\", \"cr\"]]\n * @returns\n */\nexport function parseAlignEnvironment(\n ast: Ast.Node[],\n colSep = [\"&\"],\n rowSepMacros = [\"\\\\\", \"hline\", \"cr\"]\n): Row[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 AlignEnvironmentPegParser.parse(\n ast,\n createMatchers(rowSepMacros, colSep)\n ) as Row[];\n}\n", "import type { Doc } from \"prettier\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport {\n getNodeInfo,\n softline,\n fill,\n indent,\n hardline,\n line,\n ESCAPE,\n formatEnvSurround,\n joinWithSoftline,\n formatDocArray,\n} from \"./common\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parseAlignEnvironment } from \"@unified-latex/unified-latex-util-align\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\n\nexport function printVerbatimEnvironment(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.VerbatimEnvironment;\n\n const env = formatEnvSurround(node as any);\n\n return [env.start, node.content, env.end];\n}\n\nexport function printEnvironment(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Environment;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const args = node.args ? path.map(print, \"args\" as any) : [];\n const env = formatEnvSurround(node);\n\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n if (renderInfo.inMathMode) {\n content = joinWithSoftline(content);\n }\n\n // If we start with a comment on the same line as the environment\n // We should not insert a newline at the start of the environment body\n let bodyStartToken: PrettierTypes.Doc[] = [hardline];\n if (\n node.content.length === 0 ||\n (node.content[0].type === \"comment\" && node.content[0].sameline)\n ) {\n bodyStartToken.pop();\n }\n\n return [\n env.start,\n ...args,\n indent(fill(bodyStartToken.concat(content))),\n hardline,\n env.end,\n ];\n}\n\nexport function printAlignedEnvironment(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Environment;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const args = node.args ? path.map(print, \"args\" as any) : [];\n const env = formatEnvSurround(node);\n\n // If an aligned environment starts with a same-line comment, we want\n // to ignore it. It will be printed by the environment itself.\n const leadingComment =\n node.content[0] &&\n node.content[0].type === \"comment\" &&\n node.content[0].sameline\n ? node.content[0]\n : null;\n\n const { rows, rowSeps, trailingComments } = formatAlignedContent(\n leadingComment ? node.content.slice(1) : node.content\n );\n\n const content = [];\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const rowSep = rowSeps[i];\n const trailingComment = trailingComments[i];\n\n // A row has\n // 1) Content\n // 2) (optional) rowSep (e.g., `\\\\`)\n // 3) (optional) comment\n // We want there to be exactly one space before the rowsep and exactly one space\n // before any comment.\n content.push(row);\n if (rowSep) {\n content.push(printRaw(rowSep));\n }\n if (rowSep && trailingComment) {\n content.push(\" \");\n }\n if (trailingComment) {\n content.push([\"%\", printRaw(trailingComment.content)]);\n }\n if (rowSep || trailingComment) {\n content.push(hardline);\n }\n }\n // Make sure the last item is not a `hardline`.\n if (content[content.length - 1] === hardline) {\n content.pop();\n }\n\n if (leadingComment) {\n content.unshift(\n leadingComment.leadingWhitespace ? \" \" : \"\",\n \"%\" + printRaw(leadingComment.content),\n hardline\n );\n return [env.start, ...args, indent(content), hardline, env.end];\n }\n return [\n env.start,\n ...args,\n indent([hardline, ...content]),\n hardline,\n env.end,\n ];\n}\n\n/**\n * Formats the content of an aligned/tabular environment's content.\n * Ensures the \"&\" delimiters all line up.\n *\n * @export\n * @param {[object]} nodes\n * @returns {{rows: [string], rowSeps: [object]}}\n */\nexport function formatAlignedContent(nodes: Ast.Node[]) {\n function getSpace(len = 1) {\n return \" \".repeat(len);\n }\n\n const rows = parseAlignEnvironment(nodes as any);\n // Find the number of columns\n const numCols = Math.max(...rows.map((r) => r.cells.length));\n const rowSeps = rows.map(({ rowSep }) => printRaw(rowSep || []));\n const trailingComments = rows.map(({ trailingComment }) => trailingComment);\n\n // Get the widths of each column.\n // Column widths will be the width of column contents plus the width\n // of the separator. This way, even multi-character separators\n // can be accommodated when rendering.\n const renderedRows = rows.map(({ cells, colSeps }) => ({\n cells: cells.map((nodes) => {\n trim(nodes);\n\n return printRaw(nodes);\n }),\n seps: colSeps.map((nodes) => printRaw(nodes)),\n }));\n const colWidths: number[] = [];\n for (let i = 0; i < numCols; i++) {\n colWidths.push(\n Math.max(\n ...renderedRows.map(\n ({ cells, seps }) =>\n ((cells[i] || \"\") + (seps[i] || \"\")).length\n )\n )\n );\n }\n\n const joinedRows = renderedRows.map(({ cells, seps }) => {\n if (cells.length === 1 && cells[0] === \"\") {\n return \"\";\n }\n let ret = \"\";\n for (let i = 0; i < cells.length; i++) {\n // There are at least as many cells as there are `seps`. Possibly one extra\n const width = colWidths[i] - (seps[i] || \"\").length;\n\n // Insert a space at the start so we don't run into the prior separator.\n // We'll trim this off in the end, in case it's not needed.\n ret +=\n (i === 0 ? \"\" : \" \") +\n cells[i] +\n getSpace(width - cells[i].length + 1) +\n (seps[i] || \"\");\n }\n return ret;\n });\n\n return { rows: joinedRows, rowSeps, trailingComments };\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Generate a data structure that can be queried\n * for the next/previous node. This allows for \"peeking\"\n * during the rendering process.\n *\n * @class ReferenceMap\n */\nexport class ReferenceMap {\n ast: Ast.Ast;\n map: Map<\n Ast.Ast,\n { previous?: Ast.Ast; next?: Ast.Ast; renderCache?: any }\n >;\n\n constructor(ast: Ast.Ast) {\n this.ast = ast;\n this.map = new Map();\n visit(\n this.ast,\n (nodeList) => {\n for (let i = 0; i < nodeList.length; i++) {\n this.map.set(nodeList[i], {\n previous: nodeList[i - 1],\n next: nodeList[i + 1],\n });\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n }\n\n /**\n * Associate render-specific data with this node. This data\n * will be overwritten if `setRenderCache` is called twice.\n *\n * @param {Ast.Ast} node\n * @param {*} data\n * @memberof ReferenceMap\n */\n setRenderCache(node: any, data: any): void {\n const currData = this.map.get(node) || {};\n this.map.set(node, { ...currData, renderCache: data });\n }\n\n /**\n * Retrieve data associated with `node` via `setRenderCache`\n *\n * @param {Ast.Ast} node\n * @returns {(object | undefined)}\n * @memberof ReferenceMap\n */\n getRenderCache(node: any): object | any[] | undefined {\n return this.map.get(node)?.renderCache;\n }\n\n getPreviousNode(node: Ast.Ast): Ast.Node | undefined {\n return (this.map.get(node) || ({} as any)).previous;\n }\n\n getNextNode(node: Ast.Ast): Ast.Node | undefined {\n return (this.map.get(node) || ({} as any)).next;\n }\n}\n", "import type { Doc } from \"prettier\";\nimport * as PrettierTypes from \"./prettier-types\";\n\nimport { hardline, line, ESCAPE, getNodeInfo } from \"./common\";\nimport { printMacro } from \"./macro\";\nimport { printArgument } from \"./argument\";\nimport { printRoot } from \"./root\";\nimport { printComment } from \"./comment\";\nimport { printInlineMath, printDisplayMath } from \"./math\";\nimport {\n printVerbatimEnvironment,\n printEnvironment,\n printAlignedEnvironment,\n} from \"./environment\";\nimport {\n linebreak,\n printRaw,\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { ReferenceMap } from \"../reference-map\";\n\nexport function printLatexAst(\n path: PrettierTypes.AstPath,\n options: PrettierTypes.Options & { referenceMap?: ReferenceMap },\n print: PrettierTypes.RecursivePrintFunc\n): Doc {\n const node = path.getValue();\n const { renderInfo } = getNodeInfo(node, options);\n\n if (node == null) {\n return node;\n }\n if (typeof node === \"string\") {\n return node;\n }\n\n switch (node.type) {\n case \"root\":\n // Create the ReferenceMap from the root node, so that\n // it can traverse the entire AST\n if (options.referenceMap) {\n console.warn(\n \"Processing root node, but ReferenceMap already exists. Are there multiple nodes of type 'root'?\"\n );\n }\n options.referenceMap = new ReferenceMap(node);\n return printRoot(path, print, options);\n case \"argument\":\n return printArgument(path, print, options);\n case \"comment\":\n return printComment(path, print, options);\n case \"environment\":\n case \"mathenv\":\n if (renderInfo.alignContent) {\n return printAlignedEnvironment(path, print, options);\n }\n return printEnvironment(path, print, options);\n case \"displaymath\":\n return printDisplayMath(path, print, options);\n case \"group\":\n // When we print a group, we are conservative and do a raw print of its contents.\n // However, we want to use `linebreak`s instead of literal `\\n` tokens.\n const content = printRaw(node.content, {\n asArray: true,\n }).map((token) => (token === linebreak ? hardline : token));\n return [\"{\", ...content, \"}\"];\n case \"inlinemath\":\n return printInlineMath(path, print, options);\n case \"macro\":\n return printMacro(path, print, options);\n case \"parbreak\":\n return [hardline, hardline];\n case \"string\":\n return node.content;\n case \"verb\":\n return [\n ESCAPE,\n node.env,\n node.escape,\n printRaw(node.content),\n node.escape,\n ];\n case \"verbatim\":\n return printVerbatimEnvironment(path, print, options);\n case \"whitespace\":\n return line;\n default:\n console.warn(\"Printing unknown type\", node);\n return printRaw(node);\n }\n}\n", "/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('vfile').VFileCompatible} VFileCompatible\n * @typedef {import('vfile').VFileValue} VFileValue\n * @typedef {import('..').Processor} Processor\n * @typedef {import('..').Plugin} Plugin\n * @typedef {import('..').Preset} Preset\n * @typedef {import('..').Pluggable} Pluggable\n * @typedef {import('..').PluggableList} PluggableList\n * @typedef {import('..').Transformer} Transformer\n * @typedef {import('..').Parser} Parser\n * @typedef {import('..').Compiler} Compiler\n * @typedef {import('..').RunCallback} RunCallback\n * @typedef {import('..').ProcessCallback} ProcessCallback\n *\n * @typedef Context\n * @property {Node} tree\n * @property {VFile} file\n */\n\nimport {bail} from 'bail'\nimport isBuffer from 'is-buffer'\nimport extend from 'extend'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\n\n// Expose a frozen processor.\nexport const unified = base().freeze()\n\nconst own = {}.hasOwnProperty\n\n// Function to create the first processor.\n/**\n * @returns {Processor}\n */\nfunction base() {\n const transformers = trough()\n /** @type {Processor['attachers']} */\n const attachers = []\n /** @type {Record} */\n let namespace = {}\n /** @type {boolean|undefined} */\n let frozen\n let freezeIndex = -1\n\n // Data management.\n // @ts-expect-error: overloads are handled.\n processor.data = data\n processor.Parser = undefined\n processor.Compiler = undefined\n\n // Lock.\n processor.freeze = freeze\n\n // Plugins.\n processor.attachers = attachers\n // @ts-expect-error: overloads are handled.\n processor.use = use\n\n // API.\n processor.parse = parse\n processor.stringify = stringify\n // @ts-expect-error: overloads are handled.\n processor.run = run\n processor.runSync = runSync\n // @ts-expect-error: overloads are handled.\n processor.process = process\n processor.processSync = processSync\n\n // Expose.\n return processor\n\n // Create a new processor based on the processor in the current scope.\n /** @type {Processor} */\n function processor() {\n const destination = base()\n let index = -1\n\n while (++index < attachers.length) {\n destination.use(...attachers[index])\n }\n\n destination.data(extend(true, {}, namespace))\n\n return destination\n }\n\n /**\n * @param {string|Record} [key]\n * @param {unknown} [value]\n * @returns {unknown}\n */\n function data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', frozen)\n namespace[key] = value\n return processor\n }\n\n // Get `key`.\n return (own.call(namespace, key) && namespace[key]) || null\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', frozen)\n namespace = key\n return processor\n }\n\n // Get space.\n return namespace\n }\n\n /** @type {Processor['freeze']} */\n function freeze() {\n if (frozen) {\n return processor\n }\n\n while (++freezeIndex < attachers.length) {\n const [attacher, ...options] = attachers[freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n /** @type {Transformer|void} */\n const transformer = attacher.call(processor, ...options)\n\n if (typeof transformer === 'function') {\n transformers.use(transformer)\n }\n }\n\n frozen = true\n freezeIndex = Number.POSITIVE_INFINITY\n\n return processor\n }\n\n /**\n * @param {Pluggable|null|undefined} [value]\n * @param {...unknown} options\n * @returns {Processor}\n */\n function use(value, ...options) {\n /** @type {Record|undefined} */\n let settings\n\n assertUnfrozen('use', frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, ...options)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n if (settings) {\n namespace.settings = Object.assign(namespace.settings || {}, settings)\n }\n\n return processor\n\n /**\n * @param {import('..').Pluggable} value\n * @returns {void}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...options] = value\n addPlugin(plugin, ...options)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {void}\n */\n function addPreset(result) {\n addList(result.plugins)\n\n if (result.settings) {\n settings = Object.assign(settings || {}, result.settings)\n }\n }\n\n /**\n * @param {PluggableList|null|undefined} [plugins]\n * @returns {void}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {...unknown} [value]\n * @returns {void}\n */\n function addPlugin(plugin, value) {\n let index = -1\n /** @type {Processor['attachers'][number]|undefined} */\n let entry\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entry = attachers[index]\n break\n }\n }\n\n if (entry) {\n if (isPlainObj(entry[1]) && isPlainObj(value)) {\n value = extend(true, entry[1], value)\n }\n\n entry[1] = value\n } else {\n // @ts-expect-error: fine.\n attachers.push([...arguments])\n }\n }\n }\n\n /** @type {Processor['parse']} */\n function parse(doc) {\n processor.freeze()\n const file = vfile(doc)\n const Parser = processor.Parser\n assertParser('parse', Parser)\n\n if (newable(Parser, 'parse')) {\n // @ts-expect-error: `newable` checks this.\n return new Parser(String(file), file).parse()\n }\n\n // @ts-expect-error: `newable` checks this.\n return Parser(String(file), file) // eslint-disable-line new-cap\n }\n\n /** @type {Processor['stringify']} */\n function stringify(node, doc) {\n processor.freeze()\n const file = vfile(doc)\n const Compiler = processor.Compiler\n assertCompiler('stringify', Compiler)\n assertNode(node)\n\n if (newable(Compiler, 'compile')) {\n // @ts-expect-error: `newable` checks this.\n return new Compiler(node, file).compile()\n }\n\n // @ts-expect-error: `newable` checks this.\n return Compiler(node, file) // eslint-disable-line new-cap\n }\n\n /**\n * @param {Node} node\n * @param {VFileCompatible|RunCallback} [doc]\n * @param {RunCallback} [callback]\n * @returns {Promise|void}\n */\n function run(node, doc, callback) {\n assertNode(node)\n processor.freeze()\n\n if (!callback && typeof doc === 'function') {\n callback = doc\n doc = undefined\n }\n\n if (!callback) {\n return new Promise(executor)\n }\n\n executor(null, callback)\n\n /**\n * @param {null|((node: Node) => void)} resolve\n * @param {(error: Error) => void} reject\n * @returns {void}\n */\n function executor(resolve, reject) {\n // @ts-expect-error: `doc` can\u2019t be a callback anymore, we checked.\n transformers.run(node, vfile(doc), done)\n\n /**\n * @param {Error|null} error\n * @param {Node} tree\n * @param {VFile} file\n * @returns {void}\n */\n function done(error, tree, file) {\n tree = tree || node\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(tree)\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, tree, file)\n }\n }\n }\n }\n\n /** @type {Processor['runSync']} */\n function runSync(node, file) {\n /** @type {Node|undefined} */\n let result\n /** @type {boolean|undefined} */\n let complete\n\n processor.run(node, file, done)\n\n assertDone('runSync', 'run', complete)\n\n // @ts-expect-error: we either bailed on an error or have a tree.\n return result\n\n /**\n * @param {Error|null} [error]\n * @param {Node} [tree]\n * @returns {void}\n */\n function done(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * @param {VFileCompatible} doc\n * @param {ProcessCallback} [callback]\n * @returns {Promise|undefined}\n */\n function process(doc, callback) {\n processor.freeze()\n assertParser('process', processor.Parser)\n assertCompiler('process', processor.Compiler)\n\n if (!callback) {\n return new Promise(executor)\n }\n\n executor(null, callback)\n\n /**\n * @param {null|((file: VFile) => void)} resolve\n * @param {(error?: Error|null|undefined) => void} reject\n * @returns {void}\n */\n function executor(resolve, reject) {\n const file = vfile(doc)\n\n processor.run(processor.parse(file), file, (error, tree, file) => {\n if (error || !tree || !file) {\n done(error)\n } else {\n /** @type {unknown} */\n const result = processor.stringify(tree, file)\n\n if (result === undefined || result === null) {\n // Empty.\n } else if (looksLikeAVFileValue(result)) {\n file.value = result\n } else {\n file.result = result\n }\n\n done(error, file)\n }\n })\n\n /**\n * @param {Error|null|undefined} [error]\n * @param {VFile|undefined} [file]\n * @returns {void}\n */\n function done(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, file)\n }\n }\n }\n }\n\n /** @type {Processor['processSync']} */\n function processSync(doc) {\n /** @type {boolean|undefined} */\n let complete\n\n processor.freeze()\n assertParser('processSync', processor.Parser)\n assertCompiler('processSync', processor.Compiler)\n\n const file = vfile(doc)\n\n processor.process(file, done)\n\n assertDone('processSync', 'process', complete)\n\n return file\n\n /**\n * @param {Error|null|undefined} [error]\n * @returns {void}\n */\n function done(error) {\n complete = true\n bail(error)\n }\n }\n}\n\n/**\n * Check if `value` is a constructor.\n *\n * @param {unknown} value\n * @param {string} name\n * @returns {boolean}\n */\nfunction newable(value, name) {\n return (\n typeof value === 'function' &&\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n value.prototype &&\n // A function with keys in its prototype is probably a constructor.\n // Classes\u2019 prototype methods are not enumerable, so we check if some value\n // exists in the prototype.\n // type-coverage:ignore-next-line\n (keys(value.prototype) || name in value.prototype)\n )\n}\n\n/**\n * Check if `value` is an object with keys.\n *\n * @param {Record} value\n * @returns {boolean}\n */\nfunction keys(value) {\n /** @type {string} */\n let key\n\n for (key in value) {\n if (own.call(value, key)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is VFileValue}\n */\nfunction looksLikeAVFileValue(value) {\n return typeof value === 'string' || isBuffer(value)\n}\n", "export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n", "/**\n * @typedef {(error?: Error|null|undefined, ...output: Array) => void} Callback\n * @typedef {(...input: Array) => any} Middleware\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add `fn` (middleware) to the list.\n * @typedef {{run: Run, use: Use}} Pipeline\n * Middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we\u2019re done.\n *\n * @param {Error|null|undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware`.\n * Can be sync or async; return a promise, receive a callback, or return new\n * values and errors.\n *\n * @param {Middleware} middleware\n * @param {Callback} callback\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result instanceof Promise) {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {Record & {type: string, position?: Position|undefined}} NodeLike\n * @typedef {import('./minurl.shared.js').URL} URL\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n *\n * @typedef {'ascii'|'utf8'|'utf-8'|'utf16le'|'ucs2'|'ucs-2'|'base64'|'base64url'|'latin1'|'binary'|'hex'} BufferEncoding\n * Encodings supported by the buffer class.\n * This is a copy of the typing from Node, copied to prevent Node globals from\n * being needed.\n * Copied from: \n *\n * @typedef {Value|Options|VFile|URL} Compatible\n * Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n * @property {Value} [value]\n * @property {string} [cwd]\n * @property {Array} [history]\n * @property {string|URL} [path]\n * @property {string} [basename]\n * @property {string} [stem]\n * @property {string} [extname]\n * @property {string} [dirname]\n * @property {Data} [data]\n *\n * @typedef Map\n * Raw source map, see:\n * .\n * @property {number} version\n * @property {Array} sources\n * @property {Array} names\n * @property {string|undefined} [sourceRoot]\n * @property {Array|undefined} [sourcesContent]\n * @property {string} mappings\n * @property {string} file\n *\n * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options\n * Configuration: a bunch of keys that will be shallow copied over to the new\n * file.\n *\n * @typedef {Record} ReporterSettings\n * @typedef {(files: Array, options: T) => string} Reporter\n */\n\nimport buffer from 'is-buffer'\nimport {VFileMessage} from 'vfile-message'\nimport {path} from './minpath.js'\nimport {proc} from './minproc.js'\nimport {urlToPath, isUrl} from './minurl.js'\n\n// Order of setting (least specific to most), we need this because otherwise\n// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n// stem can be set.\nconst order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * If `options` is `string` or `Buffer`, it\u2019s treated as `{value: options}`.\n * If `options` is a `URL`, it\u2019s treated as `{path: options}`.\n * If `options` is a `VFile`, shallow copies its data over to the new file.\n * All fields in `options` are set on the newly created `VFile`.\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * It\u2019s not possible to set either `dirname` or `extname` without setting\n * either `history`, `path`, `basename`, or `stem` as well.\n *\n * @param {Compatible} [value]\n */\n constructor(value) {\n /** @type {Options} */\n let options\n\n if (!value) {\n options = {}\n } else if (typeof value === 'string' || buffer(value)) {\n // @ts-expect-error Looks like a buffer.\n options = {value}\n } else if (isUrl(value)) {\n options = {path: value}\n } else {\n // @ts-expect-error Looks like file or options.\n options = value\n }\n\n /**\n * Place to store custom information (default: `{}`).\n * It\u2019s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of messages associated with the file.\n * @type {Array}\n */\n this.messages = []\n\n /**\n * List of filepaths the file moved between.\n * The first is the original path and the last is the current path.\n * @type {Array}\n */\n this.history = []\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n * @type {string}\n */\n this.cwd = proc.cwd()\n\n /* eslint-disable no-unused-expressions */\n /**\n * Raw value.\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are \u201Cwell-known\u201D.\n // As in, used in several tools.\n\n /**\n * Whether a file was saved to disk.\n * This is used by vfile reporters.\n * @type {boolean}\n */\n this.stored\n\n /**\n * Sometimes files have a non-string, compiled, representation.\n * This can be stored in the `result` field.\n * One example is when turning markdown into React nodes.\n * This is used by unified to store non-string results.\n * @type {unknown}\n */\n this.result\n\n /**\n * Sometimes files have a source map associated with them.\n * This can be stored in the `map` field.\n * This should be a `Map` type, which is equivalent to the `RawSourceMap`\n * type from the `source-map` module.\n * @type {Map|undefined}\n */\n this.map\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const prop = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (prop in options && options[prop] !== undefined) {\n // @ts-expect-error: TS is confused by the different types for `history`.\n this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n }\n }\n\n /** @type {string} */\n let prop\n\n // Set non-path related properties.\n for (prop in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(prop)) this[prop] = options[prop]\n }\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n * @returns {string}\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n * @param {string|URL} path\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the parent path (example: `'~'`).\n */\n get dirname() {\n return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n * Cannot be set if there\u2019s no `path` yet.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = path.join(dirname || '', this.basename)\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n */\n get basename() {\n return typeof this.path === 'string' ? path.basename(this.path) : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = path.join(this.dirname || '', basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n */\n get extname() {\n return typeof this.path === 'string' ? path.extname(this.path) : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there\u2019s no `path` yet.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.charCodeAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = path.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n */\n get stem() {\n return typeof this.path === 'string'\n ? path.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n /**\n * Serialize the file.\n *\n * @param {BufferEncoding} [encoding='utf8']\n * When `value` is a `Buffer`, `encoding` is a character encoding to\n * understand it as (default: `'utf8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n return (this.value || '').toString(encoding)\n }\n\n /**\n * Constructs a new `VFileMessage`, where `fatal` is set to `false`, and\n * associates it with the file by adding it to `vfile.messages` and setting\n * `message.file` to the current filepath.\n *\n * @param {string|Error|VFileMessage} reason\n * Human readable reason for the message, uses the stack and message of the error if given.\n * @param {Node|NodeLike|Position|Point} [place]\n * Place where the message occurred in the file.\n * @param {string} [origin]\n * Computer readable reason for the message\n * @returns {VFileMessage}\n * Message.\n */\n message(reason, place, origin) {\n const message = new VFileMessage(reason, place, origin)\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Like `VFile#message()`, but associates an informational message where\n * `fatal` is set to `null`.\n *\n * @param {string|Error|VFileMessage} reason\n * Human readable reason for the message, uses the stack and message of the error if given.\n * @param {Node|NodeLike|Position|Point} [place]\n * Place where the message occurred in the file.\n * @param {string} [origin]\n * Computer readable reason for the message\n * @returns {VFileMessage}\n * Message.\n */\n info(reason, place, origin) {\n const message = this.message(reason, place, origin)\n\n message.fatal = null\n\n return message\n }\n\n /**\n * Like `VFile#message()`, but associates a fatal message where `fatal` is\n * set to `true`, and then immediately throws it.\n *\n * > \uD83D\uDC49 **Note**: a fatal error means that a file is no longer processable.\n *\n * @param {string|Error|VFileMessage} reason\n * Human readable reason for the message, uses the stack and message of the error if given.\n * @param {Node|NodeLike|Position|Point} [place]\n * Place where the message occurred in the file.\n * @param {string} [origin]\n * Computer readable reason for the message\n * @returns {never}\n * Message.\n */\n fail(reason, place, origin) {\n const message = this.message(reason, place, origin)\n\n message.fatal = true\n\n throw message\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string|undefined} part\n * @param {string} name\n * @returns {void}\n */\nfunction assertPart(part, name) {\n if (part && part.includes(path.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string|undefined} part\n * @param {string} name\n * @returns {asserts part is string}\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string|undefined} path\n * @param {string} name\n * @returns {asserts path is string}\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {object & {type: string, position?: Position|undefined}} NodeLike\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason` at `place` from `origin`.\n *\n * When an error is passed in as `reason`, the `stack` is copied.\n *\n * @param {string|Error|VFileMessage} reason\n * Reason for message.\n * Uses the stack and message of the error if given.\n * @param {Node|NodeLike|Position|Point} [place]\n * Place at which the message occurred in a file.\n * @param {string} [origin]\n * Place in code the message originates from (example `'my-package:my-rule-name'`)\n */\n constructor(reason, place, origin) {\n /** @type {[string|null, string|null]} */\n const parts = [null, null]\n /** @type {Position} */\n let position = {\n // @ts-expect-error: we always follows the structure of `position`.\n start: {line: null, column: null},\n // @ts-expect-error: \"\n end: {line: null, column: null}\n }\n\n super()\n\n if (typeof place === 'string') {\n origin = place\n place = undefined\n }\n\n if (typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n parts[1] = origin\n } else {\n parts[0] = origin.slice(0, index)\n parts[1] = origin.slice(index + 1)\n }\n }\n\n if (place) {\n // Node.\n if ('type' in place || 'position' in place) {\n if (place.position) {\n // @ts-expect-error: looks like a position.\n position = place.position\n }\n }\n // Position.\n else if ('start' in place || 'end' in place) {\n // @ts-expect-error: looks like a position.\n position = place\n }\n // Point.\n else if ('line' in place || 'column' in place) {\n position.start = place\n }\n }\n\n // Fields from `Error`\n this.name = stringifyPosition(place) || '1:1'\n /** @type {string} */\n this.message = typeof reason === 'object' ? reason.message : reason\n /** @type {string} */\n this.stack = ''\n\n if (typeof reason === 'object' && reason.stack) {\n this.stack = reason.stack\n }\n\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /* eslint-disable no-unused-expressions */\n /**\n * Whether this is a fatal problem that marks an associated file as no\n * longer processable.\n * If `true`, marks associated file as no longer processable.\n * If `false`, necessitates a (potential) change.\n * The value can also be `null` or `undefined`, for things that might not\n * need changing.\n *\n * @type {boolean?}\n */\n this.fatal\n\n /**\n * Starting line of error.\n *\n * @type {number?}\n */\n this.line = position.start.line\n\n /**\n * Starting column of error.\n *\n * @type {number?}\n */\n this.column = position.start.column\n\n /**\n * Full range information, when available.\n * Has `start` and `end` fields, both set to an object with `line` and\n * `column`, set to `number?`.\n *\n * @type {Position?}\n */\n this.position = position\n\n /**\n * Namespace of warning (example: `'my-package'`).\n *\n * @type {string?}\n */\n this.source = parts[0]\n\n /**\n * Category of message (example: `'my-rule-name'`).\n *\n * @type {string?}\n */\n this.ruleId = parts[1]\n\n /**\n * Path of a file (used throughout the VFile ecosystem).\n *\n * @type {string?}\n */\n this.file\n\n // The following fields are \u201Cwell known\u201D.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that\u2019s being reported, which is deemed\n * incorrect.\n *\n * @type {string?}\n */\n this.actual\n\n /**\n * Suggest values that should be used instead of `actual`, one or more\n * values that are deemed as acceptable.\n *\n * @type {Array?}\n */\n this.expected\n\n /**\n * Link to documentation for the message.\n *\n * @type {string?}\n */\n this.url\n\n /**\n * Long form description of the message (supported by `vfile-reporter`).\n *\n * @type {string?}\n */\n this.note\n /* eslint-enable no-unused-expressions */\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.fatal = null\nVFileMessage.prototype.column = null\nVFileMessage.prototype.line = null\nVFileMessage.prototype.source = null\nVFileMessage.prototype.ruleId = null\nVFileMessage.prototype.position = null\n", "// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node\u2019s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * @param {string} path\n * @param {string} [ext]\n * @returns {string}\n */\nfunction basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean|undefined} */\n let seenNonSlash\n\n if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (ext === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extIndex = ext.length - 1\n\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extIndex > -1) {\n // Try to match the explicit extension.\n if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) {\n if (extIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * @param {string} path\n * @returns {string}\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean|undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.charCodeAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.charCodeAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * @param {string} path\n * @returns {string}\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean|undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.charCodeAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * @param {Array} segments\n * @returns {string}\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string|undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Note: `normalize` is not exposed as `path.normalize`, so some code is\n * manually removed from it.\n *\n * @param {string} path\n * @returns {string}\n */\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.charCodeAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.charCodeAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * @param {boolean} allowAboveRoot\n * @returns {string}\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number|undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.charCodeAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.charCodeAt(result.length - 1) !== 46 /* `.` */ ||\n result.charCodeAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * @param {string} path\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n", "// Somewhat based on:\n// .\n// But I don\u2019t think one tiny line of code can be copyrighted. \uD83D\uDE05\nexport const proc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n", "/**\n * @typedef URL\n * @property {string} hash\n * @property {string} host\n * @property {string} hostname\n * @property {string} href\n * @property {string} origin\n * @property {string} password\n * @property {string} pathname\n * @property {string} port\n * @property {string} protocol\n * @property {string} search\n * @property {any} searchParams\n * @property {string} username\n * @property {() => string} toString\n * @property {() => string} toJSON\n */\n\n/**\n * @param {unknown} fileURLOrPath\n * @returns {fileURLOrPath is URL}\n */\n// From: \nexport function isUrl(fileURLOrPath) {\n return (\n fileURLOrPath !== null &&\n typeof fileURLOrPath === 'object' &&\n // @ts-expect-error: indexable.\n fileURLOrPath.href &&\n // @ts-expect-error: indexable.\n fileURLOrPath.origin\n )\n}\n", "/// \n\nimport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {string|URL} path\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * @param {URL} url\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.charCodeAt(index) === 37 /* `%` */ &&\n pathname.charCodeAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.charCodeAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n\nexport {isUrl} from './minurl.shared.js'\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { splitOnCondition } from \"./split-on-condition\";\n\n/**\n * Split an array of AST nodes based on a macro. An object `{segments: [], macros: []}`\n * is returned. The original array is reconstructed as\n * `segments[0] + macros[0] + segments[1] + ...`.\n *\n * @param {[object]} ast\n * @param {(string|[string])} macroName\n * @returns {{segments: [object], macros: [object]}}\n */\nexport function splitOnMacro(\n ast: Ast.Node[],\n macroName: string | string[]\n): { segments: Ast.Node[][]; macros: Ast.Macro[] } {\n if (typeof macroName === \"string\") {\n macroName = [macroName];\n }\n if (!Array.isArray(macroName)) {\n throw new Error(\"Type coercion failed\");\n }\n const isSeparator = match.createMacroMatcher(macroName);\n const { segments, separators } = splitOnCondition(ast, isSeparator);\n return { segments, macros: separators as Ast.Macro[] };\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Split a list of nodes based on whether `splitFunc` returns `true`.\n * If `onlySplitOnFirstOccurrence` is set to true in the `options` object, then\n * there will be at most two segments returned.\n */\nexport function splitOnCondition(\n nodes: Ast.Node[],\n splitFunc: (node: Ast.Node) => boolean = () => false,\n options?: { onlySplitOnFirstOccurrence?: boolean }\n): { segments: Ast.Node[][]; separators: Ast.Node[] } {\n if (!Array.isArray(nodes)) {\n throw new Error(`Can only split an Array, not ${nodes}`);\n }\n\n const { onlySplitOnFirstOccurrence = false } = options || {};\n\n const splitIndices: number[] = [];\n for (let i = 0; i < nodes.length; i++) {\n if (splitFunc(nodes[i])) {\n splitIndices.push(i);\n if (onlySplitOnFirstOccurrence) {\n break;\n }\n }\n }\n\n // Short circuit if there is no splitting to be done\n if (splitIndices.length === 0) {\n return { segments: [nodes], separators: [] };\n }\n\n let separators = splitIndices.map((i) => nodes[i]);\n let segments = splitIndices.map((splitEnd, i) => {\n const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1;\n return nodes.slice(splitStart, splitEnd);\n });\n segments.push(\n nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length)\n );\n\n return { segments, separators };\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Does the reverse of `splitOnMacro`\n */\nexport function unsplitOnMacro({\n segments,\n macros,\n}: {\n segments: Ast.Node[][];\n macros: Ast.Node[] | Ast.Node[][];\n}) {\n if (segments.length === 0) {\n console.warn(\"Trying to join zero segments\");\n return [];\n }\n if (segments.length !== macros.length + 1) {\n console.warn(\n \"Mismatch between lengths of macros and segments when trying to unsplit\"\n );\n }\n\n let ret = segments[0];\n for (let i = 0; i < macros.length; i++) {\n // Even though the type of macros[i] is node and not array,\n // Array.concat still works\n ret = ret.concat(macros[i]).concat(segments[i + 1]);\n }\n\n return ret;\n}\n", "/**\n * Joins an array of arrays with the item `sep`\n */\nexport function arrayJoin(array: T[][], sep: T | T[]): T[] {\n return array.flatMap((item, i) => {\n if (i === 0) {\n return item;\n }\n if (Array.isArray(sep)) {\n return [...sep, ...item];\n } else {\n return [sep, ...item];\n }\n });\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n visit,\n VisitInfo,\n} from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Recursively replace nodes in `ast`. The `visitor` function is called on each node. If\n * `visitor` returns a node or an array of nodes, those nodes replace the node passed to `visitor`.\n * If `null` is returned, the node is deleted. If `undefined` is returned, no replacement happens.\n */\nexport function replaceNode(\n ast: Ast.Ast,\n visitor: (\n node: Ast.Node | Ast.Argument,\n info: VisitInfo\n ) =>\n | Ast.Node\n | Ast.Argument\n | (Ast.Node | Ast.Argument)[]\n | null\n | undefined\n | void\n) {\n visit(ast, {\n leave: (node, info) => {\n let replacement = visitor(node, info);\n // Returning `undefined` or the same node means we shouldn't replace that node\n if (typeof replacement === \"undefined\" || replacement === node) {\n return;\n }\n\n if (!info.containingArray || info.index == null) {\n throw new Error(\n \"Trying to replace node, but cannot find containing array\"\n );\n }\n\n if (\n replacement === null ||\n (Array.isArray(replacement) && replacement.length === 0)\n ) {\n // A null return means that we delete the current node\n info.containingArray.splice(info.index, 1);\n return info.index;\n }\n\n if (!Array.isArray(replacement)) {\n replacement = [replacement];\n }\n\n info.containingArray.splice(info.index, 1, ...replacement);\n // We don't want to *reprocess* the nodes we just inserted into the array,\n // lest we get stuck in a recursive loop if the replacement contains the original.\n // Thus we jump to the index after our replacements.\n return info.index + replacement.length;\n },\n });\n}\n", "import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trimEnd, trimStart } from \"@unified-latex/unified-latex-util-trim\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { replaceStreamingCommand } from \"./replace-streaming-command\";\nimport { replaceNodeDuringVisit } from \"./replace-node-during-visit\";\n\ntype PluginOptions = {\n replacers: Record<\n string,\n (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[]\n >;\n};\n\n/**\n * Unified plugin to replace all found streaming commands with their argument-style equivalents.\n * This only applies to sections of the tree with no math ancestor.\n *\n * @param options.replacer A record of macro names and replacer functions. A replacer function accepts content and the original streaming command and is expected to return the argument-style command. It may be called multiple times per streaming command.\n */\nexport const unifiedLatexReplaceStreamingCommands: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexReplaceStreamingCommands(options) {\n const { replacers = {} } = options || {};\n const isReplaceable = match.createMacroMatcher(replacers);\n return (tree) => {\n // We traverse all groups before we replace nodes in other contexts\n visit(\n tree,\n (group, info) => {\n if (\n info.context.hasMathModeAncestor ||\n !group.content.some(isReplaceable)\n ) {\n return;\n }\n\n let fixed = replaceStreamingCommand(\n group,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n\n // We cannot replace the node unless we can access the containing array.\n if (!info.containingArray || info.index == null) {\n return;\n }\n\n // `fixed` may consist of only whitespace. If this is the case,\n // surrounding whitespace must trimmed before\n // inserting the group's contents.\n const prevToken = info.containingArray[info.index - 1];\n const nextToken = info.containingArray[info.index + 1];\n if (\n match.whitespaceLike(prevToken) &&\n match.whitespaceLike(fixed[0])\n ) {\n trimStart(fixed);\n }\n if (\n match.whitespaceLike(nextToken) &&\n match.whitespaceLike(fixed[fixed.length - 1])\n ) {\n trimEnd(fixed);\n }\n replaceNodeDuringVisit(fixed, info);\n },\n { test: match.group }\n );\n\n visit(\n tree,\n (nodes, info) => {\n if (\n info.context.hasMathModeAncestor ||\n !nodes.some(isReplaceable)\n ) {\n return;\n }\n\n const replaced = replaceStreamingCommand(\n nodes,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n\n // If we get back a different array than we input, the replacement did\n // not happen in-place. In this case we need to manipulate `nodes`.\n if (replaced !== nodes) {\n nodes.length = 0;\n nodes.push(...replaced);\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n splitOnCondition,\n unsplitOnMacro,\n} from \"@unified-latex/unified-latex-util-split\";\nimport {\n trim,\n trimEnd,\n trimStart,\n} from \"@unified-latex/unified-latex-util-trim\";\nimport { firstSignificantNode } from \"./utils/significant-node\";\nimport { replaceStreamingCommandInArray } from \"./utils/replace-streaming-command-in-array\";\nimport { wrapSignificantContent } from \"./utils/wrap-significant-content\";\n\ntype Replacer = (nodes: Ast.Node[]) => Ast.Node[];\n\n/**\n * Process streaming commands in a group. If needed, \"escape\" the group.\n * For example, `{\\bfseries xx}` -> `\\textbf{xx}`, but `{foo \\bfseries xx}` -> `{foo \\textbf{xx}}`.\n */\nexport function replaceStreamingCommandInGroup(\n group: Ast.Group,\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[],\n options?: {\n macrosThatBreakPars?: string[];\n environmentsThatDontBreakPars?: string[];\n }\n): Ast.Node[] {\n const content = group.content;\n // If the group started with a streaming command, we want to pop\n // out of the group. E.g. `{\\bfseries foo}` -> `\\textbf{foo}` and not `{\\textbf{foo}}`\n let popFromGroup = isStreamingCommand(firstSignificantNode(content));\n\n let innerProcessed = replaceStreamingCommand(\n content,\n isStreamingCommand,\n replacer,\n options\n );\n\n // If the group consisted of just streaming commands (for some reason...)\n // it should be eliminated\n if (innerProcessed.length === 0) {\n return [];\n }\n\n if (popFromGroup) {\n return innerProcessed;\n } else {\n return [{ type: \"group\", content: innerProcessed }];\n }\n}\n\n/**\n * Given a group or a node array, look for streaming commands (e.g., `\\bfseries`) and replace them\n * with the specified macro. The \"arguments\" of the streaming command are passed to `replacer` and the return\n * value of `replacer` is inserted into the stream.\n *\n * By default, this command will split at parbreaks (since commands like `\\textbf{...} do not accept parbreaks in their\n * contents) and call `replacer` multiple times, once per paragraph.\n *\n * Commands are also split at environments and at any macros listed in `macrosThatBreakPars`.\n */\nexport function replaceStreamingCommand(\n ast: Ast.Group | Ast.Node[],\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[],\n options?: {\n macrosThatBreakPars?: string[];\n environmentsThatDontBreakPars?: string[];\n }\n): Ast.Node[] {\n if (typeof isStreamingCommand !== \"function\") {\n throw new Error(\n `'isStreamingCommand' must be a function, not '${typeof isStreamingCommand}'`\n );\n }\n\n const {\n macrosThatBreakPars = [\n \"part\",\n \"chapter\",\n \"section\",\n \"subsection\",\n \"subsubsection\",\n \"vspace\",\n \"smallskip\",\n \"medskip\",\n \"bigskip\",\n \"hfill\",\n ],\n environmentsThatDontBreakPars = [],\n } = options || {};\n\n let processedContent: Ast.Node[] = [];\n if (match.group(ast)) {\n processedContent = replaceStreamingCommandInGroup(\n ast,\n isStreamingCommand,\n replacer\n );\n }\n\n if (Array.isArray(ast)) {\n // Streaming commands that come at the end of a sequence of nodes don't do anything.\n // They also will consume whitespace, so we should remove them and the whitespace.\n const nodes = ast;\n let scanIndex = nodes.length;\n let sliceIndex = scanIndex;\n while (\n scanIndex > 0 &&\n (isStreamingCommand(nodes[scanIndex - 1]) ||\n match.whitespace(nodes[scanIndex - 1]))\n ) {\n scanIndex--;\n if (isStreamingCommand(nodes[scanIndex])) {\n sliceIndex = scanIndex;\n }\n }\n if (sliceIndex !== nodes.length) {\n nodes.splice(sliceIndex);\n }\n\n const macroThatBreaks = match.createMacroMatcher(macrosThatBreakPars);\n const envThatDoesntBreak = match.createEnvironmentMatcher(\n environmentsThatDontBreakPars\n );\n // A \"par\" is anything that a streaming command shouldn't wrap and breaks the stream.\n // This includes regular pars, but also environments and special macros like \\section\n const isPar = (node: Ast.Node) =>\n match.parbreak(node) ||\n match.macro(node, \"par\") ||\n macroThatBreaks(node) ||\n (match.environment(node) && !envThatDoesntBreak(node)) ||\n node.type === \"displaymath\";\n\n // We split on both a parbreak and a literal `\\par`. But we will\n // normalize everything to be parbreaks\n const splitByPar = splitOnCondition(nodes, isPar);\n splitByPar.separators = splitByPar.separators.map((sep) =>\n match.macro(sep, \"par\") ? { type: \"parbreak\" } : sep\n );\n\n const replacers: Replacer[] = [];\n let segments = splitByPar.segments.map((segment) => {\n if (segment.length === 0) {\n return segment;\n }\n function applyAccumulatedReplacers(nodes: Ast.Node[]): Ast.Node[] {\n if (replacers.length === 0) {\n return nodes;\n }\n return wrapSignificantContent(\n nodes,\n composeReplacers(replacers)\n );\n }\n\n const { foundStreamingCommands } = replaceStreamingCommandInArray(\n segment,\n isStreamingCommand,\n replacer\n );\n\n // All streaming commands in `segment` have now been replaced. However,\n // there might be commands from the previous paragraphs that should wrap\n // the current segment!\n const ret = applyAccumulatedReplacers(segment);\n\n // Any streaming commands from this segment will carry over to the next,\n // so keep track of them.\n foundStreamingCommands.forEach((macro) => {\n replacers.push((nodes: Ast.Node[]) => {\n const ret = replacer(nodes, macro as Ast.Macro);\n if (!Array.isArray(ret)) {\n return [ret];\n }\n return ret;\n });\n });\n\n return ret;\n });\n\n // Leading/trailing whitespace was hoisted in front/back of each replacer.\n // Since we're separated by parbreaks, we can safely trim all that whitespace.\n if (segments.length > 1) {\n segments.forEach((segment, i) => {\n if (i === 0) {\n trimEnd(segment);\n } else if (i === segments.length - 1) {\n trimStart(segment);\n } else {\n trim(segment);\n }\n });\n }\n\n processedContent = unsplitOnMacro({\n segments: segments,\n macros: splitByPar.separators,\n });\n }\n\n return processedContent;\n}\n\n/**\n * Given a sequence of replacer functions `[f, g, h]` return\n * `h \\circ g \\circ f`\n *\n * @param {((nodes: Ast.Node[]) => Ast.Node)[]} replacers\n * @returns {(nodes: Ast.Node[]) => Ast.Node}\n */\nfunction composeReplacers(replacers: Replacer[]): Replacer {\n if (replacers.length === 0) {\n throw new Error(\"Cannot compose zero replacement functions\");\n }\n return (nodes: Ast.Node[]) => {\n let ret = nodes;\n for (let i = 0; i < replacers.length; i++) {\n const func = replacers[i];\n ret = func(ret);\n }\n return ret;\n };\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns the first non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function firstSignificantNode(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): Ast.Node | null {\n const index = firstSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\n\n/**\n * Returns the last non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function lastSignificantNode(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): Ast.Node | null {\n const index = lastSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\n\n/**\n * Returns the index of the last non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function lastSignificantNodeIndex(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): number | undefined {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (\n match.whitespace(node) ||\n match.comment(node) ||\n (parbreaksAreInsignificant && match.parbreak(node))\n ) {\n continue;\n }\n return i;\n }\n return undefined;\n}\n\n/**\n * Returns the index of the first non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function firstSignificantNodeIndex(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): number | undefined {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (\n match.whitespace(node) ||\n match.comment(node) ||\n (parbreaksAreInsignificant && match.parbreak(node))\n ) {\n continue;\n }\n return i;\n }\n return undefined;\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trimEnd, trimStart } from \"@unified-latex/unified-latex-util-trim\";\nimport { joinWithoutExcessWhitespace } from \"./join-without-excess-whitespace\";\nimport { wrapSignificantContent } from \"./wrap-significant-content\";\n\n/**\n * Replace commands identified by `isStreamingCommand` with the return value of `replacer`.\n * E.g., the array `[head, streamingCommand, ...tail]` will become `[head, replacer(tail, streamingCommand)]`.\n * This function does not split based on parbreaks/etc.. It is right-associative and returns\n * the streaming commands that were encountered.\n */\nexport function replaceStreamingCommandInArray(\n nodes: Ast.Node[],\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[]\n): { foundStreamingCommands: Ast.Node[] } {\n // Streaming commands that come at the end don't do anything,\n // so we should remove them\n while (nodes.length > 0 && isStreamingCommand(nodes[nodes.length - 1])) {\n nodes.pop();\n trimEnd(nodes);\n }\n\n const foundStreamingCommands: Ast.Node[] = [];\n\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (isStreamingCommand(node)) {\n const wrapper = (content: Ast.Node[]) => replacer(content, node);\n let tail = nodes.slice(i + 1);\n // Streaming commands are followed by whitespace, which becomes unneeded when the commands are replaced.\n trimStart(tail);\n tail = wrapSignificantContent(tail, wrapper);\n foundStreamingCommands.push(node);\n\n // Trim off what we're about to replace!\n nodes.splice(i);\n\n joinWithoutExcessWhitespace(nodes, tail);\n }\n }\n\n return { foundStreamingCommands };\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trimStart } from \"@unified-latex/unified-latex-util-trim\";\n\n/**\n * Is the node space-like? I.e., is it whitespace or\n * a comment with leading whitespace?\n */\nfunction isSpaceLike(node: Ast.Node): boolean {\n return (\n match.whitespace(node) ||\n (match.comment(node) && Boolean(node.leadingWhitespace))\n );\n}\n\n/**\n * Similar to `head.push(...tail)` except that whitespace at the start\n * of `tail` and the end of `head` is collapsed.\n */\nexport function joinWithoutExcessWhitespace(\n head: Ast.Node[],\n tail: Ast.Node[]\n): void {\n if (tail.length === 0) {\n return;\n }\n if (head.length === 0) {\n head.push(...tail);\n return;\n }\n const headEnd = head[head.length - 1];\n const tailStart = tail[0];\n // Whitespace we can just trim off from either end\n if (match.whitespace(headEnd) && match.whitespace(tailStart)) {\n head.push(...tail.slice(1));\n return;\n }\n // If there's no whitespace at one of the ends, no need to worry\n // unless `tailStart` is a comment, in which case it should \"eat\"\n // the whitespace\n if (!isSpaceLike(headEnd) || !isSpaceLike(tailStart)) {\n if (match.whitespace(headEnd) && match.comment(tailStart)) {\n const comment: Ast.Comment = {\n type: \"comment\",\n content: tailStart.content,\n sameline: true,\n leadingWhitespace: true,\n };\n tail = tail.slice(1);\n trimStart(tail);\n head.pop();\n head.push(comment, ...tail);\n return;\n }\n head.push(...tail);\n return;\n }\n\n // If we're here, we have a comment with leading whitespace on one side\n // and whitespace/comments on the other.\n if (match.comment(headEnd) && match.comment(tailStart)) {\n if (tailStart.leadingWhitespace || tailStart.sameline) {\n head.push(\n { type: \"comment\", content: tailStart.content },\n ...tail.slice(1)\n );\n return;\n }\n head.push(...tail);\n return;\n }\n\n // Exactly one side is a comment, so we should trim the whitespace and keep the comment,\n // but make sure the comment has leading whitespace!\n let comment = match.comment(headEnd) ? headEnd : tailStart;\n if (!match.comment(comment)) {\n throw new Error(\n `Expected a comment but found ${JSON.stringify(comment)}`\n );\n }\n\n if (!comment.leadingWhitespace || !comment.sameline) {\n comment = {\n type: \"comment\",\n content: comment.content,\n leadingWhitespace: true,\n sameline: true,\n };\n }\n\n head.pop();\n head.push(comment, ...tail.slice(1));\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Wraps `content` in the specified wrapper. This command is roughly equivalent to\n * `wrapper(content)` except that leading and trailing whitespace and comments are extracted\n * from `content` and moved to the front or back of the return array. For example,\n * `[\" \", \"foo\", \"bar\", \"% xxx\"]` -> `[\" \", wrapped([\"foo\", \"bar\"]), \"% xxx\"]`.\n *\n */\nexport function wrapSignificantContent(\n content: Ast.Node[],\n wrapper: (content: Ast.Node[]) => Ast.Node[] | Ast.Node\n): Ast.Node[] {\n let hoistUntil = 0;\n let hoistAfter = content.length;\n for (let i = 0; i < content.length; i++) {\n if (match.whitespace(content[i]) || match.comment(content[i])) {\n hoistUntil = i + 1;\n continue;\n }\n break;\n }\n for (let j = content.length - 1; j >= 0; j--) {\n if (match.whitespace(content[j]) || match.comment(content[j])) {\n hoistAfter = j;\n continue;\n }\n break;\n }\n\n if (hoistUntil === 0 && hoistAfter === content.length) {\n return ensureArray(wrapper(content));\n }\n\n const frontMatter = content.slice(0, hoistUntil);\n const middle = content.slice(hoistUntil, hoistAfter);\n const backMatter = content.slice(hoistAfter, content.length);\n\n return frontMatter.concat(wrapper(middle), backMatter);\n}\n\nfunction ensureArray(x: Ast.Node | Ast.Node[]) {\n if (!Array.isArray(x)) {\n return [x];\n }\n return x;\n}\n", "import { VisitInfo } from \"@unified-latex/unified-latex-util-visit\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Replaces the current node with `replacement`. It is assumed that the current\n * node is in an array that is a child of a parent element. If this is not the case,\n * the function will error.\n */\nexport function replaceNodeDuringVisit(\n replacement: Ast.Node | Ast.Argument | (Ast.Node | Ast.Argument)[],\n info: VisitInfo\n) {\n const parent = info.parents[0];\n if (!parent) {\n throw new Error(`Cannot replace node: parent not found`);\n }\n const container = parent[info.key as keyof typeof parent] as\n | (Ast.Node | Ast.Argument)[]\n | undefined;\n if (!Array.isArray(container)) {\n throw new Error(`Cannot replace node: containing array not found`);\n }\n if (info.index == null) {\n throw new Error(`Cannot replace node: node index undefined`);\n }\n if (!Array.isArray(replacement)) {\n container[info.index] = replacement;\n } else {\n container.splice(info.index, 1, ...replacement);\n }\n}\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n cref: { signature: \"s m\" },\n Cref: { signature: \"s m\" },\n crefrange: { signature: \"s m m\" },\n Crefrange: { signature: \"s m m\" },\n cpageref: { signature: \"s m\" },\n Cpageref: { signature: \"s m\" },\n ref: { signature: \"m\" },\n pageref: { signature: \"m\" },\n namecref: { signature: \"m\" },\n nameCref: { signature: \"m\" },\n lcnamecref: { signature: \"m\" },\n namecrefs: { signature: \"m\" },\n nameCrefs: { signature: \"m\" },\n lcnamecrefs: { signature: \"m\" },\n labelcref: { signature: \"m\" },\n labelcpageref: { signature: \"m\" },\n crefalias: { signature: \"m m\" },\n crefname: { signature: \"m m m\" },\n // XXX there are many more obscure commands to add here\n // https://ctan.org/pkg/cleveref\n crefdefaultlabelformat: { signature: \"m\" },\n crefrangeconjunction: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport {\n lastSignificantNode,\n lastSignificantNodeIndex,\n} from \"@unified-latex/unified-latex-util-replace\";\nimport { splitOnMacro } from \"@unified-latex/unified-latex-util-split\";\nimport { trim, trimEnd } from \"@unified-latex/unified-latex-util-trim\";\n\n/**\n * Clean up any whitespace issues in an enumerate environment. In particular,\n * * Remove any leading or ending whitespace\n * * Ensure there is a par between occurrences of `\\item`\n * * Ensure there is whitespace after each occurrence of `\\item` provided there is content there\n * `itemName` can be used to set what the \"item\" macro is called.\n *\n * This function attaches content following a `\\item` to the `\\item` macro with\n * `openMark` and `closeMark` set to empty. This allows hanging-indents to be rendered.\n */\nexport function cleanEnumerateBody(\n ast: Ast.Node[],\n itemName = \"item\"\n): Ast.Node[] {\n let { segments, macros } = splitOnMacro(ast, itemName);\n // Trim the content of each block, but make sure there is a space\n // between each macro and the content. Since the first segment of content\n // appears *before* any macro, don't add a space there.\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (i === 0) {\n // The very first segment might be comment with leading whitespace. We don't want to trim that off\n trimEnd(segment);\n } else {\n trim(segment);\n }\n // The very first segment comes before any `\\item` macros. It is either\n // blank or contains comments (or is invalid LaTeX). We don't insert a space\n // in this case.\n if (segment.length > 0 && i > 0) {\n segment.unshift({ type: \"whitespace\" });\n }\n }\n\n let insertParbreakBefore: WeakSet = new WeakSet();\n\n // We want a trailing indent for the `\\item` nodes. We will\n // do this with a trick: we will add an argument to the index node\n // with openMark=\" \" and closeMark=\"\"\n let body: Ast.Node[] = macros.flatMap((node, i) => {\n const segment = segments[i + 1];\n const trailingComments = popTrailingComments(segment);\n node.args = node.args || [];\n node.args.push(arg(segment, { openMark: \"\", closeMark: \"\" }));\n updateRenderInfo(node, { inParMode: true });\n\n // The stream contains a mix of `\\item` macros and comments/parbreaks. We only\n // want to insert parbreaks before `\\item` macros, so we record these for later.\n if (i > 0 || segments[0]?.length > 0) {\n insertParbreakBefore.add(node);\n }\n\n return [node, ...trailingComments];\n });\n\n // We want a parbreak between each `\\item` block and the preceding content.\n // We've already logged the `\\item` macros in `insertParbreakBefore`.\n body = body.flatMap((node) =>\n insertParbreakBefore.has(node) ? [{ type: \"parbreak\" }, node] : node\n );\n\n body.unshift(...segments[0]);\n\n // We have inserted parbreaks so some comments need to be told that there is a suffix parbreak\n for (let i = 0; i < body.length - 1; i++) {\n const node = body[i];\n const nextNode = body[i + 1];\n if (!match.parbreak(nextNode)) {\n continue;\n }\n if (match.comment(node)) {\n node.suffixParbreak = true;\n }\n // The heuristic for detecting an `item`-like node is that its last argument has no close mark.\n // Regardless of what it is, if there is no close mark, when rendered we don't want two newlines to\n // appear.\n if (\n match.macro(node) &&\n node.args &&\n node.args[node.args.length - 1].closeMark === \"\"\n ) {\n const args = node.args[node.args.length - 1].content;\n const lastArg = args[args.length - 1];\n if (match.comment(lastArg)) {\n lastArg.suffixParbreak = true;\n }\n }\n }\n\n return body;\n}\n\n/**\n * Removes and returns any number of trailing comments/parbreaks from `nodes`.\n */\nfunction popTrailingComments(nodes: Ast.Node[]): Ast.Node[] {\n let lastNodeIndex = lastSignificantNodeIndex(nodes, true);\n if (\n lastNodeIndex === nodes.length - 1 ||\n (lastNodeIndex == null && nodes.length === 0)\n ) {\n return [];\n }\n\n // If `nodes` has a non-zero length and we didn't find a significant node, everything is comments!\n if (lastNodeIndex == null) {\n lastNodeIndex = -1;\n }\n return nodes.splice(lastNodeIndex + 1);\n}\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { cleanEnumerateBody } from \"../../utils/enumerate\";\n\nexport const macros: MacroInfoRecord = {\n answerline: { signature: \"o\" },\n fillin: { signature: \"o o\" },\n fullwidth: { signature: \"m\" },\n fillwidthlines: { signature: \"m\" },\n fillwidthdottedlines: { signature: \"m\" },\n fillwidthgrid: { signature: \"m\" },\n makeemptybox: { signature: \"m\" },\n CorrectChoiceEmphasis: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n SolutionEmphasis: { signature: \"m\", renderInfo: { breakAround: true } },\n uplevel: { signature: \"m\", renderInfo: { breakAround: true } },\n checkboxchar: { signature: \"m\", renderInfo: { breakAround: true } },\n checkedchar: { signature: \"m\", renderInfo: { breakAround: true } },\n pointname: { signature: \"m\", renderInfo: { breakAround: true } },\n marginpointname: { signature: \"m\", renderInfo: { breakAround: true } },\n extrawidth: { signature: \"m\", renderInfo: { breakAround: true } },\n pointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n bonuspointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n totalformat: { signature: \"m\", renderInfo: { breakAround: true } },\n qformat: { signature: \"m\", renderInfo: { breakAround: true } },\n titledquestion: { signature: \"m o\", renderInfo: { breakAround: true } },\n pointpoints: { signature: \"m m\", renderInfo: { breakAround: true } },\n bonuspointpoints: { signature: \"m m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n choices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n checkboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n oneparchoices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n oneparcheckboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\"),\n },\n parts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"part\"),\n },\n subparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subpart\"),\n },\n subsubparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subsubpart\"),\n },\n questions: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"question\"),\n },\n};\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n geometry: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n hypersetup: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n href: { signature: \"o m m\" },\n url: { signature: \"m\" },\n nolinkurl: { signature: \"m\" },\n hyperbaseurl: { signature: \"m\" },\n hyperimage: { signature: \"m m\" },\n hyperdef: { signature: \"m m m\" },\n hyperref: { signature: \"o m\" },\n hyperlink: { signature: \"m m\" },\n hypertarget: { signature: \"m m\" },\n autoref: { signature: \"s m\" },\n pageref: { signature: \"s m\" },\n autopageref: { signature: \"s m\" },\n pdfstringdef: { signature: \"m m\" },\n pdfbookmark: { signature: \"o m m\" },\n currentpdfbookmark: { signature: \"m m\" },\n subpdfbookmark: { signature: \"m m\" },\n belowpdfbookmark: { signature: \"m m\" },\n texorpdfstring: { signature: \"m m\" },\n thispdfpagelabel: { signature: \"m\" },\n hypercalcbp: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { cleanEnumerateBody } from \"../../utils/enumerate\";\n\nexport const macros: MacroInfoRecord = {\n // Special\n \"\\\\\": { signature: \"!s !o\" },\n _: { signature: \"m\", escapeToken: \"\" },\n \"^\": { signature: \"m\", escapeToken: \"\" },\n // \\newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands\n // List can be found in latex2e.pdf \"An unofficial reference manual\"\n newcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"],\n },\n },\n renewcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"],\n },\n },\n providecommand: {\n signature: \"s +m o +o +m\",\n renderInfo: { breakAround: true },\n },\n // Counters\n newcounter: {\n signature: \"m o\",\n renderInfo: { breakAround: true },\n },\n usecounter: {\n signature: \"m\",\n },\n setcounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n addtocounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n stepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n refstepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n // Lengths\n newlength: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n addtolength: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settodepth: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settoheight: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n settowidth: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n // Spaces\n stretch: { signature: \"m\" },\n hspace: { signature: \"s m\" },\n vspace: { signature: \"s m\", renderInfo: { breakAround: true } },\n vfill: { renderInfo: { breakAround: true } },\n indent: { renderInfo: { breakAround: true } },\n phantom: { signature: \"m\" },\n vphantom: { signature: \"m\" },\n hphantom: { signature: \"m\" },\n noindent: { renderInfo: { breakAround: true } },\n smallskip: { renderInfo: { breakAround: true } },\n medskip: { renderInfo: { breakAround: true } },\n bigskip: { renderInfo: { breakAround: true } },\n smallbreak: { renderInfo: { breakAround: true } },\n medbreak: { renderInfo: { breakAround: true } },\n bigbreak: { renderInfo: { breakAround: true } },\n newline: { renderInfo: { breakAround: true } },\n linebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nolinebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n clearpage: { renderInfo: { breakAround: true } },\n cleardoublepage: { renderInfo: { breakAround: true } },\n newpage: { renderInfo: { breakAround: true } },\n enlargethispage: { signature: \"s\", renderInfo: { breakAround: true } },\n pagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nopagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n // Boxes\n newsavebox: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n sbox: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n savebox: {\n signature: \"m o o m\",\n renderInfo: { breakAround: true },\n },\n mbox: { signature: \"m\" },\n makebox: { signature: \"d() o o m\", renderInfo: { breakAround: true } },\n fbox: { signature: \"m\" },\n framebox: { signature: \"o o m\", renderInfo: { breakAround: true } },\n frame: { signature: \"m\", renderInfo: { breakAround: true } },\n parbox: { signature: \"o o o m m\", renderInfo: { breakAround: true } },\n raisebox: { signature: \"m o o m\" },\n marginpar: { signature: \"o m\", renderInfo: { breakAround: true } },\n colorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n fcolorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n rotatebox: { signature: \"o m m\" },\n scalebox: { signature: \"m o m\" },\n reflectbox: { signature: \"m\" },\n resizebox: { signature: \"s m m m\" },\n // Define environments\n newenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true },\n },\n renewenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true },\n },\n newtheorem: {\n signature: \"s m o m o\",\n renderInfo: { breakAround: true },\n },\n newfont: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n // Counters\n alph: { signature: \"m\" },\n Alph: { signature: \"m\" },\n arabic: { signature: \"m\" },\n roman: { signature: \"m\" },\n Roman: { signature: \"m\" },\n fnsymbol: { signature: \"m\" },\n // Other\n documentclass: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usepackage: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n item: {\n signature: \"o\",\n renderInfo: { hangingIndent: true, namedArguments: [\"label\"] },\n },\n value: { signature: \"m\" },\n centering: { renderInfo: { breakAround: true } },\n input: { signature: \"m\", renderInfo: { breakAround: true } },\n include: { signature: \"m\", renderInfo: { breakAround: true } },\n includeonly: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n discretionary: { signature: \"m m m\" },\n hyphenation: { signature: \"m m m\" },\n footnote: { signature: \"o m\", renderInfo: { inParMode: true } },\n footnotemark: { signature: \"o\" },\n footnotetext: { signature: \"o m\", renderInfo: { inParMode: true } },\n caption: {\n signature: \"o m\",\n renderInfo: { inParMode: true, breakAround: true },\n },\n // Math Commands\n sqrt: { signature: \"o m\", renderInfo: { inMathMode: true } },\n frac: { signature: \"m m\", renderInfo: { inMathMode: true } },\n stackrel: { signature: \"m m\" },\n ensuremath: { signature: \"m\", renderInfo: { inMathMode: true } },\n // Layout commands\n abstract: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n maketitle: { renderInfo: { breakAround: true } },\n doublespacing: { renderInfo: { breakAround: true } },\n singlespacing: { renderInfo: { breakAround: true } },\n author: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n date: { signature: \"o m\", renderInfo: { breakAround: true } },\n thanks: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n // amsart document class adds an optional argument\n title: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true },\n },\n pagenumbering: { signature: \"m\", renderInfo: { breakAround: true } },\n pagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n thispagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n // Colors\n definecolor: { signature: \"m m m\", renderInfo: { breakAround: true } },\n pagecolor: { signature: \"o m\", renderInfo: { breakAround: true } },\n nopagecolor: { renderInfo: { breakAround: true } },\n multicolumn: { signature: \"m m m\" },\n // Graphics\n includegraphics: {\n signature: \"s o o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n rule: { signature: \"o m m\" },\n // Sectioning\n part: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n chapter: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n section: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subsubsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n paragraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n subparagraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"],\n },\n },\n appendix: { renderInfo: { breakAround: true, inParMode: true } },\n frontmatter: { renderInfo: { breakAround: true, inParMode: true } },\n mainmatter: { renderInfo: { breakAround: true, inParMode: true } },\n backmatter: { renderInfo: { breakAround: true, inParMode: true } },\n // Citing and references\n bibitem: { signature: \"o m\", renderInfo: { hangingIndent: true } },\n cite: { signature: \"o m\" },\n // Fonts\n textrm: { signature: \"m\", renderInfo: { inParMode: true } },\n textit: { signature: \"m\", renderInfo: { inParMode: true } },\n textmd: { signature: \"m\", renderInfo: { inParMode: true } },\n textbf: { signature: \"m\", renderInfo: { inParMode: true } },\n textup: { signature: \"m\", renderInfo: { inParMode: true } },\n textsl: { signature: \"m\", renderInfo: { inParMode: true } },\n textsf: { signature: \"m\", renderInfo: { inParMode: true } },\n textsc: { signature: \"m\", renderInfo: { inParMode: true } },\n texttt: { signature: \"m\", renderInfo: { inParMode: true } },\n emph: { signature: \"m\", renderInfo: { inParMode: true } },\n textnormal: { signature: \"m\", renderInfo: { inParMode: true } },\n uppercase: { signature: \"m\", renderInfo: { inParMode: true } },\n mathbf: { signature: \"m\" },\n mathsf: { signature: \"m\" },\n mathtt: { signature: \"m\" },\n mathit: { signature: \"m\" },\n mathnormal: { signature: \"m\" },\n mathcal: { signature: \"m\" },\n mathrm: { signature: \"m\" },\n // Other\n setlength: { signature: \"m m\", renderInfo: { breakAround: true } },\n ref: { signature: \"s m\" },\n label: { signature: \"o m\" }, // cleveref changes \\label to have this signature\n printbibliography: { renderInfo: { breakAround: true } },\n addtocontents: { signature: \"m m\", renderInfo: { breakAround: true } },\n addcontentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n contentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n bibliography: { signature: \"m\", renderInfo: { breakAround: true } },\n bibliographystyle: { signature: \"m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n document: {\n processContent: (nodes) => {\n trim(nodes);\n return nodes;\n },\n },\n array: { signature: \"o m\", renderInfo: { alignContent: true } },\n description: { signature: \"o\", processContent: cleanEnumerateBody },\n enumerate: {\n signature: \"o\",\n processContent: cleanEnumerateBody,\n renderInfo: { pgfkeysArgs: true },\n },\n itemize: { signature: \"o\", processContent: cleanEnumerateBody },\n trivlist: { signature: \"o\", processContent: cleanEnumerateBody },\n list: { signature: \"m m\", processContent: cleanEnumerateBody },\n figure: { signature: \"o\" },\n \"figure*\": { signature: \"o\" },\n filecontents: { signature: \"o m\" },\n \"filecontents*\": { signature: \"o m\" },\n minipage: { signature: \"o o o m\" },\n picture: { signature: \"r() d()\" },\n tabbing: { renderInfo: { alignContent: true } },\n table: { signature: \"o\" },\n tabular: { signature: \"o m\", renderInfo: { alignContent: true } },\n \"tabular*\": { signature: \"m o m\", renderInfo: { alignContent: true } },\n thebibliography: {\n signature: \"m\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"bibitem\"),\n },\n // Math\n math: { renderInfo: { inMathMode: true } },\n};\n", "import { arg } from \"@unified-latex/unified-latex-builder\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { parse as parseArgspec } from \"@unified-latex/unified-latex-util-argspec\";\nimport { Node } from \"@unified-latex/unified-latex-util-argspec/libs/argspec-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nconst argSpecM = parseArgspec(\"m\")[0];\nconst argSpecO = parseArgspec(\"o\")[0];\nconst argSpecRDelim: { [delim: string]: Node } = {};\n\n/**\n * This argument parser parses arguments in the form of\n * - [\u27E8key=value list\u27E9]\u27E8character\u27E9\u27E8source code\u27E9\u27E8same character\u27E9\n * - [\u27E8key=value list\u27E9]{\u27E8source code\u27E9}\n */\nexport const argumentParser: ArgumentParser = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecO, startPos);\n\n let codeArg: Argument | null = null;\n let codeArgNodesRemoved: number = 0;\n const nextNode = nodes[startPos];\n if (match.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim[delim] =\n argSpecRDelim[delim] || parseArgspec(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument(\n nodes,\n argSpecRDelim[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n\n return {\n args: [optionalArg || arg(null), codeArg || arg(null)],\n nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved,\n };\n};\n", "import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { argumentParser } from \"./libs/argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n lstset: { signature: \"m\" },\n lstinline: { argumentParser: argumentParser },\n lstinputlisting: { signature: \"o m\" },\n lstdefinestyle: { signature: \"m m\" },\n lstnewenvironment: { signature: \"m o o m m\" },\n lstMakeShortInline: { signature: \"o m\" },\n lstDeleteShortInline: { signature: \"m\" },\n lstdefineformat: { signature: \"m m\" },\n lstdefinelanguage: { signature: \"o m o m o\" },\n lstalias: { signature: \"o m o m\" },\n lstloadlanguages: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n see: { signature: \"m m\" },\n seealso: { signature: \"m m\" },\n seename: { signature: \"m\" },\n alsoname: { signature: \"m\" },\n index: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n mathtoolsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n mathllap: {\n signature: \"o m\",\n },\n mathrlap: {\n signature: \"o m\",\n },\n mathclap: {\n signature: \"o m\",\n },\n clap: {\n signature: \"m\",\n },\n mathmbox: {\n signature: \"m\",\n },\n mathmakebox: {\n signature: \"o o m\",\n },\n cramped: {\n signature: \"o m\",\n },\n crampedllap: {\n signature: \"o m\",\n },\n crampedrlap: {\n signature: \"o m\",\n },\n crampedclap: {\n signature: \"o m\",\n },\n crampedsubstack: {\n signature: \"o m\",\n },\n smashoperator: {\n signature: \"o m\",\n },\n newtagform: {\n signature: \"m o m m\",\n },\n renewtagform: {\n signature: \"m o m m\",\n },\n usetagform: {\n signature: \"m\",\n },\n xleftrightarrow: { signature: \"o m\" },\n xLeftarrow: { signature: \"o m\" },\n xhookleftarrow: { signature: \"o m\" },\n xmapsto: { signature: \"o m\" },\n xRightarrow: { signature: \"o m\" },\n xLeftrightarrow: { signature: \"o m\" },\n xhookrightarrow: { signature: \"o m\" },\n underbracket: { signature: \"o o m\" },\n overbracket: { signature: \"o o m\" },\n underbrace: { signature: \"m\" },\n overbrace: { signature: \"m\" },\n shoveleft: { signature: \"o m\" },\n shoveright: { signature: \"o m\" },\n ArrowBetweenLines: { signature: \"s o\" },\n vdotswithin: { signature: \"m\" },\n shortdotswithin: { signature: \"s m\" },\n DeclarePairedDelimiter: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclarePairedDelimiterX: {\n signature: \"m o m m m\",\n renderInfo: { breakAround: true },\n },\n DeclarePairedDelimiterXPP: {\n signature: \"m o m m m m m\",\n renderInfo: { breakAround: true },\n },\n prescript: { signature: \"m m m\" },\n DeclareMathSizes: { signature: \"m m m m\" },\n newgathered: { signature: \"m m m m\" },\n renewgathered: { signature: \"m m m m\" },\n splitfrac: { signature: \"m m\" },\n splitdfrac: { signature: \"m m\" },\n xmathstrut: { signature: \"o m\" },\n // amsthm\n newtheorem: { signature: \"s m o m o\", renderInfo: { breakAround: true } },\n theoremstyle: { signature: \"m\", renderInfo: { breakAround: true } },\n newtheoremstyle: {\n signature: \"m m m m m m m m m\",\n renderInfo: { breakAround: true },\n },\n // amsmath\n text: { signature: \"m\", renderInfo: { inMathMode: false } },\n // amsfonts\n mathbb: { signature: \"m\" },\n mathscr: { signature: \"m\" },\n mathfrak: { signature: \"m\" },\n frak: { signature: \"m\" },\n Bdd: { signature: \"m\" },\n bold: { signature: \"m\" },\n // amsopn\n operatorname: { signature: \"s m\" },\n DeclareMathOperator: {\n signature: \"s m m\",\n renderInfo: { breakAround: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n crampedsubarray: {\n signature: \"m\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n matrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n pmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n \"matrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"pmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"smallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"psmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n \"Vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true },\n },\n multilined: { signature: \"o o\", renderInfo: { inMathMode: true } },\n cases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"cases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n dcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"dcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n rcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"rcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n drcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"drcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n spreadlines: { signature: \"m\", renderInfo: { inMathMode: true } },\n lgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n rgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n // amsmath\n \"align*\": { renderInfo: { inMathMode: true, alignContent: true } },\n align: { renderInfo: { inMathMode: true, alignContent: true } },\n aligned: { renderInfo: { inMathMode: true, alignContent: true } },\n \"alignat*\": { renderInfo: { inMathMode: true, alignContent: true } },\n alignat: { renderInfo: { inMathMode: true, alignContent: true } },\n \"equation*\": { renderInfo: { inMathMode: true } },\n equation: { renderInfo: { inMathMode: true } },\n \"gather*\": { renderInfo: { inMathMode: true } },\n gather: { renderInfo: { inMathMode: true } },\n \"multline*\": { renderInfo: { inMathMode: true } },\n multline: { renderInfo: { inMathMode: true } },\n \"flalign*\": { renderInfo: { inMathMode: true, alignContent: true } },\n flalign: { renderInfo: { inMathMode: true, alignContent: true } },\n split: { renderInfo: { inMathMode: true } },\n // Math environments\n displaymath: { renderInfo: { inMathMode: true } },\n // Typical amsthm environments\n theorem: { signature: \"o\" },\n lemma: { signature: \"o\" },\n definition: { signature: \"o\" },\n proposition: { signature: \"o\" },\n corollary: { signature: \"o\" },\n remark: { signature: \"!o\" },\n example: { signature: \"!o\" },\n proof: { signature: \"o\" },\n};\n", "import { arg } from \"@unified-latex/unified-latex-builder\";\nimport { Argument, ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { parse as parseArgspec } from \"@unified-latex/unified-latex-util-argspec\";\nimport { Node } from \"@unified-latex/unified-latex-util-argspec/libs/argspec-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nconst argSpecM = parseArgspec(\"m\")[0];\nconst argSpecO = parseArgspec(\"o\")[0];\nconst argSpecRDelim: { [delim: string]: Node } = {};\n\n/**\n * This argument parser parses arguments in the form of\n * - [\u27E8options\u27E9]{\u27E8language\u27E9}\u27E8delim\u27E9\u27E8code\u27E9\u27E8delim\u27E9\n * - [\u27E8options\u27E9]{\u27E8language\u27E9}{\u27E8code\u27E9}\n */\nexport const argumentParser: ArgumentParser = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecO, startPos);\n\n const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } =\n gobbleSingleArgument(nodes, argSpecM, startPos);\n\n let codeArg: Argument | null = null;\n let codeArgNodesRemoved: number = 0;\n const nextNode = nodes[startPos];\n if (match.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim[delim] =\n argSpecRDelim[delim] || parseArgspec(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument(\n nodes,\n argSpecRDelim[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n\n return {\n args: [\n optionalArg || arg(null),\n languageArg || arg(null),\n codeArg || arg(null),\n ],\n nodesRemoved:\n optionalArgNodesRemoved +\n languageArgNodesRemoved +\n codeArgNodesRemoved,\n };\n};\n", "import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { argumentParser } from \"./libs/argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n mint: { argumentParser: argumentParser },\n mintinline: { argumentParser: argumentParser },\n inputminted: { argumentParser: argumentParser },\n usemintedstyle: { signature: \"m\" },\n setminted: { signature: \"o m\" },\n setmintedinline: { signature: \"o m\" },\n newmint: { signature: \"o m m\" },\n newminted: { signature: \"o m m\" },\n newmintinline: { signature: \"o m m\" },\n newmintedfile: { signature: \"o m m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n NiceMatrixOptions: {\n signature: \"m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n NiceTabular: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceMatrixBlock: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceArrayWithDelims: {\n signature: \"m m o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n pNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n bNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n BNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n vNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n VNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n NiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n pNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n bNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n BNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n vNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n VNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true },\n },\n};\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n systeme: {\n signature: \"s o o m\",\n renderInfo: { inMathMode: true },\n },\n sysdelim: {\n signature: \"m m\",\n },\n syseqsep: { signature: \"m\" },\n sysalign: { signature: \"m\" },\n syssignspace: { signature: \"m\" },\n syseqspace: { signature: \"m\" },\n syslineskipcoeff: { signature: \"m\" },\n syseqivsign: { signature: \"m\" },\n sysaddeqsign: { signature: \"m\" },\n sysremoveeqsign: { signature: \"m\" },\n sysextracolonsign: { signature: \"m\" },\n syscodeextracol: { signature: \"m\" },\n sysautonum: { signature: \"m\" },\n syssubstitute: { signature: \"m\" },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as SystemeSpec from \"./types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { SystemePegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\ntype SystemeMatchers = {\n at?: string;\n equals?: string;\n equationSeparator?: string;\n mathOperations?: string[];\n whitelistedVariables?: (string | Ast.String | Ast.Macro)[];\n};\n\nfunction createMatchers({\n at = \"@\",\n equals = \"=\",\n equationSeparator = \",\",\n mathOperations = [\"+\", \"-\"],\n whitelistedVariables,\n}: SystemeMatchers = {}) {\n let isVar: (node: Ast.Node) => boolean = (node: Ast.Node) =>\n match.anyString(node) && !!node.content.match(/[a-zA-Z]/);\n if (whitelistedVariables) {\n // Unwrap all strings\n whitelistedVariables = whitelistedVariables.map((v) =>\n match.anyString(v) ? v.content : v\n );\n const macros = whitelistedVariables.filter((v) =>\n match.anyMacro(v)\n ) as Ast.Macro[];\n const strings = whitelistedVariables.filter(\n (v) => typeof v === \"string\"\n ) as string[];\n const macroHash = Object.fromEntries(macros.map((v) => [v.content, v]));\n const stringHash = Object.fromEntries(strings.map((s) => [s, s]));\n const macroMatcher = match.createMacroMatcher(macroHash);\n isVar = (node: Ast.Node) =>\n macroMatcher(node) ||\n (match.anyString(node) && !!stringHash[node.content]);\n }\n return {\n isSep: (node: Ast.Node) => match.string(node, equationSeparator),\n isVar,\n isOperation: (node: Ast.Node) =>\n mathOperations.some((op) => match.string(node, op)),\n isEquals: (node: Ast.Node) => match.string(node, equals),\n isAt: (node: Ast.Node) => match.string(node, at),\n isSubscript: (node: Ast.Node) =>\n match.macro(node, \"_\") && node.escapeToken === \"\",\n isWhitespace: match.whitespace,\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the contents of the `\\systeme{...}` macro\n */\nexport function parse(\n ast: Ast.Node[],\n options?: SystemeMatchers\n): SystemeSpec.Line[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 SystemePegParser.parse(\n ast,\n createMatchers(options || {})\n ) as SystemeSpec.Line[];\n}\n", "import { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport * as SystemeSpec from \"./types\";\n\n/**\n * Print an `systeme` argument specification AST to a string.\n */\nexport function printRaw(node: SystemeSpec.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 \"annotation\":\n return `${latexPrintRaw(node.marker)}${latexPrintRaw(\n node.content\n )}`;\n case \"item\":\n return `${node.op ? latexPrintRaw(node.op) : \"\"}${latexPrintRaw(\n node.content\n )}`;\n case \"equation\":\n const left = node.left.map((n) => printRaw(n)).join(\"\");\n const right = latexPrintRaw(node.right);\n const equals = node.equals ? latexPrintRaw(node.equals) : \"\";\n return `${left}${equals}${right}`;\n case \"line\":\n const equation = node.equation ? printRaw(node.equation) : \"\";\n const annotation = node.annotation ? printRaw(node.annotation) : \"\";\n const sep = node.sep ? latexPrintRaw(node.sep) : \"\";\n\n const body = `${equation}${annotation}${sep}`;\n if (node.trailingComment) {\n return latexPrintRaw([body, node.trailingComment]);\n }\n\n return body;\n\n default:\n console.warn(\n `Unknown node type \"${(node as any).type}\" for node`,\n node\n );\n return \"\";\n }\n}\n", "import * as SystemeSpec from \"./types\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { arrayJoin } from \"@unified-latex/unified-latex-util-split\";\nimport { parse } from \"./parser\";\nimport { structuredClone } from \"@unified-latex/structured-clone\";\nimport { deleteComments } from \"@unified-latex/unified-latex-util-comments\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { getArgsContent } from \"@unified-latex/unified-latex-util-arguments\";\n\nconst AMP: Ast.String = { type: \"string\", content: \"&\" };\nconst SEP: Ast.Macro = { type: \"macro\", content: \"\\\\\" };\nconst QUAD: Ast.Macro = { type: \"macro\", content: \"quad\" };\nconst PLUS: Ast.String = { type: \"string\", content: \"+\" };\nconst COLUMN_KERN_ADJUSTMENT: Ast.Node[] = [\n { type: \"string\", content: \"@\" },\n {\n type: \"group\",\n content: [\n { type: \"macro\", content: \"mkern\" },\n { type: \"string\", content: \"5mu\" },\n ],\n },\n];\n\n/**\n * Return a map giving the sorted index of each variable in `vars`. There\n * may be duplicated variables in `vars`. The map will send duplicates to the same index.\n *\n * @param {Ast.Node[][]} vars\n * @returns\n */\nfunction sortVariables(\n vars: Ast.Node[][],\n whitelistedVariables?: Ast.Node[] | null\n) {\n const varMap = new Map(vars.map((v) => [v, printRaw(v)]));\n const varNames = Array.from(new Set(varMap.values()));\n varNames.sort();\n const nameToPos = whitelistedVariables\n ? new Map(whitelistedVariables.map((v, i) => [printRaw(v), i]))\n : new Map(varNames.map((name, i) => [name, i]));\n\n return new Map(\n Array.from(varMap.entries()).map(([variable, name]) => {\n return [variable, nameToPos.get(name) ?? -1];\n })\n );\n}\n\n/**\n * Make an array of arrays representing the operation/content of each item in an equation\n * + the annotation. The return value is suitable to be joined with `&` for the body of an array.\n */\nfunction processLine(\n line: SystemeSpec.Line,\n numVars: number,\n varOrder: Map,\n hasEquals: boolean,\n hasAnnotation: boolean\n) {\n const ret: Ast.Node[][] = [];\n if (line.equation) {\n // We need to combine all non-var items into a single expression\n const nonVarItems = line.equation.left.filter(\n (item) => item.variable == null\n );\n const varItems = line.equation.left.filter(\n (item) => item.variable != null\n );\n let nonVarTerm: SystemeSpec.Item | null = null;\n if (nonVarItems.length === 1) {\n nonVarTerm = nonVarItems[0];\n } else if (nonVarItems.length > 1) {\n // We need to combine all the items. We do so by constructing a new item with the rest of the item's contents\n // added on the back\n nonVarTerm = {\n ...nonVarItems[0],\n content: nonVarItems[0].content.concat(\n nonVarItems.slice(1).flatMap((item) => {\n if (item.op) {\n return [item.op, ...item.content];\n }\n return [PLUS, ...item.content];\n })\n ),\n };\n }\n\n const allItems = nonVarTerm ? varItems.concat(nonVarTerm) : varItems;\n\n const indexToItem = new Map(\n allItems.map((item) => {\n if (item.variable == null) {\n return [numVars - 1, item];\n }\n return [varOrder.get(item.variable), item];\n })\n );\n\n let isFirstItem = true;\n for (let i = 0; i < numVars; i++) {\n const item = indexToItem.get(i);\n if (item) {\n if (\n isFirstItem &&\n (match.string(item.op, \"+\") || item.op == null)\n ) {\n // If the first item starts with a plus or doesn't have a starting operation,\n // we don't use a starting symbol.\n ret.push([]);\n ret.push(item.content);\n } else {\n // If we are not the first item, we always push an operation\n ret.push([item.op || PLUS]);\n ret.push(item.content);\n }\n isFirstItem = false;\n } else {\n // If there is no item for this position, we push a blank operation and content\n ret.push([]);\n ret.push([]);\n }\n }\n // If we have an equals, we need to push its contents\n if (hasEquals) {\n const equalsPart = (\n line.equation.equals ? [line.equation.equals] : []\n ).concat(line.equation.right);\n ret.push(equalsPart);\n }\n }\n // If we have an annotation, we need to push it or a blank\n if (hasAnnotation) {\n ret.push(line.annotation ? line.annotation.content : []);\n }\n\n return ret;\n}\n\n/**\n * Add kerning information to the array specification. E.g. `crl` becomes `c@{\\mkern5mu}r@{\\mkern5mu}l`.\n * This is so the operations when typesetting a system of equations are properly spaced.\n */\nfunction arraySpecToSpacedArraySpec(spec: string, hasAnnotation?: boolean) {\n const annotationSpec = hasAnnotation ? spec.charAt(spec.length - 1) : \"\";\n const bodySpec = hasAnnotation ? spec.slice(0, spec.length - 1) : spec;\n\n const bodyStrings: Ast.Node[][] = Array.from(bodySpec).map((x) => [\n { type: \"string\", content: x },\n ]);\n const body = arrayJoin(bodyStrings, COLUMN_KERN_ADJUSTMENT);\n return annotationSpec\n ? body.concat({ type: \"string\", content: annotationSpec })\n : body;\n}\n\n/**\n * Extract the variables from a systeme system of equations.\n */\nexport function extractVariables(nodes: SystemeSpec.Node[]): Ast.Node[][] {\n return nodes.flatMap((node) => {\n if (node.type === \"line\" && node.equation) {\n return extractVariables(node.equation.left);\n }\n if (node.type === \"equation\") {\n return node.left.flatMap((item) =>\n item.variable ? [item.variable] : []\n );\n }\n if (node.type === \"item\") {\n return node.variable ? [node.variable] : [];\n }\n return [];\n });\n}\n\n/**\n * Remove any whitespace from the variable list (including an explicit \" \" string).\n * As well, filter out any non-macro/non-string items.\n */\nfunction normalizeVariableWhitelist(\n vars: (string | Ast.Node)[] | null | undefined\n) {\n if (!vars) {\n return null;\n }\n const normalized: Ast.Node[] = vars.map((v) =>\n typeof v === \"string\" ? { type: \"string\", content: v } : v\n );\n const ret = normalized.filter(\n (v) =>\n (match.anyMacro(v) || match.anyString(v)) &&\n !match.string(v, \" \") &&\n !match.whitespace(v)\n ) as (Ast.Macro | Ast.String)[];\n return ret;\n}\n\n/**\n * Lays out the contents of a \\systeme{...} macro as an array. This function sorts the variables\n * in alphabetical order and lays out any annotations. An `\\begin{array}...\\end{array}` environment\n * is returned.\n *\n * If `properSpacing=true` then kerning information will be included in the array specification to space\n * the operators correctly. This kerning information will make the specification long (and may make it incompatible\n * with KaTeX).\n *\n * An optional whitelist of variables may be supplied. If supplied, only listed items will count as variables and\n * the order of variable appearance will be the same as the order of the whitelisted variables.\n */\nexport function systemeContentsToArray(\n nodes: Ast.Node[],\n options?: {\n properSpacing?: boolean;\n whitelistedVariables?: (string | Ast.String | Ast.Macro)[];\n }\n) {\n nodes = structuredClone(nodes);\n deleteComments(nodes);\n const { properSpacing = true, whitelistedVariables } = options || {};\n const coercedWhitelistedVariables =\n normalizeVariableWhitelist(whitelistedVariables);\n const systemeAst = parse(nodes, { whitelistedVariables });\n const vars = extractVariables(systemeAst);\n const varOrder = sortVariables(vars, coercedWhitelistedVariables);\n let numVars = coercedWhitelistedVariables\n ? coercedWhitelistedVariables.length\n : Math.max(...Array.from(varOrder.values())) + 1;\n // If there are terms with no variable, we need a spot for them\n if (\n systemeAst.some((line) => {\n if (line.equation) {\n return line.equation.left.some((item) => item.variable == null);\n }\n })\n ) {\n numVars += 1;\n }\n const hasEquals = systemeAst.some(\n (line) => line.equation && line.equation.equals\n );\n const hasAnnotation = systemeAst.some((line) => line.annotation);\n\n let rows = systemeAst.map((line) =>\n processLine(line, numVars, varOrder, hasEquals, hasAnnotation)\n );\n // If we have no leading `-` signs (e.g., only leading `+` or bank signs)\n // We don't need space for the first operation to be stored\n const noLeadingOperation = rows.every((row) => row[0].length === 0);\n\n // Every item in an equation has a centered operation and a right-aligned variable part.\n let arraySignature = Array.from({ length: numVars }, () => \"cr\").join(\"\");\n if (noLeadingOperation) {\n // We might not have a leading operation on the first item(s)\n arraySignature = arraySignature.slice(1);\n rows = rows.map((row) => row.slice(1));\n }\n if (hasEquals) {\n // The part after the equals is left-aligned\n arraySignature += \"l\";\n }\n if (hasAnnotation) {\n // The annotation is left-aligned\n arraySignature += \"l\";\n // We also manually insert space in front of any annotation\n rows = rows.map((row) => {\n if (row[row.length - 1].length === 0) {\n return row;\n }\n return [\n ...row.slice(0, row.length - 1),\n [QUAD, { type: \"whitespace\" }, ...row[row.length - 1]],\n ];\n });\n }\n\n // By default, the array signature will put lots of space between items.\n // We can correct for that manually.\n const arraySignatureWithSpacing: Ast.Node[] = properSpacing\n ? arraySpecToSpacedArraySpec(arraySignature, hasAnnotation)\n : [{ type: \"string\", content: arraySignature }];\n\n const bodyRows = rows.map((row) => arrayJoin(row, AMP));\n const body = arrayJoin(bodyRows, SEP);\n\n const ret: Ast.Environment = {\n type: \"environment\",\n env: \"array\",\n args: [\n {\n type: \"argument\",\n openMark: \"{\",\n closeMark: \"}\",\n content: arraySignatureWithSpacing,\n },\n ],\n content: body,\n };\n\n return ret;\n}\n\n/**\n * Find any systeme definitions, e.g. `\\sysdelim{.}{.}`, and attach their information\n * to the renderInfo of of the systeme macros.\n *\n */\nexport function attachSystemeSettingsAsRenderInfo(ast: Ast.Ast) {\n const systemeMatcher = match.createMacroMatcher([\"systeme\", \"sysdelim\"]);\n\n visit(\n ast,\n (nodes, info) => {\n if (!info.context.inMathMode || !nodes.some(systemeMatcher)) {\n return;\n }\n // Find the positions of the systeme and sysdelim macros\n const systemeLocations = nodes.flatMap((node, i) =>\n match.macro(node, \"systeme\") ? i : []\n );\n const sysdelimLocations = nodes.flatMap((node, i) =>\n match.macro(node, \"sysdelim\") ? i : []\n );\n\n if (\n systemeLocations.length === 0 ||\n sysdelimLocations.length === 0\n ) {\n return;\n }\n\n for (const i of systemeLocations) {\n // Find any sysdelim macros that occur before\n const lastSysdelim = Math.max(\n ...sysdelimLocations.filter((loc) => loc < i)\n );\n if (lastSysdelim >= 0) {\n const node = nodes[i];\n const sysdelimMacro = nodes[lastSysdelim];\n if (!match.anyMacro(sysdelimMacro)) {\n throw new Error(\n `Expecting sysdelim macro but found \"${printRaw(\n sysdelimMacro\n )}\"`\n );\n }\n const args = getArgsContent(sysdelimMacro);\n updateRenderInfo(node, { sysdelims: args });\n }\n }\n },\n {\n test: Array.isArray,\n includeArrays: true,\n }\n );\n}\n", "// @ts-nocheck\n\n// globalThis polyfill from https://mathiasbynens.be/notes/globalthis\n(function () {\n if (typeof globalThis === \"object\") return;\n Object.defineProperty(Object.prototype, \"__magic__\", {\n get: function () {\n return this;\n },\n configurable: true, // This makes it possible to `delete` the getter later.\n });\n __magic__.globalThis = __magic__; // lolwat\n delete Object.prototype.__magic__;\n})();\n\nconst clone =\n typeof globalThis.structuredClone === \"function\"\n ? globalThis.structuredClone\n : (obj: any) => JSON.parse(JSON.stringify(obj));\n\n/**\n * Wrapper around the built-in structured clone. Uses `JSON.parse(JSON.stringify(...))`\n * as a fallback.\n */\nexport function structuredClone(obj: T): T {\n return clone(obj);\n}\n", "import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\nimport { tikzCommandArgumentParser } from \"./libs/tikz-command-argument-parser\";\n\nexport const macros: MacroInfoRecord = {\n pgfkeys: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikzoption: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikzstyle: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usetikzlibrary: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n usepgfmodule: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n usepgflibrary: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfplotsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n pgfplotstabletypeset: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n tikz: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: { namedArguments: [\"animation\", \"options\", \"command\"] },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n tikzpicture: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n axis: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n scope: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgfonlayer: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgflowlevelscope: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgfviewboxscope: {\n signature: \"m m m m m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n pgftransparencygroup: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent,\n },\n behindforegroundpath: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent,\n },\n pgfmetadecoration: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent,\n },\n colormixin: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n};\n\n/**\n * Attach macro arguments for all macros that are only available within a tikz environment.\n */\nfunction processTikzEnvironmentContent(nodes: Ast.Node[]): Ast.Node[] {\n attachMacroArgsInArray(nodes, conditionalMacros);\n return nodes;\n}\n\n/**\n * Macros that are only parsed inside a tikz environment.\n */\nexport const conditionalMacros: MacroInfoRecord = {\n pgfextra: { signature: \"m\" },\n beginpgfgraphicnamed: { signature: \"m\" },\n pgfrealjobname: { signature: \"m\" },\n pgfplotstreampoint: { signature: \"m\" },\n pgfplotstreampointoutlier: { signature: \"m\" },\n pgfplotstreamspecial: { signature: \"m\" },\n pgfplotxyfile: { signature: \"m\" },\n pgfplotxyzfile: { signature: \"m\" },\n pgfplotfunction: { signature: \"mmm\" },\n pgfplotgnuplot: { signature: \"o m\" },\n pgfplothandlerrecord: { signature: \"m\" },\n pgfdeclareplothandler: { signature: \"m m m\" },\n pgfdeclarelayer: { signature: \"m\" },\n pgfsetlayers: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfonlayer: { signature: \"m\" },\n startpgfonlayer: { signature: \"m\" },\n pgfdeclarehorizontalshading: { signature: \"o m m m \" },\n pgfdeclareradialshading: { signature: \"o m m m\" },\n pgfdeclarefunctionalshading: { signature: \"o m m m m m\" },\n pgfshadecolortorgb: { signature: \"m m\" },\n pgfshadecolortocmyk: { signature: \"m m\" },\n pgfshadecolortogray: { signature: \"m m\" },\n pgfuseshading: { signature: \"m\" },\n pgfshadepath: { signature: \"m m\" },\n pgfsetadditionalshadetransform: { signature: \"m\" },\n pgfsetstrokeopacity: { signature: \"m\" },\n pgfsetfillopacity: { signature: \"m\" },\n pgfsetblendmode: { signature: \"m\" },\n pgfdeclarefading: { signature: \"m m\" },\n pgfsetfading: { signature: \"m m\" },\n pgfsetfadingforcurrentpath: { signature: \"m m\" },\n pgfsetfadingforcurrentpathstroked: { signature: \"m m\" },\n pgfanimateattribute: { signature: \"m m\" },\n pgfsnapshot: { signature: \"m\" },\n pgfqpoint: { signature: \"m m\" },\n pgfqpointxy: { signature: \"m m\" },\n pgfqpointxyz: { signature: \"m m m\" },\n pgfqpointscale: { signature: \"m m\" },\n pgfpathqmoveto: { signature: \"m m\" },\n pgfpathqlineto: { signature: \"m m\" },\n pgfpathqcurveto: { signature: \"m m m m m m\" },\n pgfpathqcircle: { signature: \"m\" },\n pgfqbox: { signature: \"m\" },\n pgfqboxsynced: { signature: \"m\" },\n pgfaliasimage: { signature: \"m m\" },\n pgfuseimage: { signature: \"m\" },\n pgfimage: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclaremask: { signature: \"o m m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclarepatternformonly: { signature: \"o m m m m m\" },\n pgfdeclarepatterninherentlycolored: { signature: \"o m m m m m\" },\n pgfsetfillpattern: { signature: \"m m\" },\n // Coordinate canvas and nonlinear transformations\n pgftransformshift: { signature: \"m\" },\n pgftransformxshift: { signature: \"m\" },\n pgftransformyshift: { signature: \"m\" },\n pgftransformscale: { signature: \"m\" },\n pgftransformxscale: { signature: \"m\" },\n pgftransformyscale: { signature: \"m\" },\n pgftransformxslant: { signature: \"m\" },\n pgftransformyslant: { signature: \"m\" },\n pgftransformrotate: { signature: \"m\" },\n pgftransformtriangle: { signature: \"m m m\" },\n pgftransformcm: { signature: \"m m m m m\" },\n pgftransformarrow: { signature: \"m m\" },\n pgftransformlineattime: { signature: \"m m m\" },\n pgftransformcurveattime: { signature: \"m m m m m\" },\n pgftransformarcaxesattime: { signature: \"m m m m m m\" },\n pgfgettransform: { signature: \"m\" },\n pgfsettransform: { signature: \"m\" },\n pgfgettransformentries: { signature: \"m m m m m m\" },\n pgfsettransformentries: { signature: \"m m m m m m\" },\n pgfpointtransformed: { signature: \"m\" },\n pgflowlevel: { signature: \"m\" },\n pgflowlevelobj: { signature: \"m m\" },\n pgflowlevelscope: { signature: \"m\" },\n startpgflowlevelscope: { signature: \"m\" },\n pgfviewboxscope: { signature: \"m m m m m\" },\n startpgfviewboxscope: { signature: \"m m m m m\" },\n pgftransformnonlinear: { signature: \"m\" },\n pgfpointtransformednonlinear: { signature: \"m\" },\n pgfsetcurvilinearbeziercurve: { signature: \"m m m m\" },\n pgfcurvilineardistancetotime: { signature: \"m\" },\n pgfpointcurvilinearbezierorthogonal: { signature: \"m m\" },\n pgfpointcurvilinearbezierpolar: { signature: \"m m\" },\n // Matrices\n pgfmatrix: { signature: \"m m m m m m m\" },\n pgfsetmatrixcolumnsep: { signature: \"m\" },\n pgfmatrixnextcell: { signature: \"o\" },\n pgfsetmatrixrowsep: { signature: \"m\" },\n pgfmatrixendrow: { signature: \"o\" },\n // Nodes and shapes\n pgfnode: { signature: \"m m m m m\" },\n pgfmultipartnode: { signature: \"m m m m\" },\n pgfcoordinate: { signature: \"m m\" },\n pgfnodealias: { signature: \"m m\" },\n pgfnoderename: { signature: \"m m\" },\n pgfpositionnodelater: { signature: \"m\" },\n pgfpositionnodenow: { signature: \"m\" },\n pgfnodepostsetupcode: { signature: \"m m\" },\n pgfpointanchor: { signature: \"m m\" },\n pgfpointshapeborder: { signature: \"m m\" },\n pgfdeclareshape: { signature: \"m m\" },\n saveddimen: { signature: \"m m\" },\n savedmacro: { signature: \" m\" },\n anchor: { signature: \"m m\" },\n deferredanchor: { signature: \"m m\" },\n anchorborder: { signature: \"m\" },\n backgroundpath: { signature: \"m\" },\n foregroundpath: { signature: \"m\" },\n behindbackgroundpath: { signature: \"m\" },\n beforebackgroundpath: { signature: \"m\" },\n beforeforegroundpath: { signature: \"m\" },\n behindforegroundpath: { signature: \"m\" },\n // Arrows\n pgfdeclarearrow: { signature: \"m\" },\n pgfarrowssettipend: { signature: \"m\" },\n pgfarrowssetbackend: { signature: \"m\" },\n pgfarrowssetlineend: { signature: \"m\" },\n pgfarrowssetvisualbackend: { signature: \"m\" },\n pgfarrowssetvisualtipend: { signature: \"m\" },\n pgfarrowshullpoint: { signature: \"m m\" },\n pgfarrowsupperhullpoint: { signature: \"m m\" },\n pgfarrowssave: { signature: \"m\" },\n pgfarrowssavethe: { signature: \"m\" },\n pgfarrowsaddtooptions: { signature: \"m\" },\n pgfarrowsaddtolateoptions: { signature: \"m\" },\n pgfarrowsaddtolengthscalelist: { signature: \"m\" },\n pgfarrowsaddtowidthscalelist: { signature: \"m\" },\n pgfarrowsthreeparameters: { signature: \"m\" },\n pgfarrowslinewidthdependent: { signature: \"m m m\" },\n pgfarrowslengthdependent: { signature: \"m\" },\n // Path\n pgfusepath: { signature: \"m\" },\n pgfsetlinewidth: { signature: \"m\" },\n pgfsetmiterlimit: { signature: \"m\" },\n pgfsetdash: { signature: \"m m\" },\n pgfsetstrokecolor: { signature: \"m\" },\n pgfsetcolor: { signature: \"m\" },\n pgfsetinnerlinewidth: { signature: \"m\" },\n pgfsetinnerstrokecolor: { signature: \"m\" },\n pgfsetarrowsstart: { signature: \"m\" },\n pgfsetarrowsend: { signature: \"m\" },\n pgfsetarrows: { signature: \"m\" },\n pgfsetshortenstart: { signature: \"m\" },\n pgfsetshortenend: { signature: \"m\" },\n pgfsetfillcolor: { signature: \"m\" },\n // Decorations\n pgfdeclaredecoration: { signature: \"m m m\" },\n state: { signature: \"m o m\" },\n pgfdecoratepath: { signature: \"m m\" },\n startpgfdecoration: { signature: \"m\" },\n pgfdecoration: { signature: \"m\" },\n pgfdecoratecurrentpath: { signature: \"m\" },\n pgfsetdecorationsegmenttransformation: { signature: \"m\" },\n pgfdeclaremetadecorate: { signature: \"m m m\" },\n pgfmetadecoration: { signature: \"m\" },\n startpgfmetadecoration: { signature: \"m\" },\n // Constructing paths\n pgfpathmoveto: { signature: \"m\" },\n pgfpathlineto: { signature: \"m\" },\n pgfpathcurveto: { signature: \"m m m\" },\n pgfpathquadraticcurveto: { signature: \"m m\" },\n pgfpathcurvebetweentime: { signature: \"m m m m m m\" },\n pgfpathcurvebetweentimecontinue: { signature: \"m m m m m m\" },\n pgfpatharc: { signature: \"m m m\" },\n pgfpatharcaxes: { signature: \"m m m m\" },\n pgfpatharcto: { signature: \"m m m m m m\" },\n pgfpatharctoprecomputed: { signature: \"m m m m m m m m\" },\n pgfpathellipse: { signature: \"m m m\" },\n pgfpathcircle: { signature: \"m m\" },\n pgfpathrectangle: { signature: \"m m\" },\n pgfpathrectanglecorners: { signature: \"m m\" },\n pgfpathgrid: { signature: \" o m m\" },\n pgfpathparabola: { signature: \"m m\" },\n pgfpathsine: { signature: \"m\" },\n pgfpathcosine: { signature: \"m\" },\n pgfsetcornersarced: { signature: \"m\" },\n \"pgf@protocolsizes\": { signature: \"m m\" },\n // Specifying coordinates\n pgfpoint: { signature: \"m m\" },\n pgfpointpolar: { signature: \"m m m\" },\n pgfpointxy: { signature: \"m m\" },\n pgfsetxvec: { signature: \"m\" },\n pgfsetyvec: { signature: \"m\" },\n pgfpointpolarxy: { signature: \"m m\" },\n pgfpointxyz: { signature: \"m m m\" },\n pgfsetzvec: { signature: \"m\" },\n pgfpointcylindrical: { signature: \"m m m\" },\n pgfpointspherical: { signature: \"m m m\" },\n pgfpointadd: { signature: \"m m\" },\n pgfpointscale: { signature: \"m m\" },\n pgfpointdiff: { signature: \"m m\" },\n pgfpointnormalised: { signature: \"m\" },\n pgfpointlineattime: { signature: \"m m m\" },\n pgfpointlineatdistance: { signature: \"m m m\" },\n pgfpointarcaxesattime: { signature: \"m m m m m m\" },\n pgfpointcurveattime: { signature: \"m m m m m\" },\n pgfpointborderrectangle: { signature: \"m m\" },\n pgfpointborderellipse: { signature: \"m m\" },\n pgfpointintersectionoflines: { signature: \"m m m m\" },\n pgfpointintersectionofcircles: { signature: \"m m m m m\" },\n pgfintersectionofpaths: { signature: \"m m\" },\n pgfpointintersectionsolution: { signature: \"m\" },\n pgfextractx: { signature: \"m m\" },\n pgfextracty: { signature: \"m m\" },\n pgfgetlastxy: { signature: \"m m\" },\n \"pgf@process\": { signature: \"m\" },\n // Heirarchical structres ...\n pgfsetbaseline: { signature: \"m\" },\n pgfsetbaselinepointnow: { signature: \"m\" },\n pgfsetbaselinepointlater: { signature: \"m\" },\n pgftext: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfuseid: { signature: \"m\" },\n pgfusetype: { signature: \"m\" },\n pgfidrefnextuse: { signature: \"m m\" },\n pgfidrefprevuse: { signature: \"m m\" },\n pgfaliasid: { signature: \"m m\" },\n pgfgaliasid: { signature: \"m m\" },\n pgfifidreferenced: { signature: \"m m m\" },\n pgfrdfabout: { signature: \"m\" },\n pgfrdfcontent: { signature: \"m\" },\n pgfrdfdatatype: { signature: \"m\" },\n pgfrdfhref: { signature: \"m\" },\n pgfrdfprefix: { signature: \"m\" },\n pgfrdfproperty: { signature: \"m\" },\n pgfrdfrel: { signature: \"m\" },\n pgfrdfresource: { signature: \"m\" },\n pgfrdfrev: { signature: \"m\" },\n pgfrdfsrc: { signature: \"m\" },\n pgfrdftypeof: { signature: \"m\" },\n pgfrdfvocab: { signature: \"m\" },\n pgferror: { signature: \"m\" },\n pgfwarning: { signature: \"m\" },\n path: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n draw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n fill: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n filldraw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n pattern: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n shade: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n clip: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n useasboundingbox: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n node: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n coordinate: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n graph: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true },\n },\n scoped: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: {\n namedArguments: [\"animation\", \"options\", \"command\"],\n breakAround: true,\n },\n },\n};\n", "import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n parse as parseArgspec,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\nconst OPTIONAL_ARGUMENT_ARG_SPEC = parseArgspec(\"o\")[0];\n\nfunction blankArg() {\n return arg([], { openMark: \"\", closeMark: \"\" });\n}\n\n/**\n * Find the arguments of a tikz command. Many tikz commands accept either\n * the a group as their only argument, or they scan their arguments until the first\n * `;` is found.\n *\n * This behavior cannot be achieved via a standard xparse spec.\n */\nexport const tikzCommandArgumentParser: ArgumentParser = (nodes, startPos) => {\n const origStartPos = startPos;\n let pos = startPos;\n let nodesRemoved = 0;\n\n const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos);\n let animationArg = blankArg();\n if (cursorPosAfterAnimations !== pos) {\n const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos);\n trim(argContent);\n animationArg = arg(argContent, {\n openMark: \" \",\n closeMark: \" \",\n });\n }\n nodesRemoved += cursorPosAfterAnimations - pos;\n\n const {\n argument: _optionalArgument,\n nodesRemoved: optionalArgumentNodesRemoved,\n } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos);\n nodesRemoved += optionalArgumentNodesRemoved;\n const optionalArg = _optionalArgument || blankArg();\n\n // Eat whitespace\n while (match.whitespace(nodes[pos])) {\n pos++;\n }\n const firstNode = nodes[pos];\n\n // If we're past the end of the array, give up.\n if (!firstNode) {\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n }\n\n // If we're a group, grab the contents and call it good.\n if (match.group(firstNode)) {\n const args = [animationArg, optionalArg, arg(firstNode.content)];\n nodes.splice(origStartPos, pos - origStartPos + 1);\n return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved };\n }\n\n // No group, so scan for a semicolon.\n const semicolonPosition = scan(nodes, \";\", { startIndex: pos });\n if (semicolonPosition != null) {\n const argNodes = nodes.splice(\n origStartPos,\n semicolonPosition - origStartPos + 1\n );\n trim(argNodes);\n const args = [animationArg, optionalArg, arg(argNodes)];\n return {\n args,\n nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved,\n };\n }\n\n // If there was no semicolon, give up.\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0,\n };\n};\n\n/**\n * Find the next index after all animation specs. If no animation specs are present,\n * return `startPos`.\n *\n * An animation spec looks like\n * ```\n * :rotate = { 0s=\"0\", 2s=\"90\", begin on=click }\n * ```\n * Any number can be listed. They start with a colon and have an equals sign followed by a group.\n */\nfunction eatAllAnimationSpecs(nodes: Ast.Node[], startPos: number): number {\n const colonPos = scan(nodes, \":\", {\n startIndex: startPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n\n if (!colonPos) {\n return startPos;\n }\n\n let lastMatchPos = startPos;\n let i = colonPos + 1;\n for (; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.string(node, \"[\")) {\n // XXX As per the tikz manual, we stop scanning if we find an open square brace.\n break;\n }\n if (match.string(node, \"=\")) {\n i++;\n // Look for a group next\n while (match.whitespace(nodes[i]) || match.comment(nodes[i])) {\n i++;\n }\n if (!match.group(nodes[i])) {\n break;\n }\n // We have a match!\n lastMatchPos = i + 1;\n\n // Start the process again\n const colonPos = scan(nodes, \":\", {\n startIndex: lastMatchPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true,\n });\n if (colonPos == null) {\n break;\n }\n i = colonPos + 1;\n }\n }\n\n return lastMatchPos;\n}\n", "import { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport * as TikzSpec from \"./types\";\n\n/**\n * Print an `systeme` argument specification AST to a string.\n */\nexport function printRaw(node: TikzSpec.Ast, root = false): string {\n if (typeof node === \"string\") {\n return node;\n }\n\n if (Array.isArray(node)) {\n const sepToken = root ? \" \" : \"\";\n const printed: string[] = [];\n for (let i = 0; i < node.length; i++) {\n const tok = node[i];\n const prevTok = node[i - 1];\n if (!prevTok) {\n printed.push(printRaw(tok));\n continue;\n }\n if (prevTok.type === \"comment\") {\n printed.push(printRaw(tok));\n continue;\n }\n if (tok.type !== \"comment\") {\n printed.push(sepToken);\n }\n printed.push(printRaw(tok));\n }\n return printed.join(\"\");\n }\n const type = node.type;\n\n switch (type) {\n case \"path_spec\":\n return printRaw(node.content, (root = true));\n case \"coordinate\":\n return `${latexPrintRaw(node.prefix)}(${latexPrintRaw(\n node.content\n )})`;\n case \"operation\":\n return latexPrintRaw(node.content);\n case \"comment\":\n return latexPrintRaw(node);\n case \"line_to\":\n return node.command;\n case \"curve_to\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n if (node.controls.length === 1) {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} ..`;\n } else {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} and ${printRaw(node.controls[1])} ..`;\n }\n }\n case \"unknown\":\n return latexPrintRaw(node.content);\n case \"square_brace_group\":\n return `[${latexPrintRaw(node.content)}]`;\n case \"foreach\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n let options = \"\";\n if (node.options) {\n options = ` [${latexPrintRaw(node.options)}]`;\n }\n const start = latexPrintRaw(node.start);\n const variables = [...node.variables];\n trim(variables);\n let printedVariables = latexPrintRaw(variables);\n // It is possible that the variables are specified as `[var=\\p]`, in the optional argument, instead of as `\\p`\n // In this case, `node.variables` will be empty and we don't want an extra space showing up.\n if (printedVariables.length > 0) {\n printedVariables = \" \" + printedVariables;\n }\n\n const command =\n node.command.type === \"foreach\"\n ? printRaw(node.command)\n : latexPrintRaw(node.command);\n\n return `${comments}${start}${printedVariables}${options} in ${latexPrintRaw(\n node.list\n )} ${command}`;\n }\n case \"svg_operation\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n let options = \"\";\n if (node.options) {\n options = `[${latexPrintRaw(node.options)}]`;\n }\n\n return `${comments}svg${options} ${latexPrintRaw(node.content)}`;\n }\n case \"animation\": {\n const comments = node.comments\n .map((c) => latexPrintRaw({ ...c, leadingWhitespace: false }))\n .join(\"\");\n\n return `${comments}:${node.attribute} = {${latexPrintRaw(\n node.content\n )}}`;\n }\n\n default:\n const unprintedType: void = type;\n console.warn(`Unknown node type \"${unprintedType}\" for node`, node);\n return \"\";\n }\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as TikzSpec from \"./types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { TikzPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\ntype TikzParseOptions = {\n startRule?: \"path_spec\" | \"foreach_body\";\n};\n\nfunction createMatchers() {\n return {\n isChar: match.string,\n isTerminal: (node: any) => match.string(node, \";\"),\n isOperation: (node: any) =>\n match.anyString(node) && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node: any) =>\n match.whitespace(node) || match.parbreak(node),\n isComment: match.comment,\n isGroup: match.group,\n isMacro: match.macro,\n isAnyMacro: match.anyMacro,\n };\n}\n\nconst matchers = createMatchers();\n\n/**\n * Parse the contents of the `\\systeme{...}` macro\n */\nexport function parse(\n ast: Ast.Node[],\n options?: Options\n): Options extends { startRule: infer R }\n ? R extends \"path_spec\"\n ? TikzSpec.PathSpec\n : TikzSpec.ForeachBody\n : TikzSpec.PathSpec {\n const { startRule = \"path_spec\" } = options || {};\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 TikzPegParser.parse(ast, {\n ...matchers,\n startRule,\n });\n}\n", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n substitutecolormodel: {\n signature: \"m m\",\n renderInfo: { breakAround: true },\n },\n selectcolormodel: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n definecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n providecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n colorlet: {\n signature: \"o m o m\",\n renderInfo: { breakAround: true },\n },\n definecolorset: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n providecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true },\n },\n preparecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true },\n },\n preparecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true },\n },\n DefineNamedColor: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n definecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n providecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n color: { signature: \"o m\", renderInfo: { breakAround: true } },\n textcolor: { signature: \"o m m\", renderInfo: { inParMode: true } },\n pagecolor: { signature: \"o m\" },\n colorbox: { signature: \"o m m\" },\n fcolorbox: { signature: \"o m o m m\" },\n boxframe: { signature: \"o m\" },\n testcolor: { signature: \"o m\" },\n blendcolors: { signature: \"s m\" },\n maskcolors: { signature: \"o m\" },\n definecolorseries: {\n signature: \"m m m o m o m\",\n renderInfo: { breakAround: true },\n },\n resetcolorseries: {\n signature: \"o m\",\n renderInfo: { breakAround: true },\n },\n rowcolors: { signature: \"s o m m m\" },\n extractcolorspec: { signature: \"m m\" },\n extractcolorspecs: { signature: \"m m m\" },\n convertcolorspec: { signature: \"m m m m\" },\n};\n\nexport const environments: EnvInfoRecord = {\n testcolors: { signature: \"o\", renderInfo: { pgfkeysArgs: true } },\n};\n", "import Color from \"color\";\nimport { DVI_PS_NAMES, SVG_NAMES, X11_NAMES } from \"./predefined-colors\";\nimport { XColor } from \"./types\";\nimport { parse as xcolorParser } from \"./parser\";\n\nconst CORE_MODELS = new Set([\"rgb\", \"cmy\", \"cmyk\", \"hsb\", \"gray\"]);\n\nexport const XColorCoreModelToColor = {\n rgb: ([r, g, b]: number[]) => Color([r * 255, g * 255, b * 255], \"rgb\"),\n cmy: ([c, m, y]: number[]) =>\n XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]),\n cmyk: ([c, m, y, k]: number[]) =>\n Color([c * 255, m * 255, y * 255, k * 100], \"cmyk\"),\n hsb: ([h, s, b]: number[]) => Color([h * 360, s * 100, b * 100], \"hsv\"),\n gray: ([v]: number[]) => Color([v * 255, v * 255, v * 255], \"rgb\"),\n};\nconst XColorModelToColor = {\n wave: ([lambda]: number[]) => {\n // Constants according to the xcolor readme\n const gamma = 0.8;\n let baseRgb = [0, 0, 0];\n if (380 <= lambda && lambda < 440) {\n baseRgb = [(440 - lambda) / (440 - 380), 0, 1];\n }\n if (440 <= lambda && lambda < 490) {\n baseRgb = [0, (lambda - 440) / (490 - 440), 1];\n }\n if (490 <= lambda && lambda < 510) {\n baseRgb = [0, 1, (510 - lambda) / (510 - 490)];\n }\n if (510 <= lambda && lambda < 580) {\n baseRgb = [(lambda - 510) / (580 - 510), 1, 0];\n }\n if (580 <= lambda && lambda < 6450) {\n baseRgb = [1, (645 - lambda) / (645 - 580), 0];\n }\n if (645 <= lambda && lambda <= 780) {\n baseRgb = [1, 0, 0];\n }\n let f = 1.0;\n if (380 <= lambda && 420 < lambda) {\n f = 0.3 + (0.7 * (lambda - 380)) / (420 - 380);\n }\n if (700 < lambda && lambda <= 780) {\n f = 0.3 + (0.7 * (780 - lambda)) / (780 - 700);\n }\n\n const rgb = [\n Math.pow(baseRgb[0] * f, gamma),\n Math.pow(baseRgb[1] * f, gamma),\n Math.pow(baseRgb[2] * f, gamma),\n ];\n\n return Color([rgb[0] * 255, rgb[1] * 255, rgb[2] * 255], \"rgb\");\n },\n Hsb: ([h, s, b]: number[]) => XColorCoreModelToColor.hsb([h / 360, s, b]),\n HSB: ([h, s, b]: number[]) =>\n XColorCoreModelToColor.hsb([h / 240, s / 240, b / 240]),\n HTML: ([v]: [string]) => (v.startsWith(\"#\") ? Color(v) : Color(`#${v}`)),\n RGB: ([r, g, b]: number[]) => Color([r, g, b], \"rgb\"),\n Gray: ([v]: number[]) => XColorCoreModelToColor.gray([v / 15]),\n ...XColorCoreModelToColor,\n};\n\nconst ColorToXColorModel = {\n rgb: (color: Color) =>\n color\n .rgb()\n .array()\n .map((v) => v / 255),\n cmy: (color: Color) =>\n [255 - color.red(), 255 - color.green(), 255 - color.blue()].map(\n (v) => v / 255\n ),\n cmyk: (color: Color) =>\n color\n .cmyk()\n .array()\n // The k component goes from 0-100\n .map((v, i) => (i === 3 ? v / 100 : v / 255)),\n hsb: (color: Color) => [\n color.hue() / 360,\n color.saturationv() / 100,\n color.value() / 100,\n ],\n gray: (color: Color) => [color.gray() / 100],\n};\n\nexport const PREDEFINED_XCOLOR_COLORS: Record> = {\n // Core colors\n red: XColorCoreModelToColor.rgb([1, 0, 0]),\n green: XColorCoreModelToColor.rgb([0, 1, 0]),\n blue: XColorCoreModelToColor.rgb([0, 0, 1]),\n brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]),\n lime: XColorCoreModelToColor.rgb([0.75, 1, 0]),\n orange: XColorCoreModelToColor.rgb([1, 0.5, 0]),\n pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]),\n purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]),\n teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]),\n violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]),\n cyan: XColorCoreModelToColor.rgb([0, 1, 1]),\n magenta: XColorCoreModelToColor.rgb([1, 0, 1]),\n yellow: XColorCoreModelToColor.rgb([1, 1, 0]),\n olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]),\n black: XColorCoreModelToColor.rgb([0, 0, 0]),\n darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]),\n gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]),\n lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]),\n white: XColorCoreModelToColor.rgb([1, 1, 1]),\n ...DVI_PS_NAMES,\n ...SVG_NAMES,\n ...X11_NAMES,\n};\n\nfunction scalarMul(scalar: number, vec: number[]) {\n return vec.map((v) => scalar * v);\n}\nfunction addVectors(...vecs: number[][]) {\n return vecs.reduce((prev, current) => prev.map((v, i) => v + current[i]));\n}\n\n/**\n * Mix a color in color model `model` as per the algorithm in 2.3.3 of the xcolor manual.\n */\nfunction mixInModel(\n model: string,\n colorsAndCoefficients: [number, Color][]\n): Color {\n if (!CORE_MODELS.has(model)) {\n throw new Error(\n `Cannot mix colors in model \"${model}\"; only core modes ${Array.from(\n CORE_MODELS\n ).join(\", \")} are supported`\n );\n }\n const toModel =\n ColorToXColorModel[model as keyof typeof ColorToXColorModel];\n const fromModel =\n XColorCoreModelToColor[model as keyof typeof XColorCoreModelToColor];\n\n const mixed = addVectors(\n ...colorsAndCoefficients.map(([v, color]) => {\n const colorInModel = toModel(color);\n return scalarMul(v, colorInModel);\n })\n );\n return fromModel(mixed);\n}\n\n/**\n * Given a parsed `XColor`, compute the color and return a `Color` object\n * (that can be used in CSS, for example).\n */\nexport function computeColor(\n expr: XColor,\n predefinedColors: Record> = {}\n): Color {\n if (expr.type !== \"color\") {\n throw new Error(\n `Can only compute the color of a \"color\" expression, not one of type ${expr.type}`\n );\n }\n\n const knownColors = { ...PREDEFINED_XCOLOR_COLORS, ...predefinedColors };\n function getColor(name: string) {\n if (!knownColors[name]) {\n throw new Error(`Unknown color \"${name}\"`);\n }\n return knownColors[name];\n }\n\n const color = expr.color;\n let computedColor = Color(\"#000000\");\n if (color.type === \"expr\") {\n // From the algorithm in 2.3.2 of the xcolor manual\n\n // TODO: the suffix `!![num]` is not yet implemented.\n let base = getColor(color.name);\n for (const mix of color.mix_expr) {\n if (mix.type === \"complete_mix\") {\n const mixColor = getColor(mix.name);\n base = base.mix(mixColor, 1 - mix.mix_percent / 100);\n } else if (mix.type === \"partial_mix\") {\n base = base.mix(Color(\"#FFFFFF\"), 1 - mix.mix_percent / 100);\n }\n }\n if (color.prefix && color.prefix.length % 2 === 1) {\n base = base.rotate(180);\n }\n computedColor = base;\n }\n if (color.type === \"extended_expr\") {\n const model = color.core_model;\n const div =\n color.div ||\n color.expressions.reduce((a, expr) => a + expr.weight, 0);\n if (div <= 0) {\n throw new Error(\n `Cannot mix color with ratios that have a denominator of ${div}`\n );\n }\n const colorsToMix: [number, Color][] = color.expressions.map(\n (expr) => [\n expr.weight / div,\n computeColor({\n type: \"color\",\n color: expr.color,\n functions: [],\n }),\n ]\n );\n computedColor = mixInModel(model, colorsToMix);\n }\n\n // Now we apply any color functions\n for (const func of expr.functions) {\n if (func.name === \"wheel\") {\n const angle = func.args[0];\n const circ = func.args[1] || 360;\n computedColor = computedColor.rotate((angle / circ) * 360);\n }\n if (func.name === \"twheel\") {\n // This function depends on the definition of \\rangetHsb, which we\n // don't actually know, so we just use it's default, which is to\n // add a 60 deg. angle to everything. I think...\n const angle = func.args[0];\n const circ = func.args[1] || 360;\n computedColor = computedColor.rotate((angle / circ) * 360 + 60);\n }\n }\n\n return computedColor;\n}\n\n/**\n * Convert the xcolor defined color to RGB Hex representation.\n * If the color is unknown or cannot be computed, `null` is returned.\n *\n * If `model` is supplied,\n *\n * The most likely reason a color will be `null` is if the color is defined\n * using a pre-defined color that wasn't supplied as an argument.\n */\nexport function xcolorColorToHex(\n color: string,\n model?: string | null,\n options: {\n predefinedColors?: Record>;\n } = { predefinedColors: {} }\n): string | null {\n const { predefinedColors = {} } = options;\n const parsed = xcolorParser(color);\n // If a model was entered, the corresponding color was directly entered without\n // mixing, unless the parsed type was \"color\". This would through an error in `xcolor`,\n // but we won't error.\n if (model && model !== \"default\" && parsed.type !== \"color\") {\n if (!(model in XColorModelToColor)) {\n throw new Error(\n `Unknown color model \"${model}\"; known models are ${Object.keys(\n XColorModelToColor\n ).join(\", \")}`\n );\n }\n if (parsed.type !== \"hex_spec\" && parsed.type !== \"num_spec\") {\n throw new Error(\n `Cannot use model ${model} to compute the color \"${color}\"`\n );\n }\n\n if (model === \"HTML\" && parsed.type === \"hex_spec\") {\n return XColorModelToColor.HTML(parsed.content).hex();\n } else if (parsed.type === \"num_spec\") {\n type x = keyof Omit;\n return XColorModelToColor[\n model as keyof Omit\n ](parsed.content).hex();\n }\n\n throw new Error(\n `Don't know how to process color \"${color}\" in model \"${model}\"`\n );\n }\n\n if (Array.isArray(parsed) || parsed.type !== \"color\") {\n throw new Error(\n `Cannot the color \"${color}\" is not a valid color string`\n );\n }\n let computed: Color | null = null;\n try {\n computed = computeColor(parsed, predefinedColors);\n } catch (e) {}\n\n return computed && computed.hex();\n}\n", "import Color from \"color\";\n\nconst fromRgb = ([r, g, b]: number[]) =>\n Color([r * 255, g * 255, b * 255], \"rgb\");\n\nexport const DVI_PS_NAMES = {\n Apricot: Color(\"#FBB982\"),\n Aquamarine: Color(\"#00B5BE\"),\n Bittersweet: Color(\"#C04F17\"),\n Black: Color(\"#221E1F\"),\n Blue: Color(\"#2D2F92\"),\n BlueGreen: Color(\"#00B3B8\"),\n BlueViolet: Color(\"#473992\"),\n BrickRed: Color(\"#B6321C\"),\n Brown: Color(\"#792500\"),\n BurntOrange: Color(\"#F7921D\"),\n CadetBlue: Color(\"#74729A\"),\n CarnationPink: Color(\"#F282B4\"),\n Cerulean: Color(\"#00A2E3\"),\n CornflowerBlue: Color(\"#41B0E4\"),\n Cyan: Color(\"#00AEEF\"),\n Dandelion: Color(\"#FDBC42\"),\n DarkOrchid: Color(\"#A4538A\"),\n Emerald: Color(\"#00A99D\"),\n ForestGreen: Color(\"#009B55\"),\n Fuchsia: Color(\"#8C368C\"),\n Goldenrod: Color(\"#FFDF42\"),\n Gray: Color(\"#949698\"),\n Green: Color(\"#00A64F\"),\n GreenYellow: Color(\"#DFE674\"),\n JungleGreen: Color(\"#00A99A\"),\n Lavender: Color(\"#F49EC4\"),\n LimeGreen: Color(\"#8DC73E\"),\n Magenta: Color(\"#EC008C\"),\n Mahogany: Color(\"#A9341F\"),\n Maroon: Color(\"#AF3235\"),\n Melon: Color(\"#F89E7B\"),\n MidnightBlue: Color(\"#006795\"),\n Mulberry: Color(\"#A93C93\"),\n NavyBlue: Color(\"#006EB8\"),\n OliveGreen: Color(\"#3C8031\"),\n Orange: Color(\"#F58137\"),\n OrangeRed: Color(\"#ED135A\"),\n Orchid: Color(\"#AF72B0\"),\n Peach: Color(\"#F7965A\"),\n Periwinkle: Color(\"#7977B8\"),\n PineGreen: Color(\"#008B72\"),\n Plum: Color(\"#92268F\"),\n ProcessBlue: Color(\"#00B0F0\"),\n Purple: Color(\"#99479B\"),\n RawSienna: Color(\"#974006\"),\n Red: Color(\"#ED1B23\"),\n RedOrange: Color(\"#F26035\"),\n RedViolet: Color(\"#A1246B\"),\n Rhodamine: Color(\"#EF559F\"),\n RoyalBlue: Color(\"#0071BC\"),\n RoyalPurple: Color(\"#613F99\"),\n RubineRed: Color(\"#ED017D\"),\n Salmon: Color(\"#F69289\"),\n SeaGreen: Color(\"#3FBC9D\"),\n Sepia: Color(\"#671800\"),\n SkyBlue: Color(\"#46C5DD\"),\n SpringGreen: Color(\"#C6DC67\"),\n Tan: Color(\"#DA9D76\"),\n TealBlue: Color(\"#00AEB3\"),\n Thistle: Color(\"#D883B7\"),\n Turquoise: Color(\"#00B4CE\"),\n Violet: Color(\"#58429B\"),\n VioletRed: Color(\"#EF58A0\"),\n White: Color(\"#FFFFFF\"),\n WildStrawberry: Color(\"#EE2967\"),\n Yellow: Color(\"#FFF200\"),\n YellowGreen: Color(\"#98CC70\"),\n YellowOrange: Color(\"#FAA21A\"),\n};\n\nexport const SVG_NAMES = {\n AliceBlue: fromRgb([0.94, 0.972, 1]),\n AntiqueWhite: fromRgb([0.98, 0.92, 0.844]),\n Aqua: fromRgb([0, 1, 1]),\n Aquamarine: fromRgb([0.498, 1, 0.83]),\n Azure: fromRgb([0.94, 1, 1]),\n Beige: fromRgb([0.96, 0.96, 0.864]),\n Bisque: fromRgb([1, 0.894, 0.77]),\n Black: fromRgb([0, 0, 0]),\n BlanchedAlmond: fromRgb([1, 0.92, 0.804]),\n Blue: fromRgb([0, 0, 1]),\n BlueViolet: fromRgb([0.54, 0.17, 0.888]),\n Brown: fromRgb([0.648, 0.165, 0.165]),\n BurlyWood: fromRgb([0.87, 0.72, 0.53]),\n CadetBlue: fromRgb([0.372, 0.62, 0.628]),\n Chartreuse: fromRgb([0.498, 1, 0]),\n Chocolate: fromRgb([0.824, 0.41, 0.116]),\n Coral: fromRgb([1, 0.498, 0.312]),\n CornflowerBlue: fromRgb([0.392, 0.585, 0.93]),\n Cornsilk: fromRgb([1, 0.972, 0.864]),\n Crimson: fromRgb([0.864, 0.08, 0.235]),\n Cyan: fromRgb([0, 1, 1]),\n DarkBlue: fromRgb([0, 0, 0.545]),\n DarkCyan: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]),\n DarkGray: fromRgb([0.664, 0.664, 0.664]),\n DarkGreen: fromRgb([0, 0.392, 0]),\n DarkGrey: fromRgb([0.664, 0.664, 0.664]),\n DarkKhaki: fromRgb([0.74, 0.716, 0.42]),\n DarkMagenta: fromRgb([0.545, 0, 0.545]),\n DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]),\n DarkOrange: fromRgb([1, 0.55, 0]),\n DarkOrchid: fromRgb([0.6, 0.196, 0.8]),\n DarkRed: fromRgb([0.545, 0, 0]),\n DarkSalmon: fromRgb([0.912, 0.59, 0.48]),\n DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]),\n DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]),\n DarkSlateGray: fromRgb([0.185, 0.31, 0.31]),\n DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]),\n DarkTurquoise: fromRgb([0, 0.808, 0.82]),\n DarkViolet: fromRgb([0.58, 0, 0.828]),\n DeepPink: fromRgb([1, 0.08, 0.576]),\n DeepSkyBlue: fromRgb([0, 0.75, 1]),\n DimGray: fromRgb([0.41, 0.41, 0.41]),\n DimGrey: fromRgb([0.41, 0.41, 0.41]),\n DodgerBlue: fromRgb([0.116, 0.565, 1]),\n FireBrick: fromRgb([0.698, 0.132, 0.132]),\n FloralWhite: fromRgb([1, 0.98, 0.94]),\n ForestGreen: fromRgb([0.132, 0.545, 0.132]),\n Fuchsia: fromRgb([1, 0, 1]),\n Gainsboro: fromRgb([0.864, 0.864, 0.864]),\n GhostWhite: fromRgb([0.972, 0.972, 1]),\n Gold: fromRgb([1, 0.844, 0]),\n Goldenrod: fromRgb([0.855, 0.648, 0.125]),\n Gray: fromRgb([0.5, 0.5, 0.5]),\n Green: fromRgb([0, 0.5, 0]),\n GreenYellow: fromRgb([0.68, 1, 0.185]),\n Grey: fromRgb([0.5, 0.5, 0.5]),\n Honeydew: fromRgb([0.94, 1, 0.94]),\n HotPink: fromRgb([1, 0.41, 0.705]),\n IndianRed: fromRgb([0.804, 0.36, 0.36]),\n Indigo: fromRgb([0.294, 0, 0.51]),\n Ivory: fromRgb([1, 1, 0.94]),\n Khaki: fromRgb([0.94, 0.9, 0.55]),\n Lavender: fromRgb([0.9, 0.9, 0.98]),\n LavenderBlush: fromRgb([1, 0.94, 0.96]),\n LawnGreen: fromRgb([0.488, 0.99, 0]),\n LemonChiffon: fromRgb([1, 0.98, 0.804]),\n LightBlue: fromRgb([0.68, 0.848, 0.9]),\n LightCoral: fromRgb([0.94, 0.5, 0.5]),\n LightCyan: fromRgb([0.88, 1, 1]),\n LightGoldenrod: fromRgb([0.933, 0.867, 0.51]),\n LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]),\n LightGray: fromRgb([0.828, 0.828, 0.828]),\n LightGreen: fromRgb([0.565, 0.932, 0.565]),\n LightGrey: fromRgb([0.828, 0.828, 0.828]),\n LightPink: fromRgb([1, 0.712, 0.756]),\n LightSalmon: fromRgb([1, 0.628, 0.48]),\n LightSeaGreen: fromRgb([0.125, 0.698, 0.668]),\n LightSkyBlue: fromRgb([0.53, 0.808, 0.98]),\n LightSlateBlue: fromRgb([0.518, 0.44, 1]),\n LightSlateGray: fromRgb([0.468, 0.532, 0.6]),\n LightSlateGrey: fromRgb([0.468, 0.532, 0.6]),\n LightSteelBlue: fromRgb([0.69, 0.77, 0.87]),\n LightYellow: fromRgb([1, 1, 0.88]),\n Lime: fromRgb([0, 1, 0]),\n LimeGreen: fromRgb([0.196, 0.804, 0.196]),\n Linen: fromRgb([0.98, 0.94, 0.9]),\n Magenta: fromRgb([1, 0, 1]),\n Maroon: fromRgb([0.5, 0, 0]),\n MediumAquamarine: fromRgb([0.4, 0.804, 0.668]),\n MediumBlue: fromRgb([0, 0, 0.804]),\n MediumOrchid: fromRgb([0.73, 0.332, 0.828]),\n MediumPurple: fromRgb([0.576, 0.44, 0.86]),\n MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]),\n MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]),\n MediumSpringGreen: fromRgb([0, 0.98, 0.604]),\n MediumTurquoise: fromRgb([0.284, 0.82, 0.8]),\n MediumVioletRed: fromRgb([0.78, 0.084, 0.52]),\n MidnightBlue: fromRgb([0.098, 0.098, 0.44]),\n MintCream: fromRgb([0.96, 1, 0.98]),\n MistyRose: fromRgb([1, 0.894, 0.884]),\n Moccasin: fromRgb([1, 0.894, 0.71]),\n NavajoWhite: fromRgb([1, 0.87, 0.68]),\n Navy: fromRgb([0, 0, 0.5]),\n NavyBlue: fromRgb([0, 0, 0.5]),\n OldLace: fromRgb([0.992, 0.96, 0.9]),\n Olive: fromRgb([0.5, 0.5, 0]),\n OliveDrab: fromRgb([0.42, 0.556, 0.136]),\n Orange: fromRgb([1, 0.648, 0]),\n OrangeRed: fromRgb([1, 0.27, 0]),\n Orchid: fromRgb([0.855, 0.44, 0.84]),\n PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]),\n PaleGreen: fromRgb([0.596, 0.985, 0.596]),\n PaleTurquoise: fromRgb([0.688, 0.932, 0.932]),\n PaleVioletRed: fromRgb([0.86, 0.44, 0.576]),\n PapayaWhip: fromRgb([1, 0.936, 0.835]),\n PeachPuff: fromRgb([1, 0.855, 0.725]),\n Peru: fromRgb([0.804, 0.52, 0.248]),\n Pink: fromRgb([1, 0.752, 0.796]),\n Plum: fromRgb([0.868, 0.628, 0.868]),\n PowderBlue: fromRgb([0.69, 0.88, 0.9]),\n Purple: fromRgb([0.5, 0, 0.5]),\n Red: fromRgb([1, 0, 0]),\n RosyBrown: fromRgb([0.736, 0.56, 0.56]),\n RoyalBlue: fromRgb([0.255, 0.41, 0.884]),\n SaddleBrown: fromRgb([0.545, 0.27, 0.075]),\n Salmon: fromRgb([0.98, 0.5, 0.448]),\n SandyBrown: fromRgb([0.956, 0.644, 0.376]),\n SeaGreen: fromRgb([0.18, 0.545, 0.34]),\n Seashell: fromRgb([1, 0.96, 0.932]),\n Sienna: fromRgb([0.628, 0.32, 0.176]),\n Silver: fromRgb([0.752, 0.752, 0.752]),\n SkyBlue: fromRgb([0.53, 0.808, 0.92]),\n SlateBlue: fromRgb([0.415, 0.352, 0.804]),\n SlateGray: fromRgb([0.44, 0.5, 0.565]),\n SlateGrey: fromRgb([0.44, 0.5, 0.565]),\n Snow: fromRgb([1, 0.98, 0.98]),\n SpringGreen: fromRgb([0, 1, 0.498]),\n SteelBlue: fromRgb([0.275, 0.51, 0.705]),\n Tan: fromRgb([0.824, 0.705, 0.55]),\n Teal: fromRgb([0, 0.5, 0.5]),\n Thistle: fromRgb([0.848, 0.75, 0.848]),\n Tomato: fromRgb([1, 0.39, 0.28]),\n Turquoise: fromRgb([0.25, 0.88, 0.815]),\n Violet: fromRgb([0.932, 0.51, 0.932]),\n VioletRed: fromRgb([0.816, 0.125, 0.565]),\n Wheat: fromRgb([0.96, 0.87, 0.7]),\n White: fromRgb([1, 1, 1]),\n WhiteSmoke: fromRgb([0.96, 0.96, 0.96]),\n Yellow: fromRgb([1, 1, 0]),\n YellowGreen: fromRgb([0.604, 0.804, 0.196]),\n};\n\nexport const X11_NAMES = {\n AntiqueWhite1: fromRgb([1, 0.936, 0.86]),\n AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]),\n AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]),\n AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]),\n Aquamarine1: fromRgb([0.498, 1, 0.83]),\n Aquamarine2: fromRgb([0.464, 0.932, 0.776]),\n Aquamarine3: fromRgb([0.4, 0.804, 0.668]),\n Aquamarine4: fromRgb([0.27, 0.545, 0.455]),\n Azure1: fromRgb([0.94, 1, 1]),\n Azure2: fromRgb([0.88, 0.932, 0.932]),\n Azure3: fromRgb([0.756, 0.804, 0.804]),\n Azure4: fromRgb([0.512, 0.545, 0.545]),\n Bisque1: fromRgb([1, 0.894, 0.77]),\n Bisque2: fromRgb([0.932, 0.835, 0.716]),\n Bisque3: fromRgb([0.804, 0.716, 0.62]),\n Bisque4: fromRgb([0.545, 0.49, 0.42]),\n Blue1: fromRgb([0, 0, 1]),\n Blue2: fromRgb([0, 0, 0.932]),\n Blue3: fromRgb([0, 0, 0.804]),\n Blue4: fromRgb([0, 0, 0.545]),\n Brown1: fromRgb([1, 0.25, 0.25]),\n Brown2: fromRgb([0.932, 0.23, 0.23]),\n Brown3: fromRgb([0.804, 0.2, 0.2]),\n Brown4: fromRgb([0.545, 0.136, 0.136]),\n Burlywood1: fromRgb([1, 0.828, 0.608]),\n Burlywood2: fromRgb([0.932, 0.772, 0.57]),\n Burlywood3: fromRgb([0.804, 0.668, 0.49]),\n Burlywood4: fromRgb([0.545, 0.45, 0.332]),\n CadetBlue1: fromRgb([0.596, 0.96, 1]),\n CadetBlue2: fromRgb([0.556, 0.898, 0.932]),\n CadetBlue3: fromRgb([0.48, 0.772, 0.804]),\n CadetBlue4: fromRgb([0.325, 0.525, 0.545]),\n Chartreuse1: fromRgb([0.498, 1, 0]),\n Chartreuse2: fromRgb([0.464, 0.932, 0]),\n Chartreuse3: fromRgb([0.4, 0.804, 0]),\n Chartreuse4: fromRgb([0.27, 0.545, 0]),\n Chocolate1: fromRgb([1, 0.498, 0.14]),\n Chocolate2: fromRgb([0.932, 0.464, 0.13]),\n Chocolate3: fromRgb([0.804, 0.4, 0.112]),\n Chocolate4: fromRgb([0.545, 0.27, 0.075]),\n Coral1: fromRgb([1, 0.448, 0.336]),\n Coral2: fromRgb([0.932, 0.415, 0.312]),\n Coral3: fromRgb([0.804, 0.356, 0.27]),\n Coral4: fromRgb([0.545, 0.244, 0.185]),\n Cornsilk1: fromRgb([1, 0.972, 0.864]),\n Cornsilk2: fromRgb([0.932, 0.91, 0.804]),\n Cornsilk3: fromRgb([0.804, 0.785, 0.694]),\n Cornsilk4: fromRgb([0.545, 0.532, 0.47]),\n Cyan1: fromRgb([0, 1, 1]),\n Cyan2: fromRgb([0, 0.932, 0.932]),\n Cyan3: fromRgb([0, 0.804, 0.804]),\n Cyan4: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod1: fromRgb([1, 0.725, 0.06]),\n DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]),\n DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]),\n DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]),\n DarkOliveGreen1: fromRgb([0.792, 1, 0.44]),\n DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]),\n DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]),\n DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]),\n DarkOrange1: fromRgb([1, 0.498, 0]),\n DarkOrange2: fromRgb([0.932, 0.464, 0]),\n DarkOrange3: fromRgb([0.804, 0.4, 0]),\n DarkOrange4: fromRgb([0.545, 0.27, 0]),\n DarkOrchid1: fromRgb([0.75, 0.244, 1]),\n DarkOrchid2: fromRgb([0.698, 0.228, 0.932]),\n DarkOrchid3: fromRgb([0.604, 0.196, 0.804]),\n DarkOrchid4: fromRgb([0.408, 0.132, 0.545]),\n DarkSeaGreen1: fromRgb([0.756, 1, 0.756]),\n DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]),\n DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]),\n DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]),\n DarkSlateGray1: fromRgb([0.592, 1, 1]),\n DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]),\n DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]),\n DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]),\n DeepPink1: fromRgb([1, 0.08, 0.576]),\n DeepPink2: fromRgb([0.932, 0.07, 0.536]),\n DeepPink3: fromRgb([0.804, 0.064, 0.464]),\n DeepPink4: fromRgb([0.545, 0.04, 0.312]),\n DeepSkyBlue1: fromRgb([0, 0.75, 1]),\n DeepSkyBlue2: fromRgb([0, 0.698, 0.932]),\n DeepSkyBlue3: fromRgb([0, 0.604, 0.804]),\n DeepSkyBlue4: fromRgb([0, 0.408, 0.545]),\n DodgerBlue1: fromRgb([0.116, 0.565, 1]),\n DodgerBlue2: fromRgb([0.11, 0.525, 0.932]),\n DodgerBlue3: fromRgb([0.094, 0.455, 0.804]),\n DodgerBlue4: fromRgb([0.064, 0.305, 0.545]),\n Firebrick1: fromRgb([1, 0.19, 0.19]),\n Firebrick2: fromRgb([0.932, 0.172, 0.172]),\n Firebrick3: fromRgb([0.804, 0.15, 0.15]),\n Firebrick4: fromRgb([0.545, 0.1, 0.1]),\n Gold1: fromRgb([1, 0.844, 0]),\n Gold2: fromRgb([0.932, 0.79, 0]),\n Gold3: fromRgb([0.804, 0.68, 0]),\n Gold4: fromRgb([0.545, 0.46, 0]),\n Goldenrod1: fromRgb([1, 0.756, 0.145]),\n Goldenrod2: fromRgb([0.932, 0.705, 0.132]),\n Goldenrod3: fromRgb([0.804, 0.608, 0.112]),\n Goldenrod4: fromRgb([0.545, 0.41, 0.08]),\n Green1: fromRgb([0, 1, 0]),\n Green2: fromRgb([0, 0.932, 0]),\n Green3: fromRgb([0, 0.804, 0]),\n Green4: fromRgb([0, 0.545, 0]),\n Honeydew1: fromRgb([0.94, 1, 0.94]),\n Honeydew2: fromRgb([0.88, 0.932, 0.88]),\n Honeydew3: fromRgb([0.756, 0.804, 0.756]),\n Honeydew4: fromRgb([0.512, 0.545, 0.512]),\n HotPink1: fromRgb([1, 0.43, 0.705]),\n HotPink2: fromRgb([0.932, 0.415, 0.655]),\n HotPink3: fromRgb([0.804, 0.376, 0.565]),\n HotPink4: fromRgb([0.545, 0.228, 0.385]),\n IndianRed1: fromRgb([1, 0.415, 0.415]),\n IndianRed2: fromRgb([0.932, 0.39, 0.39]),\n IndianRed3: fromRgb([0.804, 0.332, 0.332]),\n IndianRed4: fromRgb([0.545, 0.228, 0.228]),\n Ivory1: fromRgb([1, 1, 0.94]),\n Ivory2: fromRgb([0.932, 0.932, 0.88]),\n Ivory3: fromRgb([0.804, 0.804, 0.756]),\n Ivory4: fromRgb([0.545, 0.545, 0.512]),\n Khaki1: fromRgb([1, 0.965, 0.56]),\n Khaki2: fromRgb([0.932, 0.9, 0.52]),\n Khaki3: fromRgb([0.804, 0.776, 0.45]),\n Khaki4: fromRgb([0.545, 0.525, 0.305]),\n LavenderBlush1: fromRgb([1, 0.94, 0.96]),\n LavenderBlush2: fromRgb([0.932, 0.88, 0.898]),\n LavenderBlush3: fromRgb([0.804, 0.756, 0.772]),\n LavenderBlush4: fromRgb([0.545, 0.512, 0.525]),\n LemonChiffon1: fromRgb([1, 0.98, 0.804]),\n LemonChiffon2: fromRgb([0.932, 0.912, 0.75]),\n LemonChiffon3: fromRgb([0.804, 0.79, 0.648]),\n LemonChiffon4: fromRgb([0.545, 0.536, 0.44]),\n LightBlue1: fromRgb([0.75, 0.936, 1]),\n LightBlue2: fromRgb([0.698, 0.875, 0.932]),\n LightBlue3: fromRgb([0.604, 0.752, 0.804]),\n LightBlue4: fromRgb([0.408, 0.512, 0.545]),\n LightCyan1: fromRgb([0.88, 1, 1]),\n LightCyan2: fromRgb([0.82, 0.932, 0.932]),\n LightCyan3: fromRgb([0.705, 0.804, 0.804]),\n LightCyan4: fromRgb([0.48, 0.545, 0.545]),\n LightGoldenrod1: fromRgb([1, 0.925, 0.545]),\n LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]),\n LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]),\n LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]),\n LightPink1: fromRgb([1, 0.684, 0.725]),\n LightPink2: fromRgb([0.932, 0.635, 0.68]),\n LightPink3: fromRgb([0.804, 0.55, 0.585]),\n LightPink4: fromRgb([0.545, 0.372, 0.396]),\n LightSalmon1: fromRgb([1, 0.628, 0.48]),\n LightSalmon2: fromRgb([0.932, 0.585, 0.448]),\n LightSalmon3: fromRgb([0.804, 0.505, 0.385]),\n LightSalmon4: fromRgb([0.545, 0.34, 0.26]),\n LightSkyBlue1: fromRgb([0.69, 0.888, 1]),\n LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]),\n LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]),\n LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]),\n LightSteelBlue1: fromRgb([0.792, 0.884, 1]),\n LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]),\n LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]),\n LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]),\n LightYellow1: fromRgb([1, 1, 0.88]),\n LightYellow2: fromRgb([0.932, 0.932, 0.82]),\n LightYellow3: fromRgb([0.804, 0.804, 0.705]),\n LightYellow4: fromRgb([0.545, 0.545, 0.48]),\n Magenta1: fromRgb([1, 0, 1]),\n Magenta2: fromRgb([0.932, 0, 0.932]),\n Magenta3: fromRgb([0.804, 0, 0.804]),\n Magenta4: fromRgb([0.545, 0, 0.545]),\n Maroon1: fromRgb([1, 0.204, 0.7]),\n Maroon2: fromRgb([0.932, 0.19, 0.655]),\n Maroon3: fromRgb([0.804, 0.16, 0.565]),\n Maroon4: fromRgb([0.545, 0.11, 0.385]),\n MediumOrchid1: fromRgb([0.88, 0.4, 1]),\n MediumOrchid2: fromRgb([0.82, 0.372, 0.932]),\n MediumOrchid3: fromRgb([0.705, 0.32, 0.804]),\n MediumOrchid4: fromRgb([0.48, 0.215, 0.545]),\n MediumPurple1: fromRgb([0.67, 0.51, 1]),\n MediumPurple2: fromRgb([0.624, 0.475, 0.932]),\n MediumPurple3: fromRgb([0.536, 0.408, 0.804]),\n MediumPurple4: fromRgb([0.365, 0.28, 0.545]),\n MistyRose1: fromRgb([1, 0.894, 0.884]),\n MistyRose2: fromRgb([0.932, 0.835, 0.824]),\n MistyRose3: fromRgb([0.804, 0.716, 0.71]),\n MistyRose4: fromRgb([0.545, 0.49, 0.484]),\n NavajoWhite1: fromRgb([1, 0.87, 0.68]),\n NavajoWhite2: fromRgb([0.932, 0.81, 0.63]),\n NavajoWhite3: fromRgb([0.804, 0.7, 0.545]),\n NavajoWhite4: fromRgb([0.545, 0.475, 0.37]),\n OliveDrab1: fromRgb([0.752, 1, 0.244]),\n OliveDrab2: fromRgb([0.7, 0.932, 0.228]),\n OliveDrab3: fromRgb([0.604, 0.804, 0.196]),\n OliveDrab4: fromRgb([0.41, 0.545, 0.132]),\n Orange1: fromRgb([1, 0.648, 0]),\n Orange2: fromRgb([0.932, 0.604, 0]),\n Orange3: fromRgb([0.804, 0.52, 0]),\n Orange4: fromRgb([0.545, 0.352, 0]),\n OrangeRed1: fromRgb([1, 0.27, 0]),\n OrangeRed2: fromRgb([0.932, 0.25, 0]),\n OrangeRed3: fromRgb([0.804, 0.215, 0]),\n OrangeRed4: fromRgb([0.545, 0.145, 0]),\n Orchid1: fromRgb([1, 0.512, 0.98]),\n Orchid2: fromRgb([0.932, 0.48, 0.912]),\n Orchid3: fromRgb([0.804, 0.41, 0.79]),\n Orchid4: fromRgb([0.545, 0.28, 0.536]),\n PaleGreen1: fromRgb([0.604, 1, 0.604]),\n PaleGreen2: fromRgb([0.565, 0.932, 0.565]),\n PaleGreen3: fromRgb([0.488, 0.804, 0.488]),\n PaleGreen4: fromRgb([0.33, 0.545, 0.33]),\n PaleTurquoise1: fromRgb([0.732, 1, 1]),\n PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]),\n PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]),\n PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]),\n PaleVioletRed1: fromRgb([1, 0.51, 0.67]),\n PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]),\n PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]),\n PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]),\n PeachPuff1: fromRgb([1, 0.855, 0.725]),\n PeachPuff2: fromRgb([0.932, 0.796, 0.68]),\n PeachPuff3: fromRgb([0.804, 0.688, 0.585]),\n PeachPuff4: fromRgb([0.545, 0.468, 0.396]),\n Pink1: fromRgb([1, 0.71, 0.772]),\n Pink2: fromRgb([0.932, 0.664, 0.72]),\n Pink3: fromRgb([0.804, 0.57, 0.62]),\n Pink4: fromRgb([0.545, 0.39, 0.424]),\n Plum1: fromRgb([1, 0.732, 1]),\n Plum2: fromRgb([0.932, 0.684, 0.932]),\n Plum3: fromRgb([0.804, 0.59, 0.804]),\n Plum4: fromRgb([0.545, 0.4, 0.545]),\n Purple1: fromRgb([0.608, 0.19, 1]),\n Purple2: fromRgb([0.57, 0.172, 0.932]),\n Purple3: fromRgb([0.49, 0.15, 0.804]),\n Purple4: fromRgb([0.332, 0.1, 0.545]),\n Red1: fromRgb([1, 0, 0]),\n Red2: fromRgb([0.932, 0, 0]),\n Red3: fromRgb([0.804, 0, 0]),\n Red4: fromRgb([0.545, 0, 0]),\n RosyBrown1: fromRgb([1, 0.756, 0.756]),\n RosyBrown2: fromRgb([0.932, 0.705, 0.705]),\n RosyBrown3: fromRgb([0.804, 0.608, 0.608]),\n RosyBrown4: fromRgb([0.545, 0.41, 0.41]),\n RoyalBlue1: fromRgb([0.284, 0.464, 1]),\n RoyalBlue2: fromRgb([0.264, 0.43, 0.932]),\n RoyalBlue3: fromRgb([0.228, 0.372, 0.804]),\n RoyalBlue4: fromRgb([0.152, 0.25, 0.545]),\n Salmon1: fromRgb([1, 0.55, 0.41]),\n Salmon2: fromRgb([0.932, 0.51, 0.385]),\n Salmon3: fromRgb([0.804, 0.44, 0.33]),\n Salmon4: fromRgb([0.545, 0.298, 0.224]),\n SeaGreen1: fromRgb([0.33, 1, 0.624]),\n SeaGreen2: fromRgb([0.305, 0.932, 0.58]),\n SeaGreen3: fromRgb([0.264, 0.804, 0.5]),\n SeaGreen4: fromRgb([0.18, 0.545, 0.34]),\n Seashell1: fromRgb([1, 0.96, 0.932]),\n Seashell2: fromRgb([0.932, 0.898, 0.87]),\n Seashell3: fromRgb([0.804, 0.772, 0.75]),\n Seashell4: fromRgb([0.545, 0.525, 0.51]),\n Sienna1: fromRgb([1, 0.51, 0.28]),\n Sienna2: fromRgb([0.932, 0.475, 0.26]),\n Sienna3: fromRgb([0.804, 0.408, 0.224]),\n Sienna4: fromRgb([0.545, 0.28, 0.15]),\n SkyBlue1: fromRgb([0.53, 0.808, 1]),\n SkyBlue2: fromRgb([0.494, 0.752, 0.932]),\n SkyBlue3: fromRgb([0.424, 0.65, 0.804]),\n SkyBlue4: fromRgb([0.29, 0.44, 0.545]),\n SlateBlue1: fromRgb([0.512, 0.435, 1]),\n SlateBlue2: fromRgb([0.48, 0.404, 0.932]),\n SlateBlue3: fromRgb([0.41, 0.35, 0.804]),\n SlateBlue4: fromRgb([0.28, 0.235, 0.545]),\n SlateGray1: fromRgb([0.776, 0.888, 1]),\n SlateGray2: fromRgb([0.725, 0.828, 0.932]),\n SlateGray3: fromRgb([0.624, 0.712, 0.804]),\n SlateGray4: fromRgb([0.424, 0.484, 0.545]),\n Snow1: fromRgb([1, 0.98, 0.98]),\n Snow2: fromRgb([0.932, 0.912, 0.912]),\n Snow3: fromRgb([0.804, 0.79, 0.79]),\n Snow4: fromRgb([0.545, 0.536, 0.536]),\n SpringGreen1: fromRgb([0, 1, 0.498]),\n SpringGreen2: fromRgb([0, 0.932, 0.464]),\n SpringGreen3: fromRgb([0, 0.804, 0.4]),\n SpringGreen4: fromRgb([0, 0.545, 0.27]),\n SteelBlue1: fromRgb([0.39, 0.72, 1]),\n SteelBlue2: fromRgb([0.36, 0.675, 0.932]),\n SteelBlue3: fromRgb([0.31, 0.58, 0.804]),\n SteelBlue4: fromRgb([0.21, 0.392, 0.545]),\n Tan1: fromRgb([1, 0.648, 0.31]),\n Tan2: fromRgb([0.932, 0.604, 0.288]),\n Tan3: fromRgb([0.804, 0.52, 0.248]),\n Tan4: fromRgb([0.545, 0.352, 0.17]),\n Thistle1: fromRgb([1, 0.884, 1]),\n Thistle2: fromRgb([0.932, 0.824, 0.932]),\n Thistle3: fromRgb([0.804, 0.71, 0.804]),\n Thistle4: fromRgb([0.545, 0.484, 0.545]),\n Tomato1: fromRgb([1, 0.39, 0.28]),\n Tomato2: fromRgb([0.932, 0.36, 0.26]),\n Tomato3: fromRgb([0.804, 0.31, 0.224]),\n Tomato4: fromRgb([0.545, 0.21, 0.15]),\n Turquoise1: fromRgb([0, 0.96, 1]),\n Turquoise2: fromRgb([0, 0.898, 0.932]),\n Turquoise3: fromRgb([0, 0.772, 0.804]),\n Turquoise4: fromRgb([0, 0.525, 0.545]),\n VioletRed1: fromRgb([1, 0.244, 0.59]),\n VioletRed2: fromRgb([0.932, 0.228, 0.55]),\n VioletRed3: fromRgb([0.804, 0.196, 0.47]),\n VioletRed4: fromRgb([0.545, 0.132, 0.32]),\n Wheat1: fromRgb([1, 0.905, 0.73]),\n Wheat2: fromRgb([0.932, 0.848, 0.684]),\n Wheat3: fromRgb([0.804, 0.73, 0.59]),\n Wheat4: fromRgb([0.545, 0.494, 0.4]),\n Yellow1: fromRgb([1, 1, 0]),\n Yellow2: fromRgb([0.932, 0.932, 0]),\n Yellow3: fromRgb([0.804, 0.804, 0]),\n Yellow4: fromRgb([0.545, 0.545, 0]),\n Gray0: fromRgb([0.745, 0.745, 0.745]),\n Green0: fromRgb([0, 1, 0]),\n Grey0: fromRgb([0.745, 0.745, 0.745]),\n Maroon0: fromRgb([0.69, 0.19, 0.376]),\n Purple0: fromRgb([0.628, 0.125, 0.94]),\n};\n", "import { XColorPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as XColorSpec from \"./types\";\n\nconst parseCache: Record = {};\n\n/**\n * Parse an `xparse` argument specification string to an AST.\n * This function caches results. Don't mutate the returned AST!\n *\n * @param {string} [str=\"\"] - LaTeX string input\n * @returns - AST for LaTeX string\n */\nexport function parse(str = \"\"): XColorSpec.Ast {\n parseCache[str] =\n parseCache[str] || (XColorPegParser.parse(str) as XColorSpec.Ast);\n return parseCache[str];\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { getArgsContent } from \"@unified-latex/unified-latex-util-arguments\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { xcolorColorToHex } from \"./xcolor\";\nimport { structuredClone } from \"@unified-latex/structured-clone\";\nimport { deleteComments } from \"@unified-latex/unified-latex-util-comments\";\n\n/**\n * Compute the hex representation of a color specified by an xcolor color command.\n * For example `\\color[rgb]{1 .5 .5}` or `\\textcolor{red}{foo}`. If the color cannot be parsed,\n * `null` is returned for the hex value. In all cases a css variable name (prefixed with \"--\"\")\n * is returned. This can be used to set up CSS for custom colors.\n */\nexport function xcolorMacroToHex(node: Ast.Macro): {\n hex: string | null;\n cssVarName: string;\n} {\n // We do some destructive operations on the node, so clone it first.\n node = structuredClone(node);\n deleteComments(node);\n\n // We assume the node has signature \"o m\" where o is the model and\n // m is the color spec.\n\n const args = getArgsContent(node);\n const model = args[0] && printRaw(args[0]);\n const colorStr = printRaw(args[1] || []);\n let hex: string | null = null;\n try {\n hex = xcolorColorToHex(colorStr, model);\n } catch (e) {}\n\n const cssVarName = \"--\" + colorStr.replace(/[^a-zA-Z0-9-_]/g, \"-\");\n\n return { hex, cssVarName };\n}\n", "import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Create a `\\textcolor` macro. Color arguments are taken from `origMacro`.\n */\nexport function colorToTextcolorMacro(\n content: Ast.Node | Ast.Node[],\n origMacro: Ast.Macro\n): Ast.Macro {\n if (!Array.isArray(content)) {\n content = [content];\n }\n // Signature of \\color is \"o m\".\n // We want to carry through the same arguments\n const args = (\n origMacro.args\n ? origMacro.args\n : [arg([], { closeMark: \"\", openMark: \"\" }), arg([])]\n ).concat(arg(content));\n\n return {\n type: \"macro\",\n content: \"textcolor\",\n args,\n _renderInfo: { inParMode: true },\n };\n}", "import { MacroInfoRecord, EnvInfoRecord } from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n NewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RenewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n NewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n RenewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true },\n },\n NewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RenewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n ProvideExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n DeclareExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n RequirePackage: {\n signature: \"o m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true },\n },\n DeclareOption: { signature: \"m m\", renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {};\n", "import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n mode: { signature: \"s d<> d{}\", renderInfo: { breakAround: true } },\n insertnavigation: { signature: \"m\", renderInfo: { breakAround: true } },\n insertsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n insertsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n insertauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortdate: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortinstitute: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortpart: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshorttitle: { signature: \"o\", renderInfo: { breakAround: true } },\n insertsubsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n insertsubsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true },\n },\n insertverticalnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n usebeamercolor: { signature: \"s m\", renderInfo: { breakAround: true } },\n usebeamertemplate: { signature: \"s m\", renderInfo: { breakAround: true } },\n setbeamercolor: {\n signature: \"m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n setbeamersize: {\n signature: \"m o o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n setbeamertemplate: {\n signature: \"m o o d{}\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n\n newcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\",\n ],\n },\n },\n renewcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\",\n ],\n },\n },\n newenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true },\n },\n renewenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true },\n },\n resetcounteronoverlays: {\n signature: \"m\",\n renderInfo: { breakAround: true },\n },\n resetcountonoverlays: { signature: \"m\", renderInfo: { breakAround: true } },\n\n logo: { signature: \"m\", renderInfo: { breakAround: true } },\n frametitle: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n framesubtitle: { signature: \"d<> m\", renderInfo: { breakAround: true } },\n pause: { signature: \"o\" },\n onslide: { signature: \"t+ t* d<> d{}\" },\n only: { signature: \"d<> m d<>\" },\n uncover: { signature: \"d<> m\" },\n visible: { signature: \"d<> m\" },\n invisible: { signature: \"d<> m\" },\n alt: { signature: \"d<> m m d<>\" },\n temporal: { signature: \"r<> m m m\" },\n item: {\n signature: \"d<> o d<>\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [null, \"label\", null],\n },\n },\n label: { signature: \"d<> o m\" }, // cleveref adds an optional argument to label; this gives maximum compatibility.\n action: { signature: \"d<> m\" },\n beamerdefaultoverlayspecification: { signature: \"m\" },\n\n titlegraphic: { signature: \"m\", renderInfo: { breakAround: true } },\n subject: { signature: \"m\", renderInfo: { breakAround: true } },\n keywords: { signature: \"m\", renderInfo: { breakAround: true } },\n\n lecture: { signature: \"o m m\", renderInfo: { breakAround: true } },\n partpage: { renderInfo: { breakAround: true } },\n sectionpage: { renderInfo: { breakAround: true } },\n subsectionpage: { renderInfo: { breakAround: true } },\n AtBeginLecture: { signature: \"m\", renderInfo: { breakAround: true } },\n AtBeginPart: { signature: \"m\", renderInfo: { breakAround: true } },\n tableofcontents: {\n signature: \"o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n againframe: { signature: \"d<> o o m\", renderInfo: { breakAround: true } },\n framezoom: {\n signature: \"r<> r<> o r() r()\",\n renderInfo: { breakAround: true },\n },\n column: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n\n animate: { signature: \"r<>\", renderInfo: { breakAround: true } },\n animatevalue: { signature: \"r<> m m m\", renderInfo: { breakAround: true } },\n sound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n hyperlinksound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true },\n },\n hyperlinkmute: { signature: \"m\", renderInfo: { breakAround: true } },\n\n // These signatures conflict with the default signatures.\n // Care must be taken when processing an AST.\n section: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n subsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n subsubsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n part: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n bibitem: {\n signature: \"s d<> o m\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"],\n },\n },\n};\n\nexport const environments: EnvInfoRecord = {\n frame: {\n signature: \"!d<> !o !o !d{} !d{}\",\n },\n block: {\n signature: \"!d<> !d{} !d<>\",\n },\n alertblock: {\n signature: \"!d<> !d{} !d<>\",\n },\n exampleblock: {\n signature: \"!d<> !d{} !d<>\",\n },\n onlyenv: {\n signature: \"!d<>\",\n },\n altenv: {\n signature: \"!d<> m m m m !d<>\",\n },\n overlayarea: { signature: \"m m\" },\n overprint: { signature: \"o\" },\n actionenv: { signature: \"!d<>\" },\n columns: { signature: \"d<> o\" },\n column: { signature: \"d<> o m\" },\n};\n", "import {\n MacroInfoRecord,\n EnvInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\n\nexport const macros: MacroInfoRecord = {\n columnbreak: { renderInfo: { breakAround: true } },\n};\n\nexport const environments: EnvInfoRecord = {\n multicols: {\n signature: \"m o o\",\n },\n \"multicols*\": {\n signature: \"m o o\",\n },\n};\n", "import * as cleveref from \"./package/cleveref\";\nimport * as exam from \"./package/exam\";\nimport * as geometry from \"./package/geometry\";\nimport * as hyperref from \"./package/hyperref\";\nimport * as latex2e from \"./package/latex2e\";\nimport * as listings from \"./package/listings\";\nimport * as makeidx from \"./package/makeidx\";\nimport * as mathtools from \"./package/mathtools\";\nimport * as minted from \"./package/minted\";\nimport * as nicematrix from \"./package/nicematrix\";\nimport * as systeme from \"./package/systeme\";\nimport * as tikz from \"./package/tikz\";\nimport * as xcolor from \"./package/xcolor\";\nimport * as xparse from \"./package/xparse\";\nimport * as beamer from \"./package/beamer\";\nimport * as multicol from \"./package/multicol\";\n\n/**\n * Info about the macros for available ctan packages. `latex2e` contains\n * the standard macros for LaTeX.\n */\nexport const macroInfo = {\n cleveref: cleveref.macros,\n exam: exam.macros,\n geometry: geometry.macros,\n hyperref: hyperref.macros,\n latex2e: latex2e.macros,\n listings: listings.macros,\n makeidx: makeidx.macros,\n mathtools: mathtools.macros,\n minted: minted.macros,\n nicematrix: nicematrix.macros,\n systeme: systeme.macros,\n tikz: tikz.macros,\n xcolor: xcolor.macros,\n xparse: xparse.macros,\n beamer: beamer.macros,\n multicol: multicol.macros,\n};\n\n/**\n * Info about the environments for available ctan packages. `latex2e` contains\n * the standard environments for LaTeX.\n */\nexport const environmentInfo = {\n cleveref: cleveref.environments,\n exam: exam.environments,\n geometry: geometry.environments,\n hyperref: hyperref.environments,\n latex2e: latex2e.environments,\n listings: listings.environments,\n makeidx: makeidx.environments,\n mathtools: mathtools.environments,\n minted: minted.environments,\n nicematrix: nicematrix.environments,\n systeme: systeme.environments,\n tikz: tikz.environments,\n xcolor: xcolor.environments,\n xparse: xparse.environments,\n beamer: beamer.environments,\n multicol: multicol.environments,\n};\n\n// NOTE: The docstring comment must be the last item in the index.ts file!\n/**\n * ## What is this?\n *\n * Macro/environment definitions and utilities for specific LaTeX packages from CTAN.\n *\n * Note: basic LaTeX macro/environment definitions come from the `latex2e` package, even though\n * this is technically not a CTAN \"package\".\n *\n * ## When should I use this?\n *\n * If you want information about special functions/macros from particular CTAN packages, or\n * you need to parse special environments.\n *\n * ## Notes\n *\n * By default all macros/environments that are exported get processed. If multiple packages\n * export a macro with the same name, then the later-exported one takes precedence. If two packages\n * export a macro/environment of the same name but with conflicting argument signatures, this can\n * cause issues when another unified-latex package processes arguments positionally. For example,\n * by default `\\textbf` takes one argument, but the beamer version of `\\textbf` takes two arguments.\n * During HTML conversion, if arguments are referenced positionally, this may cause previously-working\n * code to fail with when beamer macro signatures are used. A workaround is provided: `_renderInfo.namedArguments`.\n * If `_renderInfo.namedArguments` is specified on both the original macro/environment definition\n * **and** the conflicting one, other unified-latex commands can reference arguments by name instead\n * of by position.\n */\n", "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", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { Region } from \"./regions\";\n\n/**\n * Find all contiguous segments in the array that are between start and end blocks.\n * The `start` and `end` are functions that determine when a region starts and ends.\n */\nexport function findRegionInArray(\n tree: Ast.Node[],\n start: (node: Ast.Node) => boolean,\n end: (node: Ast.Node) => boolean\n): Region[] {\n const ret: Region[] = [];\n let currRegion: Region = { start: undefined as any, end: tree.length };\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (start(node)) {\n currRegion.start = i;\n }\n if (end(node)) {\n currRegion.end = i + 1;\n ret.push(currRegion);\n currRegion = { start: undefined as any, end: tree.length };\n }\n }\n\n if (currRegion.start != null) {\n // Regions don't necessarily have to encounter an `end` to end.\n ret.push(currRegion);\n }\n return ret;\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { findRegionInArray } from \"./find-region\";\nimport { refineRegions, Region, splitByRegions } from \"./regions\";\nimport { SKIP, visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { reparseMacroNames } from \"./reparse-macro-names\";\n\nconst expl3Find = {\n start: match.createMacroMatcher([\"ExplSyntaxOn\"]),\n end: match.createMacroMatcher([\"ExplSyntaxOff\"]),\n};\nconst atLetterFind = {\n start: match.createMacroMatcher([\"makeatletter\"]),\n end: match.createMacroMatcher([\"makeatother\"]),\n};\n\n/**\n * Find regions between `\\ExplSyntaxOn...\\ExplSyntaxOff` and `\\makeatletter...\\makeatother`.\n * Returns an object containing regions where one or both syntax's apply.\n */\nexport function findExpl3AndAtLetterRegionsInArray(tree: Ast.Node[]): {\n explOnly: Region[];\n atLetterOnly: Region[];\n both: Region[];\n} {\n const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end);\n const atLetter = findRegionInArray(\n tree,\n atLetterFind.start,\n atLetterFind.end\n );\n\n const regionMap = new Map([\n ...(expl3.map((x) => [x, \"expl\"]) as [Region, \"expl\"][]),\n ...(atLetter.map((x) => [x, \"atLetter\"]) as [Region, \"atLetter\"][]),\n ]);\n const all = refineRegions([...expl3, ...atLetter]);\n\n const ret = {\n explOnly: [] as Region[],\n atLetterOnly: [] as Region[],\n both: [] as Region[],\n };\n\n for (let i = 0; i < all.regions.length; i++) {\n const region = all.regions[i];\n const containedIn = all.regionsContainedIn[i];\n if (containedIn.size === 2) {\n ret.both.push(region);\n continue;\n }\n for (const v of containedIn.values()) {\n if (regionMap.get(v) === \"expl\") {\n ret.explOnly.push(region);\n }\n if (regionMap.get(v) === \"atLetter\") {\n ret.atLetterOnly.push(region);\n }\n }\n }\n\n // Regions of size 1 only contain the starting/stopping macro, so they should be discarded\n ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1);\n ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1);\n ret.both = ret.both.filter((r) => r.end - r.start > 1);\n\n return ret;\n}\n\nconst atLetterSet = new Set([\"@\"]);\nconst explSet = new Set([\"_\", \":\"]);\nconst bothSet = new Set([\"_\", \":\", \"@\"]);\n\n/**\n * Find regions between `\\ExplSyntaxOn...\\ExplSyntaxOff` and `\\makeatletter...\\makeatother`\n * and reparse their contents so that the relevant characters (e.g., `@`, `_`, and `:`) become\n * part of the macro names.\n */\nexport function reparseExpl3AndAtLetterRegions(tree: Ast.Ast) {\n visit(\n tree,\n {\n leave: (nodes) => {\n const regions = findExpl3AndAtLetterRegionsInArray(nodes);\n // In all likelihood, we don't need to do any reparsing, so bail early here\n const totalNumRegions =\n regions.both.length +\n regions.atLetterOnly.length +\n regions.explOnly.length;\n if (totalNumRegions === 0) {\n return;\n }\n\n const splits = splitByRegions(nodes, regions);\n const processed: typeof nodes = [];\n for (const [key, slice] of splits) {\n switch (key) {\n case null:\n processed.push(...slice);\n continue;\n case \"atLetterOnly\":\n reparseMacroNames(slice, atLetterSet);\n processed.push(...slice);\n continue;\n case \"explOnly\":\n reparseMacroNames(slice, explSet);\n processed.push(...slice);\n continue;\n case \"both\":\n reparseMacroNames(slice, bothSet);\n processed.push(...slice);\n continue;\n default:\n throw new Error(\n `Unexpected case when splitting ${key}`\n );\n }\n }\n\n nodes.length = 0;\n nodes.push(...processed);\n return SKIP;\n },\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\n\nexport type Region = { start: number; end: number };\n\n/**\n * Given `regions`, a list of `Region`s (not necessarily ordered, possibly overlapping), return a list of in-order,\n * non-overlapping regions and a corresponding list containing a set of the original `Region`s that the new region\n * is a subset of.\n */\nexport function refineRegions(regions: Region[]): {\n regions: Region[];\n regionsContainedIn: Set[];\n} {\n const _regions = [...regions];\n _regions.sort((a, b) => a.start - b.start);\n const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end]));\n const cutPoints = Array.from(cutPointsSet);\n cutPoints.sort((a, b) => a - b);\n\n const retRegions: Region[] = [];\n const retRegionsContainedIn: Set[] = [];\n\n // We will be checking what regions we are completely contained in.\n // Because `_regions` is sorted by start, `seekIndex` will be incremented\n // by end, so that we don't do too much array testing.\n let seekIndex = 0;\n for (let i = 0; i < cutPoints.length - 1; i++) {\n const start = cutPoints[i];\n const end = cutPoints[i + 1];\n const region = { start, end };\n const regionContainedIn: Set = new Set();\n\n let encounteredEndPastStart = false;\n for (let j = seekIndex; j < _regions.length; j++) {\n const superRegion = _regions[j];\n if (superRegion.end >= region.start) {\n encounteredEndPastStart = true;\n }\n if (!encounteredEndPastStart && superRegion.end < region.start) {\n // In this case, the region (and all regions that came before)\n // end before the region we are testing, so we may safely skip past it\n // from here on out.\n seekIndex = j + 1;\n continue;\n }\n\n if (superRegion.start > end) {\n // Because `_regions` is sorted, we can stop here\n break;\n }\n if (\n superRegion.start <= region.start &&\n superRegion.end >= region.end\n ) {\n encounteredEndPastStart = true;\n regionContainedIn.add(superRegion);\n }\n }\n\n if (regionContainedIn.size > 0) {\n // We only count if we are contained in a subregion\n retRegions.push(region);\n retRegionsContainedIn.push(regionContainedIn);\n }\n }\n\n return { regions: retRegions, regionsContainedIn: retRegionsContainedIn };\n}\n\n/**\n * Split an array up into the disjoint regions specified by `regionRecord`.\n * Returned is a list of tuples, the first item being the key of `regionRecord` if there\n * was a corresponding region, or `null` if there was no corresponding region.\n *\n * This function assumes that the regions in `regionRecord` are disjoint and fully contained\n * within the bounds of `array`.\n */\nexport function splitByRegions<\n T extends unknown,\n RegionRecord extends Record\n>(array: T[], regionsRecord: RegionRecord) {\n const ret: [keyof RegionRecord | null, T[]][] = [];\n\n const indices = [0, array.length];\n const reverseMap: Record = {};\n for (const [key, records] of Object.entries(regionsRecord)) {\n indices.push(\n ...records.flatMap((r) => {\n reverseMap[\"\" + [r.start, r.end]] = key;\n return [r.start, r.end];\n })\n );\n }\n indices.sort((a, b) => a - b);\n\n for (let i = 0; i < indices.length - 1; i++) {\n const start = indices[i];\n const end = indices[i + 1];\n if (start === end) {\n continue;\n }\n const regionKey = reverseMap[\"\" + [start, end]];\n\n ret.push([regionKey || null, array.slice(start, end)]);\n }\n\n return ret;\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { EXIT, visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Escape a string so that it can be used to build a regular expression.\n *\n * From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n */\nfunction escapeRegExp(str: string) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n}\n\n/**\n * Build a regular expression that matches everything up to the first non-allowed symbol.\n */\nfunction buildWordRegex(allowedSet: Set): RegExp {\n // /\\p{L}/ matches all letters, including unicode letters. We join this with\n // everything allowed in our set to form a regexp like\n // /(\\p{L}|_|:)*/u\n // The `u` at the end allows unicode characters to be matched.\n const regexpStr = `^(${[\"\\\\p{L}\"]\n .concat(Array.from(allowedSet).map(escapeRegExp))\n .join(\"|\")})*`;\n return new RegExp(regexpStr, \"u\");\n}\n\n/**\n * Checks whether the array has a macro that could be reparsed given the `allowedTokens` but\n * do not do any reparsing. This function can be used in auto-detection schemes to determine if\n * macro names should actually be reparsed.\n */\nexport function hasReparsableMacroNamesInArray(\n tree: Ast.Node[],\n allowedTokens: Set\n): boolean {\n for (let i = 0; i < tree.length; i++) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (match.anyMacro(macro) && match.anyString(string)) {\n // There are two options. Either the macro ends with the special character,\n // e.g. `\\@foo` or the special character starts the next string, e.g. `\\foo@`.\n if (\n allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) ||\n allowedTokens.has(string.content.charAt(0))\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Checks whether `tree` has a macro that could be reparsed given the `allowedTokens` but\n * do not do any reparsing. This function can be used in auto-detection schemes to determine if\n * macro names should actually be reparsed.\n */\nexport function hasReparsableMacroNames(\n tree: Ast.Ast,\n allowedTokens: string | Set\n): boolean {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n // Recast so typescript doesn't complain\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n\n let ret = false;\n visit(\n tree,\n (nodes) => {\n if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) {\n ret = true;\n return EXIT;\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n return ret;\n}\n\n/**\n * Reparses all macro names in the array so that they may optionally include characters listed in `allowedTokens`.\n * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though\n * `_` is normally stops the parsing for a macro name).\n */\nexport function reparseMacroNamesInArray(\n tree: Ast.Node[],\n allowedTokens: Set\n) {\n const regex = buildWordRegex(allowedTokens);\n let i = 0;\n while (i < tree.length) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (\n match.anyMacro(macro) &&\n // The _^ macros in math mode should not be extended no-matter what;\n // So we check to make sure that the macro we're dealing with has the default escape token.\n (macro.escapeToken == null || macro.escapeToken === \"\\\\\") &&\n match.anyString(string) &&\n // There are two options. Either the macro ends with the special character,\n // e.g. `\\@foo` or the special character starts the next string, e.g. `\\foo@`.\n (allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) ||\n allowedTokens.has(string.content.charAt(0)))\n ) {\n // There might be a number somewhere in the string. If so, we should\n // break the string apart at that number\n const match = string.content.match(regex);\n const takeable = match ? match[0] : \"\";\n if (takeable.length > 0) {\n if (takeable.length === string.content.length) {\n // The whole string can be appended to the macro name\n macro.content += string.content;\n tree.splice(i + 1, 1);\n\n // Preserve the source location if available\n if (macro.position && string.position?.end) {\n macro.position.end = string.position.end;\n }\n } else {\n // Only part of the string can be appended to the macro name\n macro.content += takeable;\n string.content = string.content.slice(takeable.length);\n\n // Preserve the source location if available\n if (macro.position?.end) {\n macro.position.end.offset += takeable.length;\n macro.position.end.column += takeable.length;\n }\n if (string.position?.start) {\n string.position.start.offset += takeable.length;\n string.position.start.column += takeable.length;\n }\n }\n } else {\n i++;\n }\n } else {\n ++i;\n }\n }\n}\n\n/**\n * Reparses all macro names so that they may optionally include characters listed in `allowedTokens`.\n * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though\n * `_` is normally stops the parsing for a macro name). Thus, a macro `\\foo_bar:Nn` would be parsed as having\n * the name `foo_bar:Nn` rather than as `foo` followed by the strings `_`, `bar`, `:`, `Nn`.\n */\nexport function reparseMacroNames(\n tree: Ast.Ast,\n allowedTokens: string | Set\n) {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n // Recast so typescript doesn't complain\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n\n visit(\n tree,\n (nodes) => {\n reparseMacroNamesInArray(nodes, _allowedTokens);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n", "import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Unified complier plugin that passes through a LaTeX AST without modification.\n */\nexport const unifiedLatexAstComplier: Plugin =\n function unifiedLatexAstComplier() {\n Object.assign(this, { Compiler: (x: Ast.Root) => x });\n };\n", "import { Plugin, Parser, unified } from \"unified\";\nimport { environmentInfo, macroInfo } from \"@unified-latex/unified-latex-ctan\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfoRecord,\n MacroInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport {\n unifiedLatexTrimEnvironmentContents,\n unifiedLatexTrimRoot,\n} from \"@unified-latex/unified-latex-util-trim\";\nimport { unifiedLatexAstComplier } from \"./compiler-ast\";\nimport { unifiedLatexFromStringMinimal } from \"./plugin-from-string-minimal\";\nimport { unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse } from \"./process-macros-and-environments\";\nimport { unifiedLatexProcessAtLetterAndExplMacros } from \"./process-at-letter-and-expl-macros\";\n\nexport type PluginOptions =\n | {\n mode?: \"math\" | \"regular\";\n macros?: MacroInfoRecord;\n environments?: EnvInfoRecord;\n flags?: {\n /**\n * Whether to parse macros as if `\\makeatletter` is set (i.e., parse `@` as a regular macro character)\n */\n atLetter?: boolean;\n /**\n * Whether to parse macros as if `\\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character)\n */\n expl3?: boolean;\n /**\n * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`.\n * Defaults to `false`.\n */\n autodetectExpl3AndAtLetter?: boolean;\n };\n }\n | undefined;\n\n/**\n * Parse a string to a LaTeX AST.\n */\nexport const unifiedLatexFromString: Plugin =\n function unifiedLatexFromString(options) {\n const {\n mode = \"regular\",\n macros = {},\n environments = {},\n flags: {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false,\n } = {},\n } = options || {};\n\n // Build up a parsing plugin with only unified components\n const allMacroInfo: MacroInfoRecord = Object.assign(\n {},\n ...Object.values(macroInfo),\n macros\n );\n const allEnvInfo: EnvInfoRecord = Object.assign(\n {},\n ...Object.values(environmentInfo),\n environments\n );\n\n // Build up a parser that will perform all the needed steps\n const fullParser = unified()\n .use(unifiedLatexFromStringMinimal, { mode })\n .use(unifiedLatexProcessAtLetterAndExplMacros, {\n atLetter,\n expl3,\n autodetectExpl3AndAtLetter,\n })\n // Math environments that aren't hardcoded into the PEG grammar need to be re-parsed,\n // so do a minimal pass first with just those environments.\n .use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, {\n macros: allMacroInfo,\n environments: allEnvInfo,\n })\n .use(unifiedLatexTrimEnvironmentContents)\n .use(unifiedLatexTrimRoot)\n .use(unifiedLatexAstComplier);\n\n const parser: Parser = (str) => {\n const file = fullParser.processSync({ value: str });\n return file.result;\n };\n\n Object.assign(this, { Parser: parser });\n };\n", "import { LatexPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Parse `str` to an AST with minimal processing. E.g., macro\n * arguments are not attached to macros, etc. when parsed with this\n * function.\n */\nexport function parseMinimal(str: string): Ast.Root {\n return LatexPegParser.parse(str);\n}\n\n/**\n * Parse `str` to an AST with minimal processing. E.g., macro\n * arguments are not attached to macros, etc. when parsed with this\n * function.\n *\n * The parsing assumes a math-mode context, so, for example, `^` and `_` are\n * parsed as macros (even though arguments are not attached to them).\n */\nexport function parseMathMinimal(str: string): Ast.Node[] {\n return LatexPegParser.parse(str, { startRule: \"math\" });\n}\n", "import { Plugin, Parser } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { parseMathMinimal, parseMinimal } from \"./parse-minimal\";\n\ntype PluginOptions = {\n /**\n * Whether the text will be parsed assuming math mode or not.\n */\n mode: \"math\" | \"regular\";\n} | void;\n\n/**\n * Parse a string to a LaTeX AST with no post processing. For example,\n * no macro arguments will be attached, etc.\n */\nexport const unifiedLatexFromStringMinimal: Plugin<\n PluginOptions[],\n string,\n Ast.Root\n> = function unifiedLatexFromStringMinimal(options) {\n const parser: Parser = (str) => {\n if (options?.mode === \"math\") {\n return {\n type: \"root\",\n content: parseMathMinimal(str),\n _renderInfo: { inMathMode: true },\n };\n }\n return parseMinimal(str);\n };\n\n Object.assign(this, { Parser: parser });\n};\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { EnvInfoRecord, MacroInfoRecord } 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 { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport {\n unifiedLatexReparseMathConstructPlugin,\n} from \"./reparse-math\";\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\nimport { processEnvironment } from \"@unified-latex/unified-latex-util-environments\";\n\ntype PluginOptions =\n | { environments: EnvInfoRecord; macros: MacroInfoRecord }\n | undefined;\n\n/**\n * Unified plugin to process macros and environments. Any environments that contain math content\n * are reparsed (if needed) in math mode.\n */\nexport const unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse(options) {\n const { environments = {}, macros = {} } = options || {};\n\n const mathMacros = Object.fromEntries(\n Object.entries(macros).filter(\n ([_, info]) => info.renderInfo?.inMathMode === true\n )\n );\n const mathEnvs = Object.fromEntries(\n Object.entries(environments).filter(\n ([_, info]) => info.renderInfo?.inMathMode === true\n )\n );\n\n const mathReparser = unifiedLatexReparseMathConstructPlugin({\n mathEnvs: Object.keys(mathEnvs),\n mathMacros: Object.keys(mathMacros),\n });\n\n const isRelevantEnvironment = match.createEnvironmentMatcher(environments);\n const isRelevantMathEnvironment = match.createEnvironmentMatcher(mathEnvs);\n\n return (tree) => {\n // First we attach all arguments/process all nodes/environments that have math content\n visit(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, mathMacros);\n },\n leave: (node) => {\n if (!isRelevantMathEnvironment(node)) {\n return;\n }\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 { includeArrays: true }\n );\n\n // Next we reparse macros/envs that may not have been parsed in math mode\n mathReparser(tree);\n\n // Now we attach all arguments/process all environment bodies\n visit(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, macros);\n },\n leave: (node) => {\n if (!isRelevantEnvironment(node)) {\n return;\n }\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 { includeArrays: true }\n );\n };\n};\n", "import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { parseMathMinimal } from \"./parse-minimal\";\n\ntype PluginOptions =\n | {\n /**\n * List of environments whose body should be parsed in math mode\n */\n mathEnvs: string[];\n /**\n * List of macros whose bodies should be parsed in math mode\n */\n mathMacros: string[];\n }\n | undefined;\n\n/**\n * Reparse math environments/macro contents that should have been parsed in math mode but weren't.\n */\nexport const unifiedLatexReparseMath: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexReparseMath(options) {\n const { mathEnvs = [], mathMacros = [] } = options || {};\n\n return unifiedLatexReparseMathConstructPlugin({ mathMacros, mathEnvs });\n};\n\n/**\n * Construct the inner function for the `unifiedLatexReparseMath` plugin. This function should not be used by libraries.\n */\nexport function unifiedLatexReparseMathConstructPlugin({\n mathEnvs,\n mathMacros,\n}: {\n mathEnvs: string[];\n mathMacros: string[];\n}) {\n const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs);\n const isMathMacro = match.createMacroMatcher(mathMacros);\n\n return (tree: Ast.Root) => {\n visit(\n tree,\n (node) => {\n if (match.anyMacro(node)) {\n for (const arg of node.args || []) {\n if (\n arg.content.length > 0 &&\n !wasParsedInMathMode(arg.content)\n ) {\n arg.content = parseMathMinimal(\n printRaw(arg.content)\n );\n }\n }\n }\n if (match.anyEnvironment(node)) {\n if (!wasParsedInMathMode(node.content)) {\n node.content = parseMathMinimal(printRaw(node.content));\n }\n }\n },\n {\n test: (node) => isMathEnvironment(node) || isMathMacro(node),\n }\n );\n };\n}\n\n/**\n * Use a heuristic to decide whether a string was parsed in math mode. The heuristic\n * looks for strings of length greater than 1 or the failure for \"_\" and \"^\" to be parsed\n * as a macro.\n */\nfunction wasParsedInMathMode(nodes: Ast.Node[]): boolean {\n return !nodes.some(\n (node) =>\n // If there are multi-char strings or ^ and _ have been parsed as strings, we know\n // that we were not parsed in math mode.\n (match.anyString(node) && node.content.length > 1) ||\n match.string(node, \"^\") ||\n match.string(node, \"_\")\n );\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { Plugin } from \"unified\";\nimport { reparseExpl3AndAtLetterRegions } from \"@unified-latex/unified-latex-util-catcode\";\nimport {\n hasReparsableMacroNames,\n reparseMacroNames,\n} from \"@unified-latex/unified-latex-util-catcode\";\n\ntype PluginOptions =\n | {\n /**\n * Whether to parse macros as if `\\makeatletter` is set (i.e., parse `@` as a regular macro character).\n * If this option is true, it disables autodetect.\n */\n atLetter?: boolean;\n /**\n * Whether to parse macros as if `\\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character)\n * If this option is true, it disables autodetect.\n */\n expl3?: boolean;\n /**\n * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`.\n * Defaults to `true`.\n */\n autodetectExpl3AndAtLetter?: boolean;\n }\n | undefined;\n\n/**\n * Unified plugin to reprocess macros names to possibly include `@`, `_`, or `:`.\n * This plugin detects the `\\makeatletter` and `\\ExplSyntaxOn` commands and reprocesses macro names\n * inside of those blocks to include those characters.\n */\nexport const unifiedLatexProcessAtLetterAndExplMacros: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexProcessAtLetterAndExplMacros(options) {\n let {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false,\n } = options || {};\n\n return (tree) => {\n // First we reparse based on explicit \\makeatletter and \\ExplSyntaxOn macros\n reparseExpl3AndAtLetterRegions(tree);\n if (atLetter || expl3) {\n autodetectExpl3AndAtLetter = false;\n }\n if (autodetectExpl3AndAtLetter) {\n atLetter = hasReparsableMacroNames(tree, \"@\");\n // We don't check for the `:` here because it could be prone to misidentification.\n expl3 = hasReparsableMacroNames(tree, \"_\");\n }\n const charSet: Set = new Set();\n if (atLetter) {\n charSet.add(\"@\");\n }\n if (expl3) {\n charSet.add(\":\");\n charSet.add(\"_\");\n }\n\n if (charSet.size > 0) {\n reparseMacroNames(tree, charSet);\n }\n };\n};\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { type FrozenProcessor, unified } from \"unified\";\nimport { unifiedLatexFromString } from \"./plugin-from-string\";\nimport type { PluginOptions } from \"./plugin-from-string\";\n\nlet parser = unified().use(unifiedLatexFromString).freeze();\n\n/**\n * Parse the string into an AST.\n */\nexport function parse(str: string): Ast.Root {\n return parser.parse(str);\n}\n\n/**\n * Returns the default `unified-latex` parser, or create a new one with the\n * provided `unifiedLatexFromString` options\n * @param options Plugin options of `unifiedLatexFromString` plugin.\n * @returns The default `unified-latex` parser if `options` is `undefined`, or a\n * newly created `unified-latex` parser with the provided `options`.\n */\nexport function getParser(\n options?: PluginOptions\n): FrozenProcessor {\n return options\n ? unified().use(unifiedLatexFromString, options).freeze()\n : parser;\n}\n", "import { unified } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { unifiedLatexAstComplier } from \"./compiler-ast\";\nimport { unifiedLatexFromString } from \"./plugin-from-string\";\n\n/**\n * Parse `str` into an AST. Parsing starts in math mode and a list of\n * nodes is returned (instead of a \"root\" node).\n */\nexport function parseMath(str: string | Ast.Ast): Ast.Node[] {\n if (typeof str !== \"string\") {\n str = printRaw(str);\n }\n const file = unified()\n .use(unifiedLatexFromString, { mode: \"math\" })\n .use(unifiedLatexAstComplier)\n .processSync({ value: str });\n return (file.result as Ast.Root).content;\n}\n", "import type { Plugin, Printer } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { parse } from \"@unified-latex/unified-latex-util-parse\";\nimport { printLatexAst } from \"./printer\";\n\nconst languages = [\n {\n name: \"latex\",\n extensions: [\".tex\"],\n parsers: [\"latex-parser\"],\n },\n];\n\nconst parsers = {\n \"latex-parser\": {\n parse,\n astFormat: \"latex-ast\",\n locStart: (node: Ast.Node) =>\n node.position ? node.position.start.offset : 0,\n locEnd: (node: Ast.Node) =>\n node.position ? node.position.end.offset : 1,\n },\n};\n\nconst printers = {\n \"latex-ast\": {\n print: printLatexAst,\n } as Printer,\n};\n\nconst prettierPluginLatex: Plugin = { languages, parsers, printers };\n\nexport { prettierPluginLatex };\n"], + "mappings": "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", + "names": ["module", "module", "index", "module", "module", "module", "index", "module", "pushInOrder", "module", "module", "permute", "module", "reducer", "input", "module", "isBuffer", "module", "isArray", "isPlainObject", "setProperty", "getProperty", "extend", "clone", "module", "module", "module", "swizzle", "arg", "module", "string", "match", "s", "module", "s", "string", "match", "module", "path", "module", "module", "Color", "keys", "__defProp", "__export", "index", "group2", "indent2", "lineSuffix2", "whitespace", "macros", "macro", "group", "ESCAPE", "softline", "group", "fill", "ifBreak", "line", "hardline", "lineSuffix", "lineSuffixBoundary", "breakParent", "indent", "markAsRoot", "join", "path", "ESCAPE", "arg", "indent", "fill", "group", "index", "result", "key", "trim", "unifiedLatexTrimEnvironmentContents", "match", "unifiedLatexTrimRoot", "s", "line", "expected", "found", "x", "macro", "comment", "location", "text", "options", "at", "braces", "args", "argument", "arg", "macros", "match", "macro", "macroInfo", "createMatchers", "parse", "createMatchers", "hardline", "join", "breakParent", "line", "group", "indent", "softline", "path", "trim", "parse", "printer", "group", "indent", "line", "softline", "comment", "hardline", "join", "path", "content", "trim", "hardline", "fill", "path", "fill", "path", "_print", "path", "hardline", "fill", "ESCAPE", "indent", "createMatchers", "path", "hardline", "indent", "fill", "nodes", "trim", "path", "hardline", "ESCAPE", "line", "import_is_buffer", "index", "point", "position", "index", "join", "path", "index", "path", "index", "buffer", "index", "prop", "path", "dirname", "assertPath", "basename", "extname", "parse", "index", "extend", "value", "options", "file", "isBuffer", "import_color", "macros", "trim", "environments", "match", "arg", "argSpecM", "parseArgspec", "argSpecO", "argSpecRDelim", "argumentParser", "gobbleSingleArgument", "OPTIONAL_ARGUMENT_ARG_SPEC", "tikzCommandArgumentParser", "colonPos", "createMatchers", "matchers", "Color", "s", "macro", "string", "match", "visit", "unifiedLatexAstComplier", "unifiedLatexFromStringMinimal", "parser", "arg", "unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse", "environments", "macros", "match", "visit", "printRaw", "unifiedLatexProcessAtLetterAndExplMacros", "unifiedLatexFromString", "unified", "parse", "parse"] +} diff --git a/node_modules/@unified-latex/unified-latex-prettier/index.d.ts b/node_modules/@unified-latex/unified-latex-prettier/index.d.ts new file mode 100644 index 0000000..d65a638 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/index.d.ts @@ -0,0 +1,14 @@ +export * from "./libs/printer"; +export * from "./libs/prettier-plugin-latex"; +/** + * ## What is this? + * + * A [Prettier](https://prettier.io/) plugin for formatting and pretty-printing LaTeX source code. + * + * ## When should I use this? + * + * If you want to construct a `Prettier` instance that has LaTeX parsing abilities. + * + * You should probably use the `prettier-plugin-latex` package instead of directly accessing this package. + */ +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/index.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/index.d.ts.map new file mode 100644 index 0000000..61909db --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAG7C;;;;;;;;;;GAUG"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/index.js b/node_modules/@unified-latex/unified-latex-prettier/index.js new file mode 100644 index 0000000..9bfcba8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/index.js @@ -0,0 +1,2377 @@ +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; + +// node_modules/prettier/doc.mjs +var __defProp = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var public_exports = {}; +__export(public_exports, { + builders: () => builders, + printer: () => printer, + utils: () => utils +}); +var DOC_TYPE_STRING = "string"; +var DOC_TYPE_ARRAY = "array"; +var DOC_TYPE_CURSOR = "cursor"; +var DOC_TYPE_INDENT = "indent"; +var DOC_TYPE_ALIGN = "align"; +var DOC_TYPE_TRIM = "trim"; +var DOC_TYPE_GROUP = "group"; +var DOC_TYPE_FILL = "fill"; +var DOC_TYPE_IF_BREAK = "if-break"; +var DOC_TYPE_INDENT_IF_BREAK = "indent-if-break"; +var DOC_TYPE_LINE_SUFFIX = "line-suffix"; +var DOC_TYPE_LINE_SUFFIX_BOUNDARY = "line-suffix-boundary"; +var DOC_TYPE_LINE = "line"; +var DOC_TYPE_LABEL = "label"; +var DOC_TYPE_BREAK_PARENT = "break-parent"; +var VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([ + DOC_TYPE_CURSOR, + DOC_TYPE_INDENT, + DOC_TYPE_ALIGN, + DOC_TYPE_TRIM, + DOC_TYPE_GROUP, + DOC_TYPE_FILL, + DOC_TYPE_IF_BREAK, + DOC_TYPE_INDENT_IF_BREAK, + DOC_TYPE_LINE_SUFFIX, + DOC_TYPE_LINE_SUFFIX_BOUNDARY, + DOC_TYPE_LINE, + DOC_TYPE_LABEL, + DOC_TYPE_BREAK_PARENT +]); +function getDocType(doc) { + if (typeof doc === "string") { + return DOC_TYPE_STRING; + } + if (Array.isArray(doc)) { + return DOC_TYPE_ARRAY; + } + if (!doc) { + return; + } + const { type } = doc; + if (VALID_OBJECT_DOC_TYPES.has(type)) { + return type; + } +} +var get_doc_type_default = getDocType; +var disjunctionListFormat = (list) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(list); +function getDocErrorMessage(doc) { + const type = doc === null ? "null" : typeof doc; + if (type !== "string" && type !== "object") { + return `Unexpected doc '${type}', +Expected it to be 'string' or 'object'.`; + } + if (get_doc_type_default(doc)) { + throw new Error("doc is valid."); + } + const objectType = Object.prototype.toString.call(doc); + if (objectType !== "[object Object]") { + return `Unexpected doc '${objectType}'.`; + } + const EXPECTED_TYPE_VALUES = disjunctionListFormat( + [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`) + ); + return `Unexpected doc.type '${doc.type}'. +Expected it to be ${EXPECTED_TYPE_VALUES}.`; +} +var InvalidDocError = class extends Error { + name = "InvalidDocError"; + constructor(doc) { + super(getDocErrorMessage(doc)); + this.doc = doc; + } +}; +var invalid_doc_error_default = InvalidDocError; +var traverseDocOnExitStackMarker = {}; +function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { + const docsStack = [doc]; + while (docsStack.length > 0) { + const doc2 = docsStack.pop(); + if (doc2 === traverseDocOnExitStackMarker) { + onExit(docsStack.pop()); + continue; + } + if (onExit) { + docsStack.push(doc2, traverseDocOnExitStackMarker); + } + const docType = get_doc_type_default(doc2); + if (!docType) { + throw new invalid_doc_error_default(doc2); + } + if ((onEnter == null ? void 0 : onEnter(doc2)) === false) { + continue; + } + switch (docType) { + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts; + for (let ic = parts.length, i = ic - 1; i >= 0; --i) { + docsStack.push(parts[i]); + } + break; + } + case DOC_TYPE_IF_BREAK: + docsStack.push(doc2.flatContents, doc2.breakContents); + break; + case DOC_TYPE_GROUP: + if (shouldTraverseConditionalGroups && doc2.expandedStates) { + for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) { + docsStack.push(doc2.expandedStates[i]); + } + } else { + docsStack.push(doc2.contents); + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + docsStack.push(doc2.contents); + break; + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + } +} +var traverse_doc_default = traverseDoc; +var noop = () => { +}; +var assertDoc = true ? noop : function(doc) { + traverse_doc_default(doc, (doc2) => { + if (checked.has(doc2)) { + return false; + } + if (typeof doc2 !== "string") { + checked.add(doc2); + } + }); +}; +var assertDocArray = true ? noop : function(docs, optional = false) { + if (optional && !docs) { + return; + } + if (!Array.isArray(docs)) { + throw new TypeError("Unexpected doc array."); + } + for (const doc of docs) { + assertDoc(doc); + } +}; +function indent(contents) { + assertDoc(contents); + return { type: DOC_TYPE_INDENT, contents }; +} +function align(widthOrString, contents) { + assertDoc(contents); + return { type: DOC_TYPE_ALIGN, contents, n: widthOrString }; +} +function group(contents, opts = {}) { + assertDoc(contents); + assertDocArray( + opts.expandedStates, + /* optional */ + true + ); + return { + type: DOC_TYPE_GROUP, + id: opts.id, + contents, + break: Boolean(opts.shouldBreak), + expandedStates: opts.expandedStates + }; +} +function dedentToRoot(contents) { + return align(Number.NEGATIVE_INFINITY, contents); +} +function markAsRoot(contents) { + return align({ type: "root" }, contents); +} +function dedent(contents) { + return align(-1, contents); +} +function conditionalGroup(states, opts) { + return group(states[0], { ...opts, expandedStates: states }); +} +function fill(parts) { + assertDocArray(parts); + return { type: DOC_TYPE_FILL, parts }; +} +function ifBreak(breakContents, flatContents = "", opts = {}) { + assertDoc(breakContents); + if (flatContents !== "") { + assertDoc(flatContents); + } + return { + type: DOC_TYPE_IF_BREAK, + breakContents, + flatContents, + groupId: opts.groupId + }; +} +function indentIfBreak(contents, opts) { + assertDoc(contents); + return { + type: DOC_TYPE_INDENT_IF_BREAK, + contents, + groupId: opts.groupId, + negate: opts.negate + }; +} +function lineSuffix(contents) { + assertDoc(contents); + return { type: DOC_TYPE_LINE_SUFFIX, contents }; +} +var lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY }; +var breakParent = { type: DOC_TYPE_BREAK_PARENT }; +var trim = { type: DOC_TYPE_TRIM }; +var hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true }; +var literallineWithoutBreakParent = { + type: DOC_TYPE_LINE, + hard: true, + literal: true +}; +var line = { type: DOC_TYPE_LINE }; +var softline = { type: DOC_TYPE_LINE, soft: true }; +var hardline = [hardlineWithoutBreakParent, breakParent]; +var literalline = [literallineWithoutBreakParent, breakParent]; +var cursor = { type: DOC_TYPE_CURSOR }; +function join(separator, docs) { + assertDoc(separator); + assertDocArray(docs); + const parts = []; + for (let i = 0; i < docs.length; i++) { + if (i !== 0) { + parts.push(separator); + } + parts.push(docs[i]); + } + return parts; +} +function addAlignmentToDoc(doc, size, tabWidth) { + assertDoc(doc); + let aligned = doc; + if (size > 0) { + for (let i = 0; i < Math.floor(size / tabWidth); ++i) { + aligned = indent(aligned); + } + aligned = align(size % tabWidth, aligned); + aligned = align(Number.NEGATIVE_INFINITY, aligned); + } + return aligned; +} +function label(label2, contents) { + assertDoc(contents); + return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents; +} +var at = (isOptionalObject, object, index) => { + if (isOptionalObject && (object === void 0 || object === null)) { + return; + } + if (Array.isArray(object) || typeof object === "string") { + return object[index < 0 ? object.length + index : index]; + } + return object.at(index); +}; +var at_default = at; +var stringReplaceAll = (isOptionalObject, original, pattern, replacement) => { + if (isOptionalObject && (original === void 0 || original === null)) { + return; + } + if (original.replaceAll) { + return original.replaceAll(pattern, replacement); + } + if (pattern.global) { + return original.replace(pattern, replacement); + } + return original.split(pattern).join(replacement); +}; +var string_replace_all_default = stringReplaceAll; +function convertEndOfLineToChars(value) { + switch (value) { + case "cr": + return "\r"; + case "crlf": + return "\r\n"; + default: + return "\n"; + } +} +var emoji_regex_default = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; +}; +var eastasianwidth_default = { + eastAsianWidth(character) { + var x = character.charCodeAt(0); + var y = character.length == 2 ? character.charCodeAt(1) : 0; + var codePoint = x; + if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) { + x &= 1023; + y &= 1023; + codePoint = x << 10 | y; + codePoint += 65536; + } + if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) { + return "F"; + } + if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) { + return "W"; + } + return "N"; + } +}; +var notAsciiRegex = /[^\x20-\x7F]/; +function getStringWidth(text) { + if (!text) { + return 0; + } + if (!notAsciiRegex.test(text)) { + return text.length; + } + text = text.replace(emoji_regex_default(), " "); + let width = 0; + for (const character of text) { + const codePoint = character.codePointAt(0); + if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) { + continue; + } + if (codePoint >= 768 && codePoint <= 879) { + continue; + } + const code = eastasianwidth_default.eastAsianWidth(character); + width += code === "F" || code === "W" ? 2 : 1; + } + return width; +} +var get_string_width_default = getStringWidth; +var getDocParts = (doc) => { + if (Array.isArray(doc)) { + return doc; + } + if (doc.type !== DOC_TYPE_FILL) { + throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`); + } + return doc.parts; +}; +function mapDoc(doc, cb) { + if (typeof doc === "string") { + return cb(doc); + } + const mapped = /* @__PURE__ */ new Map(); + return rec(doc); + function rec(doc2) { + if (mapped.has(doc2)) { + return mapped.get(doc2); + } + const result = process2(doc2); + mapped.set(doc2, result); + return result; + } + function process2(doc2) { + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_ARRAY: + return cb(doc2.map(rec)); + case DOC_TYPE_FILL: + return cb({ + ...doc2, + parts: doc2.parts.map(rec) + }); + case DOC_TYPE_IF_BREAK: + return cb({ + ...doc2, + breakContents: rec(doc2.breakContents), + flatContents: rec(doc2.flatContents) + }); + case DOC_TYPE_GROUP: { + let { + expandedStates, + contents + } = doc2; + if (expandedStates) { + expandedStates = expandedStates.map(rec); + contents = expandedStates[0]; + } else { + contents = rec(contents); + } + return cb({ + ...doc2, + contents, + expandedStates + }); + } + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + return cb({ + ...doc2, + contents: rec(doc2.contents) + }); + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + return cb(doc2); + default: + throw new invalid_doc_error_default(doc2); + } + } +} +function findInDoc(doc, fn, defaultValue) { + let result = defaultValue; + let shouldSkipFurtherProcessing = false; + function findInDocOnEnterFn(doc2) { + if (shouldSkipFurtherProcessing) { + return false; + } + const maybeResult = fn(doc2); + if (maybeResult !== void 0) { + shouldSkipFurtherProcessing = true; + result = maybeResult; + } + } + traverse_doc_default(doc, findInDocOnEnterFn); + return result; +} +function willBreakFn(doc) { + if (doc.type === DOC_TYPE_GROUP && doc.break) { + return true; + } + if (doc.type === DOC_TYPE_LINE && doc.hard) { + return true; + } + if (doc.type === DOC_TYPE_BREAK_PARENT) { + return true; + } +} +function willBreak(doc) { + return findInDoc(doc, willBreakFn, false); +} +function breakParentGroup(groupStack) { + if (groupStack.length > 0) { + const parentGroup = at_default( + /* isOptionalObject*/ + false, + groupStack, + -1 + ); + if (!parentGroup.expandedStates && !parentGroup.break) { + parentGroup.break = "propagated"; + } + } + return null; +} +function propagateBreaks(doc) { + const alreadyVisitedSet = /* @__PURE__ */ new Set(); + const groupStack = []; + function propagateBreaksOnEnterFn(doc2) { + if (doc2.type === DOC_TYPE_BREAK_PARENT) { + breakParentGroup(groupStack); + } + if (doc2.type === DOC_TYPE_GROUP) { + groupStack.push(doc2); + if (alreadyVisitedSet.has(doc2)) { + return false; + } + alreadyVisitedSet.add(doc2); + } + } + function propagateBreaksOnExitFn(doc2) { + if (doc2.type === DOC_TYPE_GROUP) { + const group22 = groupStack.pop(); + if (group22.break) { + breakParentGroup(groupStack); + } + } + } + traverse_doc_default( + doc, + propagateBreaksOnEnterFn, + propagateBreaksOnExitFn, + /* shouldTraverseConditionalGroups */ + true + ); +} +function removeLinesFn(doc) { + if (doc.type === DOC_TYPE_LINE && !doc.hard) { + return doc.soft ? "" : " "; + } + if (doc.type === DOC_TYPE_IF_BREAK) { + return doc.flatContents; + } + return doc; +} +function removeLines(doc) { + return mapDoc(doc, removeLinesFn); +} +function stripTrailingHardlineFromParts(parts) { + parts = [...parts]; + while (parts.length >= 2 && at_default( + /* isOptionalObject*/ + false, + parts, + -2 + ).type === DOC_TYPE_LINE && at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ).type === DOC_TYPE_BREAK_PARENT) { + parts.length -= 2; + } + if (parts.length > 0) { + const lastPart = stripTrailingHardlineFromDoc(at_default( + /* isOptionalObject*/ + false, + parts, + -1 + )); + parts[parts.length - 1] = lastPart; + } + return parts; +} +function stripTrailingHardlineFromDoc(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_GROUP: + case DOC_TYPE_LINE_SUFFIX: + case DOC_TYPE_LABEL: { + const contents = stripTrailingHardlineFromDoc(doc.contents); + return { + ...doc, + contents + }; + } + case DOC_TYPE_IF_BREAK: + return { + ...doc, + breakContents: stripTrailingHardlineFromDoc(doc.breakContents), + flatContents: stripTrailingHardlineFromDoc(doc.flatContents) + }; + case DOC_TYPE_FILL: + return { + ...doc, + parts: stripTrailingHardlineFromParts(doc.parts) + }; + case DOC_TYPE_ARRAY: + return stripTrailingHardlineFromParts(doc); + case DOC_TYPE_STRING: + return doc.replace(/[\n\r]*$/, ""); + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function stripTrailingHardline(doc) { + return stripTrailingHardlineFromDoc(cleanDoc(doc)); +} +function cleanDocFn(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_FILL: + if (doc.parts.every((part) => part === "")) { + return ""; + } + break; + case DOC_TYPE_GROUP: + if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) { + return ""; + } + if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) { + return doc.contents; + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LINE_SUFFIX: + if (!doc.contents) { + return ""; + } + break; + case DOC_TYPE_IF_BREAK: + if (!doc.flatContents && !doc.breakContents) { + return ""; + } + break; + case DOC_TYPE_ARRAY: { + const parts = []; + for (const part of doc) { + if (!part) { + continue; + } + const [currentPart, ...restParts] = Array.isArray(part) ? part : [part]; + if (typeof currentPart === "string" && typeof at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ) === "string") { + parts[parts.length - 1] += currentPart; + } else { + parts.push(currentPart); + } + parts.push(...restParts); + } + if (parts.length === 0) { + return ""; + } + if (parts.length === 1) { + return parts[0]; + } + return parts; + } + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_LABEL: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function cleanDoc(doc) { + return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc)); +} +function replaceEndOfLine(doc, replacement = literalline) { + return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" ? join(replacement, currentDoc.split("\n")) : currentDoc); +} +function canBreakFn(doc) { + if (doc.type === DOC_TYPE_LINE) { + return true; + } +} +function canBreak(doc) { + return findInDoc(doc, canBreakFn, false); +} +var MODE_BREAK = Symbol("MODE_BREAK"); +var MODE_FLAT = Symbol("MODE_FLAT"); +var CURSOR_PLACEHOLDER = Symbol("cursor"); +function rootIndent() { + return { + value: "", + length: 0, + queue: [] + }; +} +function makeIndent(ind, options) { + return generateInd(ind, { + type: "indent" + }, options); +} +function makeAlign(indent22, widthOrDoc, options) { + if (widthOrDoc === Number.NEGATIVE_INFINITY) { + return indent22.root || rootIndent(); + } + if (widthOrDoc < 0) { + return generateInd(indent22, { + type: "dedent" + }, options); + } + if (!widthOrDoc) { + return indent22; + } + if (widthOrDoc.type === "root") { + return { + ...indent22, + root: indent22 + }; + } + const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign"; + return generateInd(indent22, { + type: alignType, + n: widthOrDoc + }, options); +} +function generateInd(ind, newPart, options) { + const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart]; + let value = ""; + let length = 0; + let lastTabs = 0; + let lastSpaces = 0; + for (const part of queue) { + switch (part.type) { + case "indent": + flush(); + if (options.useTabs) { + addTabs(1); + } else { + addSpaces(options.tabWidth); + } + break; + case "stringAlign": + flush(); + value += part.n; + length += part.n.length; + break; + case "numberAlign": + lastTabs += 1; + lastSpaces += part.n; + break; + default: + throw new Error(`Unexpected type '${part.type}'`); + } + } + flushSpaces(); + return { + ...ind, + value, + length, + queue + }; + function addTabs(count) { + value += " ".repeat(count); + length += options.tabWidth * count; + } + function addSpaces(count) { + value += " ".repeat(count); + length += count; + } + function flush() { + if (options.useTabs) { + flushTabs(); + } else { + flushSpaces(); + } + } + function flushTabs() { + if (lastTabs > 0) { + addTabs(lastTabs); + } + resetLast(); + } + function flushSpaces() { + if (lastSpaces > 0) { + addSpaces(lastSpaces); + } + resetLast(); + } + function resetLast() { + lastTabs = 0; + lastSpaces = 0; + } +} +function trim2(out) { + let trimCount = 0; + let cursorCount = 0; + let outIndex = out.length; + outer: + while (outIndex--) { + const last = out[outIndex]; + if (last === CURSOR_PLACEHOLDER) { + cursorCount++; + continue; + } + if (false) { + throw new Error(`Unexpected value in trim: '${typeof last}'`); + } + for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) { + const char = last[charIndex]; + if (char === " " || char === " ") { + trimCount++; + } else { + out[outIndex] = last.slice(0, charIndex + 1); + break outer; + } + } + } + if (trimCount > 0 || cursorCount > 0) { + out.length = outIndex + 1; + while (cursorCount-- > 0) { + out.push(CURSOR_PLACEHOLDER); + } + } + return trimCount; +} +function fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) { + if (width === Number.POSITIVE_INFINITY) { + return true; + } + let restIdx = restCommands.length; + const cmds = [next]; + const out = []; + while (width >= 0) { + if (cmds.length === 0) { + if (restIdx === 0) { + return true; + } + cmds.push(restCommands[--restIdx]); + continue; + } + const { + mode, + doc + } = cmds.pop(); + switch (get_doc_type_default(doc)) { + case DOC_TYPE_STRING: + out.push(doc); + width -= get_string_width_default(doc); + break; + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = getDocParts(doc); + for (let i = parts.length - 1; i >= 0; i--) { + cmds.push({ + mode, + doc: parts[i] + }); + } + break; + } + case DOC_TYPE_INDENT: + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + cmds.push({ + mode, + doc: doc.contents + }); + break; + case DOC_TYPE_TRIM: + width += trim2(out); + break; + case DOC_TYPE_GROUP: { + if (mustBeFlat && doc.break) { + return false; + } + const groupMode = doc.break ? MODE_BREAK : mode; + const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default( + /* isOptionalObject*/ + false, + doc.expandedStates, + -1 + ) : doc.contents; + cmds.push({ + mode: groupMode, + doc: contents + }); + break; + } + case DOC_TYPE_IF_BREAK: { + const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode; + const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents; + if (contents) { + cmds.push({ + mode, + doc: contents + }); + } + break; + } + case DOC_TYPE_LINE: + if (mode === MODE_BREAK || doc.hard) { + return true; + } + if (!doc.soft) { + out.push(" "); + width--; + } + break; + case DOC_TYPE_LINE_SUFFIX: + hasLineSuffix = true; + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (hasLineSuffix) { + return false; + } + break; + } + } + return false; +} +function printDocToString(doc, options) { + const groupModeMap = {}; + const width = options.printWidth; + const newLine = convertEndOfLineToChars(options.endOfLine); + let pos = 0; + const cmds = [{ + ind: rootIndent(), + mode: MODE_BREAK, + doc + }]; + const out = []; + let shouldRemeasure = false; + const lineSuffix22 = []; + let printedCursorCount = 0; + propagateBreaks(doc); + while (cmds.length > 0) { + const { + ind, + mode, + doc: doc2 + } = cmds.pop(); + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_STRING: { + const formatted = newLine !== "\n" ? string_replace_all_default( + /* isOptionalObject*/ + false, + doc2, + "\n", + newLine + ) : doc2; + out.push(formatted); + if (cmds.length > 0) { + pos += get_string_width_default(formatted); + } + break; + } + case DOC_TYPE_ARRAY: + for (let i = doc2.length - 1; i >= 0; i--) { + cmds.push({ + ind, + mode, + doc: doc2[i] + }); + } + break; + case DOC_TYPE_CURSOR: + if (printedCursorCount >= 2) { + throw new Error("There are too many 'cursor' in doc."); + } + out.push(CURSOR_PLACEHOLDER); + printedCursorCount++; + break; + case DOC_TYPE_INDENT: + cmds.push({ + ind: makeIndent(ind, options), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_ALIGN: + cmds.push({ + ind: makeAlign(ind, doc2.n, options), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_TRIM: + pos -= trim2(out); + break; + case DOC_TYPE_GROUP: + switch (mode) { + case MODE_FLAT: + if (!shouldRemeasure) { + cmds.push({ + ind, + mode: doc2.break ? MODE_BREAK : MODE_FLAT, + doc: doc2.contents + }); + break; + } + case MODE_BREAK: { + shouldRemeasure = false; + const next = { + ind, + mode: MODE_FLAT, + doc: doc2.contents + }; + const rem = width - pos; + const hasLineSuffix = lineSuffix22.length > 0; + if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(next); + } else { + if (doc2.expandedStates) { + const mostExpanded = at_default( + /* isOptionalObject*/ + false, + doc2.expandedStates, + -1 + ); + if (doc2.break) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + for (let i = 1; i < doc2.expandedStates.length + 1; i++) { + if (i >= doc2.expandedStates.length) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + const state = doc2.expandedStates[i]; + const cmd = { + ind, + mode: MODE_FLAT, + doc: state + }; + if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(cmd); + break; + } + } + } + } + } else { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: doc2.contents + }); + } + } + break; + } + } + if (doc2.id) { + groupModeMap[doc2.id] = at_default( + /* isOptionalObject*/ + false, + cmds, + -1 + ).mode; + } + break; + case DOC_TYPE_FILL: { + const rem = width - pos; + const { + parts + } = doc2; + if (parts.length === 0) { + break; + } + const [content, whitespace] = parts; + const contentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: content + }; + const contentBreakCmd = { + ind, + mode: MODE_BREAK, + doc: content + }; + const contentFits = fits(contentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (parts.length === 1) { + if (contentFits) { + cmds.push(contentFlatCmd); + } else { + cmds.push(contentBreakCmd); + } + break; + } + const whitespaceFlatCmd = { + ind, + mode: MODE_FLAT, + doc: whitespace + }; + const whitespaceBreakCmd = { + ind, + mode: MODE_BREAK, + doc: whitespace + }; + if (parts.length === 2) { + if (contentFits) { + cmds.push(whitespaceFlatCmd, contentFlatCmd); + } else { + cmds.push(whitespaceBreakCmd, contentBreakCmd); + } + break; + } + parts.splice(0, 2); + const remainingCmd = { + ind, + mode, + doc: fill(parts) + }; + const secondContent = parts[0]; + const firstAndSecondContentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: [content, whitespace, secondContent] + }; + const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (firstAndSecondContentFits) { + cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd); + } else if (contentFits) { + cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd); + } else { + cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd); + } + break; + } + case DOC_TYPE_IF_BREAK: + case DOC_TYPE_INDENT_IF_BREAK: { + const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode; + if (groupMode === MODE_BREAK) { + const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents); + if (breakContents) { + cmds.push({ + ind, + mode, + doc: breakContents + }); + } + } + if (groupMode === MODE_FLAT) { + const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents; + if (flatContents) { + cmds.push({ + ind, + mode, + doc: flatContents + }); + } + } + break; + } + case DOC_TYPE_LINE_SUFFIX: + lineSuffix22.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: hardlineWithoutBreakParent + }); + } + break; + case DOC_TYPE_LINE: + switch (mode) { + case MODE_FLAT: + if (!doc2.hard) { + if (!doc2.soft) { + out.push(" "); + pos += 1; + } + break; + } else { + shouldRemeasure = true; + } + case MODE_BREAK: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: doc2 + }, ...lineSuffix22.reverse()); + lineSuffix22.length = 0; + break; + } + if (doc2.literal) { + if (ind.root) { + out.push(newLine, ind.root.value); + pos = ind.root.length; + } else { + out.push(newLine); + pos = 0; + } + } else { + pos -= trim2(out); + out.push(newLine + ind.value); + pos = ind.length; + } + break; + } + break; + case DOC_TYPE_LABEL: + cmds.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + if (cmds.length === 0 && lineSuffix22.length > 0) { + cmds.push(...lineSuffix22.reverse()); + lineSuffix22.length = 0; + } + } + const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER); + if (cursorPlaceholderIndex !== -1) { + const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1); + const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(""); + const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(""); + const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(""); + return { + formatted: beforeCursor + aroundCursor + afterCursor, + cursorNodeStart: beforeCursor.length, + cursorNodeText: aroundCursor + }; + } + return { + formatted: out.join("") + }; +} +var builders = { + join, + line, + softline, + hardline, + literalline, + group, + conditionalGroup, + fill, + lineSuffix, + lineSuffixBoundary, + cursor, + breakParent, + ifBreak, + trim, + indent, + indentIfBreak, + align, + addAlignmentToDoc, + markAsRoot, + dedentToRoot, + dedent, + hardlineWithoutBreakParent, + literallineWithoutBreakParent, + label, + // TODO: Remove this in v4 + concat: (parts) => parts +}; +var printer = { printDocToString }; +var utils = { + willBreak, + traverseDoc: traverse_doc_default, + findInDoc, + mapDoc, + removeLines, + stripTrailingHardline, + replaceEndOfLine, + canBreak +}; + +// libs/printer/common.ts +import { printRaw } from "@unified-latex/unified-latex-util-print-raw"; +import { match } from "@unified-latex/unified-latex-util-match"; +function formatEnvSurround(node) { + const env = printRaw(node.env); + return { + envName: env, + start: ESCAPE + "begin{" + env + "}", + end: ESCAPE + "end{" + env + "}" + }; +} +function isLineType(elm) { + if (elm == null || typeof elm === "string") { + return false; + } + if (Array.isArray(elm)) { + return isLineType(elm[0]); + } + if (elm.type === "concat") { + return isLineType(elm.parts); + } + return elm.type === "line"; +} +function joinWithSoftline(arr) { + if (arr.length === 0 || arr.length === 1) { + return arr; + } + const ret = [arr[0]]; + for (let i = 1; i < arr.length; i++) { + const prevNode = arr[i - 1]; + const nextNode = arr[i]; + if (!isLineType(prevNode) && !isLineType(nextNode)) { + ret.push(softline2); + } + ret.push(nextNode); + } + return ret; +} +function getNodeInfo(node, options) { + if (!node) { + return { renderInfo: {} }; + } + const renderInfo = node._renderInfo || {}; + const previousNode = options.referenceMap && options.referenceMap.getPreviousNode(node); + const nextNode = options.referenceMap && options.referenceMap.getNextNode(node); + const renderCache = options.referenceMap && options.referenceMap.getRenderCache(node); + return { + renderInfo, + renderCache, + previousNode, + nextNode, + referenceMap: options.referenceMap + }; +} +var ESCAPE = "\\"; +var { + group: group2, + fill: fill2, + ifBreak: ifBreak2, + line: line2, + softline: softline2, + hardline: hardline2, + lineSuffix: lineSuffix2, + lineSuffixBoundary: lineSuffixBoundary2, + breakParent: breakParent2, + indent: indent2, + markAsRoot: markAsRoot2, + join: join2 +} = builders; +function formatDocArray(nodes, docArray, options) { + const ret = []; + for (let i = 0; i < nodes.length; i++) { + const rawNode = nodes[i]; + const printedNode = docArray[i]; + const { renderInfo, referenceMap, previousNode, nextNode } = getNodeInfo(rawNode, options); + const renderCache = referenceMap && referenceMap.getRenderCache(rawNode); + switch (rawNode.type) { + case "comment": + if (!rawNode.sameline && previousNode && !match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + ret.push(printedNode); + if (nextNode && !rawNode.suffixParbreak) { + ret.push(hardline2); + } + break; + case "environment": + case "displaymath": + case "mathenv": + if (previousNode && (previousNode == null ? void 0 : previousNode.type) !== "parbreak") { + if (ret[ret.length - 1] === line2) { + ret.pop(); + } + if (ret[ret.length - 1] !== hardline2) { + ret.push(hardline2); + } + } + ret.push(printedNode); + if ((nextNode == null ? void 0 : nextNode.type) === "whitespace") { + ret.push(hardline2); + i++; + } + break; + case "macro": + if (renderInfo.breakBefore || renderInfo.breakAround) { + if (previousNode) { + if (ret[ret.length - 1] === line2 || ret[ret.length - 1] === hardline2) { + ret.pop(); + ret.push(hardline2); + } else if (!match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + } + } + if (renderInfo.inParMode && !renderInfo.hangingIndent && renderCache) { + ret.push( + renderCache.content, + ...renderCache.rawArgs || [] + ); + } else { + ret.push(printedNode); + } + if (renderInfo.breakAfter || renderInfo.breakAround) { + if (nextNode) { + if (match.whitespace(nextNode)) { + ret.push(hardline2); + i++; + } else if (match.parbreak(nextNode)) { + } else if (!match.comment(nextNode)) { + ret.push(hardline2); + } + } + } + break; + case "parbreak": + ret.push(hardline2, hardline2); + break; + default: + ret.push(printedNode); + break; + } + } + return ret; +} + +// libs/zip.ts +function zip(array1, array2) { + const ret = []; + const len = Math.min(array1.length, array2.length); + for (let i = 0; i < len; i++) { + ret.push([array1[i], array2[i]]); + } + return ret; +} + +// libs/printer/macro.ts +function printMacro(path, print, options) { + const node = path.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const content = (node.escapeToken != null ? node.escapeToken : ESCAPE) + node.content; + const args = node.args ? path.map(print, "args") : []; + const rawArgs = []; + for (const [arg, printedArg] of zip(node.args || [], args)) { + const renderCache = referenceMap && referenceMap.getRenderCache(arg); + if (renderInfo.inParMode && renderCache) { + rawArgs.push(...renderCache); + } else { + rawArgs.push(printedArg); + } + } + if (referenceMap) { + referenceMap.setRenderCache(node, { rawArgs, content }); + } + if (renderInfo.hangingIndent) { + return indent2(fill2([content, ...rawArgs])); + } + return group2([content, ...rawArgs]); +} + +// libs/printer/argument.ts +import { match as match3 } from "@unified-latex/unified-latex-util-match"; +import { trim as trim4 } from "@unified-latex/unified-latex-util-trim"; + +// libs/printer/tikz.ts +import { + printRaw as printRaw3 +} from "@unified-latex/unified-latex-util-print-raw"; +import { match as match2 } from "@unified-latex/unified-latex-util-match"; +import { trim as trim3 } from "@unified-latex/unified-latex-util-trim"; +import { + parse as parseTikz +} from "@unified-latex/unified-latex-ctan/package/tikz"; + +// libs/printer/print-argument-pgfkeys.ts +import { + linebreak, + printRaw as printRaw2 +} from "@unified-latex/unified-latex-util-print-raw"; +import { parsePgfkeys } from "@unified-latex/unified-latex-util-pgfkeys"; +function printArgumentPgfkeys(nodes, options) { + const { allowParenGroups = false } = options; + const parsed = parsePgfkeys(nodes, { allowParenGroups }); + const content = []; + for (const part of parsed) { + const isLastItem = part === parsed[parsed.length - 1]; + if (part.itemParts) { + const parts = part.itemParts.map( + (node) => printRaw2(node, { asArray: true }).map( + (token) => token === linebreak ? hardline2 : token + ) + ); + const row = join2("=", parts); + content.push(row); + if (part.trailingComma) { + content.push(","); + } + } + if (part.trailingComment) { + const leadingContent = part.itemParts ? [" "] : []; + if (part.leadingParbreak) { + leadingContent.push(hardline2); + } + content.push( + ...leadingContent, + // We're carefully and manually controlling the newlines, + // so print the comment directly without any newlines + "%", + part.trailingComment.content, + breakParent2 + ); + } + if (!isLastItem) { + content.push(line2); + } + } + let leadingComment = [""]; + if (options.leadingComment) { + if (options.leadingComment.leadingWhitespace) { + leadingComment.push(" "); + } + leadingComment.push("%" + options.leadingComment.content, breakParent2); + } + return group2([ + options.openMark, + ...leadingComment, + // If there is no content, we don't want to push an extra `softline`. + // This matters because the braces group could still be broken by `leadingComment` + content.length > 0 ? indent2([softline2, ...content]) : "", + softline2, + options.closeMark + ]); +} + +// libs/printer/tikz.ts +function printTikzArgument(path, print, options) { + const node = path.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const content = []; + const nodes = [...node.content]; + trim3(nodes); + try { + const tikzAst = parseTikz(nodes); + if (tikzAst.content.length === 0) { + content.push(";"); + return content; + } + const printer2 = new TikzArgumentPrinter(tikzAst, path, print); + return printer2.toDoc(); + } catch (e) { + console.warn("Encountered error when trying to parse tikz argument", e); + } + content.push(";"); + return content; +} +function printFragment(fragment, path, print) { + const tmpKey = Symbol(); + const currNode = path.getNode(); + if (!currNode) { + throw new Error( + "tried to print a fragment, but the current node is `null`" + ); + } + currNode[tmpKey] = fragment; + const ret = print(tmpKey); + delete currNode[tmpKey]; + return ret; +} +function printTikzPathSpecNode(node, path, print) { + switch (node.type) { + case "comment": + return printFragment(node, path, print); + case "unknown": + return printFragment(node.content, path, print); + case "coordinate": + return [printRaw3(node.prefix), "(", printRaw3(node.content), ")"]; + case "line_to": + return node.command; + case "square_brace_group": + return printOptionalArgs(node.content); + case "operation": + return node.content.content; + case "svg_operation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path, print) + ); + const options = node.options ? printOptionalArgs(node.options) : []; + const rest = node.options ? [group2(indent2([line2, printRaw3(node.content)]))] : [" ", printRaw3(node.content)]; + return [...comments, "svg", options, ...rest]; + } + case "curve_to": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path, print) + ); + const printedControls = node.controls.length > 1 ? [ + printTikzPathSpecNode(node.controls[0], path, print), + " ", + "and", + line2, + printTikzPathSpecNode(node.controls[1], path, print) + ] : [printTikzPathSpecNode(node.controls[0], path, print)]; + return [ + ...comments, + "..", + " ", + group2( + indent2(["controls", line2, ...printedControls, " ", ".."]) + ) + ]; + } + case "animation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path, print) + ); + return [ + ...comments, + ":", + node.attribute, + " ", + "=", + " ", + group2( + indent2([ + printArgumentPgfkeys(node.content, { + openMark: "{", + closeMark: "}" + }) + ]) + ) + ]; + } + case "foreach": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path, print) + ); + const variables = [...node.variables]; + trim3(variables); + const list = node.list.type === "macro" ? printFragment(node.list, path, print) : printArgumentPgfkeys(node.list.content, { + openMark: "{", + closeMark: "}", + allowParenGroups: true + }); + const doc = [ + ...comments, + printRaw3(node.start), + " ", + printRaw3(variables) + ]; + if (node.options) { + doc.push(" ", indent2(printOptionalArgs(node.options))); + } + doc.push(" ", "in", " ", group2(indent2(list))); + const commandType = node.command.type; + switch (commandType) { + case "foreach": + doc.push( + indent2([ + line2, + printTikzPathSpecNode(node.command, path, print) + ]) + ); + break; + case "macro": + doc.push( + indent2([line2, printFragment(node.command, path, print)]) + ); + break; + case "group": { + const groupContent = [...node.command.content]; + trim3(groupContent); + doc.push( + " ", + indent2( + group2([ + "{", + indent2([ + softline2, + ...groupContent.map( + (n) => printFragment(n, path, print) + ) + ]), + softline2, + "}" + ]) + ) + ); + break; + } + default: + const invalidType = commandType; + console.warn( + `Unhandled command type when printing "foreach": ${invalidType}` + ); + } + return indent2(doc); + } + } + console.warn( + `Encountered unknown type when trying to print tikz PathSpec: "${node.type}"` + ); + return []; +} +function printOptionalArgs(nodes) { + return printArgumentPgfkeys(nodes, { + openMark: "[", + closeMark: "]" + }); +} +var _path, _print; +var TikzArgumentPrinter = class { + constructor(spec, path, print) { + __privateAdd(this, _path, void 0); + __privateAdd(this, _print, void 0); + __privateSet(this, _path, path); + __privateSet(this, _print, print); + this.nodes = [...spec.content]; + } + nodeToDoc(node) { + return printTikzPathSpecNode(node, __privateGet(this, _path), __privateGet(this, _print)); + } + toDoc() { + const doc = []; + const startArg = this.eatOptionalArg(); + if (startArg.optionalArg) { + doc.push( + ...startArg.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ) + ); + doc.push(printOptionalArgs(startArg.optionalArg.content)); + } + const innerDoc = []; + doc.push(group2([indent2(innerDoc), ";"])); + let cycle = -1; + while (this.nodes.length > 0) { + cycle++; + const firstSep = cycle === 0 && !startArg.optionalArg ? " " : line2; + const comingUp = this.peek(); + switch (comingUp) { + case "short_path": { + const [n0, n1, n2] = this.nodes.splice(0, 3); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1), + " ", + this.nodeToDoc(n2) + ); + continue; + } + case "long_path": { + const [n0, n1] = this.nodes.splice(0, 2); + if (n1.type === "operation") { + this.nodes.unshift(n1); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.eatOperation() + ); + } else { + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1) + ); + } + continue; + } + case "node": + { + const eatenNode = this.eatNode(); + if (eatenNode) { + innerDoc.push(line2, ...eatenNode); + continue; + } + console.warn( + "Expected to print a tikz `node` PathSpec but couldn't find the text `node`" + ); + } + continue; + case "operation": + innerDoc.push(firstSep, this.eatOperation()); + continue; + case "unknown": { + const node = this.nodes.shift(); + innerDoc.push(firstSep, this.nodeToDoc(node)); + continue; + } + } + this.nodes.shift(); + } + return doc; + } + /** + * Look at the current node and the nodes that follow. Return what + * "type" is recognized. + */ + peek() { + const [n0, n1, n2, n3] = [ + this.nodes[0], + this.nodes[1], + this.nodes[2], + this.nodes[3] + ]; + if ((n0 == null ? void 0 : n0.type) === "coordinate" && isPathJoinOperation(n1)) { + if ((n2 == null ? void 0 : n2.type) === "coordinate" && !((n3 == null ? void 0 : n3.type) === "coordinate" || isPathJoinOperation(n3))) { + return "short_path"; + } + return "long_path"; + } + if ((n0 == null ? void 0 : n0.type) === "operation") { + if (n0.content.content === "node") { + return "node"; + } + return "operation"; + } + return "unknown"; + } + /** + * Eat comments and an optional arg if present. If no optional + * arg is present, do nothing. + */ + eatOptionalArg() { + let i = 0; + const comments = []; + let optionalArg = null; + for (; i < this.nodes.length; i++) { + const node = this.nodes[i]; + if (node.type === "square_brace_group") { + optionalArg = node; + i++; + break; + } + if (node.type === "comment") { + comments.push(node); + continue; + } + break; + } + if (optionalArg) { + this.nodes.splice(0, i); + } + return { optionalArg, comments }; + } + /** + * Eat a `type === "operation"` node whose contents is `"node"`. I.e., + * the type of thing that shows up in `\path node at (1,1) {foo};` + */ + eatNode() { + const firstNode = this.nodes[0]; + if ((firstNode == null ? void 0 : firstNode.type) === "operation" && firstNode.content.content === "node") { + this.nodes.shift(); + } else { + return null; + } + const innerDoc = []; + const commentBlock = []; + const doc = [commentBlock, "node", group2(indent2(innerDoc))]; + let hasNodeArgument = false; + let shouldBail = false; + let i = 0; + const comments = []; + const options = []; + const name = []; + const atLocations = []; + const animations = []; + let content = []; + for (; i < this.nodes.length && !shouldBail; i++) { + const node = this.nodes[i]; + switch (node.type) { + case "animation": + animations.push(this.nodeToDoc(node)); + continue; + case "comment": { + const comment = { + ...node, + leadingWhitespace: false + }; + comments.push(this.nodeToDoc(comment)); + continue; + } + case "square_brace_group": + options.push(printOptionalArgs(node.content)); + continue; + case "coordinate": + name.push(this.nodeToDoc(node)); + continue; + case "operation": { + if (node.content.content === "at") { + const nextNode = this.nodes[i + 1]; + if (!nextNode || !(nextNode.type === "coordinate" || nextNode.type === "unknown" && match2.anyMacro(nextNode.content))) { + shouldBail = true; + continue; + } + atLocations.push(["at", " ", this.nodeToDoc(nextNode)]); + i++; + continue; + } + shouldBail = true; + continue; + } + case "unknown": { + if (match2.group(node.content)) { + hasNodeArgument = true; + content = this.nodeToDoc(node); + } + } + } + break; + } + if (!hasNodeArgument) { + return innerDoc; + } + this.nodes.splice(0, i + 1); + let isFirstElement = true; + let isNamed = !(Array.isArray(name) && name.length === 0); + for (const comment of comments) { + commentBlock.push(comment, hardline2); + } + if (options.length > 0) { + innerDoc.push(join2(" ", options)); + isFirstElement = false; + } + if (animations.length > 0) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(join2(line2, animations)); + isFirstElement = false; + } + if (isNamed) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(name); + isFirstElement = false; + } + if (atLocations.length > 0) { + innerDoc.push(isFirstElement || isNamed ? " " : line2); + innerDoc.push(join2(line2, atLocations)); + isFirstElement = false; + } + innerDoc.push(line2, content); + return doc; + } + /** + * Eat a `type === "operation"` node, including its optional arguments. + */ + eatOperation() { + const node = this.nodes[0]; + if ((node == null ? void 0 : node.type) === "operation") { + this.nodes.shift(); + } else { + return []; + } + const doc = []; + if ((node == null ? void 0 : node.type) !== "operation") { + throw new Error("Expecting `operation` node."); + } + const options = this.eatOptionalArg(); + doc.push( + ...options.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ), + node.content.content + ); + if (options.optionalArg) { + doc.push(indent2(printOptionalArgs(options.optionalArg.content))); + } + return doc; + } +}; +_path = new WeakMap(); +_print = new WeakMap(); +var PATH_JOIN_OPERATIONS = /* @__PURE__ */ new Set(["rectangle", "grid", "sin", "cos", "to"]); +function isPathJoinOperation(node) { + if (!node) { + return false; + } + switch (node.type) { + case "line_to": + case "curve_to": + return true; + case "operation": + return PATH_JOIN_OPERATIONS.has(node.content.content); + } + return false; +} + +// libs/printer/argument.ts +function printArgument(path, print, options) { + const node = path.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + if (node.openMark === "" && node.closeMark === "" && node.content.length === 0) { + return []; + } + const parentNode = path.getParentNode(); + const { renderInfo: parentRenderInfo } = getNodeInfo(parentNode, options); + if (parentRenderInfo.pgfkeysArgs) { + const leadingComment = node.content.length > 0 && match3.comment(node.content[0]) && node.content[0].sameline ? node.content[0] : null; + const content2 = leadingComment ? node.content.slice(1) : node.content; + trim4(content2); + return printArgumentPgfkeys(content2, { + openMark: node.openMark, + closeMark: node.closeMark, + leadingComment + }); + } + if (parentRenderInfo.tikzPathCommand) { + return printTikzArgument(path, print, options); + } + const openMark = node.openMark; + const closeMark = node.closeMark; + let content = path.map(print, "content"); + content = formatDocArray(node.content, content, options); + if (match3.comment(node.content[node.content.length - 1])) { + content.push(hardline2); + } + let rawRet = [openMark, fill2(content), closeMark]; + if (renderInfo.inParMode) { + rawRet = [openMark, ...content, closeMark]; + } + if (referenceMap) { + referenceMap.setRenderCache(node, rawRet); + } + return rawRet; +} + +// libs/printer/root.ts +import { match as match4 } from "@unified-latex/unified-latex-util-match"; +function hasPreambleCode(nodes) { + return nodes.some((node) => match4.macro(node, "documentclass")); +} +function printRoot(path, print, options) { + const node = path.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const content = path.map(print, "content"); + const rawContent = formatDocArray(node.content, content, options); + const concatFunction = hasPreambleCode(node.content) ? (x) => x : fill2; + return concatFunction(rawContent); +} + +// libs/printer/comment.ts +import { printRaw as printRaw4 } from "@unified-latex/unified-latex-util-print-raw"; +function printComment(path, _print2, _options) { + const node = path.getNode(); + let leadingWhitespace = ""; + if (node.leadingWhitespace && node.sameline) { + leadingWhitespace = " "; + } + const content = [leadingWhitespace, "%" + printRaw4(node.content)]; + return content; +} + +// libs/printer/math.ts +function printInlineMath(path, print, options) { + const node = path.getNode(); + if (node.content.length === 0) { + return ["$", " ", "$"]; + } + let content = path.map(print, "content"); + content = formatDocArray(node.content, content, options); + content = joinWithSoftline(content); + if (node.content[node.content.length - 1].type === "comment") { + content.push(hardline2); + } + return fill2(["$", ...content, "$"]); +} +function printDisplayMath(path, print, options) { + const node = path.getNode(); + let content = path.map(print, "content"); + content = formatDocArray(node.content, content, options); + content = joinWithSoftline(content); + const bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + ESCAPE + "[", + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + ESCAPE + "]" + ]; +} + +// libs/printer/environment.ts +import { printRaw as printRaw5 } from "@unified-latex/unified-latex-util-print-raw"; +import { parseAlignEnvironment } from "@unified-latex/unified-latex-util-align"; +import { trim as trim5 } from "@unified-latex/unified-latex-util-trim"; +function printVerbatimEnvironment(path, print, options) { + const node = path.getNode(); + const env = formatEnvSurround(node); + return [env.start, node.content, env.end]; +} +function printEnvironment(path, print, options) { + const node = path.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const args = node.args ? path.map(print, "args") : []; + const env = formatEnvSurround(node); + let content = path.map(print, "content"); + content = formatDocArray(node.content, content, options); + if (renderInfo.inMathMode) { + content = joinWithSoftline(content); + } + let bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + env.start, + ...args, + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + env.end + ]; +} +function printAlignedEnvironment(path, print, options) { + const node = path.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options + ); + const args = node.args ? path.map(print, "args") : []; + const env = formatEnvSurround(node); + const leadingComment = node.content[0] && node.content[0].type === "comment" && node.content[0].sameline ? node.content[0] : null; + const { rows, rowSeps, trailingComments } = formatAlignedContent( + leadingComment ? node.content.slice(1) : node.content + ); + const content = []; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + const rowSep = rowSeps[i]; + const trailingComment = trailingComments[i]; + content.push(row); + if (rowSep) { + content.push(printRaw5(rowSep)); + } + if (rowSep && trailingComment) { + content.push(" "); + } + if (trailingComment) { + content.push(["%", printRaw5(trailingComment.content)]); + } + if (rowSep || trailingComment) { + content.push(hardline2); + } + } + if (content[content.length - 1] === hardline2) { + content.pop(); + } + if (leadingComment) { + content.unshift( + leadingComment.leadingWhitespace ? " " : "", + "%" + printRaw5(leadingComment.content), + hardline2 + ); + return [env.start, ...args, indent2(content), hardline2, env.end]; + } + return [ + env.start, + ...args, + indent2([hardline2, ...content]), + hardline2, + env.end + ]; +} +function formatAlignedContent(nodes) { + function getSpace(len = 1) { + return " ".repeat(len); + } + const rows = parseAlignEnvironment(nodes); + const numCols = Math.max(...rows.map((r) => r.cells.length)); + const rowSeps = rows.map(({ rowSep }) => printRaw5(rowSep || [])); + const trailingComments = rows.map(({ trailingComment }) => trailingComment); + const renderedRows = rows.map(({ cells, colSeps }) => ({ + cells: cells.map((nodes2) => { + trim5(nodes2); + return printRaw5(nodes2); + }), + seps: colSeps.map((nodes2) => printRaw5(nodes2)) + })); + const colWidths = []; + for (let i = 0; i < numCols; i++) { + colWidths.push( + Math.max( + ...renderedRows.map( + ({ cells, seps }) => ((cells[i] || "") + (seps[i] || "")).length + ) + ) + ); + } + const joinedRows = renderedRows.map(({ cells, seps }) => { + if (cells.length === 1 && cells[0] === "") { + return ""; + } + let ret = ""; + for (let i = 0; i < cells.length; i++) { + const width = colWidths[i] - (seps[i] || "").length; + ret += (i === 0 ? "" : " ") + cells[i] + getSpace(width - cells[i].length + 1) + (seps[i] || ""); + } + return ret; + }); + return { rows: joinedRows, rowSeps, trailingComments }; +} + +// libs/printer/printer.ts +import { + linebreak as linebreak2, + printRaw as printRaw6 +} from "@unified-latex/unified-latex-util-print-raw"; + +// libs/reference-map.ts +import { visit } from "@unified-latex/unified-latex-util-visit"; +var ReferenceMap = class { + constructor(ast) { + this.ast = ast; + this.map = /* @__PURE__ */ new Map(); + visit( + this.ast, + (nodeList) => { + for (let i = 0; i < nodeList.length; i++) { + this.map.set(nodeList[i], { + previous: nodeList[i - 1], + next: nodeList[i + 1] + }); + } + }, + { includeArrays: true, test: Array.isArray } + ); + } + /** + * Associate render-specific data with this node. This data + * will be overwritten if `setRenderCache` is called twice. + * + * @param {Ast.Ast} node + * @param {*} data + * @memberof ReferenceMap + */ + setRenderCache(node, data) { + const currData = this.map.get(node) || {}; + this.map.set(node, { ...currData, renderCache: data }); + } + /** + * Retrieve data associated with `node` via `setRenderCache` + * + * @param {Ast.Ast} node + * @returns {(object | undefined)} + * @memberof ReferenceMap + */ + getRenderCache(node) { + var _a; + return (_a = this.map.get(node)) == null ? void 0 : _a.renderCache; + } + getPreviousNode(node) { + return (this.map.get(node) || {}).previous; + } + getNextNode(node) { + return (this.map.get(node) || {}).next; + } +}; + +// libs/printer/printer.ts +function printLatexAst(path, options, print) { + const node = path.getValue(); + const { renderInfo } = getNodeInfo(node, options); + if (node == null) { + return node; + } + if (typeof node === "string") { + return node; + } + switch (node.type) { + case "root": + if (options.referenceMap) { + console.warn( + "Processing root node, but ReferenceMap already exists. Are there multiple nodes of type 'root'?" + ); + } + options.referenceMap = new ReferenceMap(node); + return printRoot(path, print, options); + case "argument": + return printArgument(path, print, options); + case "comment": + return printComment(path, print, options); + case "environment": + case "mathenv": + if (renderInfo.alignContent) { + return printAlignedEnvironment(path, print, options); + } + return printEnvironment(path, print, options); + case "displaymath": + return printDisplayMath(path, print, options); + case "group": + const content = printRaw6(node.content, { + asArray: true + }).map((token) => token === linebreak2 ? hardline2 : token); + return ["{", ...content, "}"]; + case "inlinemath": + return printInlineMath(path, print, options); + case "macro": + return printMacro(path, print, options); + case "parbreak": + return [hardline2, hardline2]; + case "string": + return node.content; + case "verb": + return [ + ESCAPE, + node.env, + node.escape, + printRaw6(node.content), + node.escape + ]; + case "verbatim": + return printVerbatimEnvironment(path, print, options); + case "whitespace": + return line2; + default: + console.warn("Printing unknown type", node); + return printRaw6(node); + } +} + +// libs/prettier-plugin-latex.ts +import { parse } from "@unified-latex/unified-latex-util-parse"; +var languages = [ + { + name: "latex", + extensions: [".tex"], + parsers: ["latex-parser"] + } +]; +var parsers = { + "latex-parser": { + parse, + astFormat: "latex-ast", + locStart: (node) => node.position ? node.position.start.offset : 0, + locEnd: (node) => node.position ? node.position.end.offset : 1 + } +}; +var printers = { + "latex-ast": { + print: printLatexAst + } +}; +var prettierPluginLatex = { languages, parsers, printers }; +export { + prettierPluginLatex, + printLatexAst, + printLatexAst as printer +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-prettier/index.js.map b/node_modules/@unified-latex/unified-latex-prettier/index.js.map new file mode 100644 index 0000000..710d6f3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/index.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../node_modules/prettier/doc.mjs", "../libs/printer/common.ts", "../libs/zip.ts", "../libs/printer/macro.ts", "../libs/printer/argument.ts", "../libs/printer/tikz.ts", "../libs/printer/print-argument-pgfkeys.ts", "../libs/printer/root.ts", "../libs/printer/comment.ts", "../libs/printer/math.ts", "../libs/printer/environment.ts", "../libs/printer/printer.ts", "../libs/reference-map.ts", "../libs/prettier-plugin-latex.ts"], + "sourcesContent": ["var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/document/public.js\nvar public_exports = {};\n__export(public_exports, {\n builders: () => builders,\n printer: () => printer,\n utils: () => utils\n});\n\n// src/document/constants.js\nvar DOC_TYPE_STRING = \"string\";\nvar DOC_TYPE_ARRAY = \"array\";\nvar DOC_TYPE_CURSOR = \"cursor\";\nvar DOC_TYPE_INDENT = \"indent\";\nvar DOC_TYPE_ALIGN = \"align\";\nvar DOC_TYPE_TRIM = \"trim\";\nvar DOC_TYPE_GROUP = \"group\";\nvar DOC_TYPE_FILL = \"fill\";\nvar DOC_TYPE_IF_BREAK = \"if-break\";\nvar DOC_TYPE_INDENT_IF_BREAK = \"indent-if-break\";\nvar DOC_TYPE_LINE_SUFFIX = \"line-suffix\";\nvar DOC_TYPE_LINE_SUFFIX_BOUNDARY = \"line-suffix-boundary\";\nvar DOC_TYPE_LINE = \"line\";\nvar DOC_TYPE_LABEL = \"label\";\nvar DOC_TYPE_BREAK_PARENT = \"break-parent\";\nvar VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([\n DOC_TYPE_CURSOR,\n DOC_TYPE_INDENT,\n DOC_TYPE_ALIGN,\n DOC_TYPE_TRIM,\n DOC_TYPE_GROUP,\n DOC_TYPE_FILL,\n DOC_TYPE_IF_BREAK,\n DOC_TYPE_INDENT_IF_BREAK,\n DOC_TYPE_LINE_SUFFIX,\n DOC_TYPE_LINE_SUFFIX_BOUNDARY,\n DOC_TYPE_LINE,\n DOC_TYPE_LABEL,\n DOC_TYPE_BREAK_PARENT\n]);\n\n// src/document/utils/get-doc-type.js\nfunction getDocType(doc) {\n if (typeof doc === \"string\") {\n return DOC_TYPE_STRING;\n }\n if (Array.isArray(doc)) {\n return DOC_TYPE_ARRAY;\n }\n if (!doc) {\n return;\n }\n const { type } = doc;\n if (VALID_OBJECT_DOC_TYPES.has(type)) {\n return type;\n }\n}\nvar get_doc_type_default = getDocType;\n\n// src/document/invalid-doc-error.js\nvar disjunctionListFormat = (list) => new Intl.ListFormat(\"en-US\", { type: \"disjunction\" }).format(list);\nfunction getDocErrorMessage(doc) {\n const type = doc === null ? \"null\" : typeof doc;\n if (type !== \"string\" && type !== \"object\") {\n return `Unexpected doc '${type}', \nExpected it to be 'string' or 'object'.`;\n }\n if (get_doc_type_default(doc)) {\n throw new Error(\"doc is valid.\");\n }\n const objectType = Object.prototype.toString.call(doc);\n if (objectType !== \"[object Object]\") {\n return `Unexpected doc '${objectType}'.`;\n }\n const EXPECTED_TYPE_VALUES = disjunctionListFormat(\n [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`)\n );\n return `Unexpected doc.type '${doc.type}'.\nExpected it to be ${EXPECTED_TYPE_VALUES}.`;\n}\nvar InvalidDocError = class extends Error {\n name = \"InvalidDocError\";\n constructor(doc) {\n super(getDocErrorMessage(doc));\n this.doc = doc;\n }\n};\nvar invalid_doc_error_default = InvalidDocError;\n\n// src/document/utils/traverse-doc.js\nvar traverseDocOnExitStackMarker = {};\nfunction traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) {\n const docsStack = [doc];\n while (docsStack.length > 0) {\n const doc2 = docsStack.pop();\n if (doc2 === traverseDocOnExitStackMarker) {\n onExit(docsStack.pop());\n continue;\n }\n if (onExit) {\n docsStack.push(doc2, traverseDocOnExitStackMarker);\n }\n const docType = get_doc_type_default(doc2);\n if (!docType) {\n throw new invalid_doc_error_default(doc2);\n }\n if ((onEnter == null ? void 0 : onEnter(doc2)) === false) {\n continue;\n }\n switch (docType) {\n case DOC_TYPE_ARRAY:\n case DOC_TYPE_FILL: {\n const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts;\n for (let ic = parts.length, i = ic - 1; i >= 0; --i) {\n docsStack.push(parts[i]);\n }\n break;\n }\n case DOC_TYPE_IF_BREAK:\n docsStack.push(doc2.flatContents, doc2.breakContents);\n break;\n case DOC_TYPE_GROUP:\n if (shouldTraverseConditionalGroups && doc2.expandedStates) {\n for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) {\n docsStack.push(doc2.expandedStates[i]);\n }\n } else {\n docsStack.push(doc2.contents);\n }\n break;\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_LINE_SUFFIX:\n docsStack.push(doc2.contents);\n break;\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc2);\n }\n }\n}\nvar traverse_doc_default = traverseDoc;\n\n// src/document/utils/assert-doc.js\nvar noop = () => {\n};\nvar assertDoc = true ? noop : function(doc) {\n traverse_doc_default(doc, (doc2) => {\n if (checked.has(doc2)) {\n return false;\n }\n if (typeof doc2 !== \"string\") {\n checked.add(doc2);\n }\n });\n};\nvar assertDocArray = true ? noop : function(docs, optional = false) {\n if (optional && !docs) {\n return;\n }\n if (!Array.isArray(docs)) {\n throw new TypeError(\"Unexpected doc array.\");\n }\n for (const doc of docs) {\n assertDoc(doc);\n }\n};\n\n// src/document/builders.js\nfunction indent(contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_INDENT, contents };\n}\nfunction align(widthOrString, contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_ALIGN, contents, n: widthOrString };\n}\nfunction group(contents, opts = {}) {\n assertDoc(contents);\n assertDocArray(\n opts.expandedStates,\n /* optional */\n true\n );\n return {\n type: DOC_TYPE_GROUP,\n id: opts.id,\n contents,\n break: Boolean(opts.shouldBreak),\n expandedStates: opts.expandedStates\n };\n}\nfunction dedentToRoot(contents) {\n return align(Number.NEGATIVE_INFINITY, contents);\n}\nfunction markAsRoot(contents) {\n return align({ type: \"root\" }, contents);\n}\nfunction dedent(contents) {\n return align(-1, contents);\n}\nfunction conditionalGroup(states, opts) {\n return group(states[0], { ...opts, expandedStates: states });\n}\nfunction fill(parts) {\n assertDocArray(parts);\n return { type: DOC_TYPE_FILL, parts };\n}\nfunction ifBreak(breakContents, flatContents = \"\", opts = {}) {\n assertDoc(breakContents);\n if (flatContents !== \"\") {\n assertDoc(flatContents);\n }\n return {\n type: DOC_TYPE_IF_BREAK,\n breakContents,\n flatContents,\n groupId: opts.groupId\n };\n}\nfunction indentIfBreak(contents, opts) {\n assertDoc(contents);\n return {\n type: DOC_TYPE_INDENT_IF_BREAK,\n contents,\n groupId: opts.groupId,\n negate: opts.negate\n };\n}\nfunction lineSuffix(contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_LINE_SUFFIX, contents };\n}\nvar lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY };\nvar breakParent = { type: DOC_TYPE_BREAK_PARENT };\nvar trim = { type: DOC_TYPE_TRIM };\nvar hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true };\nvar literallineWithoutBreakParent = {\n type: DOC_TYPE_LINE,\n hard: true,\n literal: true\n};\nvar line = { type: DOC_TYPE_LINE };\nvar softline = { type: DOC_TYPE_LINE, soft: true };\nvar hardline = [hardlineWithoutBreakParent, breakParent];\nvar literalline = [literallineWithoutBreakParent, breakParent];\nvar cursor = { type: DOC_TYPE_CURSOR };\nfunction join(separator, docs) {\n assertDoc(separator);\n assertDocArray(docs);\n const parts = [];\n for (let i = 0; i < docs.length; i++) {\n if (i !== 0) {\n parts.push(separator);\n }\n parts.push(docs[i]);\n }\n return parts;\n}\nfunction addAlignmentToDoc(doc, size, tabWidth) {\n assertDoc(doc);\n let aligned = doc;\n if (size > 0) {\n for (let i = 0; i < Math.floor(size / tabWidth); ++i) {\n aligned = indent(aligned);\n }\n aligned = align(size % tabWidth, aligned);\n aligned = align(Number.NEGATIVE_INFINITY, aligned);\n }\n return aligned;\n}\nfunction label(label2, contents) {\n assertDoc(contents);\n return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents;\n}\n\n// scripts/build/shims/at.js\nvar at = (isOptionalObject, object, index) => {\n if (isOptionalObject && (object === void 0 || object === null)) {\n return;\n }\n if (Array.isArray(object) || typeof object === \"string\") {\n return object[index < 0 ? object.length + index : index];\n }\n return object.at(index);\n};\nvar at_default = at;\n\n// scripts/build/shims/string-replace-all.js\nvar stringReplaceAll = (isOptionalObject, original, pattern, replacement) => {\n if (isOptionalObject && (original === void 0 || original === null)) {\n return;\n }\n if (original.replaceAll) {\n return original.replaceAll(pattern, replacement);\n }\n if (pattern.global) {\n return original.replace(pattern, replacement);\n }\n return original.split(pattern).join(replacement);\n};\nvar string_replace_all_default = stringReplaceAll;\n\n// src/common/end-of-line.js\nfunction convertEndOfLineToChars(value) {\n switch (value) {\n case \"cr\":\n return \"\\r\";\n case \"crlf\":\n return \"\\r\\n\";\n default:\n return \"\\n\";\n }\n}\n\n// node_modules/emoji-regex/index.mjs\nvar emoji_regex_default = () => {\n return /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n\n// node_modules/eastasianwidth/eastasianwidth.js\nvar eastasianwidth_default = {\n eastAsianWidth(character) {\n var x = character.charCodeAt(0);\n var y = character.length == 2 ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) {\n x &= 1023;\n y &= 1023;\n codePoint = x << 10 | y;\n codePoint += 65536;\n }\n if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) {\n return \"F\";\n }\n if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) {\n return \"W\";\n }\n return \"N\";\n }\n};\n\n// src/utils/get-string-width.js\nvar notAsciiRegex = /[^\\x20-\\x7F]/;\nfunction getStringWidth(text) {\n if (!text) {\n return 0;\n }\n if (!notAsciiRegex.test(text)) {\n return text.length;\n }\n text = text.replace(emoji_regex_default(), \" \");\n let width = 0;\n for (const character of text) {\n const codePoint = character.codePointAt(0);\n if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {\n continue;\n }\n if (codePoint >= 768 && codePoint <= 879) {\n continue;\n }\n const code = eastasianwidth_default.eastAsianWidth(character);\n width += code === \"F\" || code === \"W\" ? 2 : 1;\n }\n return width;\n}\nvar get_string_width_default = getStringWidth;\n\n// src/document/utils.js\nvar getDocParts = (doc) => {\n if (Array.isArray(doc)) {\n return doc;\n }\n if (doc.type !== DOC_TYPE_FILL) {\n throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`);\n }\n return doc.parts;\n};\nfunction mapDoc(doc, cb) {\n if (typeof doc === \"string\") {\n return cb(doc);\n }\n const mapped = /* @__PURE__ */ new Map();\n return rec(doc);\n function rec(doc2) {\n if (mapped.has(doc2)) {\n return mapped.get(doc2);\n }\n const result = process2(doc2);\n mapped.set(doc2, result);\n return result;\n }\n function process2(doc2) {\n switch (get_doc_type_default(doc2)) {\n case DOC_TYPE_ARRAY:\n return cb(doc2.map(rec));\n case DOC_TYPE_FILL:\n return cb({\n ...doc2,\n parts: doc2.parts.map(rec)\n });\n case DOC_TYPE_IF_BREAK:\n return cb({\n ...doc2,\n breakContents: rec(doc2.breakContents),\n flatContents: rec(doc2.flatContents)\n });\n case DOC_TYPE_GROUP: {\n let {\n expandedStates,\n contents\n } = doc2;\n if (expandedStates) {\n expandedStates = expandedStates.map(rec);\n contents = expandedStates[0];\n } else {\n contents = rec(contents);\n }\n return cb({\n ...doc2,\n contents,\n expandedStates\n });\n }\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_LINE_SUFFIX:\n return cb({\n ...doc2,\n contents: rec(doc2.contents)\n });\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n return cb(doc2);\n default:\n throw new invalid_doc_error_default(doc2);\n }\n }\n}\nfunction findInDoc(doc, fn, defaultValue) {\n let result = defaultValue;\n let shouldSkipFurtherProcessing = false;\n function findInDocOnEnterFn(doc2) {\n if (shouldSkipFurtherProcessing) {\n return false;\n }\n const maybeResult = fn(doc2);\n if (maybeResult !== void 0) {\n shouldSkipFurtherProcessing = true;\n result = maybeResult;\n }\n }\n traverse_doc_default(doc, findInDocOnEnterFn);\n return result;\n}\nfunction willBreakFn(doc) {\n if (doc.type === DOC_TYPE_GROUP && doc.break) {\n return true;\n }\n if (doc.type === DOC_TYPE_LINE && doc.hard) {\n return true;\n }\n if (doc.type === DOC_TYPE_BREAK_PARENT) {\n return true;\n }\n}\nfunction willBreak(doc) {\n return findInDoc(doc, willBreakFn, false);\n}\nfunction breakParentGroup(groupStack) {\n if (groupStack.length > 0) {\n const parentGroup = at_default(\n /* isOptionalObject*/\n false,\n groupStack,\n -1\n );\n if (!parentGroup.expandedStates && !parentGroup.break) {\n parentGroup.break = \"propagated\";\n }\n }\n return null;\n}\nfunction propagateBreaks(doc) {\n const alreadyVisitedSet = /* @__PURE__ */ new Set();\n const groupStack = [];\n function propagateBreaksOnEnterFn(doc2) {\n if (doc2.type === DOC_TYPE_BREAK_PARENT) {\n breakParentGroup(groupStack);\n }\n if (doc2.type === DOC_TYPE_GROUP) {\n groupStack.push(doc2);\n if (alreadyVisitedSet.has(doc2)) {\n return false;\n }\n alreadyVisitedSet.add(doc2);\n }\n }\n function propagateBreaksOnExitFn(doc2) {\n if (doc2.type === DOC_TYPE_GROUP) {\n const group2 = groupStack.pop();\n if (group2.break) {\n breakParentGroup(groupStack);\n }\n }\n }\n traverse_doc_default(\n doc,\n propagateBreaksOnEnterFn,\n propagateBreaksOnExitFn,\n /* shouldTraverseConditionalGroups */\n true\n );\n}\nfunction removeLinesFn(doc) {\n if (doc.type === DOC_TYPE_LINE && !doc.hard) {\n return doc.soft ? \"\" : \" \";\n }\n if (doc.type === DOC_TYPE_IF_BREAK) {\n return doc.flatContents;\n }\n return doc;\n}\nfunction removeLines(doc) {\n return mapDoc(doc, removeLinesFn);\n}\nfunction stripTrailingHardlineFromParts(parts) {\n parts = [...parts];\n while (parts.length >= 2 && at_default(\n /* isOptionalObject*/\n false,\n parts,\n -2\n ).type === DOC_TYPE_LINE && at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ).type === DOC_TYPE_BREAK_PARENT) {\n parts.length -= 2;\n }\n if (parts.length > 0) {\n const lastPart = stripTrailingHardlineFromDoc(at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ));\n parts[parts.length - 1] = lastPart;\n }\n return parts;\n}\nfunction stripTrailingHardlineFromDoc(doc) {\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_GROUP:\n case DOC_TYPE_LINE_SUFFIX:\n case DOC_TYPE_LABEL: {\n const contents = stripTrailingHardlineFromDoc(doc.contents);\n return {\n ...doc,\n contents\n };\n }\n case DOC_TYPE_IF_BREAK:\n return {\n ...doc,\n breakContents: stripTrailingHardlineFromDoc(doc.breakContents),\n flatContents: stripTrailingHardlineFromDoc(doc.flatContents)\n };\n case DOC_TYPE_FILL:\n return {\n ...doc,\n parts: stripTrailingHardlineFromParts(doc.parts)\n };\n case DOC_TYPE_ARRAY:\n return stripTrailingHardlineFromParts(doc);\n case DOC_TYPE_STRING:\n return doc.replace(/[\\n\\r]*$/, \"\");\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc);\n }\n return doc;\n}\nfunction stripTrailingHardline(doc) {\n return stripTrailingHardlineFromDoc(cleanDoc(doc));\n}\nfunction cleanDocFn(doc) {\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_FILL:\n if (doc.parts.every((part) => part === \"\")) {\n return \"\";\n }\n break;\n case DOC_TYPE_GROUP:\n if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) {\n return \"\";\n }\n if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) {\n return doc.contents;\n }\n break;\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LINE_SUFFIX:\n if (!doc.contents) {\n return \"\";\n }\n break;\n case DOC_TYPE_IF_BREAK:\n if (!doc.flatContents && !doc.breakContents) {\n return \"\";\n }\n break;\n case DOC_TYPE_ARRAY: {\n const parts = [];\n for (const part of doc) {\n if (!part) {\n continue;\n }\n const [currentPart, ...restParts] = Array.isArray(part) ? part : [part];\n if (typeof currentPart === \"string\" && typeof at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ) === \"string\") {\n parts[parts.length - 1] += currentPart;\n } else {\n parts.push(currentPart);\n }\n parts.push(...restParts);\n }\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts;\n }\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc);\n }\n return doc;\n}\nfunction cleanDoc(doc) {\n return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc));\n}\nfunction replaceEndOfLine(doc, replacement = literalline) {\n return mapDoc(doc, (currentDoc) => typeof currentDoc === \"string\" ? join(replacement, currentDoc.split(\"\\n\")) : currentDoc);\n}\nfunction canBreakFn(doc) {\n if (doc.type === DOC_TYPE_LINE) {\n return true;\n }\n}\nfunction canBreak(doc) {\n return findInDoc(doc, canBreakFn, false);\n}\n\n// src/document/printer.js\nvar MODE_BREAK = Symbol(\"MODE_BREAK\");\nvar MODE_FLAT = Symbol(\"MODE_FLAT\");\nvar CURSOR_PLACEHOLDER = Symbol(\"cursor\");\nfunction rootIndent() {\n return {\n value: \"\",\n length: 0,\n queue: []\n };\n}\nfunction makeIndent(ind, options) {\n return generateInd(ind, {\n type: \"indent\"\n }, options);\n}\nfunction makeAlign(indent2, widthOrDoc, options) {\n if (widthOrDoc === Number.NEGATIVE_INFINITY) {\n return indent2.root || rootIndent();\n }\n if (widthOrDoc < 0) {\n return generateInd(indent2, {\n type: \"dedent\"\n }, options);\n }\n if (!widthOrDoc) {\n return indent2;\n }\n if (widthOrDoc.type === \"root\") {\n return {\n ...indent2,\n root: indent2\n };\n }\n const alignType = typeof widthOrDoc === \"string\" ? \"stringAlign\" : \"numberAlign\";\n return generateInd(indent2, {\n type: alignType,\n n: widthOrDoc\n }, options);\n}\nfunction generateInd(ind, newPart, options) {\n const queue = newPart.type === \"dedent\" ? ind.queue.slice(0, -1) : [...ind.queue, newPart];\n let value = \"\";\n let length = 0;\n let lastTabs = 0;\n let lastSpaces = 0;\n for (const part of queue) {\n switch (part.type) {\n case \"indent\":\n flush();\n if (options.useTabs) {\n addTabs(1);\n } else {\n addSpaces(options.tabWidth);\n }\n break;\n case \"stringAlign\":\n flush();\n value += part.n;\n length += part.n.length;\n break;\n case \"numberAlign\":\n lastTabs += 1;\n lastSpaces += part.n;\n break;\n default:\n throw new Error(`Unexpected type '${part.type}'`);\n }\n }\n flushSpaces();\n return {\n ...ind,\n value,\n length,\n queue\n };\n function addTabs(count) {\n value += \"\t\".repeat(count);\n length += options.tabWidth * count;\n }\n function addSpaces(count) {\n value += \" \".repeat(count);\n length += count;\n }\n function flush() {\n if (options.useTabs) {\n flushTabs();\n } else {\n flushSpaces();\n }\n }\n function flushTabs() {\n if (lastTabs > 0) {\n addTabs(lastTabs);\n }\n resetLast();\n }\n function flushSpaces() {\n if (lastSpaces > 0) {\n addSpaces(lastSpaces);\n }\n resetLast();\n }\n function resetLast() {\n lastTabs = 0;\n lastSpaces = 0;\n }\n}\nfunction trim2(out) {\n let trimCount = 0;\n let cursorCount = 0;\n let outIndex = out.length;\n outer:\n while (outIndex--) {\n const last = out[outIndex];\n if (last === CURSOR_PLACEHOLDER) {\n cursorCount++;\n continue;\n }\n if (false) {\n throw new Error(`Unexpected value in trim: '${typeof last}'`);\n }\n for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) {\n const char = last[charIndex];\n if (char === \" \" || char === \"\t\") {\n trimCount++;\n } else {\n out[outIndex] = last.slice(0, charIndex + 1);\n break outer;\n }\n }\n }\n if (trimCount > 0 || cursorCount > 0) {\n out.length = outIndex + 1;\n while (cursorCount-- > 0) {\n out.push(CURSOR_PLACEHOLDER);\n }\n }\n return trimCount;\n}\nfunction fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) {\n if (width === Number.POSITIVE_INFINITY) {\n return true;\n }\n let restIdx = restCommands.length;\n const cmds = [next];\n const out = [];\n while (width >= 0) {\n if (cmds.length === 0) {\n if (restIdx === 0) {\n return true;\n }\n cmds.push(restCommands[--restIdx]);\n continue;\n }\n const {\n mode,\n doc\n } = cmds.pop();\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_STRING:\n out.push(doc);\n width -= get_string_width_default(doc);\n break;\n case DOC_TYPE_ARRAY:\n case DOC_TYPE_FILL: {\n const parts = getDocParts(doc);\n for (let i = parts.length - 1; i >= 0; i--) {\n cmds.push({\n mode,\n doc: parts[i]\n });\n }\n break;\n }\n case DOC_TYPE_INDENT:\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n cmds.push({\n mode,\n doc: doc.contents\n });\n break;\n case DOC_TYPE_TRIM:\n width += trim2(out);\n break;\n case DOC_TYPE_GROUP: {\n if (mustBeFlat && doc.break) {\n return false;\n }\n const groupMode = doc.break ? MODE_BREAK : mode;\n const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default(\n /* isOptionalObject*/\n false,\n doc.expandedStates,\n -1\n ) : doc.contents;\n cmds.push({\n mode: groupMode,\n doc: contents\n });\n break;\n }\n case DOC_TYPE_IF_BREAK: {\n const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode;\n const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents;\n if (contents) {\n cmds.push({\n mode,\n doc: contents\n });\n }\n break;\n }\n case DOC_TYPE_LINE:\n if (mode === MODE_BREAK || doc.hard) {\n return true;\n }\n if (!doc.soft) {\n out.push(\" \");\n width--;\n }\n break;\n case DOC_TYPE_LINE_SUFFIX:\n hasLineSuffix = true;\n break;\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n if (hasLineSuffix) {\n return false;\n }\n break;\n }\n }\n return false;\n}\nfunction printDocToString(doc, options) {\n const groupModeMap = {};\n const width = options.printWidth;\n const newLine = convertEndOfLineToChars(options.endOfLine);\n let pos = 0;\n const cmds = [{\n ind: rootIndent(),\n mode: MODE_BREAK,\n doc\n }];\n const out = [];\n let shouldRemeasure = false;\n const lineSuffix2 = [];\n let printedCursorCount = 0;\n propagateBreaks(doc);\n while (cmds.length > 0) {\n const {\n ind,\n mode,\n doc: doc2\n } = cmds.pop();\n switch (get_doc_type_default(doc2)) {\n case DOC_TYPE_STRING: {\n const formatted = newLine !== \"\\n\" ? string_replace_all_default(\n /* isOptionalObject*/\n false,\n doc2,\n \"\\n\",\n newLine\n ) : doc2;\n out.push(formatted);\n if (cmds.length > 0) {\n pos += get_string_width_default(formatted);\n }\n break;\n }\n case DOC_TYPE_ARRAY:\n for (let i = doc2.length - 1; i >= 0; i--) {\n cmds.push({\n ind,\n mode,\n doc: doc2[i]\n });\n }\n break;\n case DOC_TYPE_CURSOR:\n if (printedCursorCount >= 2) {\n throw new Error(\"There are too many 'cursor' in doc.\");\n }\n out.push(CURSOR_PLACEHOLDER);\n printedCursorCount++;\n break;\n case DOC_TYPE_INDENT:\n cmds.push({\n ind: makeIndent(ind, options),\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_ALIGN:\n cmds.push({\n ind: makeAlign(ind, doc2.n, options),\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_TRIM:\n pos -= trim2(out);\n break;\n case DOC_TYPE_GROUP:\n switch (mode) {\n case MODE_FLAT:\n if (!shouldRemeasure) {\n cmds.push({\n ind,\n mode: doc2.break ? MODE_BREAK : MODE_FLAT,\n doc: doc2.contents\n });\n break;\n }\n case MODE_BREAK: {\n shouldRemeasure = false;\n const next = {\n ind,\n mode: MODE_FLAT,\n doc: doc2.contents\n };\n const rem = width - pos;\n const hasLineSuffix = lineSuffix2.length > 0;\n if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) {\n cmds.push(next);\n } else {\n if (doc2.expandedStates) {\n const mostExpanded = at_default(\n /* isOptionalObject*/\n false,\n doc2.expandedStates,\n -1\n );\n if (doc2.break) {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: mostExpanded\n });\n break;\n } else {\n for (let i = 1; i < doc2.expandedStates.length + 1; i++) {\n if (i >= doc2.expandedStates.length) {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: mostExpanded\n });\n break;\n } else {\n const state = doc2.expandedStates[i];\n const cmd = {\n ind,\n mode: MODE_FLAT,\n doc: state\n };\n if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) {\n cmds.push(cmd);\n break;\n }\n }\n }\n }\n } else {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: doc2.contents\n });\n }\n }\n break;\n }\n }\n if (doc2.id) {\n groupModeMap[doc2.id] = at_default(\n /* isOptionalObject*/\n false,\n cmds,\n -1\n ).mode;\n }\n break;\n case DOC_TYPE_FILL: {\n const rem = width - pos;\n const {\n parts\n } = doc2;\n if (parts.length === 0) {\n break;\n }\n const [content, whitespace] = parts;\n const contentFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: content\n };\n const contentBreakCmd = {\n ind,\n mode: MODE_BREAK,\n doc: content\n };\n const contentFits = fits(contentFlatCmd, [], rem, lineSuffix2.length > 0, groupModeMap, true);\n if (parts.length === 1) {\n if (contentFits) {\n cmds.push(contentFlatCmd);\n } else {\n cmds.push(contentBreakCmd);\n }\n break;\n }\n const whitespaceFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: whitespace\n };\n const whitespaceBreakCmd = {\n ind,\n mode: MODE_BREAK,\n doc: whitespace\n };\n if (parts.length === 2) {\n if (contentFits) {\n cmds.push(whitespaceFlatCmd, contentFlatCmd);\n } else {\n cmds.push(whitespaceBreakCmd, contentBreakCmd);\n }\n break;\n }\n parts.splice(0, 2);\n const remainingCmd = {\n ind,\n mode,\n doc: fill(parts)\n };\n const secondContent = parts[0];\n const firstAndSecondContentFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: [content, whitespace, secondContent]\n };\n const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix2.length > 0, groupModeMap, true);\n if (firstAndSecondContentFits) {\n cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd);\n } else if (contentFits) {\n cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd);\n } else {\n cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd);\n }\n break;\n }\n case DOC_TYPE_IF_BREAK:\n case DOC_TYPE_INDENT_IF_BREAK: {\n const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode;\n if (groupMode === MODE_BREAK) {\n const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents);\n if (breakContents) {\n cmds.push({\n ind,\n mode,\n doc: breakContents\n });\n }\n }\n if (groupMode === MODE_FLAT) {\n const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents;\n if (flatContents) {\n cmds.push({\n ind,\n mode,\n doc: flatContents\n });\n }\n }\n break;\n }\n case DOC_TYPE_LINE_SUFFIX:\n lineSuffix2.push({\n ind,\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n if (lineSuffix2.length > 0) {\n cmds.push({\n ind,\n mode,\n doc: hardlineWithoutBreakParent\n });\n }\n break;\n case DOC_TYPE_LINE:\n switch (mode) {\n case MODE_FLAT:\n if (!doc2.hard) {\n if (!doc2.soft) {\n out.push(\" \");\n pos += 1;\n }\n break;\n } else {\n shouldRemeasure = true;\n }\n case MODE_BREAK:\n if (lineSuffix2.length > 0) {\n cmds.push({\n ind,\n mode,\n doc: doc2\n }, ...lineSuffix2.reverse());\n lineSuffix2.length = 0;\n break;\n }\n if (doc2.literal) {\n if (ind.root) {\n out.push(newLine, ind.root.value);\n pos = ind.root.length;\n } else {\n out.push(newLine);\n pos = 0;\n }\n } else {\n pos -= trim2(out);\n out.push(newLine + ind.value);\n pos = ind.length;\n }\n break;\n }\n break;\n case DOC_TYPE_LABEL:\n cmds.push({\n ind,\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc2);\n }\n if (cmds.length === 0 && lineSuffix2.length > 0) {\n cmds.push(...lineSuffix2.reverse());\n lineSuffix2.length = 0;\n }\n }\n const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER);\n if (cursorPlaceholderIndex !== -1) {\n const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1);\n const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(\"\");\n const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(\"\");\n const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(\"\");\n return {\n formatted: beforeCursor + aroundCursor + afterCursor,\n cursorNodeStart: beforeCursor.length,\n cursorNodeText: aroundCursor\n };\n }\n return {\n formatted: out.join(\"\")\n };\n}\n\n// src/document/public.js\nvar builders = {\n join,\n line,\n softline,\n hardline,\n literalline,\n group,\n conditionalGroup,\n fill,\n lineSuffix,\n lineSuffixBoundary,\n cursor,\n breakParent,\n ifBreak,\n trim,\n indent,\n indentIfBreak,\n align,\n addAlignmentToDoc,\n markAsRoot,\n dedentToRoot,\n dedent,\n hardlineWithoutBreakParent,\n literallineWithoutBreakParent,\n label,\n // TODO: Remove this in v4\n concat: (parts) => parts\n};\nvar printer = { printDocToString };\nvar utils = {\n willBreak,\n traverseDoc: traverse_doc_default,\n findInDoc,\n mapDoc,\n removeLines,\n stripTrailingHardline,\n replaceEndOfLine,\n canBreak\n};\n\n// with-default-export:src/document/public.js\nvar public_default = public_exports;\nexport {\n builders,\n public_default as default,\n printer,\n utils\n};\n", "import { builders } from \"prettier/doc\";\nimport type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { ReferenceMap } from \"../reference-map\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Computes the environment name, start/end, and args.\n * E.g., for \"\\begin{x}abc\\end{x}\", it returns\n * ```\n * {\n * envName: \"x\",\n * start: \"\\\\begin{x}\",\n * end: \"\\\\end{x}\",\n * }\n * ```\n *\n * @param {*} node\n * @returns\n */\nexport function formatEnvSurround(node: Ast.Environment) {\n const env = printRaw(node.env);\n\n return {\n envName: env,\n start: ESCAPE + \"begin{\" + env + \"}\",\n end: ESCAPE + \"end{\" + env + \"}\",\n };\n}\n\n/**\n * Determine if `elm` is a line type (softline/hardline/etc). If `elm` is an\n * array or a concat, the first element is checked.\n */\nfunction isLineType(elm: Doc): boolean {\n if (elm == null || typeof elm === \"string\") {\n return false;\n }\n if (Array.isArray(elm)) {\n return isLineType(elm[0]);\n }\n // Perhaps we can sneak by with Prettier v2 compatibility?\n // @ts-ignore\n if (elm.type === \"concat\") {\n // @ts-ignore\n return isLineType(elm.parts);\n }\n return elm.type === \"line\";\n}\n\n/**\n * Join an array with `softline`. However, if a `line` is\n * found, do not insert an additional softline. For example\n * `[a, b, c]` -> `[a, softline, b, softline, c]`\n *\n * but\n *\n * `[a, line, b, c]` -> `[a, line, b, softline, c]`\n *\n * @param {*} arr\n * @returns\n */\nexport function joinWithSoftline(arr: Doc[]) {\n if (arr.length === 0 || arr.length === 1) {\n return arr;\n }\n const ret = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n const prevNode = arr[i - 1];\n const nextNode = arr[i];\n if (!isLineType(prevNode) && !isLineType(nextNode)) {\n ret.push(softline);\n }\n ret.push(nextNode);\n }\n return ret;\n}\n\nexport function getNodeInfo(\n node: any,\n options: PrettierTypes.Options & { referenceMap?: ReferenceMap }\n): {\n renderInfo: Record;\n renderCache?: object;\n previousNode?: Ast.Node;\n nextNode?: Ast.Node;\n referenceMap?: ReferenceMap;\n} {\n if (!node) {\n return { renderInfo: {} };\n }\n const renderInfo = node._renderInfo || {};\n const previousNode =\n options.referenceMap && options.referenceMap.getPreviousNode(node);\n const nextNode =\n options.referenceMap && options.referenceMap.getNextNode(node);\n const renderCache =\n options.referenceMap && options.referenceMap.getRenderCache(node);\n // It's useful to know whether we're the start or end node in an array,\n // so compute this information.\n return {\n renderInfo,\n renderCache,\n previousNode,\n nextNode,\n referenceMap: options.referenceMap,\n };\n}\n\nexport const ESCAPE = \"\\\\\";\n\n// Commands to build the prettier syntax tree\nexport const {\n group,\n fill,\n ifBreak,\n line,\n softline,\n hardline,\n lineSuffix,\n lineSuffixBoundary,\n breakParent,\n indent,\n markAsRoot,\n join,\n} = builders;\n\n/**\n * Given an array of nodes and the corresponding printed versions, prepares\n * a final Doc array. This function does things like ensures there are `hardlines`\n * around environments and that there aren't excess hardlines at the start or end.\n * It also unwraps `inParMode` macro contents.\n *\n * @export\n * @param {Ast.Node[]} nodes\n * @param {Doc[]} docArray\n * @param {*} options\n * @returns {Doc[]}\n */\nexport function formatDocArray(\n nodes: Ast.Node[],\n docArray: Doc[],\n options: any\n): Doc[] {\n const ret: Doc[] = [];\n\n for (let i = 0; i < nodes.length; i++) {\n const rawNode = nodes[i];\n const printedNode = docArray[i];\n const { renderInfo, referenceMap, previousNode, nextNode } =\n getNodeInfo(rawNode, options);\n const renderCache =\n referenceMap && referenceMap.getRenderCache(rawNode);\n\n switch (rawNode.type) {\n case \"comment\":\n // Comments don't insert hardlines themselves; they depend on appropriate\n // hardlines being inserted here.\n\n // This comment printer inserts hardlines after comments, so do not insert\n // a hardline before a comment if there is a comment right before.\n if (\n !rawNode.sameline &&\n previousNode &&\n !match.comment(previousNode) &&\n !match.parbreak(previousNode)\n ) {\n ret.push(hardline);\n }\n ret.push(printedNode);\n if (nextNode && !rawNode.suffixParbreak) {\n ret.push(hardline);\n }\n break;\n case \"environment\":\n case \"displaymath\":\n case \"mathenv\":\n // Environments always start on a new line (unless they are the first\n // item). Peek to see if there is a newline inserted already.\n if (previousNode && previousNode?.type !== \"parbreak\") {\n if (ret[ret.length - 1] === line) {\n // A preceding `line` should be converted into a `hardline`.\n // Remove the line so a hardline can be added\n ret.pop();\n }\n if (ret[ret.length - 1] !== hardline) {\n ret.push(hardline);\n }\n }\n ret.push(printedNode);\n // If an environment is followed by whitespace, replace it with a hardline\n // instead\n if (nextNode?.type === \"whitespace\") {\n ret.push(hardline);\n i++;\n }\n\n break;\n case \"macro\":\n if (renderInfo.breakBefore || renderInfo.breakAround) {\n // Commands like \\section{} should always be preceded by a hardline\n if (previousNode) {\n if (\n ret[ret.length - 1] === line ||\n ret[ret.length - 1] === hardline\n ) {\n // We may be replacing a hardline here for no reason. However,\n // if there is already a hardline, we don't want to continue\n // and accidentally add too many linebreaks\n ret.pop();\n ret.push(hardline);\n } else if (\n !match.comment(previousNode) &&\n !match.parbreak(previousNode)\n ) {\n ret.push(hardline);\n }\n }\n }\n // Macros marked as `inParMode` should be unwrapped\n // unless they have a hanging indent, in which case the macro\n // has already be wrapped in an `indent` block\n if (\n renderInfo.inParMode &&\n !renderInfo.hangingIndent &&\n renderCache\n ) {\n ret.push(\n (renderCache as any).content,\n ...((renderCache as any).rawArgs || [])\n );\n } else {\n ret.push(printedNode);\n }\n if (renderInfo.breakAfter || renderInfo.breakAround) {\n // Commands like \\section{} should always be followed by a hardline\n if (nextNode) {\n if (match.whitespace(nextNode)) {\n ret.push(hardline);\n i++;\n } else if (match.parbreak(nextNode)) {\n // If the next node is a parbreak, it will insert its own newline\n } else if (!match.comment(nextNode)) {\n ret.push(hardline);\n }\n }\n }\n break;\n case \"parbreak\":\n ret.push(hardline, hardline);\n break;\n default:\n ret.push(printedNode);\n break;\n }\n }\n\n return ret;\n}\n", "export function zip(array1: T[], array2: U[]): [T, U][] {\n const ret: [T, U][] = [];\n const len = Math.min(array1.length, array2.length);\n for (let i = 0; i < len; i++) {\n ret.push([array1[i], array2[i]]);\n }\n return ret;\n}\n", "import type { Doc } from \"prettier\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { getNodeInfo, fill, ESCAPE, indent, group } from \"./common\";\nimport { zip } from \"../zip\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\nexport function printMacro(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Macro;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const content =\n (node.escapeToken != null ? node.escapeToken : ESCAPE) + node.content;\n const args = node.args ? path.map(print, \"args\" as any) : [];\n\n // Some of the arguments want to be printed \"inline\".\n // We loop through the arguments and unwrap the inline ones.\n const rawArgs = [];\n for (const [arg, printedArg] of zip(node.args || [], args)) {\n const renderCache = referenceMap && referenceMap.getRenderCache(arg);\n if (renderInfo.inParMode && renderCache) {\n rawArgs.push(...(renderCache as any[]));\n } else {\n rawArgs.push(printedArg);\n }\n }\n\n if (referenceMap) {\n referenceMap.setRenderCache(node, { rawArgs, content });\n }\n\n if (renderInfo.hangingIndent) {\n return indent(fill([content, ...rawArgs]));\n }\n\n return group([content, ...rawArgs]);\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { getNodeInfo, formatDocArray, hardline, ifBreak, fill } from \"./common\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport { printTikzArgument } from \"./tikz\";\nimport { printArgumentPgfkeys } from \"./print-argument-pgfkeys\";\n\nexport function printArgument(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Argument;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n // We can return early for empty arguments (this is common for omitted optional arguments)\n if (\n node.openMark === \"\" &&\n node.closeMark === \"\" &&\n node.content.length === 0\n ) {\n return [];\n }\n const parentNode = path.getParentNode();\n const { renderInfo: parentRenderInfo } = getNodeInfo(parentNode, options);\n // We handle printing pgfkeys arguments manually\n if (parentRenderInfo.pgfkeysArgs) {\n const leadingComment =\n node.content.length > 0 &&\n match.comment(node.content[0]) &&\n node.content[0].sameline\n ? node.content[0]\n : null;\n const content = leadingComment ? node.content.slice(1) : node.content;\n trim(content);\n return printArgumentPgfkeys(content, {\n openMark: node.openMark,\n closeMark: node.closeMark,\n leadingComment,\n });\n }\n if (parentRenderInfo.tikzPathCommand) {\n return printTikzArgument(path, print, options);\n }\n\n // Regular argument printing\n const openMark = node.openMark;\n const closeMark = node.closeMark;\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n\n // if the last item is a comment, we need to insert a hardline\n if (match.comment(node.content[node.content.length - 1])) {\n content.push(hardline);\n }\n\n let rawRet: Doc[] = [openMark, fill(content), closeMark];\n if (renderInfo.inParMode) {\n // In paragraph node, arguments should flow just like text\n rawRet = [openMark, ...content, closeMark];\n }\n if (referenceMap) {\n // Save the raw rendered data in case a renderer higher up\n // wants to unwrap it\n referenceMap.setRenderCache(node, rawRet);\n }\n\n return rawRet;\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport {\n getNodeInfo,\n formatDocArray,\n hardline,\n join,\n ifBreak,\n breakParent,\n line,\n group,\n indent,\n softline,\n fill,\n} from \"./common\";\nimport {\n printRaw,\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nimport {\n parse as parseTikz,\n PathSpec,\n PathSpecNode,\n printRaw as tikzPrintRaw,\n} from \"@unified-latex/unified-latex-ctan/package/tikz\";\nimport { printArgumentPgfkeys } from \"./print-argument-pgfkeys\";\n\nexport function printTikzArgument(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Argument;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const content: Doc[] = [];\n const nodes = [...node.content];\n trim(nodes);\n try {\n const tikzAst = parseTikz(nodes);\n if (tikzAst.content.length === 0) {\n content.push(\";\");\n return content;\n }\n\n const printer = new TikzArgumentPrinter(tikzAst, path, print);\n return printer.toDoc();\n } catch (e) {\n console.warn(\"Encountered error when trying to parse tikz argument\", e);\n }\n\n content.push(\";\");\n\n return content;\n}\n\n/**\n * Print a fragment of an AST to a `Doc`.\n */\nfunction printFragment(\n fragment: Ast.Node | Ast.Argument,\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc\n): Doc {\n const tmpKey = Symbol();\n const currNode = path.getNode();\n if (!currNode) {\n throw new Error(\n \"tried to print a fragment, but the current node is `null`\"\n );\n }\n (currNode as any)[tmpKey] = fragment;\n const ret = print(tmpKey);\n delete (currNode as any)[tmpKey];\n return ret;\n}\n\n/**\n * Turn an item in a tikz PathSpec into a Doc for printing.\n */\nfunction printTikzPathSpecNode(\n node: PathSpecNode,\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc\n): Doc {\n switch (node.type) {\n case \"comment\":\n return printFragment(node, path, print);\n case \"unknown\":\n // `\"unknown\"` nodes contain regular AST nodes as children which couldn't be identified by the parser\n return printFragment(node.content, path, print);\n case \"coordinate\":\n return [printRaw(node.prefix), \"(\", printRaw(node.content), \")\"];\n case \"line_to\":\n return node.command;\n case \"square_brace_group\":\n return printOptionalArgs(node.content);\n case \"operation\":\n return node.content.content;\n case \"svg_operation\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n const options = node.options ? printOptionalArgs(node.options) : [];\n const rest: Doc[] = node.options\n ? [group(indent([line, printRaw(node.content)]))]\n : [\" \", printRaw(node.content)];\n return [...comments, \"svg\", options, ...rest];\n }\n case \"curve_to\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n const printedControls =\n node.controls.length > 1\n ? [\n printTikzPathSpecNode(node.controls[0], path, print),\n \" \",\n \"and\",\n line,\n printTikzPathSpecNode(node.controls[1]!, path, print),\n ]\n : [printTikzPathSpecNode(node.controls[0], path, print)];\n return [\n ...comments,\n \"..\",\n \" \",\n group(\n indent([\"controls\", line, ...printedControls, \" \", \"..\"])\n ),\n ];\n }\n case \"animation\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n\n return [\n ...comments,\n \":\",\n node.attribute,\n \" \",\n \"=\",\n \" \",\n group(\n indent([\n printArgumentPgfkeys(node.content, {\n openMark: \"{\",\n closeMark: \"}\",\n }),\n ])\n ),\n ];\n }\n case \"foreach\": {\n const comments = node.comments.map((n) =>\n printTikzPathSpecNode(n, path, print)\n );\n const variables = [...node.variables];\n trim(variables);\n const list =\n node.list.type === \"macro\"\n ? printFragment(node.list, path, print)\n : printArgumentPgfkeys(node.list.content, {\n openMark: \"{\",\n closeMark: \"}\",\n allowParenGroups: true,\n });\n const doc = [\n ...comments,\n printRaw(node.start),\n \" \",\n printRaw(variables),\n ];\n if (node.options) {\n doc.push(\" \", indent(printOptionalArgs(node.options)));\n }\n\n // The list, e.g. `{1,2,...,9}`\n doc.push(\" \", \"in\", \" \", group(indent(list)));\n // The loop body\n // XXX: if we are in a tikz node, whitespace doesn't matter. If we are in a regular\n // part of the document, the loop body is whitespace-sensitive\n const commandType = node.command.type;\n switch (commandType) {\n case \"foreach\":\n doc.push(\n indent([\n line,\n printTikzPathSpecNode(node.command, path, print),\n ])\n );\n break;\n case \"macro\":\n doc.push(\n indent([line, printFragment(node.command, path, print)])\n );\n break;\n case \"group\": {\n const groupContent = [...node.command.content];\n trim(groupContent);\n doc.push(\n \" \",\n indent(\n group([\n \"{\",\n indent([\n softline,\n ...groupContent.map((n) =>\n printFragment(n, path, print)\n ),\n ]),\n softline,\n \"}\",\n ])\n )\n );\n break;\n }\n default:\n const invalidType: void = commandType;\n console.warn(\n `Unhandled command type when printing \"foreach\": ${invalidType}`\n );\n }\n\n return indent(doc);\n }\n }\n console.warn(\n `Encountered unknown type when trying to print tikz PathSpec: \"${\n (node as any).type\n }\"`\n );\n return [];\n}\n\nfunction printOptionalArgs(nodes: Ast.Node[]): Doc {\n return printArgumentPgfkeys(nodes, {\n openMark: \"[\",\n closeMark: \"]\",\n });\n}\n\n/**\n * Utility to turn a Tikz PathSpec into a Prettier Doc.\n */\nclass TikzArgumentPrinter {\n #path: PrettierTypes.AstPath;\n #print: PrettierTypes.RecursivePrintFunc;\n nodes: PathSpec[\"content\"];\n constructor(\n spec: PathSpec,\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc\n ) {\n this.#path = path;\n this.#print = print;\n this.nodes = [...spec.content];\n }\n\n nodeToDoc(node: PathSpecNode): Doc {\n return printTikzPathSpecNode(node, this.#path, this.#print);\n }\n\n toDoc(): Doc {\n const doc: Doc = [];\n const startArg = this.eatOptionalArg();\n if (startArg.optionalArg) {\n doc.push(\n ...startArg.comments.map((c) =>\n printFragment(c, this.#path, this.#print)\n )\n );\n doc.push(printOptionalArgs(startArg.optionalArg.content));\n }\n\n const innerDoc: Doc = [];\n doc.push(group([indent(innerDoc), \";\"]));\n let cycle = -1;\n while (this.nodes.length > 0) {\n cycle++;\n // If this is the first item being printed and the draw command has no optional\n // argument, then we force the command to start printing on the same line.\n const firstSep = cycle === 0 && !startArg.optionalArg ? \" \" : line;\n const comingUp = this.peek();\n switch (comingUp) {\n case \"short_path\": {\n const [n0, n1, n2] = this.nodes.splice(0, 3);\n // A short path does not break\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.nodeToDoc(n1),\n \" \",\n this.nodeToDoc(n2)\n );\n continue;\n }\n case \"long_path\": {\n // A long path consists of at least a node followed by a joiner\n const [n0, n1] = this.nodes.splice(0, 2);\n if (n1.type === \"operation\") {\n this.nodes.unshift(n1);\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.eatOperation()\n );\n } else {\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.nodeToDoc(n1)\n );\n }\n continue;\n }\n case \"node\":\n {\n const eatenNode = this.eatNode();\n if (eatenNode) {\n innerDoc.push(line, ...eatenNode);\n continue;\n }\n console.warn(\n \"Expected to print a tikz `node` PathSpec but couldn't find the text `node`\"\n );\n }\n continue;\n case \"operation\":\n innerDoc.push(firstSep, this.eatOperation());\n continue;\n case \"unknown\": {\n const node = this.nodes.shift()!;\n innerDoc.push(firstSep, this.nodeToDoc(node));\n continue;\n }\n }\n this.nodes.shift();\n }\n\n return doc;\n }\n\n /**\n * Look at the current node and the nodes that follow. Return what\n * \"type\" is recognized.\n */\n peek() {\n // A short path is two coordinates, joined by a line_to (with no coordinates/line_to's following).\n // If there are comments intermixed, the short path is broken.\n const [n0, n1, n2, n3] = [\n this.nodes[0],\n this.nodes[1],\n this.nodes[2],\n this.nodes[3],\n ];\n if (n0?.type === \"coordinate\" && isPathJoinOperation(n1)) {\n if (\n n2?.type === \"coordinate\" &&\n !(n3?.type === \"coordinate\" || isPathJoinOperation(n3))\n ) {\n return \"short_path\";\n }\n return \"long_path\";\n }\n if (n0?.type === \"operation\") {\n if (n0.content.content === \"node\") {\n // Nodes are a special type of operation.\n return \"node\";\n }\n return \"operation\";\n }\n\n return \"unknown\";\n }\n\n /**\n * Eat comments and an optional arg if present. If no optional\n * arg is present, do nothing.\n */\n eatOptionalArg() {\n let i = 0;\n const comments: Ast.Comment[] = [];\n let optionalArg:\n | (PathSpecNode & { type: \"square_brace_group\" })\n | null = null;\n for (; i < this.nodes.length; i++) {\n const node = this.nodes[i];\n if (node.type === \"square_brace_group\") {\n optionalArg = node;\n i++;\n break;\n }\n if (node.type === \"comment\") {\n comments.push(node);\n continue;\n }\n break;\n }\n if (optionalArg) {\n // If we grabbed an optional argument, remove it and everything\n // preceding it.\n this.nodes.splice(0, i);\n }\n return { optionalArg, comments };\n }\n\n /**\n * Eat a `type === \"operation\"` node whose contents is `\"node\"`. I.e.,\n * the type of thing that shows up in `\\path node at (1,1) {foo};`\n */\n eatNode(): Doc[] | null {\n const firstNode = this.nodes[0];\n if (\n firstNode?.type === \"operation\" &&\n firstNode.content.content === \"node\"\n ) {\n this.nodes.shift();\n } else {\n return null;\n }\n\n // From the tikz documentation:\n // \\path \u2026 node \u27E8foreach statements\u27E9 [\u27E8options\u27E9] (\u27E8name\u27E9) at(\u27E8coordinate\u27E9)\n // :\u27E8animation attribute\u27E9={\u27E8options\u27E9} {\u27E8node contents\u27E9} \u2026;\n //\n // Order of the parts of the specification.\n // Everything between \u201Cnode\u201D and the opening brace of a node is optional.\n // If there are \u27E8foreach statements\u27E9, they must come first, directly following \u201Cnode\u201D.\n // Other than that, the ordering of all the other elements of a node specification\n // (the \u27E8options\u27E9, the \u27E8name\u27E9, \u27E8coordinate\u27E9, and \u27E8animation attribute\u27E9) is arbitrary, indeed,\n // there can be multiple occurrences of any of these elements (although for the name and the\n // coordinate this makes no sense).\n\n const innerDoc: Doc = [];\n const commentBlock: Doc = [];\n const doc: Doc = [commentBlock, \"node\", group(indent(innerDoc))];\n // We now peek to see if a group `{...}` is the next thing. If so,\n // we're going to eat everything up to it and call it quits. Otherwise,\n // we bail.\n let hasNodeArgument = false;\n let shouldBail = false;\n let i = 0;\n const comments: Doc[] = [];\n const options: Doc[] = [];\n const name: Doc[] = [];\n const atLocations: Doc[] = [];\n const animations: Doc[] = [];\n let content: Doc = [];\n for (; i < this.nodes.length && !shouldBail; i++) {\n const node = this.nodes[i];\n switch (node.type) {\n case \"animation\":\n animations.push(this.nodeToDoc(node));\n continue;\n case \"comment\": {\n const comment: Ast.Comment = {\n ...node,\n leadingWhitespace: false,\n };\n comments.push(this.nodeToDoc(comment));\n continue;\n }\n case \"square_brace_group\":\n options.push(printOptionalArgs(node.content));\n continue;\n case \"coordinate\":\n name.push(this.nodeToDoc(node));\n continue;\n case \"operation\": {\n // An \"at\" should be followed by a coordinate or a macro. If it is,\n // then we slurp it. Otherwise we bail.\n if (node.content.content === \"at\") {\n const nextNode = this.nodes[i + 1];\n if (\n !nextNode ||\n !(\n nextNode.type === \"coordinate\" ||\n (nextNode.type === \"unknown\" &&\n match.anyMacro(nextNode.content))\n )\n ) {\n shouldBail = true;\n continue;\n }\n atLocations.push([\"at\", \" \", this.nodeToDoc(nextNode)]);\n i++;\n continue;\n }\n shouldBail = true;\n continue;\n }\n case \"unknown\": {\n // If we're here, we must be the termination group.\n if (match.group(node.content)) {\n hasNodeArgument = true;\n content = this.nodeToDoc(node);\n }\n // NOTE: the fallthrough here is on purpose. Finding the terminating\n // groups should end our loop.\n }\n }\n break;\n }\n if (!hasNodeArgument) {\n return innerDoc;\n }\n // We have collected docs for all the nodes we've scanned, so delete\n // them from the list.\n this.nodes.splice(0, i + 1);\n\n // We standardize node rendering as `[options] :animations (name) at (pos) {content}`\n let isFirstElement = true;\n let isNamed = !(Array.isArray(name) && name.length === 0);\n // Comments get hoisted to before the \"node\" keyword\n for (const comment of comments) {\n commentBlock.push(comment, hardline);\n }\n if (options.length > 0) {\n innerDoc.push(join(\" \", options));\n isFirstElement = false;\n }\n if (animations.length > 0) {\n innerDoc.push(isFirstElement ? \" \" : line);\n innerDoc.push(join(line, animations));\n isFirstElement = false;\n }\n if (isNamed) {\n innerDoc.push(isFirstElement ? \" \" : line);\n innerDoc.push(name);\n isFirstElement = false;\n }\n if (atLocations.length > 0) {\n innerDoc.push(isFirstElement || isNamed ? \" \" : line);\n innerDoc.push(join(line, atLocations));\n isFirstElement = false;\n }\n innerDoc.push(line, content);\n\n return doc;\n }\n\n /**\n * Eat a `type === \"operation\"` node, including its optional arguments.\n */\n eatOperation(): Doc[] {\n const node = this.nodes[0];\n if (node?.type === \"operation\") {\n this.nodes.shift();\n } else {\n return [];\n }\n\n const doc: Doc[] = [];\n if (node?.type !== \"operation\") {\n throw new Error(\"Expecting `operation` node.\");\n }\n const options = this.eatOptionalArg();\n doc.push(\n ...options.comments.map((c) =>\n printFragment(c, this.#path, this.#print)\n ),\n node.content.content\n );\n if (options.optionalArg) {\n doc.push(indent(printOptionalArgs(options.optionalArg.content)));\n }\n\n return doc;\n }\n}\n\nconst PATH_JOIN_OPERATIONS = new Set([\"rectangle\", \"grid\", \"sin\", \"cos\", \"to\"]);\n/**\n * Return whether `node` is a \"path join\", like `--`, `rectangle`, etc.\n *\n * A path join is an operation that sits between two coordinates, like\n * `(a) -- (b)` or `(a) rectangle (b)`.\n */\nfunction isPathJoinOperation(node?: PathSpecNode): boolean {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case \"line_to\":\n case \"curve_to\":\n return true;\n case \"operation\":\n return PATH_JOIN_OPERATIONS.has(node.content.content);\n }\n return false;\n}\n", "import { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n hardline,\n join,\n breakParent,\n line,\n group,\n indent,\n softline,\n} from \"./common\";\nimport {\n linebreak,\n printRaw,\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parsePgfkeys } from \"@unified-latex/unified-latex-util-pgfkeys\";\n\n/**\n * Format a sequence of Pgfkeys key-value pairs. `nodes` will be parsed\n * by a grammar defining Pgfkeys\n */\nexport function printArgumentPgfkeys(\n nodes: Ast.Node[],\n options: {\n openMark: string;\n closeMark: string;\n leadingComment?: Ast.Comment | null | undefined;\n allowParenGroups?: boolean;\n }\n): Doc {\n const { allowParenGroups = false } = options;\n const parsed = parsePgfkeys(nodes, { allowParenGroups });\n\n const content: Doc[] = [];\n for (const part of parsed) {\n const isLastItem = part === parsed[parsed.length - 1];\n\n if (part.itemParts) {\n // parts are printed using `printRaw`, `hardline` is used in place\n // of \"\\n\"\n const parts = part.itemParts.map((node) =>\n printRaw(node, { asArray: true }).map((token) =>\n token === linebreak ? hardline : token\n )\n );\n const row = join(\"=\", parts);\n content.push(row);\n if (part.trailingComma) {\n content.push(\",\");\n }\n }\n if (part.trailingComment) {\n const leadingContent: Doc[] = part.itemParts ? [\" \"] : [];\n if (part.leadingParbreak) {\n // We preserve parbreaks before comments, so if we have\n // one, insert an extra hardline\n leadingContent.push(hardline);\n }\n\n content.push(\n ...leadingContent,\n // We're carefully and manually controlling the newlines,\n // so print the comment directly without any newlines\n \"%\",\n part.trailingComment.content,\n breakParent\n );\n }\n\n if (!isLastItem) {\n content.push(line);\n }\n }\n\n let leadingComment: Doc[] = [\"\"];\n if (options.leadingComment) {\n if (options.leadingComment.leadingWhitespace) {\n leadingComment.push(\" \");\n }\n leadingComment.push(\"%\" + options.leadingComment.content, breakParent);\n }\n\n return group([\n options.openMark,\n ...leadingComment,\n // If there is no content, we don't want to push an extra `softline`.\n // This matters because the braces group could still be broken by `leadingComment`\n content.length > 0 ? indent([softline, ...content]) : \"\",\n softline,\n options.closeMark,\n ]);\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport { getNodeInfo, fill, formatDocArray } from \"./common\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns true if a `\\documentclass` macro is detected,\n * which would indicate that the node list contains the preamble.\n *\n * @param {[object]} nodes\n */\nexport function hasPreambleCode(nodes: Ast.Node[]) {\n return nodes.some((node) => match.macro(node, \"documentclass\"));\n}\n\nexport function printRoot(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Root;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const content = path.map(print, \"content\");\n const rawContent = formatDocArray(node.content, content, options);\n\n const concatFunction = hasPreambleCode(node.content) ? (x: any) => x : fill;\n return concatFunction(rawContent);\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport * as PrettierTypes from \"./prettier-types\";\n\nexport function printComment(\n path: PrettierTypes.AstPath,\n _print: PrettierTypes.RecursivePrintFunc,\n _options: any\n): Doc {\n const node = path.getNode() as Ast.Comment;\n\n // If a comment is on the same line as other content and it has leading whitespace,\n // add a single whitespace token.\n let leadingWhitespace = \"\";\n if (node.leadingWhitespace && node.sameline) {\n leadingWhitespace = \" \";\n }\n\n const content: Doc[] = [leadingWhitespace, \"%\" + printRaw(node.content)];\n return content;\n}\n", "import type { Doc } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport {\n getNodeInfo,\n softline,\n fill,\n hardline,\n line,\n indent,\n ESCAPE,\n joinWithSoftline,\n formatDocArray,\n} from \"./common\";\n\nexport function printInlineMath(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.InlineMath;\n\n // Since `$$` starts display math mode (in plain TeX),\n // an empty inline math environment must be printed as `$ $`.\n // We special case this.\n if (node.content.length === 0) {\n // We won't allow an empty math environment to be broken\n return [\"$\", \" \", \"$\"];\n }\n\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n content = joinWithSoftline(content);\n\n // If the last node is a comment, we need a linebreak before the closing `$`\n if (node.content[node.content.length - 1].type === \"comment\") {\n content.push(hardline);\n }\n\n return fill([\"$\", ...content, \"$\"]);\n}\n\nexport function printDisplayMath(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.InlineMath;\n\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n content = joinWithSoftline(content);\n\n // If we start with a comment on the same line as the environment\n // We should not insert a newline at the start of the environment body\n const bodyStartToken: PrettierTypes.Doc[] = [hardline];\n if (\n node.content.length === 0 ||\n (node.content[0].type === \"comment\" && node.content[0].sameline)\n ) {\n bodyStartToken.pop();\n }\n\n return [\n ESCAPE + \"[\",\n indent(fill(bodyStartToken.concat(content))),\n hardline,\n ESCAPE + \"]\",\n ];\n}\n", "import type { Doc } from \"prettier\";\nimport * as PrettierTypes from \"./prettier-types\";\nimport {\n getNodeInfo,\n softline,\n fill,\n indent,\n hardline,\n line,\n ESCAPE,\n formatEnvSurround,\n joinWithSoftline,\n formatDocArray,\n} from \"./common\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parseAlignEnvironment } from \"@unified-latex/unified-latex-util-align\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\n\nexport function printVerbatimEnvironment(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.VerbatimEnvironment;\n\n const env = formatEnvSurround(node as any);\n\n return [env.start, node.content, env.end];\n}\n\nexport function printEnvironment(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Environment;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const args = node.args ? path.map(print, \"args\" as any) : [];\n const env = formatEnvSurround(node);\n\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n if (renderInfo.inMathMode) {\n content = joinWithSoftline(content);\n }\n\n // If we start with a comment on the same line as the environment\n // We should not insert a newline at the start of the environment body\n let bodyStartToken: PrettierTypes.Doc[] = [hardline];\n if (\n node.content.length === 0 ||\n (node.content[0].type === \"comment\" && node.content[0].sameline)\n ) {\n bodyStartToken.pop();\n }\n\n return [\n env.start,\n ...args,\n indent(fill(bodyStartToken.concat(content))),\n hardline,\n env.end,\n ];\n}\n\nexport function printAlignedEnvironment(\n path: PrettierTypes.AstPath,\n print: PrettierTypes.RecursivePrintFunc,\n options: any\n): Doc {\n const node = path.getNode() as Ast.Environment;\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n\n const args = node.args ? path.map(print, \"args\" as any) : [];\n const env = formatEnvSurround(node);\n\n // If an aligned environment starts with a same-line comment, we want\n // to ignore it. It will be printed by the environment itself.\n const leadingComment =\n node.content[0] &&\n node.content[0].type === \"comment\" &&\n node.content[0].sameline\n ? node.content[0]\n : null;\n\n const { rows, rowSeps, trailingComments } = formatAlignedContent(\n leadingComment ? node.content.slice(1) : node.content\n );\n\n const content = [];\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const rowSep = rowSeps[i];\n const trailingComment = trailingComments[i];\n\n // A row has\n // 1) Content\n // 2) (optional) rowSep (e.g., `\\\\`)\n // 3) (optional) comment\n // We want there to be exactly one space before the rowsep and exactly one space\n // before any comment.\n content.push(row);\n if (rowSep) {\n content.push(printRaw(rowSep));\n }\n if (rowSep && trailingComment) {\n content.push(\" \");\n }\n if (trailingComment) {\n content.push([\"%\", printRaw(trailingComment.content)]);\n }\n if (rowSep || trailingComment) {\n content.push(hardline);\n }\n }\n // Make sure the last item is not a `hardline`.\n if (content[content.length - 1] === hardline) {\n content.pop();\n }\n\n if (leadingComment) {\n content.unshift(\n leadingComment.leadingWhitespace ? \" \" : \"\",\n \"%\" + printRaw(leadingComment.content),\n hardline\n );\n return [env.start, ...args, indent(content), hardline, env.end];\n }\n return [\n env.start,\n ...args,\n indent([hardline, ...content]),\n hardline,\n env.end,\n ];\n}\n\n/**\n * Formats the content of an aligned/tabular environment's content.\n * Ensures the \"&\" delimiters all line up.\n *\n * @export\n * @param {[object]} nodes\n * @returns {{rows: [string], rowSeps: [object]}}\n */\nexport function formatAlignedContent(nodes: Ast.Node[]) {\n function getSpace(len = 1) {\n return \" \".repeat(len);\n }\n\n const rows = parseAlignEnvironment(nodes as any);\n // Find the number of columns\n const numCols = Math.max(...rows.map((r) => r.cells.length));\n const rowSeps = rows.map(({ rowSep }) => printRaw(rowSep || []));\n const trailingComments = rows.map(({ trailingComment }) => trailingComment);\n\n // Get the widths of each column.\n // Column widths will be the width of column contents plus the width\n // of the separator. This way, even multi-character separators\n // can be accommodated when rendering.\n const renderedRows = rows.map(({ cells, colSeps }) => ({\n cells: cells.map((nodes) => {\n trim(nodes);\n\n return printRaw(nodes);\n }),\n seps: colSeps.map((nodes) => printRaw(nodes)),\n }));\n const colWidths: number[] = [];\n for (let i = 0; i < numCols; i++) {\n colWidths.push(\n Math.max(\n ...renderedRows.map(\n ({ cells, seps }) =>\n ((cells[i] || \"\") + (seps[i] || \"\")).length\n )\n )\n );\n }\n\n const joinedRows = renderedRows.map(({ cells, seps }) => {\n if (cells.length === 1 && cells[0] === \"\") {\n return \"\";\n }\n let ret = \"\";\n for (let i = 0; i < cells.length; i++) {\n // There are at least as many cells as there are `seps`. Possibly one extra\n const width = colWidths[i] - (seps[i] || \"\").length;\n\n // Insert a space at the start so we don't run into the prior separator.\n // We'll trim this off in the end, in case it's not needed.\n ret +=\n (i === 0 ? \"\" : \" \") +\n cells[i] +\n getSpace(width - cells[i].length + 1) +\n (seps[i] || \"\");\n }\n return ret;\n });\n\n return { rows: joinedRows, rowSeps, trailingComments };\n}\n", "import type { Doc } from \"prettier\";\nimport * as PrettierTypes from \"./prettier-types\";\n\nimport { hardline, line, ESCAPE, getNodeInfo } from \"./common\";\nimport { printMacro } from \"./macro\";\nimport { printArgument } from \"./argument\";\nimport { printRoot } from \"./root\";\nimport { printComment } from \"./comment\";\nimport { printInlineMath, printDisplayMath } from \"./math\";\nimport {\n printVerbatimEnvironment,\n printEnvironment,\n printAlignedEnvironment,\n} from \"./environment\";\nimport {\n linebreak,\n printRaw,\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { ReferenceMap } from \"../reference-map\";\n\nexport function printLatexAst(\n path: PrettierTypes.AstPath,\n options: PrettierTypes.Options & { referenceMap?: ReferenceMap },\n print: PrettierTypes.RecursivePrintFunc\n): Doc {\n const node = path.getValue();\n const { renderInfo } = getNodeInfo(node, options);\n\n if (node == null) {\n return node;\n }\n if (typeof node === \"string\") {\n return node;\n }\n\n switch (node.type) {\n case \"root\":\n // Create the ReferenceMap from the root node, so that\n // it can traverse the entire AST\n if (options.referenceMap) {\n console.warn(\n \"Processing root node, but ReferenceMap already exists. Are there multiple nodes of type 'root'?\"\n );\n }\n options.referenceMap = new ReferenceMap(node);\n return printRoot(path, print, options);\n case \"argument\":\n return printArgument(path, print, options);\n case \"comment\":\n return printComment(path, print, options);\n case \"environment\":\n case \"mathenv\":\n if (renderInfo.alignContent) {\n return printAlignedEnvironment(path, print, options);\n }\n return printEnvironment(path, print, options);\n case \"displaymath\":\n return printDisplayMath(path, print, options);\n case \"group\":\n // When we print a group, we are conservative and do a raw print of its contents.\n // However, we want to use `linebreak`s instead of literal `\\n` tokens.\n const content = printRaw(node.content, {\n asArray: true,\n }).map((token) => (token === linebreak ? hardline : token));\n return [\"{\", ...content, \"}\"];\n case \"inlinemath\":\n return printInlineMath(path, print, options);\n case \"macro\":\n return printMacro(path, print, options);\n case \"parbreak\":\n return [hardline, hardline];\n case \"string\":\n return node.content;\n case \"verb\":\n return [\n ESCAPE,\n node.env,\n node.escape,\n printRaw(node.content),\n node.escape,\n ];\n case \"verbatim\":\n return printVerbatimEnvironment(path, print, options);\n case \"whitespace\":\n return line;\n default:\n console.warn(\"Printing unknown type\", node);\n return printRaw(node);\n }\n}\n", "import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Generate a data structure that can be queried\n * for the next/previous node. This allows for \"peeking\"\n * during the rendering process.\n *\n * @class ReferenceMap\n */\nexport class ReferenceMap {\n ast: Ast.Ast;\n map: Map<\n Ast.Ast,\n { previous?: Ast.Ast; next?: Ast.Ast; renderCache?: any }\n >;\n\n constructor(ast: Ast.Ast) {\n this.ast = ast;\n this.map = new Map();\n visit(\n this.ast,\n (nodeList) => {\n for (let i = 0; i < nodeList.length; i++) {\n this.map.set(nodeList[i], {\n previous: nodeList[i - 1],\n next: nodeList[i + 1],\n });\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n }\n\n /**\n * Associate render-specific data with this node. This data\n * will be overwritten if `setRenderCache` is called twice.\n *\n * @param {Ast.Ast} node\n * @param {*} data\n * @memberof ReferenceMap\n */\n setRenderCache(node: any, data: any): void {\n const currData = this.map.get(node) || {};\n this.map.set(node, { ...currData, renderCache: data });\n }\n\n /**\n * Retrieve data associated with `node` via `setRenderCache`\n *\n * @param {Ast.Ast} node\n * @returns {(object | undefined)}\n * @memberof ReferenceMap\n */\n getRenderCache(node: any): object | any[] | undefined {\n return this.map.get(node)?.renderCache;\n }\n\n getPreviousNode(node: Ast.Ast): Ast.Node | undefined {\n return (this.map.get(node) || ({} as any)).previous;\n }\n\n getNextNode(node: Ast.Ast): Ast.Node | undefined {\n return (this.map.get(node) || ({} as any)).next;\n }\n}\n", "import type { Plugin, Printer } from \"prettier\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { parse } from \"@unified-latex/unified-latex-util-parse\";\nimport { printLatexAst } from \"./printer\";\n\nconst languages = [\n {\n name: \"latex\",\n extensions: [\".tex\"],\n parsers: [\"latex-parser\"],\n },\n];\n\nconst parsers = {\n \"latex-parser\": {\n parse,\n astFormat: \"latex-ast\",\n locStart: (node: Ast.Node) =>\n node.position ? node.position.start.offset : 0,\n locEnd: (node: Ast.Node) =>\n node.position ? node.position.end.offset : 1,\n },\n};\n\nconst printers = {\n \"latex-ast\": {\n print: printLatexAst,\n } as Printer,\n};\n\nconst prettierPluginLatex: Plugin = { languages, parsers, printers };\n\nexport { prettierPluginLatex };\n"], + "mappings": "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", + "names": ["group2", "indent2", "lineSuffix2", "softline", "group", "fill", "ifBreak", "line", "hardline", "lineSuffix", "lineSuffixBoundary", "breakParent", "indent", "markAsRoot", "join", "indent", "fill", "group", "match", "trim", "printRaw", "match", "trim", "printRaw", "hardline", "join", "breakParent", "line", "group", "indent", "softline", "trim", "printer", "printRaw", "group", "indent", "line", "softline", "match", "hardline", "join", "match", "content", "trim", "hardline", "fill", "match", "fill", "printRaw", "_print", "hardline", "fill", "indent", "printRaw", "trim", "hardline", "indent", "fill", "nodes", "linebreak", "printRaw", "printRaw", "linebreak", "hardline", "line"] +} diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts new file mode 100644 index 0000000..78c9a4d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts @@ -0,0 +1,5 @@ +import type { Plugin } from "prettier"; +import * as Ast from "@unified-latex/unified-latex-types"; +declare const prettierPluginLatex: Plugin; +export { prettierPluginLatex }; +//# sourceMappingURL=prettier-plugin-latex.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts.map new file mode 100644 index 0000000..b8fc97a --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/prettier-plugin-latex.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"prettier-plugin-latex.d.ts","sourceRoot":"","sources":["../../libs/prettier-plugin-latex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AA6B1D,QAAA,MAAM,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAoC,CAAC;AAE/E,OAAO,EAAE,mBAAmB,EAAE,CAAC"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts new file mode 100644 index 0000000..4c1b8df --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts @@ -0,0 +1,4 @@ +import type { Doc } from "prettier"; +import * as PrettierTypes from "./prettier-types"; +export declare function printArgument(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +//# sourceMappingURL=argument.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts.map new file mode 100644 index 0000000..45bff47 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/argument.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"argument.d.ts","sourceRoot":"","sources":["../../../libs/printer/argument.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAOlD,wBAAgB,aAAa,CACzB,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CA4DL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts new file mode 100644 index 0000000..0be0aba --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts @@ -0,0 +1,4 @@ +import type { Doc } from "prettier"; +import * as PrettierTypes from "./prettier-types"; +export declare function printComment(path: PrettierTypes.AstPath, _print: PrettierTypes.RecursivePrintFunc, _options: any): Doc; +//# sourceMappingURL=comment.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts.map new file mode 100644 index 0000000..a8b7a1b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/comment.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"comment.d.ts","sourceRoot":"","sources":["../../../libs/printer/comment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAElD,wBAAgB,YAAY,CACxB,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,MAAM,EAAE,aAAa,CAAC,kBAAkB,EACxC,QAAQ,EAAE,GAAG,GACd,GAAG,CAYL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts new file mode 100644 index 0000000..9410272 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts @@ -0,0 +1,62 @@ +import { builders } from "prettier/doc"; +import type { Doc } from "prettier"; +import * as Ast from "@unified-latex/unified-latex-types"; +import * as PrettierTypes from "./prettier-types"; +import { ReferenceMap } from "../reference-map"; +/** + * Computes the environment name, start/end, and args. + * E.g., for "\begin{x}abc\end{x}", it returns + * ``` + * { + * envName: "x", + * start: "\\begin{x}", + * end: "\\end{x}", + * } + * ``` + * + * @param {*} node + * @returns + */ +export declare function formatEnvSurround(node: Ast.Environment): { + envName: string; + start: string; + end: string; +}; +/** + * Join an array with `softline`. However, if a `line` is + * found, do not insert an additional softline. For example + * `[a, b, c]` -> `[a, softline, b, softline, c]` + * + * but + * + * `[a, line, b, c]` -> `[a, line, b, softline, c]` + * + * @param {*} arr + * @returns + */ +export declare function joinWithSoftline(arr: Doc[]): builders.Doc[]; +export declare function getNodeInfo(node: any, options: PrettierTypes.Options & { + referenceMap?: ReferenceMap; +}): { + renderInfo: Record; + renderCache?: object; + previousNode?: Ast.Node; + nextNode?: Ast.Node; + referenceMap?: ReferenceMap; +}; +export declare const ESCAPE = "\\"; +export declare const group: typeof builders.group, fill: typeof builders.fill, ifBreak: typeof builders.ifBreak, line: builders.Line, softline: builders.Softline, hardline: builders.Hardline, lineSuffix: typeof builders.lineSuffix, lineSuffixBoundary: builders.LineSuffixBoundary, breakParent: builders.BreakParent, indent: typeof builders.indent, markAsRoot: typeof builders.markAsRoot, join: typeof builders.join; +/** + * Given an array of nodes and the corresponding printed versions, prepares + * a final Doc array. This function does things like ensures there are `hardlines` + * around environments and that there aren't excess hardlines at the start or end. + * It also unwraps `inParMode` macro contents. + * + * @export + * @param {Ast.Node[]} nodes + * @param {Doc[]} docArray + * @param {*} options + * @returns {Doc[]} + */ +export declare function formatDocArray(nodes: Ast.Node[], docArray: Doc[], options: any): Doc[]; +//# sourceMappingURL=common.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts.map new file mode 100644 index 0000000..e78d110 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/common.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../libs/printer/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW;;;;EAQtD;AAsBD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,kBAc1C;AAED,wBAAgB,WAAW,CACvB,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,aAAa,CAAC,OAAO,GAAG;IAAE,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,GACjE;IACC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B,CAoBA;AAED,eAAO,MAAM,MAAM,OAAO,CAAC;AAG3B,eAAO,MACH,KAAK,yBACL,IAAI,wBACJ,OAAO,2BACP,IAAI,iBACJ,QAAQ,qBACR,QAAQ,qBACR,UAAU,8BACV,kBAAkB,+BAClB,WAAW,wBACX,MAAM,0BACN,UAAU,8BACV,IAAI,sBACI,CAAC;AAEb;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC1B,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EACjB,QAAQ,EAAE,GAAG,EAAE,EACf,OAAO,EAAE,GAAG,GACb,GAAG,EAAE,CAmHP"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts new file mode 100644 index 0000000..146dd0f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts @@ -0,0 +1,20 @@ +import type { Doc } from "prettier"; +import * as PrettierTypes from "./prettier-types"; +import * as Ast from "@unified-latex/unified-latex-types"; +export declare function printVerbatimEnvironment(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +export declare function printEnvironment(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +export declare function printAlignedEnvironment(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +/** + * Formats the content of an aligned/tabular environment's content. + * Ensures the "&" delimiters all line up. + * + * @export + * @param {[object]} nodes + * @returns {{rows: [string], rowSeps: [object]}} + */ +export declare function formatAlignedContent(nodes: Ast.Node[]): { + rows: string[]; + rowSeps: string[]; + trailingComments: (Ast.Comment | null)[]; +}; +//# sourceMappingURL=environment.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts.map new file mode 100644 index 0000000..cc31736 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/environment.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../libs/printer/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAelD,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAG1D,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CAML;AAED,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CAiCL;AAED,wBAAgB,uBAAuB,CACnC,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CAqEL;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE;;;;EAwDrD"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts new file mode 100644 index 0000000..87c80e1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts @@ -0,0 +1,3 @@ +import { printLatexAst } from "./printer"; +export { printLatexAst, printLatexAst as printer }; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts.map new file mode 100644 index 0000000..a268e63 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../libs/printer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,OAAO,EAAE,CAAC"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts new file mode 100644 index 0000000..c4d1fec --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts @@ -0,0 +1,4 @@ +import type { Doc } from "prettier"; +import * as PrettierTypes from "./prettier-types"; +export declare function printMacro(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +//# sourceMappingURL=macro.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts.map new file mode 100644 index 0000000..acfa9da --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/macro.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"macro.d.ts","sourceRoot":"","sources":["../../../libs/printer/macro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAKlD,wBAAgB,UAAU,CACtB,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CAgCL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts new file mode 100644 index 0000000..0d5a2d8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts @@ -0,0 +1,5 @@ +import type { Doc } from "prettier"; +import * as PrettierTypes from "./prettier-types"; +export declare function printInlineMath(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +export declare function printDisplayMath(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +//# sourceMappingURL=math.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts.map new file mode 100644 index 0000000..ebbcb3d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/math.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../libs/printer/math.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAalD,wBAAgB,eAAe,CAC3B,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CAqBL;AAED,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CAuBL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts new file mode 100644 index 0000000..93888de --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts @@ -0,0 +1,12 @@ +/** We recreate several of the Prettier types because the types supplied by prettier have some errors in them... */ +import type { Doc, AstPath as _AstPath, Options, ParserOptions } from "prettier"; +import * as Ast from "@unified-latex/unified-latex-types"; +export { Doc, Options }; +export type AstPath = _AstPath; +export interface PrintFunc { + (path: AstPath, options: ParserOptions, print: (path: AstPath) => Doc): Doc; +} +export interface RecursivePrintFunc { + (path: U, index?: number, value?: any): Doc; +} +//# sourceMappingURL=prettier-types.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts.map new file mode 100644 index 0000000..f5346ad --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/prettier-types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"prettier-types.d.ts","sourceRoot":"","sources":["../../../libs/printer/prettier-types.ts"],"names":[],"mappings":"AAAA,mHAAmH;AAEnH,OAAO,KAAK,EACR,GAAG,EACH,OAAO,IAAI,QAAQ,EACnB,OAAO,EACP,aAAa,EAEhB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAGxB,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;AAExD,MAAM,WAAW,SAAS;IACtB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,GAAG,GAAG,GAAG,CAAC;CAC/E;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACvC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAC/C"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts new file mode 100644 index 0000000..1ebf7a2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts @@ -0,0 +1,13 @@ +import { Doc } from "prettier"; +import * as Ast from "@unified-latex/unified-latex-types"; +/** + * Format a sequence of Pgfkeys key-value pairs. `nodes` will be parsed + * by a grammar defining Pgfkeys + */ +export declare function printArgumentPgfkeys(nodes: Ast.Node[], options: { + openMark: string; + closeMark: string; + leadingComment?: Ast.Comment | null | undefined; + allowParenGroups?: boolean; +}): Doc; +//# sourceMappingURL=print-argument-pgfkeys.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts.map new file mode 100644 index 0000000..465e0e9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/print-argument-pgfkeys.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"print-argument-pgfkeys.d.ts","sourceRoot":"","sources":["../../../libs/printer/print-argument-pgfkeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAgB1D;;;GAGG;AACH,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EACjB,OAAO,EAAE;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAChD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACF,GAAG,CA8DL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts new file mode 100644 index 0000000..8ea68e0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts @@ -0,0 +1,7 @@ +import type { Doc } from "prettier"; +import * as PrettierTypes from "./prettier-types"; +import { ReferenceMap } from "../reference-map"; +export declare function printLatexAst(path: PrettierTypes.AstPath, options: PrettierTypes.Options & { + referenceMap?: ReferenceMap; +}, print: PrettierTypes.RecursivePrintFunc): Doc; +//# sourceMappingURL=printer.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts.map new file mode 100644 index 0000000..c4a59e8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/printer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"printer.d.ts","sourceRoot":"","sources":["../../../libs/printer/printer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAiBlD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAgB,aAAa,CACzB,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,OAAO,EAAE,aAAa,CAAC,OAAO,GAAG;IAAE,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,EAChE,KAAK,EAAE,aAAa,CAAC,kBAAkB,GACxC,GAAG,CAiEL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts new file mode 100644 index 0000000..51595ac --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts @@ -0,0 +1,12 @@ +import type { Doc } from "prettier"; +import * as Ast from "@unified-latex/unified-latex-types"; +import * as PrettierTypes from "./prettier-types"; +/** + * Returns true if a `\documentclass` macro is detected, + * which would indicate that the node list contains the preamble. + * + * @param {[object]} nodes + */ +export declare function hasPreambleCode(nodes: Ast.Node[]): boolean; +export declare function printRoot(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +//# sourceMappingURL=root.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts.map new file mode 100644 index 0000000..1d8b4eb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/root.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../libs/printer/root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAIlD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,WAEhD;AAED,wBAAgB,SAAS,CACrB,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CAYL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts new file mode 100644 index 0000000..c90463e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts @@ -0,0 +1,4 @@ +import type { Doc } from "prettier"; +import * as PrettierTypes from "./prettier-types"; +export declare function printTikzArgument(path: PrettierTypes.AstPath, print: PrettierTypes.RecursivePrintFunc, options: any): Doc; +//# sourceMappingURL=tikz.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts.map new file mode 100644 index 0000000..e4625f4 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/printer/tikz.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"tikz.d.ts","sourceRoot":"","sources":["../../../libs/printer/tikz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AA2BlD,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,aAAa,CAAC,OAAO,EAC3B,KAAK,EAAE,aAAa,CAAC,kBAAkB,EACvC,OAAO,EAAE,GAAG,GACb,GAAG,CA0BL"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts new file mode 100644 index 0000000..d440382 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts @@ -0,0 +1,37 @@ +import * as Ast from "@unified-latex/unified-latex-types"; +/** + * Generate a data structure that can be queried + * for the next/previous node. This allows for "peeking" + * during the rendering process. + * + * @class ReferenceMap + */ +export declare class ReferenceMap { + ast: Ast.Ast; + map: Map; + constructor(ast: Ast.Ast); + /** + * Associate render-specific data with this node. This data + * will be overwritten if `setRenderCache` is called twice. + * + * @param {Ast.Ast} node + * @param {*} data + * @memberof ReferenceMap + */ + setRenderCache(node: any, data: any): void; + /** + * Retrieve data associated with `node` via `setRenderCache` + * + * @param {Ast.Ast} node + * @returns {(object | undefined)} + * @memberof ReferenceMap + */ + getRenderCache(node: any): object | any[] | undefined; + getPreviousNode(node: Ast.Ast): Ast.Node | undefined; + getNextNode(node: Ast.Ast): Ast.Node | undefined; +} +//# sourceMappingURL=reference-map.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts.map new file mode 100644 index 0000000..15fb512 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/reference-map.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"reference-map.d.ts","sourceRoot":"","sources":["../../libs/reference-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAG1D;;;;;;GAMG;AACH,qBAAa,YAAY;IACrB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IACb,GAAG,EAAE,GAAG,CACJ,GAAG,CAAC,GAAG,EACP;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;QAAC,WAAW,CAAC,EAAE,GAAG,CAAA;KAAE,CAC5D,CAAC;gBAEU,GAAG,EAAE,GAAG,CAAC,GAAG;IAiBxB;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAK1C;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,GAAG,EAAE,GAAG,SAAS;IAIrD,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,SAAS;IAIpD,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,SAAS;CAGnD"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts b/node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts new file mode 100644 index 0000000..da390d6 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts @@ -0,0 +1,2 @@ +export declare function zip(array1: T[], array2: U[]): [T, U][]; +//# sourceMappingURL=zip.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts.map b/node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts.map new file mode 100644 index 0000000..06508f1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/libs/zip.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../libs/zip.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAO5D"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-prettier/package.json b/node_modules/@unified-latex/unified-latex-prettier/package.json new file mode 100644 index 0000000..2d300bd --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-prettier/package.json @@ -0,0 +1,61 @@ +{ + "name": "@unified-latex/unified-latex-prettier", + "version": "2.4.2", + "description": "Prettier plugin for processing LaTeX code via unified-latex", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-ctan": "^1.4.1", + "@unified-latex/unified-latex-types": "^1.3.1", + "@unified-latex/unified-latex-util-align": "^1.4.0", + "@unified-latex/unified-latex-util-match": "^1.4.0", + "@unified-latex/unified-latex-util-parse": "^1.4.1", + "@unified-latex/unified-latex-util-pgfkeys": "^1.4.0", + "@unified-latex/unified-latex-util-print-raw": "^1.4.0", + "@unified-latex/unified-latex-util-trim": "^1.4.0", + "@unified-latex/unified-latex-util-visit": "^1.4.0", + "prettier": "^3.0.3", + "unified": "^10.1.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-types/README.md b/node_modules/@unified-latex/unified-latex-types/README.md new file mode 100644 index 0000000..057b6ab --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/README.md @@ -0,0 +1,238 @@ + + + + +# unified-latex-types + +## What is this? + +Types for the `unified-latex` Abstract Syntax Tree (AST). These types extend the `unist` AST, +but instead of a `children` attribute, they have a `content` attribute. + +## When should I use this? + +If you're working with `unified-latex` ASTs. + +## Install + +```bash +npm install @unified-latex/unified-latex-types +``` + +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. + +# Types + +## `ArgumentParser` + +```typescript +export type ArgumentParser = ( + nodes: Ast.Node[], + startPos: number +) => { args: Ast.Argument[]; nodesRemoved: number }; +``` + +## `Ast` + +```typescript +export type Ast = Node | Argument | Node[]; +``` + +## `EnvInfo` + +```typescript +export type EnvInfo = { + renderInfo?: { + /** + * Whether the body of the environment should be treated as math mode + * + * @type {boolean} + */ + inMathMode?: boolean; + /** + * Whether to align the environment contents based on `&` and `\\` delimiters + * (like a matrix or tabular environment). + * + * @type {boolean} + */ + alignContent?: boolean; + /** + * Whether the arguments should be treated as pgfkeys-type arguments. + * + * @type {boolean} + */ + pgfkeysArgs?: boolean; + /** + * A list of names to be given to each argument when processing. This list should + * be the same length as the number of arguments. `null` can appear any number of times + * for "un-named" arguments. + * + * This allows a consistent reference to macro arguments even if the macro signatures are redefined between + * packages. + * + * @type {((string|null)[])} + */ + namedArguments?: (string | null)[]; + /** + * Whether the body is tikz-environment like (e.g., a `tikzpicture` or `scope`, etc.) + * + * @type {boolean} + */ + tikzEnvironment?: boolean; + }; + /** + * Function to process the body of an environment. The return value of `processContent` + * is treated as the new body. + * + */ + processContent?: (ast: Ast.Node[]) => Ast.Node[]; + /** + * The environment signature as an xparse argument specification string. + * + * @type {string} + */ + signature?: string; +}; +``` + +## `EnvInfoRecord` + +```typescript +export type EnvInfoRecord = Record; +``` + +## `GenericAst` + +```typescript +export type GenericAst = GenericNode | GenericNode[]; +``` + +## `MacroInfo` + +```typescript +export type MacroInfo = { + renderInfo?: { + /** + * Whether the macro's contents wraps along with the current + * paragraph or displays as it's own block. + * + * @type {boolean} + */ + inParMode?: boolean; + /** + * Whether the arguments should be processed as pgfkeys-type arguments. + * + * @type {boolean} + */ + pgfkeysArgs?: boolean; + /** + * Whether there should be line breaks after the macro + * (e.g., like the `\\` command.) + * + * @type {boolean} + */ + breakAfter?: boolean; + /** + * Whether there should be line breaks before and after the macro + * (e.g., like the `\section{...}` command.) + * + * @type {boolean} + */ + breakAround?: boolean; + /** + * Whether there should be line breaks before the macro. + * + * @type {boolean} + */ + breakBefore?: boolean; + /** + * Whether the contents of the macro should be assumed to be in math mode. + * + * @type {boolean} + */ + inMathMode?: boolean; + /** + * Whether the arguments should be rendered with a hanging indent when the wrap + * (like the arguments to \item in an enumerate environment.) + * + * @type {boolean} + */ + hangingIndent?: boolean; + /** + * A list of names to be given to each argument when processing. This list should + * be the same length as the number of arguments. `null` can appear any number of times + * for "un-named" arguments. + * + * This allows a consistent reference to macro arguments even if the macro signatures are redefined between + * packages. + * + * @type {((string|null)[])} + */ + namedArguments?: (string | null)[]; + /** + * Whether the macro represents a tikz path command (e.g. `\draw (0,0) -- (1,1);`). + * + * @type {boolean} + */ + tikzPathCommand?: boolean; + /** + * If `\sysdelims` is present, this contains the global information about the delimiters. + */ + sysdelims?: (Ast.Node[] | null)[]; + }; + /** + * The macro signature as an xparse argument specification string. + * + * @type {string} + */ + signature?: string; + /** + * Some special macros like `^` and `_` don't use + * an escape token. When matching against these macros, + * care must be taken to match the macro contents and the macro's + * escape token. + */ + escapeToken?: string; + /** + * Custom argument parser. If present, function overrides the default argument + * parsing of `signature`. An array of nodes is passed as well as the position + * of the first node **after** the macro. This function is expected to _mutate_ + * the input array, removing any nodes that are part of the macro's argument. + * + * This function will only be called on a macro if it has no existing `args`. + * + * Note: for stability when printing/accessing a node's arguments, this function + * should always return an argument array of the same length, regardless of + * whether optional arguments are present. For example, if this function parses + * a node with signature `o m`, it should ways return a length-two array of arguments. + * A "blank" argument (one that does not show up during printing) can be created + * with `args([], { openMark: "", closeMark: "" })`, using the `unified-latex-builder` package. + */ + argumentParser?: ArgumentParser; +}; +``` + +## `MacroInfoRecord` + +```typescript +export type MacroInfoRecord = Record; +``` + +## `Node` + +```typescript +export type Node = + | Root + | String + | Whitespace + | Parbreak + | Comment + | Macro + | Environment + | VerbatimEnvironment + | InlineMath + | DisplayMath + | Group + | Verb; +``` diff --git a/node_modules/@unified-latex/unified-latex-types/index.cjs b/node_modules/@unified-latex/unified-latex-types/index.cjs new file mode 100644 index 0000000..0b0915b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/index.cjs @@ -0,0 +1,4 @@ +"use strict"; +const index = {}; +module.exports = index; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-types/index.cjs.map b/node_modules/@unified-latex/unified-latex-types/index.cjs.map new file mode 100644 index 0000000..4ea1717 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../index.ts"],"sourcesContent":["export * from \"./libs/ast-types\";\nexport * from \"./libs/type-guard\";\nexport * from \"./libs/info-specs\";\n\n// Export something for importing packages\nexport default {};\n\n// NOTE: The docstring comment must be the last item in the index.ts file!\n/**\n * ## What is this?\n *\n * Types for the `unified-latex` Abstract Syntax Tree (AST). These types extend the `unist` AST,\n * but instead of a `children` attribute, they have a `content` attribute.\n *\n * ## When should I use this?\n *\n * If you're working with `unified-latex` ASTs.\n */\n"],"names":[],"mappings":";AAKA,MAAA,QAAe,CAAC;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-types/index.d.ts b/node_modules/@unified-latex/unified-latex-types/index.d.ts new file mode 100644 index 0000000..4bf7ff3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/index.d.ts @@ -0,0 +1,16 @@ +export * from './libs/ast-types'; +export * from './libs/type-guard'; +export * from './libs/info-specs'; +declare const _default: {}; +export default _default; +/** + * ## What is this? + * + * Types for the `unified-latex` Abstract Syntax Tree (AST). These types extend the `unist` AST, + * but instead of a `children` attribute, they have a `content` attribute. + * + * ## When should I use this? + * + * If you're working with `unified-latex` ASTs. + */ +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-types/index.js b/node_modules/@unified-latex/unified-latex-types/index.js new file mode 100644 index 0000000..18167e9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/index.js @@ -0,0 +1,5 @@ +const index = {}; +export { + index as default +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-types/index.js.map b/node_modules/@unified-latex/unified-latex-types/index.js.map new file mode 100644 index 0000000..757d6ff --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../index.ts"],"sourcesContent":["export * from \"./libs/ast-types\";\nexport * from \"./libs/type-guard\";\nexport * from \"./libs/info-specs\";\n\n// Export something for importing packages\nexport default {};\n\n// NOTE: The docstring comment must be the last item in the index.ts file!\n/**\n * ## What is this?\n *\n * Types for the `unified-latex` Abstract Syntax Tree (AST). These types extend the `unist` AST,\n * but instead of a `children` attribute, they have a `content` attribute.\n *\n * ## When should I use this?\n *\n * If you're working with `unified-latex` ASTs.\n */\n"],"names":[],"mappings":"AAKA,MAAA,QAAe,CAAC;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-types/libs/ast-types.d.ts b/node_modules/@unified-latex/unified-latex-types/libs/ast-types.d.ts new file mode 100644 index 0000000..49c56ad --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/libs/ast-types.d.ts @@ -0,0 +1,88 @@ +import { EnvInfo, MacroInfo } from './info-specs'; +export type GenericAst = GenericNode | GenericNode[]; +export interface GenericNode { + [x: string]: any; + type: string; + _renderInfo?: object; +} +interface BaseNode { + type: string; + _renderInfo?: (MacroInfo["renderInfo"] | EnvInfo["renderInfo"]) & { + defaultArg?: string; + } & Record; + position?: { + start: { + offset: number; + line: number; + column: number; + }; + end: { + offset: number; + line: number; + column: number; + }; + }; +} +interface ContentNode extends BaseNode { + content: Node[]; +} +export interface Root extends ContentNode { + type: "root"; +} +export interface String extends BaseNode { + type: "string"; + content: string; +} +export interface Whitespace extends BaseNode { + type: "whitespace"; +} +export interface Parbreak extends BaseNode { + type: "parbreak"; +} +export interface Comment extends BaseNode { + type: "comment"; + content: string; + sameline?: boolean; + suffixParbreak?: boolean; + leadingWhitespace?: boolean; +} +export interface Macro extends BaseNode { + type: "macro"; + content: string; + escapeToken?: string; + args?: Argument[]; +} +export interface Environment extends ContentNode { + type: "environment" | "mathenv"; + env: string; + args?: Argument[]; +} +export interface VerbatimEnvironment extends BaseNode { + type: "verbatim"; + env: string; + content: string; +} +export interface DisplayMath extends ContentNode { + type: "displaymath"; +} +export interface Group extends ContentNode { + type: "group"; +} +export interface InlineMath extends ContentNode { + type: "inlinemath"; +} +export interface Verb extends BaseNode { + type: "verb"; + env: string; + escape: string; + content: string; +} +export interface Argument extends ContentNode { + type: "argument"; + openMark: string; + closeMark: string; +} +export type Node = Root | String | Whitespace | Parbreak | Comment | Macro | Environment | VerbatimEnvironment | InlineMath | DisplayMath | Group | Verb; +export type Ast = Node | Argument | Node[]; +export {}; +//# sourceMappingURL=ast-types.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-types/libs/info-specs.d.ts b/node_modules/@unified-latex/unified-latex-types/libs/info-specs.d.ts new file mode 100644 index 0000000..5110f92 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/libs/info-specs.d.ts @@ -0,0 +1,160 @@ +import * as Ast from "./ast-types"; +export type ArgumentParser = (nodes: Ast.Node[], startPos: number) => { + args: Ast.Argument[]; + nodesRemoved: number; +}; +export type EnvInfo = { + renderInfo?: { + /** + * Whether the body of the environment should be treated as math mode + * + * @type {boolean} + */ + inMathMode?: boolean; + /** + * Whether to align the environment contents based on `&` and `\\` delimiters + * (like a matrix or tabular environment). + * + * @type {boolean} + */ + alignContent?: boolean; + /** + * Whether the arguments should be treated as pgfkeys-type arguments. + * + * @type {boolean} + */ + pgfkeysArgs?: boolean; + /** + * A list of names to be given to each argument when processing. This list should + * be the same length as the number of arguments. `null` can appear any number of times + * for "un-named" arguments. + * + * This allows a consistent reference to macro arguments even if the macro signatures are redefined between + * packages. + * + * @type {((string|null)[])} + */ + namedArguments?: (string | null)[]; + /** + * Whether the body is tikz-environment like (e.g., a `tikzpicture` or `scope`, etc.) + * + * @type {boolean} + */ + tikzEnvironment?: boolean; + }; + /** + * Function to process the body of an environment. The return value of `processContent` + * is treated as the new body. + * + */ + processContent?: (ast: Ast.Node[]) => Ast.Node[]; + /** + * The environment signature as an xparse argument specification string. + * + * @type {string} + */ + signature?: string; +}; +export type MacroInfo = { + renderInfo?: { + /** + * Whether the macro's contents wraps along with the current + * paragraph or displays as it's own block. + * + * @type {boolean} + */ + inParMode?: boolean; + /** + * Whether the arguments should be processed as pgfkeys-type arguments. + * + * @type {boolean} + */ + pgfkeysArgs?: boolean; + /** + * Whether there should be line breaks after the macro + * (e.g., like the `\\` command.) + * + * @type {boolean} + */ + breakAfter?: boolean; + /** + * Whether there should be line breaks before and after the macro + * (e.g., like the `\section{...}` command.) + * + * @type {boolean} + */ + breakAround?: boolean; + /** + * Whether there should be line breaks before the macro. + * + * @type {boolean} + */ + breakBefore?: boolean; + /** + * Whether the contents of the macro should be assumed to be in math mode. + * + * @type {boolean} + */ + inMathMode?: boolean; + /** + * Whether the arguments should be rendered with a hanging indent when the wrap + * (like the arguments to \item in an enumerate environment.) + * + * @type {boolean} + */ + hangingIndent?: boolean; + /** + * A list of names to be given to each argument when processing. This list should + * be the same length as the number of arguments. `null` can appear any number of times + * for "un-named" arguments. + * + * This allows a consistent reference to macro arguments even if the macro signatures are redefined between + * packages. + * + * @type {((string|null)[])} + */ + namedArguments?: (string | null)[]; + /** + * Whether the macro represents a tikz path command (e.g. `\draw (0,0) -- (1,1);`). + * + * @type {boolean} + */ + tikzPathCommand?: boolean; + /** + * If `\sysdelims` is present, this contains the global information about the delimiters. + */ + sysdelims?: (Ast.Node[] | null)[]; + }; + /** + * The macro signature as an xparse argument specification string. + * + * @type {string} + */ + signature?: string; + /** + * Some special macros like `^` and `_` don't use + * an escape token. When matching against these macros, + * care must be taken to match the macro contents and the macro's + * escape token. + */ + escapeToken?: string; + /** + * Custom argument parser. If present, function overrides the default argument + * parsing of `signature`. An array of nodes is passed as well as the position + * of the first node **after** the macro. This function is expected to _mutate_ + * the input array, removing any nodes that are part of the macro's argument. + * + * This function will only be called on a macro if it has no existing `args`. + * + * Note: for stability when printing/accessing a node's arguments, this function + * should always return an argument array of the same length, regardless of + * whether optional arguments are present. For example, if this function parses + * a node with signature `o m`, it should ways return a length-two array of arguments. + * A "blank" argument (one that does not show up during printing) can be created + * with `args([], { openMark: "", closeMark: "" })`, using the `unified-latex-builder` package. + */ + argumentParser?: ArgumentParser; +}; +export type EnvInfoRecord = Record; +export type MacroInfoRecord = Record; +//# sourceMappingURL=info-specs.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-types/libs/type-guard.d.ts b/node_modules/@unified-latex/unified-latex-types/libs/type-guard.d.ts new file mode 100644 index 0000000..5ab5dcc --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/libs/type-guard.d.ts @@ -0,0 +1,7 @@ +/** + * Generic type of a type-guard function. + */ +export interface TypeGuard { + (node: any): node is T; +} +//# sourceMappingURL=type-guard.d.ts.map \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-types/package.json b/node_modules/@unified-latex/unified-latex-types/package.json new file mode 100644 index 0000000..0ffc1e8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-types/package.json @@ -0,0 +1,48 @@ +{ + "name": "@unified-latex/unified-latex-types", + "version": "1.8.0", + "description": "type definitions for unified-latex", + "main": "index.js", + "type": "module", + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-align/README.md b/node_modules/@unified-latex/unified-latex-util-align/README.md new file mode 100644 index 0000000..989844b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-align/README.md @@ -0,0 +1,79 @@ + + + + +# unified-latex-util-align + +## What is this? + +Functions to parse an analyze "align" environments like `\begin{align}...\end{align}` or +`\begin{bmatrix}...\end{bmatrix}`. + +## When should I use this? + +If you need to process the contents of an align environment for, e.g., pretty-printing. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-align +``` + +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(rowSepMacros, colSep)` + + + +```typescript +function createMatchers( + rowSepMacros: string[], + colSep: string[] +): { + isRowSep: Ast.TypeGuard; + isColSep: (node: Ast.Node) => boolean; + isWhitespace: (node: Ast.Node) => node is Ast.Whitespace; + isSameLineComment: (node: Ast.Node) => boolean; + isOwnLineComment: (node: Ast.Node) => boolean; +}; +``` + +**Parameters** + +| Param | Type | +| :----------- | :--------- | +| rowSepMacros | `string[]` | +| colSep | `string[]` | + +## `parseAlignEnvironment(ast, colSep, rowSepMacros)` + +Parse the content of an align environment into an array of row objects. +Each row object looks like + + { + cells: [...], + colSeps: [...], + rowSep: ..., + trailingComment: ... + } + +`...` may be an ast node or `null`. + +```typescript +function parseAlignEnvironment( + ast: Ast.Node[], + colSep: string[], + rowSepMacros: string[] +): Row[]; +``` + +**Parameters** + +| Param | Type | +| :----------- | :----------- | +| ast | `Ast.Node[]` | +| colSep | `string[]` | +| rowSepMacros | `string[]` | diff --git a/node_modules/@unified-latex/unified-latex-util-align/index.cjs b/node_modules/@unified-latex/unified-latex-util-align/index.cjs new file mode 100644 index 0000000..65a72b0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-align/index.cjs @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +function createMatchers(rowSepMacros, colSep) { + const isRowSep = unifiedLatexUtilMatch.match.createMacroMatcher(rowSepMacros); + return { + isRowSep, + isColSep: (node) => colSep.some((sep) => unifiedLatexUtilMatch.match.string(node, sep)), + isWhitespace: (node) => unifiedLatexUtilMatch.match.whitespace(node), + isSameLineComment: (node) => unifiedLatexUtilMatch.match.comment(node) && node.sameline, + isOwnLineComment: (node) => unifiedLatexUtilMatch.match.comment(node) && !node.sameline + }; +} +function parseAlignEnvironment(ast, colSep = ["&"], rowSepMacros = ["\\", "hline", "cr"]) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = unifiedLatexUtilPegjs.decorateArrayForPegjs([...ast]); + return unifiedLatexUtilPegjs.AlignEnvironmentPegParser.parse( + ast, + createMatchers(rowSepMacros, colSep) + ); +} +exports.createMatchers = createMatchers; +exports.parseAlignEnvironment = parseAlignEnvironment; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-align/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-align/index.cjs.map new file mode 100644 index 0000000..9ea2877 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-align/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/parse-align-environment.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n AlignEnvironmentPegParser,\n decorateArrayForPegjs,\n} from \"@unified-latex/unified-latex-util-pegjs\";\n\n// The types returned by the grammar\ninterface RowItems {\n cells: Ast.Node[][];\n colSeps: Ast.String[];\n}\n\ninterface Row extends RowItems {\n rowSep: Ast.Macro | null;\n trailingComment: Ast.Comment | null;\n}\n\nexport function createMatchers(rowSepMacros: string[], colSep: string[]) {\n const isRowSep = match.createMacroMatcher(rowSepMacros);\n return {\n isRowSep,\n isColSep: (node: Ast.Node) =>\n colSep.some((sep) => match.string(node, sep)),\n isWhitespace: (node: Ast.Node) => match.whitespace(node),\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the content of an align environment into an array of row objects.\n * Each row object looks like\n * ```\n * {\n * cells: [...],\n * colSeps: [...],\n * rowSep: ...,\n * trailingComment: ...\n * }\n * ```\n * `...` may be an ast node or `null`.\n *\n * @export\n * @param {[object]} ast\n * @param {string} [colSep=[\"&\"]]\n * @param {string} [rowSepMacros=[\"\\\\\", \"hline\", \"cr\"]]\n * @returns\n */\nexport function parseAlignEnvironment(\n ast: Ast.Node[],\n colSep = [\"&\"],\n rowSepMacros = [\"\\\\\", \"hline\", \"cr\"]\n): Row[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 AlignEnvironmentPegParser.parse(\n ast,\n createMatchers(rowSepMacros, colSep)\n ) as Row[];\n}\n"],"names":["match","decorateArrayForPegjs","AlignEnvironmentPegParser"],"mappings":";;;;AAkBgB,SAAA,eAAe,cAAwB,QAAkB;AAC/D,QAAA,WAAWA,sBAAAA,MAAM,mBAAmB,YAAY;AAC/C,SAAA;AAAA,IACH;AAAA,IACA,UAAU,CAAC,SACP,OAAO,KAAK,CAAC,QAAQA,sBAAAA,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA,IAChD,cAAc,CAAC,SAAmBA,4BAAM,WAAW,IAAI;AAAA,IACvD,mBAAmB,CAAC,SAChBA,4BAAM,QAAQ,IAAI,KAAK,KAAK;AAAA,IAChC,kBAAkB,CAAC,SACfA,sBAAA,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK;AAAA,EAAA;AAEzC;AAqBgB,SAAA,sBACZ,KACA,SAAS,CAAC,GAAG,GACb,eAAe,CAAC,MAAM,SAAS,IAAI,GAC9B;AACL,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACf,UAAA,IAAI,MAAM,iCAAiC;AAAA,EACrD;AAGA,QAAMC,sBAAsB,sBAAA,CAAC,GAAG,GAAG,CAAC;AAGpC,SAAOC,sBAA0B,0BAAA;AAAA,IAC7B;AAAA,IACA,eAAe,cAAc,MAAM;AAAA,EAAA;AAE3C;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-align/index.d.ts b/node_modules/@unified-latex/unified-latex-util-align/index.d.ts new file mode 100644 index 0000000..ee74084 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-align/index.d.ts @@ -0,0 +1,44 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +export declare function createMatchers(rowSepMacros: string[], colSep: string[]): { + isRowSep: Ast.TypeGuard; + isColSep: (node: Ast.Node) => boolean; + isWhitespace: (node: Ast.Node) => node is Ast.Whitespace; + isSameLineComment: (node: Ast.Node) => boolean | undefined; + isOwnLineComment: (node: Ast.Node) => boolean; +}; + +/** + * Parse the content of an align environment into an array of row objects. + * Each row object looks like + * ``` + * { + * cells: [...], + * colSeps: [...], + * rowSep: ..., + * trailingComment: ... + * } + * ``` + * `...` may be an ast node or `null`. + * + * @export + * @param {[object]} ast + * @param {string} [colSep=["&"]] + * @param {string} [rowSepMacros=["\\", "hline", "cr"]] + * @returns + */ +export declare function parseAlignEnvironment(ast: Ast.Node[], colSep?: string[], rowSepMacros?: string[]): Row[]; + +declare interface Row extends RowItems { + rowSep: Ast.Macro | null; + trailingComment: Ast.Comment | null; +} + +declare interface RowItems { + cells: Ast.Node[][]; + colSeps: Ast.String[]; +} + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-align/index.js b/node_modules/@unified-latex/unified-latex-util-align/index.js new file mode 100644 index 0000000..9a66788 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-align/index.js @@ -0,0 +1,27 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +import { decorateArrayForPegjs, AlignEnvironmentPegParser } from "@unified-latex/unified-latex-util-pegjs"; +function createMatchers(rowSepMacros, colSep) { + const isRowSep = match.createMacroMatcher(rowSepMacros); + return { + isRowSep, + isColSep: (node) => colSep.some((sep) => match.string(node, sep)), + isWhitespace: (node) => match.whitespace(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parseAlignEnvironment(ast, colSep = ["&"], rowSepMacros = ["\\", "hline", "cr"]) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return AlignEnvironmentPegParser.parse( + ast, + createMatchers(rowSepMacros, colSep) + ); +} +export { + createMatchers, + parseAlignEnvironment +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-align/index.js.map b/node_modules/@unified-latex/unified-latex-util-align/index.js.map new file mode 100644 index 0000000..ce6fe1d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-align/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/parse-align-environment.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n AlignEnvironmentPegParser,\n decorateArrayForPegjs,\n} from \"@unified-latex/unified-latex-util-pegjs\";\n\n// The types returned by the grammar\ninterface RowItems {\n cells: Ast.Node[][];\n colSeps: Ast.String[];\n}\n\ninterface Row extends RowItems {\n rowSep: Ast.Macro | null;\n trailingComment: Ast.Comment | null;\n}\n\nexport function createMatchers(rowSepMacros: string[], colSep: string[]) {\n const isRowSep = match.createMacroMatcher(rowSepMacros);\n return {\n isRowSep,\n isColSep: (node: Ast.Node) =>\n colSep.some((sep) => match.string(node, sep)),\n isWhitespace: (node: Ast.Node) => match.whitespace(node),\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the content of an align environment into an array of row objects.\n * Each row object looks like\n * ```\n * {\n * cells: [...],\n * colSeps: [...],\n * rowSep: ...,\n * trailingComment: ...\n * }\n * ```\n * `...` may be an ast node or `null`.\n *\n * @export\n * @param {[object]} ast\n * @param {string} [colSep=[\"&\"]]\n * @param {string} [rowSepMacros=[\"\\\\\", \"hline\", \"cr\"]]\n * @returns\n */\nexport function parseAlignEnvironment(\n ast: Ast.Node[],\n colSep = [\"&\"],\n rowSepMacros = [\"\\\\\", \"hline\", \"cr\"]\n): Row[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\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 AlignEnvironmentPegParser.parse(\n ast,\n createMatchers(rowSepMacros, colSep)\n ) as Row[];\n}\n"],"names":[],"mappings":";;AAkBgB,SAAA,eAAe,cAAwB,QAAkB;AAC/D,QAAA,WAAW,MAAM,mBAAmB,YAAY;AAC/C,SAAA;AAAA,IACH;AAAA,IACA,UAAU,CAAC,SACP,OAAO,KAAK,CAAC,QAAQ,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA,IAChD,cAAc,CAAC,SAAmB,MAAM,WAAW,IAAI;AAAA,IACvD,mBAAmB,CAAC,SAChB,MAAM,QAAQ,IAAI,KAAK,KAAK;AAAA,IAChC,kBAAkB,CAAC,SACf,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK;AAAA,EAAA;AAEzC;AAqBgB,SAAA,sBACZ,KACA,SAAS,CAAC,GAAG,GACb,eAAe,CAAC,MAAM,SAAS,IAAI,GAC9B;AACL,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACf,UAAA,IAAI,MAAM,iCAAiC;AAAA,EACrD;AAGA,QAAM,sBAAsB,CAAC,GAAG,GAAG,CAAC;AAGpC,SAAO,0BAA0B;AAAA,IAC7B;AAAA,IACA,eAAe,cAAc,MAAM;AAAA,EAAA;AAE3C;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-align/package.json b/node_modules/@unified-latex/unified-latex-util-align/package.json new file mode 100644 index 0000000..ea12585 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-align/package.json @@ -0,0 +1,53 @@ +{ + "name": "@unified-latex/unified-latex-util-align", + "version": "1.8.1", + "description": "Tools for manipulating unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-argspec/README.md b/node_modules/@unified-latex/unified-latex-util-argspec/README.md new file mode 100644 index 0000000..30302c9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-argspec/README.md @@ -0,0 +1,59 @@ + + + + +# unified-latex-util-argspec + +## What is this? + +Tools to deal with `xparse` argument signatures. (E.g., `"o m"` for optional followed by mandatory +argument). + +## When should I use this? + +If you are working on the internals of `unified-latex`. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-argspec +``` + +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 + +## `parse(str)` + +Parse an `xparse` argument specification string to an AST. +This function caches results. Don't mutate the returned AST! + +```typescript +function parse(str: String): ArgSpec.Node[]; +``` + +**Parameters** + +| Param | Type | Description | +| :---- | :------- | ---------------------- | +| str | `String` | * LaTeX string input | + +## `printRaw(node, root)` + +Print an `xparse` argument specification AST +to a string. + +```typescript +function printRaw( + node: string | ArgSpec.Node | (string | ArgSpec.Node)[], + root: Boolean +): string; +``` + +**Parameters** + +| Param | Type | +| :---- | :-------------------------------- | +| node | Omitted | +| root | `Boolean` | diff --git a/node_modules/@unified-latex/unified-latex-util-argspec/index.cjs b/node_modules/@unified-latex/unified-latex-util-argspec/index.cjs new file mode 100644 index 0000000..ba88aed --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-argspec/index.cjs @@ -0,0 +1,90 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +function getDecorators(node) { + let ret = ""; + if (node.noLeadingWhitespace) { + ret += "!"; + } + return ret; +} +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + const decorators = getDecorators(node); + const defaultArg = printDefaultArg( + "defaultArg" in node ? node.defaultArg : void 0, + // `embellishment`s are the only spec that can have multiple default args + node.type === "embellishment" + ); + let spec = decorators; + const type = node.type; + switch (type) { + case "body": + return decorators + "b"; + case "optionalStar": + return decorators + "s"; + case "optionalToken": + return spec + "t" + node.token; + case "optional": + if (node.openBrace === "[" && node.closeBrace === "]") { + spec += node.defaultArg ? "O" : "o"; + } else { + spec += node.defaultArg ? "D" : "d"; + spec += node.openBrace + node.closeBrace; + } + return spec + defaultArg; + case "mandatory": + if (node.openBrace === "{" && node.closeBrace === "}") { + spec += "m"; + } else { + spec += node.defaultArg ? "R" : "r"; + spec += node.openBrace + node.closeBrace; + } + return spec + defaultArg; + case "embellishment": + spec += node.defaultArg ? "E" : "e"; + return spec + "{" + printRaw(node.embellishmentTokens) + "}" + defaultArg; + case "verbatim": + return spec + "v" + node.openBrace; + case "group": + return spec + "{" + printRaw(node.content) + "}"; + case "until": { + const stopTokens = printRaw(node.stopTokens); + return stopTokens.length > 1 || stopTokens[0] === " " ? `u{${stopTokens}}` : `u${stopTokens}`; + } + default: + const neverType = type; + console.warn(`Unknown node type "${neverType}" for node`, node); + return ""; + } +} +const parseCache = {}; +function parse(str = "") { + parseCache[str] = parseCache[str] || unifiedLatexUtilPegjs.ArgSpecPegParser.parse(str); + return parseCache[str]; +} +function printDefaultArg(args, multipleArgs) { + if (!args) { + return ""; + } + if (typeof args === "string") { + args = [args]; + } + if (!multipleArgs) { + return `{${args.join("")}}`; + } + return `{${args.map((a) => `{${a}}`).join("")}}`; +} +const argspecTypes = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null +}, Symbol.toStringTag, { value: "Module" })); +exports.ArgSpecAst = argspecTypes; +exports.parse = parse; +exports.printRaw = printRaw; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-argspec/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-argspec/index.cjs.map new file mode 100644 index 0000000..7d09efa --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-argspec/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/argspec-parser.ts"],"sourcesContent":["import { ArgSpecPegParser as PegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as ArgSpec from \"./argspec-types\";\n\n/**\n * Produce a string containing any decorators for the argspec node.\n * For example, `!` in front of a node means \"don't accept leading whitespace\"\n */\nfunction getDecorators(node: ArgSpec.Node): string {\n let ret = \"\";\n if ((node as ArgSpec.LeadingWhitespace).noLeadingWhitespace) {\n ret += \"!\";\n }\n return ret;\n}\n\n/**\n * Print an `xparse` argument specification AST\n * to a string.\n */\nexport function printRaw(\n node: ArgSpec.Node | string | (ArgSpec.Node | string)[],\n root = false\n): 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 const decorators = getDecorators(node);\n const defaultArg = printDefaultArg(\n \"defaultArg\" in node ? node.defaultArg : undefined,\n // `embellishment`s are the only spec that can have multiple default args\n node.type === \"embellishment\"\n );\n let spec = decorators;\n\n const type = node.type;\n switch (type) {\n case \"body\":\n return decorators + \"b\";\n case \"optionalStar\":\n return decorators + \"s\";\n case \"optionalToken\":\n return spec + \"t\" + node.token;\n case \"optional\":\n // [...] is the default enclosure for optional arguments\n if (node.openBrace === \"[\" && node.closeBrace === \"]\") {\n spec += node.defaultArg ? \"O\" : \"o\";\n } else {\n spec += node.defaultArg ? \"D\" : \"d\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"mandatory\":\n // {...} is the default enclosure for mandatory arguments\n if (node.openBrace === \"{\" && node.closeBrace === \"}\") {\n spec += \"m\";\n } else {\n spec += node.defaultArg ? \"R\" : \"r\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"embellishment\":\n spec += node.defaultArg ? \"E\" : \"e\";\n return (\n spec +\n \"{\" +\n printRaw(node.embellishmentTokens) +\n \"}\" +\n defaultArg\n );\n case \"verbatim\":\n return spec + \"v\" + node.openBrace;\n case \"group\":\n return spec + \"{\" + printRaw(node.content) + \"}\";\n case \"until\": {\n const stopTokens = printRaw(node.stopTokens);\n return stopTokens.length > 1 || stopTokens[0] === \" \"\n ? `u{${stopTokens}}`\n : `u${stopTokens}`;\n }\n default:\n const neverType: never = type;\n console.warn(`Unknown node type \"${neverType}\" for node`, node);\n return \"\";\n }\n}\n\nconst parseCache: { [argStr: string]: ArgSpec.Node[] } = {};\n\n/**\n * Parse an `xparse` argument specification string to an AST.\n * This function caches results. Don't mutate the returned AST!\n *\n * @param {string} [str=\"\"] - LaTeX string input\n * @returns - AST for LaTeX string\n */\nexport function parse(str = \"\"): ArgSpec.Node[] {\n parseCache[str] = parseCache[str] || PegParser.parse(str);\n return parseCache[str];\n}\n\nfunction printDefaultArg(\n args: string | string[] | undefined,\n multipleArgs: boolean\n): string {\n if (!args) {\n return \"\";\n }\n if (typeof args === \"string\") {\n args = [args];\n }\n if (!multipleArgs) {\n return `{${args.join(\"\")}}`;\n }\n return `{${args.map((a) => `{${a}}`).join(\"\")}}`;\n}\n"],"names":["PegParser"],"mappings":";;;AAOA,SAAS,cAAc,MAA4B;AAC/C,MAAI,MAAM;AACV,MAAK,KAAmC,qBAAqB;AAClD,WAAA;AAAA,EAAA;AAEJ,SAAA;AACX;AAMgB,SAAA,SACZ,MACA,OAAO,OACD;AACF,MAAA,OAAO,SAAS,UAAU;AACnB,WAAA;AAAA,EAAA;AAGP,MAAA,MAAM,QAAQ,IAAI,GAAG;AACf,UAAA,WAAW,OAAO,MAAM;AACvB,WAAA,KAAK,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAAE,KAAK,QAAQ;AAAA,EAAA;AAGnD,QAAA,aAAa,cAAc,IAAI;AACrC,QAAM,aAAa;AAAA,IACf,gBAAgB,OAAO,KAAK,aAAa;AAAA;AAAA,IAEzC,KAAK,SAAS;AAAA,EAClB;AACA,MAAI,OAAO;AAEX,QAAM,OAAO,KAAK;AAClB,UAAQ,MAAM;AAAA,IACV,KAAK;AACD,aAAO,aAAa;AAAA,IACxB,KAAK;AACD,aAAO,aAAa;AAAA,IACxB,KAAK;AACM,aAAA,OAAO,MAAM,KAAK;AAAA,IAC7B,KAAK;AAED,UAAI,KAAK,cAAc,OAAO,KAAK,eAAe,KAAK;AAC3C,gBAAA,KAAK,aAAa,MAAM;AAAA,MAAA,OAC7B;AACK,gBAAA,KAAK,aAAa,MAAM;AACxB,gBAAA,KAAK,YAAY,KAAK;AAAA,MAAA;AAElC,aAAO,OAAO;AAAA,IAClB,KAAK;AAED,UAAI,KAAK,cAAc,OAAO,KAAK,eAAe,KAAK;AAC3C,gBAAA;AAAA,MAAA,OACL;AACK,gBAAA,KAAK,aAAa,MAAM;AACxB,gBAAA,KAAK,YAAY,KAAK;AAAA,MAAA;AAElC,aAAO,OAAO;AAAA,IAClB,KAAK;AACO,cAAA,KAAK,aAAa,MAAM;AAChC,aACI,OACA,MACA,SAAS,KAAK,mBAAmB,IACjC,MACA;AAAA,IAER,KAAK;AACM,aAAA,OAAO,MAAM,KAAK;AAAA,IAC7B,KAAK;AACD,aAAO,OAAO,MAAM,SAAS,KAAK,OAAO,IAAI;AAAA,IACjD,KAAK,SAAS;AACJ,YAAA,aAAa,SAAS,KAAK,UAAU;AACpC,aAAA,WAAW,SAAS,KAAK,WAAW,CAAC,MAAM,MAC5C,KAAK,UAAU,MACf,IAAI,UAAU;AAAA,IAAA;AAAA,IAExB;AACI,YAAM,YAAmB;AACzB,cAAQ,KAAK,sBAAsB,SAAS,cAAc,IAAI;AACvD,aAAA;AAAA,EAAA;AAEnB;AAEA,MAAM,aAAmD,CAAC;AAS1C,SAAA,MAAM,MAAM,IAAoB;AAC5C,aAAW,GAAG,IAAI,WAAW,GAAG,KAAKA,sBAAA,iBAAU,MAAM,GAAG;AACxD,SAAO,WAAW,GAAG;AACzB;AAEA,SAAS,gBACL,MACA,cACM;AACN,MAAI,CAAC,MAAM;AACA,WAAA;AAAA,EAAA;AAEP,MAAA,OAAO,SAAS,UAAU;AAC1B,WAAO,CAAC,IAAI;AAAA,EAAA;AAEhB,MAAI,CAAC,cAAc;AACf,WAAO,IAAI,KAAK,KAAK,EAAE,CAAC;AAAA,EAAA;AAErB,SAAA,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AACjD;;;;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-argspec/index.d.ts b/node_modules/@unified-latex/unified-latex-util-argspec/index.d.ts new file mode 100644 index 0000000..9bf0300 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-argspec/index.d.ts @@ -0,0 +1,96 @@ +declare interface Arg extends AstNode { + openBrace: string; + closeBrace: string; +} + +declare namespace ArgSpecAst { + export { + Ast, + Node_2 as Node, + LeadingWhitespace, + DefaultArgument, + DefaultArguments, + Embellishment, + Group + } +} +export { ArgSpecAst } + +declare type Ast = Node_2[] | Node_2; + +declare interface AstNode { + type: string; +} + +declare interface Body_2 extends AstNode { + type: "body"; +} + +declare interface DefaultArgument { + defaultArg?: string; +} + +declare interface DefaultArguments { + defaultArg?: string[]; +} + +declare interface Embellishment extends DefaultArguments, AstNode { + type: "embellishment"; + embellishmentTokens: string[]; +} + +declare interface Group extends AstNode { + type: "group"; + content: (Group | string)[]; +} + +declare interface LeadingWhitespace { + noLeadingWhitespace: boolean | undefined; +} + +declare interface Mandatory extends LeadingWhitespace, DefaultArgument, Arg { + type: "mandatory"; +} + +declare type Node_2 = Optional | Mandatory | Verbatim | Body_2 | Group | Until; + +declare type Optional = OptionalArg | OptionalStar | OptionalToken | Embellishment; + +declare interface OptionalArg extends LeadingWhitespace, DefaultArgument, Arg { + type: "optional"; +} + +declare interface OptionalStar extends LeadingWhitespace, AstNode { + type: "optionalStar"; +} + +declare interface OptionalToken extends LeadingWhitespace, AstNode { + type: "optionalToken"; + token: string; +} + +/** + * Parse an `xparse` argument specification string to an AST. + * This function caches results. Don't mutate the returned AST! + * + * @param {string} [str=""] - LaTeX string input + * @returns - AST for LaTeX string + */ +export declare function parse(str?: string): ArgSpecAst.Node[]; + +/** + * Print an `xparse` argument specification AST + * to a string. + */ +export declare function printRaw(node: ArgSpecAst.Node | string | (ArgSpecAst.Node | string)[], root?: boolean): string; + +declare interface Until extends AstNode { + type: "until"; + stopTokens: string[]; +} + +declare interface Verbatim extends Arg { + type: "verbatim"; +} + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-argspec/index.js b/node_modules/@unified-latex/unified-latex-util-argspec/index.js new file mode 100644 index 0000000..9884d1d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-argspec/index.js @@ -0,0 +1,90 @@ +import { ArgSpecPegParser } from "@unified-latex/unified-latex-util-pegjs"; +function getDecorators(node) { + let ret = ""; + if (node.noLeadingWhitespace) { + ret += "!"; + } + return ret; +} +function printRaw(node, root = false) { + if (typeof node === "string") { + return node; + } + if (Array.isArray(node)) { + const sepToken = root ? " " : ""; + return node.map((tok) => printRaw(tok)).join(sepToken); + } + const decorators = getDecorators(node); + const defaultArg = printDefaultArg( + "defaultArg" in node ? node.defaultArg : void 0, + // `embellishment`s are the only spec that can have multiple default args + node.type === "embellishment" + ); + let spec = decorators; + const type = node.type; + switch (type) { + case "body": + return decorators + "b"; + case "optionalStar": + return decorators + "s"; + case "optionalToken": + return spec + "t" + node.token; + case "optional": + if (node.openBrace === "[" && node.closeBrace === "]") { + spec += node.defaultArg ? "O" : "o"; + } else { + spec += node.defaultArg ? "D" : "d"; + spec += node.openBrace + node.closeBrace; + } + return spec + defaultArg; + case "mandatory": + if (node.openBrace === "{" && node.closeBrace === "}") { + spec += "m"; + } else { + spec += node.defaultArg ? "R" : "r"; + spec += node.openBrace + node.closeBrace; + } + return spec + defaultArg; + case "embellishment": + spec += node.defaultArg ? "E" : "e"; + return spec + "{" + printRaw(node.embellishmentTokens) + "}" + defaultArg; + case "verbatim": + return spec + "v" + node.openBrace; + case "group": + return spec + "{" + printRaw(node.content) + "}"; + case "until": { + const stopTokens = printRaw(node.stopTokens); + return stopTokens.length > 1 || stopTokens[0] === " " ? `u{${stopTokens}}` : `u${stopTokens}`; + } + default: + const neverType = type; + console.warn(`Unknown node type "${neverType}" for node`, node); + return ""; + } +} +const parseCache = {}; +function parse(str = "") { + parseCache[str] = parseCache[str] || ArgSpecPegParser.parse(str); + return parseCache[str]; +} +function printDefaultArg(args, multipleArgs) { + if (!args) { + return ""; + } + if (typeof args === "string") { + args = [args]; + } + if (!multipleArgs) { + return `{${args.join("")}}`; + } + return `{${args.map((a) => `{${a}}`).join("")}}`; +} +const argspecTypes = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null +}, Symbol.toStringTag, { value: "Module" })); +export { + argspecTypes as ArgSpecAst, + parse, + printRaw +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-argspec/index.js.map b/node_modules/@unified-latex/unified-latex-util-argspec/index.js.map new file mode 100644 index 0000000..e2ce928 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-argspec/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/argspec-parser.ts"],"sourcesContent":["import { ArgSpecPegParser as PegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as ArgSpec from \"./argspec-types\";\n\n/**\n * Produce a string containing any decorators for the argspec node.\n * For example, `!` in front of a node means \"don't accept leading whitespace\"\n */\nfunction getDecorators(node: ArgSpec.Node): string {\n let ret = \"\";\n if ((node as ArgSpec.LeadingWhitespace).noLeadingWhitespace) {\n ret += \"!\";\n }\n return ret;\n}\n\n/**\n * Print an `xparse` argument specification AST\n * to a string.\n */\nexport function printRaw(\n node: ArgSpec.Node | string | (ArgSpec.Node | string)[],\n root = false\n): 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 const decorators = getDecorators(node);\n const defaultArg = printDefaultArg(\n \"defaultArg\" in node ? node.defaultArg : undefined,\n // `embellishment`s are the only spec that can have multiple default args\n node.type === \"embellishment\"\n );\n let spec = decorators;\n\n const type = node.type;\n switch (type) {\n case \"body\":\n return decorators + \"b\";\n case \"optionalStar\":\n return decorators + \"s\";\n case \"optionalToken\":\n return spec + \"t\" + node.token;\n case \"optional\":\n // [...] is the default enclosure for optional arguments\n if (node.openBrace === \"[\" && node.closeBrace === \"]\") {\n spec += node.defaultArg ? \"O\" : \"o\";\n } else {\n spec += node.defaultArg ? \"D\" : \"d\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"mandatory\":\n // {...} is the default enclosure for mandatory arguments\n if (node.openBrace === \"{\" && node.closeBrace === \"}\") {\n spec += \"m\";\n } else {\n spec += node.defaultArg ? \"R\" : \"r\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"embellishment\":\n spec += node.defaultArg ? \"E\" : \"e\";\n return (\n spec +\n \"{\" +\n printRaw(node.embellishmentTokens) +\n \"}\" +\n defaultArg\n );\n case \"verbatim\":\n return spec + \"v\" + node.openBrace;\n case \"group\":\n return spec + \"{\" + printRaw(node.content) + \"}\";\n case \"until\": {\n const stopTokens = printRaw(node.stopTokens);\n return stopTokens.length > 1 || stopTokens[0] === \" \"\n ? `u{${stopTokens}}`\n : `u${stopTokens}`;\n }\n default:\n const neverType: never = type;\n console.warn(`Unknown node type \"${neverType}\" for node`, node);\n return \"\";\n }\n}\n\nconst parseCache: { [argStr: string]: ArgSpec.Node[] } = {};\n\n/**\n * Parse an `xparse` argument specification string to an AST.\n * This function caches results. Don't mutate the returned AST!\n *\n * @param {string} [str=\"\"] - LaTeX string input\n * @returns - AST for LaTeX string\n */\nexport function parse(str = \"\"): ArgSpec.Node[] {\n parseCache[str] = parseCache[str] || PegParser.parse(str);\n return parseCache[str];\n}\n\nfunction printDefaultArg(\n args: string | string[] | undefined,\n multipleArgs: boolean\n): string {\n if (!args) {\n return \"\";\n }\n if (typeof args === \"string\") {\n args = [args];\n }\n if (!multipleArgs) {\n return `{${args.join(\"\")}}`;\n }\n return `{${args.map((a) => `{${a}}`).join(\"\")}}`;\n}\n"],"names":["PegParser"],"mappings":";AAOA,SAAS,cAAc,MAA4B;AAC/C,MAAI,MAAM;AACV,MAAK,KAAmC,qBAAqB;AAClD,WAAA;AAAA,EAAA;AAEJ,SAAA;AACX;AAMgB,SAAA,SACZ,MACA,OAAO,OACD;AACF,MAAA,OAAO,SAAS,UAAU;AACnB,WAAA;AAAA,EAAA;AAGP,MAAA,MAAM,QAAQ,IAAI,GAAG;AACf,UAAA,WAAW,OAAO,MAAM;AACvB,WAAA,KAAK,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAC,EAAE,KAAK,QAAQ;AAAA,EAAA;AAGnD,QAAA,aAAa,cAAc,IAAI;AACrC,QAAM,aAAa;AAAA,IACf,gBAAgB,OAAO,KAAK,aAAa;AAAA;AAAA,IAEzC,KAAK,SAAS;AAAA,EAClB;AACA,MAAI,OAAO;AAEX,QAAM,OAAO,KAAK;AAClB,UAAQ,MAAM;AAAA,IACV,KAAK;AACD,aAAO,aAAa;AAAA,IACxB,KAAK;AACD,aAAO,aAAa;AAAA,IACxB,KAAK;AACM,aAAA,OAAO,MAAM,KAAK;AAAA,IAC7B,KAAK;AAED,UAAI,KAAK,cAAc,OAAO,KAAK,eAAe,KAAK;AAC3C,gBAAA,KAAK,aAAa,MAAM;AAAA,MAAA,OAC7B;AACK,gBAAA,KAAK,aAAa,MAAM;AACxB,gBAAA,KAAK,YAAY,KAAK;AAAA,MAAA;AAElC,aAAO,OAAO;AAAA,IAClB,KAAK;AAED,UAAI,KAAK,cAAc,OAAO,KAAK,eAAe,KAAK;AAC3C,gBAAA;AAAA,MAAA,OACL;AACK,gBAAA,KAAK,aAAa,MAAM;AACxB,gBAAA,KAAK,YAAY,KAAK;AAAA,MAAA;AAElC,aAAO,OAAO;AAAA,IAClB,KAAK;AACO,cAAA,KAAK,aAAa,MAAM;AAChC,aACI,OACA,MACA,SAAS,KAAK,mBAAmB,IACjC,MACA;AAAA,IAER,KAAK;AACM,aAAA,OAAO,MAAM,KAAK;AAAA,IAC7B,KAAK;AACD,aAAO,OAAO,MAAM,SAAS,KAAK,OAAO,IAAI;AAAA,IACjD,KAAK,SAAS;AACJ,YAAA,aAAa,SAAS,KAAK,UAAU;AACpC,aAAA,WAAW,SAAS,KAAK,WAAW,CAAC,MAAM,MAC5C,KAAK,UAAU,MACf,IAAI,UAAU;AAAA,IAAA;AAAA,IAExB;AACI,YAAM,YAAmB;AACzB,cAAQ,KAAK,sBAAsB,SAAS,cAAc,IAAI;AACvD,aAAA;AAAA,EAAA;AAEnB;AAEA,MAAM,aAAmD,CAAC;AAS1C,SAAA,MAAM,MAAM,IAAoB;AAC5C,aAAW,GAAG,IAAI,WAAW,GAAG,KAAKA,iBAAU,MAAM,GAAG;AACxD,SAAO,WAAW,GAAG;AACzB;AAEA,SAAS,gBACL,MACA,cACM;AACN,MAAI,CAAC,MAAM;AACA,WAAA;AAAA,EAAA;AAEP,MAAA,OAAO,SAAS,UAAU;AAC1B,WAAO,CAAC,IAAI;AAAA,EAAA;AAEhB,MAAI,CAAC,cAAc;AACf,WAAO,IAAI,KAAK,KAAK,EAAE,CAAC;AAAA,EAAA;AAErB,SAAA,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AACjD;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-argspec/package.json b/node_modules/@unified-latex/unified-latex-util-argspec/package.json new file mode 100644 index 0000000..7974bdf --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-argspec/package.json @@ -0,0 +1,51 @@ +{ + "name": "@unified-latex/unified-latex-util-argspec", + "version": "1.8.2", + "description": "Tools parsing a LaTeX argument specification in the xparse format", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-arguments/README.md b/node_modules/@unified-latex/unified-latex-util-arguments/README.md new file mode 100644 index 0000000..30a9757 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-arguments/README.md @@ -0,0 +1,116 @@ + + + + +# unified-latex-util-arguments + +## What is this? + +Functions to help modify and attach arguments to macros in a `unified-latex` Abstract Syntax Tree (AST). + +By default, TeX doesn't actually have a concept of macro "arguments". Instead, TeX searches the +tokens after a macro and processes them according to the macro's rules. However, LaTeX attempts +to make macros look like functions that accept arguments. To attach the "arguments" to a macro +node, the `unified-latex` AST needs to be reparsed and manipulated. + +## When should I use this? + +If you have custom macros that you want arguments attached to. + +If you know ahead of time which macros need arguments attached to them, use `unified-latex-util-parse` +and pass in the appropriate macro info instead. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-arguments +``` + +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. + +# Plugins + +## `unifiedLatexAttachMacroArguments` + +Unified plugin to attach macro arguments to the macros specified via the `macros` +option. + +### Usage + +`unified().use(unifiedLatexAttachMacroArguments[, options])` + +#### options + +```typescript +{ macros: MacroInfoRecord; } +``` + +### Type + +`Plugin<{ macros: MacroInfoRecord; }[], Ast.Root, Ast.Root>` + +```typescript +function unifiedLatexAttachMacroArguments(options: { + macros: MacroInfoRecord; +}): (tree: Ast.Root) => void; +``` + +# Functions + +## `getArgsContent(node)` + +Returns the content of `args` for a macro or environment as an array. If an argument +was omitted (e.g., because it was an optional arg that wasn't included), then `null` is returned. + +```typescript +function getArgsContent(node: Ast.Macro | Ast.Environment): Ast.Node[][]; +``` + +**Parameters** + +| Param | Type | +| :---- | :----------------------------- | +| node | `Ast.Macro \| Ast.Environment` | + +## `getNamedArgsContent(node, namedArgumentsFallback)` + +Returns the content of `args` for a macro or environment as an object whose keys are the "names" +of each argument. These names of the arguments must be specified in the `_renderInfo` prop. If `_renderInfo` +does not contain a `namedArguments` array, then an empty object will be returned. + +```typescript +function getNamedArgsContent( + node: Ast.Macro | Ast.Environment, + namedArgumentsFallback: readonly string[] +): Record; +``` + +**Parameters** + +| Param | Type | +| :--------------------- | :----------------------------- | +| node | `Ast.Macro \| Ast.Environment` | +| namedArgumentsFallback | `readonly string[]` | + +## `gobbleSingleArgument(nodes, argSpec, startPos)` + +Gobbles an argument of whose type is specified +by `argSpec` starting at the position `startPos`. +If an argument couldn't be found, `argument` will be `null`. + +```typescript +function gobbleSingleArgument( + nodes: Ast.Node[], + argSpec: ArgSpec.Node, + startPos: Number +): { argument: Ast.Argument | null; nodesRemoved: number }; +``` + +**Parameters** + +| Param | Type | +| :------- | :------------- | +| nodes | `Ast.Node[]` | +| argSpec | `ArgSpec.Node` | +| startPos | `Number` | diff --git a/node_modules/@unified-latex/unified-latex-util-arguments/index.cjs b/node_modules/@unified-latex/unified-latex-util-arguments/index.cjs new file mode 100644 index 0000000..31b79d2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-arguments/index.cjs @@ -0,0 +1,405 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexBuilder = require("@unified-latex/unified-latex-builder"); +const unifiedLatexUtilArgspec = require("@unified-latex/unified-latex-util-argspec"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilScan = require("@unified-latex/unified-latex-util-scan"); +const unifiedLatexUtilRenderInfo = require("@unified-latex/unified-latex-util-render-info"); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +function gobbleSingleArgument(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "string" || !argSpec.type) { + throw new Error( + `argSpec must be an already-parsed argument specification, not "${JSON.stringify( + argSpec + )}"` + ); + } + let argument = null; + let currPos = startPos; + const gobbleWhitespace = argSpec.noLeadingWhitespace ? () => { + } : () => { + while (currPos < nodes.length) { + if (!unifiedLatexUtilMatch.match.whitespace(nodes[currPos])) { + break; + } + currPos++; + } + }; + const openMark = argSpec.openBrace || ""; + const closeMark = argSpec.closeBrace || ""; + const acceptGroup = (argSpec.type === "mandatory" || argSpec.type === "optional") && openMark === "{" && closeMark === "}"; + gobbleWhitespace(); + const currNode = nodes[currPos]; + if (currNode == null || unifiedLatexUtilMatch.match.comment(currNode) || unifiedLatexUtilMatch.match.parbreak(currNode)) { + const ret = { + argument, + nodesRemoved: 0 + }; + return ret; + } + switch (argSpec.type) { + case "mandatory": + if (acceptGroup) { + let content = [currNode]; + if (unifiedLatexUtilMatch.match.group(currNode)) { + content = currNode.content; + } + argument = unifiedLatexBuilder.arg(content, { + openMark, + closeMark + }); + currPos++; + break; + } else { + const bracePos2 = findBracePositions( + nodes, + currPos, + openMark, + closeMark + ); + if (bracePos2) { + argument = unifiedLatexBuilder.arg(nodes.slice(bracePos2[0] + 1, bracePos2[1]), { + openMark, + closeMark + }); + currPos = bracePos2[1] + 1; + break; + } + } + // NOTE: Fallthrough is on purpose. + // Matching a mandatory argument and an optional argument is the same for our purposes + // because we're not going to fail to parse because of a missing argument. + case "optional": + if (acceptGroup && unifiedLatexUtilMatch.match.group(currNode)) { + argument = unifiedLatexBuilder.arg(currNode.content, { + openMark, + closeMark + }); + currPos++; + break; + } + const bracePos = findBracePositions( + nodes, + currPos, + openMark, + closeMark + ); + if (bracePos) { + argument = unifiedLatexBuilder.arg(nodes.slice(bracePos[0] + 1, bracePos[1]), { + openMark, + closeMark + }); + currPos = bracePos[1] + 1; + break; + } + break; + case "optionalStar": + case "optionalToken": { + const bracePos2 = findBracePositions( + nodes, + currPos, + argSpec.type === "optionalStar" ? "*" : argSpec.token + ); + if (bracePos2) { + argument = unifiedLatexBuilder.arg(currNode, { openMark: "", closeMark: "" }); + currPos = bracePos2[0] + 1; + } + break; + } + case "until": { + if (argSpec.stopTokens.length > 1) { + console.warn( + `"until" matches with multi-token stop conditions are not yet implemented` + ); + break; + } + const rawToken = argSpec.stopTokens[0]; + const stopToken = rawToken === " " ? { type: "whitespace" } : rawToken; + let bracePos2 = findBracePositions( + nodes, + startPos, + void 0, + stopToken + ); + if (!bracePos2) { + break; + } + argument = unifiedLatexBuilder.arg(nodes.slice(startPos, bracePos2[1]), { + openMark: "", + closeMark: rawToken + }); + currPos = bracePos2[1]; + if (currPos < nodes.length) { + currPos++; + } + break; + } + case "embellishment": { + for (const token of argSpec.embellishmentTokens) { + const bracePos2 = findBracePositions(nodes, currPos, token); + if (!bracePos2) { + continue; + } + let argNode = nodes[bracePos2[0] + 1]; + argument = unifiedLatexBuilder.arg( + unifiedLatexUtilMatch.match.group(argNode) ? argNode.content : argNode, + { + openMark: token, + closeMark: "" + } + ); + currPos = bracePos2[1] + 1; + break; + } + break; + } + default: + console.warn( + `Don't know how to find an argument of argspec type "${argSpec.type}"` + ); + } + const nodesRemoved = argument ? currPos - startPos : 0; + nodes.splice(startPos, nodesRemoved); + return { argument, nodesRemoved }; +} +function cloneStringNode(node, content) { + return Object.assign({}, node, { content }); +} +function findBracePositions(nodes, startPos, openMark, closeMark) { + const currNode = nodes[startPos]; + let openMarkPos = startPos; + let closeMarkPos = startPos; + if (openMark) { + if (!unifiedLatexUtilMatch.match.anyString(currNode)) { + return; + } + const nodeContent = currNode.content; + if (!nodeContent.startsWith(openMark)) { + return; + } + openMarkPos = startPos; + if (currNode.content.length > openMark.length) { + const nodeContent2 = currNode.content; + currNode.content = openMark; + nodes.splice( + openMarkPos + 1, + 0, + cloneStringNode(currNode, nodeContent2.slice(openMark.length)) + ); + } + closeMarkPos = openMarkPos + 1; + } + if (!closeMark) { + const argNode = nodes[closeMarkPos]; + if (!argNode) { + return; + } + if (unifiedLatexUtilMatch.match.anyString(argNode) && argNode.content.length > 1) { + const argContent = argNode.content; + argNode.content = argContent[0]; + nodes.splice( + closeMarkPos + 1, + 0, + cloneStringNode(argNode, argContent.slice(1)) + ); + } + return [openMarkPos, closeMarkPos]; + } + closeMarkPos = unifiedLatexUtilScan.scan(nodes, closeMark, { + startIndex: closeMarkPos, + allowSubstringMatches: true + }); + if (closeMarkPos === null) { + return; + } + const closingNode = nodes[closeMarkPos]; + if (unifiedLatexUtilMatch.match.anyString(closingNode) && typeof closeMark === "string") { + const closingNodeContent = closingNode.content; + let closeMarkIndex = closingNodeContent.indexOf(closeMark); + if (closingNodeContent.length > closeMark.length) { + closingNode.content = closeMark; + const prev = closingNodeContent.slice(0, closeMarkIndex); + const next = closingNodeContent.slice( + closeMarkIndex + closeMark.length + ); + if (prev) { + nodes.splice( + closeMarkPos, + 0, + cloneStringNode(closingNode, prev) + ); + closeMarkPos++; + } + if (next) { + nodes.splice( + closeMarkPos + 1, + 0, + cloneStringNode(closingNode, next) + ); + } + } + } + return [openMarkPos, closeMarkPos]; +} +function gobbleArguments(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "function") { + return argSpec(nodes, startPos); + } + if (typeof argSpec === "string") { + argSpec = unifiedLatexUtilArgspec.parse(argSpec); + } + const args = []; + let nodesRemoved = 0; + for (const spec of argSpec) { + if (spec.type === "embellishment") { + const remainingTokens = new Set(spec.embellishmentTokens); + const argForToken = Object.fromEntries( + spec.embellishmentTokens.map((t, i) => { + var _a; + const defaultArg = "defaultArg" in spec ? (_a = spec.defaultArg) == null ? void 0 : _a[i] : void 0; + return [t, emptyArg(defaultArg)]; + }) + ); + let { argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + embellishmentSpec(remainingTokens), + startPos + ); + while (argument) { + const token = argument.openMark; + remainingTokens.delete(token); + argForToken[token] = argument; + nodesRemoved += removed; + const newSpec = embellishmentSpec(remainingTokens); + ({ argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + newSpec, + startPos + )); + } + args.push(...spec.embellishmentTokens.map((t) => argForToken[t])); + } else { + const { argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + spec, + startPos + ); + const defaultArg = "defaultArg" in spec ? spec.defaultArg : void 0; + args.push(argument || emptyArg(defaultArg)); + nodesRemoved += removed; + } + } + return { args, nodesRemoved }; +} +function embellishmentSpec(tokens) { + return { + type: "embellishment", + embellishmentTokens: [...tokens] + }; +} +function emptyArg(defaultArg) { + const ret = unifiedLatexBuilder.arg([], { openMark: "", closeMark: "" }); + if (defaultArg != null) { + unifiedLatexUtilRenderInfo.updateRenderInfo(ret, { defaultArg }); + } + return ret; +} +function attachMacroArgsInArray(nodes, macros) { + let currIndex; + const isRelevantMacro = unifiedLatexUtilMatch.match.createMacroMatcher(macros); + function gobbleUntilMacro() { + while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) { + currIndex--; + } + } + currIndex = nodes.length - 1; + while (currIndex >= 0) { + gobbleUntilMacro(); + if (currIndex < 0) { + return; + } + const macroIndex = currIndex; + const macro = nodes[macroIndex]; + const macroName = macro.content; + const macroInfo = macros[macroName]; + unifiedLatexUtilRenderInfo.updateRenderInfo(macro, macroInfo.renderInfo); + const signatureOrParser = macroInfo.argumentParser || macroInfo.signature; + if (signatureOrParser == null) { + currIndex--; + continue; + } + if (macro.args != null) { + currIndex = macroIndex - 1; + continue; + } + currIndex++; + const { args } = gobbleArguments(nodes, signatureOrParser, currIndex); + macro.args = args; + currIndex = macroIndex - 1; + } +} +function attachMacroArgs(tree, macros) { + unifiedLatexUtilVisit.visit( + tree, + (nodes) => { + attachMacroArgsInArray(nodes, macros); + }, + { includeArrays: true, test: Array.isArray } + ); +} +const unifiedLatexAttachMacroArguments = function unifiedLatexAttachMacroArguments2(options) { + return (tree) => { + const { macros = {} } = options || {}; + if (Object.keys(macros).length === 0) { + console.warn( + "Attempting to attach macro arguments but no macros are specified." + ); + } + unifiedLatexUtilVisit.visit( + tree, + (nodes) => { + attachMacroArgsInArray(nodes, macros); + }, + { includeArrays: true, test: Array.isArray } + ); + }; +}; +function getArgsContent(node) { + if (!Array.isArray(node.args)) { + return []; + } + return node.args.map((arg) => { + if (arg.openMark === "" && arg.content.length === 0) { + return null; + } + return arg.content; + }); +} +function getNamedArgsContent(node, namedArgumentsFallback = []) { + var _a; + const names = ((_a = node._renderInfo) == null ? void 0 : _a.namedArguments) || namedArgumentsFallback; + if (!Array.isArray(node.args) || !Array.isArray(names) || names.length === 0) { + return {}; + } + const ret = {}; + node.args.forEach((arg, i) => { + const name = names[i]; + if (name == null) { + return; + } + let val = arg.content; + if (arg.openMark === "" && arg.content.length === 0) { + val = null; + } + ret[name] = val; + }); + return ret; +} +exports.attachMacroArgs = attachMacroArgs; +exports.attachMacroArgsInArray = attachMacroArgsInArray; +exports.getArgsContent = getArgsContent; +exports.getNamedArgsContent = getNamedArgsContent; +exports.gobbleArguments = gobbleArguments; +exports.gobbleSingleArgument = gobbleSingleArgument; +exports.unifiedLatexAttachMacroArguments = unifiedLatexAttachMacroArguments; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-arguments/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-arguments/index.cjs.map new file mode 100644 index 0000000..4da523e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-arguments/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/gobble-single-argument.ts","../libs/gobble-arguments.ts","../libs/attach-arguments.ts","../libs/unified-latex-attach-macro-arguments.ts","../libs/get-args-content.ts"],"sourcesContent":["/* eslint-disable no-fallthrough */\nimport { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n printRaw,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\n\n/**\n * Gobbles an argument of whose type is specified\n * by `argSpec` starting at the position `startPos`.\n * If an argument couldn't be found, `argument` will be `null`.\n */\nexport function gobbleSingleArgument(\n nodes: Ast.Node[],\n argSpec: ArgSpec.Node,\n startPos = 0\n): {\n argument: Ast.Argument | null;\n nodesRemoved: number;\n} {\n if (typeof argSpec === \"string\" || !argSpec.type) {\n throw new Error(\n `argSpec must be an already-parsed argument specification, not \"${JSON.stringify(\n argSpec\n )}\"`\n );\n }\n\n let argument: Ast.Argument | null = null;\n\n let currPos = startPos;\n\n // Gobble whitespace from `currPos` onward, updating `currPos`.\n // If `argSpec` specifies leading whitespace is not allowed,\n // this function does nothing.\n const gobbleWhitespace = (argSpec as ArgSpec.LeadingWhitespace)\n .noLeadingWhitespace\n ? () => {}\n : () => {\n while (currPos < nodes.length) {\n if (!match.whitespace(nodes[currPos])) {\n break;\n }\n currPos++;\n }\n };\n\n const openMark: string = (argSpec as any).openBrace || \"\";\n const closeMark: string = (argSpec as any).closeBrace || \"\";\n\n // Only mandatory arguments can be wrapped in {...}.\n // Since we already parse such things as groups, we need to\n // check the open and closing symbols to see if we allow for\n // groups to be accepted as arguments\n const acceptGroup =\n (argSpec.type === \"mandatory\" || argSpec.type === \"optional\") &&\n openMark === \"{\" &&\n closeMark === \"}\";\n\n // Do the actual matching\n gobbleWhitespace();\n const currNode = nodes[currPos];\n if (\n currNode == null ||\n match.comment(currNode) ||\n match.parbreak(currNode)\n ) {\n const ret: { argument: null; nodesRemoved: number } = {\n argument,\n nodesRemoved: 0,\n };\n return ret;\n }\n\n switch (argSpec.type) {\n case \"mandatory\":\n if (acceptGroup) {\n // We have already gobbled whitespace, so at this point, `currNode`\n // is either an openMark or we don't have an optional argument.\n let content: Ast.Node[] = [currNode];\n if (match.group(currNode)) {\n // Unwrap a group if there is one.\n content = currNode.content;\n }\n argument = arg(content, {\n openMark,\n closeMark,\n });\n currPos++;\n break;\n } else {\n const bracePos = findBracePositions(\n nodes,\n currPos,\n openMark,\n closeMark\n );\n if (bracePos) {\n argument = arg(nodes.slice(bracePos[0] + 1, bracePos[1]), {\n openMark,\n closeMark,\n });\n currPos = bracePos[1] + 1;\n break;\n }\n }\n // NOTE: Fallthrough is on purpose.\n // Matching a mandatory argument and an optional argument is the same for our purposes\n // because we're not going to fail to parse because of a missing argument.\n case \"optional\":\n // It is possible that an optional argument accepts a group if its open/close braces are `{}`\n if (acceptGroup && match.group(currNode)) {\n argument = arg(currNode.content, {\n openMark,\n closeMark,\n });\n currPos++;\n break;\n }\n // If we're here, we have custom braces to match\n const bracePos = findBracePositions(\n nodes,\n currPos,\n openMark,\n closeMark\n );\n if (bracePos) {\n argument = arg(nodes.slice(bracePos[0] + 1, bracePos[1]), {\n openMark,\n closeMark,\n });\n currPos = bracePos[1] + 1;\n break;\n }\n break;\n case \"optionalStar\":\n case \"optionalToken\": {\n const bracePos = findBracePositions(\n nodes,\n currPos,\n argSpec.type === \"optionalStar\" ? \"*\" : argSpec.token\n );\n if (bracePos) {\n argument = arg(currNode, { openMark: \"\", closeMark: \"\" });\n // Instead of `closeMarkPos` returned from findBracePositions,\n // one should use `openMarkPos + ` because there's no argument\n currPos = bracePos[0] + 1;\n }\n break;\n }\n case \"until\": {\n if (argSpec.stopTokens.length > 1) {\n console.warn(\n `\"until\" matches with multi-token stop conditions are not yet implemented`\n );\n break;\n }\n const rawToken = argSpec.stopTokens[0];\n const stopToken: string | Ast.Whitespace =\n rawToken === \" \" ? { type: \"whitespace\" } : rawToken;\n\n let bracePos = findBracePositions(\n nodes,\n startPos,\n undefined,\n stopToken\n );\n // If the corresponding token is not found, eat nothing;\n if (!bracePos) {\n break;\n }\n\n argument = arg(nodes.slice(startPos, bracePos[1]), {\n openMark: \"\",\n closeMark: rawToken,\n });\n currPos = bracePos[1];\n if (currPos < nodes.length) {\n currPos++;\n }\n break;\n }\n case \"embellishment\": {\n for (const token of argSpec.embellishmentTokens) {\n const bracePos = findBracePositions(nodes, currPos, token);\n if (!bracePos) {\n continue;\n }\n let argNode = nodes[bracePos[0] + 1];\n argument = arg(\n match.group(argNode) ? argNode.content : argNode,\n {\n openMark: token,\n closeMark: \"\",\n }\n );\n currPos = bracePos[1] + 1;\n break;\n }\n break;\n }\n default:\n console.warn(\n `Don't know how to find an argument of argspec type \"${argSpec.type}\"`\n );\n }\n\n // `currPos` is has already stepped past any whitespace. However,\n // if we did not consume an argument, we don't want to consume the whitespace.\n const nodesRemoved = argument ? currPos - startPos : 0;\n nodes.splice(startPos, nodesRemoved);\n return { argument, nodesRemoved };\n}\n\nfunction cloneStringNode(node: Ast.String, content: string): Ast.String {\n return Object.assign({}, node, { content });\n}\n\n/**\n * Find the position of the open brace and the closing brace.\n * Returns undefined if the brace isn't found.\n * This may mutate `nodes`, if braces are not a kind of characters that are\n * always parsed as a separate token\n */\nfunction findBracePositions(\n nodes: Ast.Node[],\n startPos: number,\n openMark?: string,\n closeMark?: string | Ast.Node\n): [number, number] | undefined {\n const currNode = nodes[startPos];\n let openMarkPos = startPos;\n let closeMarkPos: number | null = startPos;\n if (openMark) {\n if (!match.anyString(currNode)) {\n return;\n }\n const nodeContent = currNode.content;\n // The first node we encounter must contain the opening brace.\n if (!nodeContent.startsWith(openMark)) {\n return;\n }\n openMarkPos = startPos;\n if (currNode.content.length > openMark.length) {\n const nodeContent = currNode.content;\n currNode.content = openMark;\n nodes.splice(\n openMarkPos + 1,\n 0,\n cloneStringNode(currNode, nodeContent.slice(openMark.length))\n );\n }\n closeMarkPos = openMarkPos + 1;\n }\n if (!closeMark) {\n // In such a case, the token immediately preceding the opening brace\n // will be treated as an argument. If the next token is a string node,\n // only its first character is picked up.\n const argNode = nodes[closeMarkPos];\n if (!argNode) {\n return;\n }\n if (match.anyString(argNode) && argNode.content.length > 1) {\n const argContent = argNode.content;\n argNode.content = argContent[0];\n nodes.splice(\n closeMarkPos + 1,\n 0,\n cloneStringNode(argNode, argContent.slice(1))\n );\n }\n return [openMarkPos, closeMarkPos];\n }\n // scan for closing marks\n closeMarkPos = scan(nodes, closeMark, {\n startIndex: closeMarkPos,\n allowSubstringMatches: true,\n });\n if (closeMarkPos === null) {\n return;\n }\n const closingNode = nodes[closeMarkPos];\n if (match.anyString(closingNode) && typeof closeMark === \"string\") {\n const closingNodeContent = closingNode.content;\n let closeMarkIndex = closingNodeContent.indexOf(closeMark);\n if (closingNodeContent.length > closeMark.length) {\n closingNode.content = closeMark;\n const prev = closingNodeContent.slice(0, closeMarkIndex);\n const next = closingNodeContent.slice(\n closeMarkIndex + closeMark.length\n );\n if (prev) {\n nodes.splice(\n closeMarkPos,\n 0,\n cloneStringNode(closingNode, prev)\n );\n closeMarkPos++;\n }\n if (next) {\n nodes.splice(\n closeMarkPos + 1,\n 0,\n cloneStringNode(closingNode, next)\n );\n }\n }\n }\n return [openMarkPos, closeMarkPos];\n}\n","import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n parse as parseArgspec,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { gobbleSingleArgument } from \"./gobble-single-argument\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\n\n/**\n * Gobbles an argument of whose type is specified\n * by `argSpec` starting at the position `startPos`. If an argument couldn't be found,\n * `argument` will be `null`.\n */\nexport function gobbleArguments(\n nodes: Ast.Node[],\n argSpec: string | ArgSpec.Node[] | ArgumentParser,\n startPos = 0\n): {\n args: Ast.Argument[];\n nodesRemoved: number;\n} {\n if (typeof argSpec === \"function\") {\n return argSpec(nodes, startPos);\n }\n\n if (typeof argSpec === \"string\") {\n argSpec = parseArgspec(argSpec);\n }\n\n const args: Ast.Argument[] = [];\n let nodesRemoved = 0;\n\n for (const spec of argSpec) {\n if (spec.type === \"embellishment\") {\n // We need special behavior for embellishment argspecs.\n // Because an embellishment argspec specifies more than one argument,\n // we need to keep gobbling arguments until we've got them all.\n const remainingTokens = new Set(spec.embellishmentTokens);\n const argForToken = Object.fromEntries(\n spec.embellishmentTokens.map((t, i) => {\n // For empty arguments, we also store their default.\n const defaultArg =\n \"defaultArg\" in spec ? spec.defaultArg?.[i] : undefined;\n return [t, emptyArg(defaultArg)];\n })\n );\n\n let { argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n embellishmentSpec(remainingTokens),\n startPos\n );\n while (argument) {\n const token = argument.openMark;\n remainingTokens.delete(token);\n argForToken[token] = argument;\n nodesRemoved += removed;\n const newSpec = embellishmentSpec(remainingTokens);\n ({ argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n newSpec,\n startPos\n ));\n }\n\n args.push(...spec.embellishmentTokens.map((t) => argForToken[t]));\n } else {\n const { argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n spec,\n startPos\n );\n // For empty arguments, we also store their default.\n const defaultArg =\n \"defaultArg\" in spec ? spec.defaultArg : undefined;\n args.push(argument || emptyArg(defaultArg));\n nodesRemoved += removed;\n }\n }\n\n return { args, nodesRemoved };\n}\n\n/**\n * Create an embellishment argspec from a set of tokens.\n */\nfunction embellishmentSpec(tokens: Set): ArgSpec.Embellishment {\n return {\n type: \"embellishment\",\n embellishmentTokens: [...tokens],\n };\n}\n\n/**\n * Create an empty argument.\n */\nfunction emptyArg(defaultArg?: string): Ast.Argument {\n const ret = arg([], { openMark: \"\", closeMark: \"\" });\n if (defaultArg != null) {\n updateRenderInfo(ret, { defaultArg });\n }\n return ret;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { MacroInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { gobbleArguments } from \"./gobble-arguments\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Search (in a right-associative way) through the array for instances of\n * `macros` and attach arguments to the macro. Argument signatures are\n * specified by `macros[].signature`.\n *\n * Info stored in `macros[].renderInfo` will be attached to the node\n * with attribute `_renderInfo`.\n */\nexport function attachMacroArgsInArray(\n nodes: Ast.Node[],\n macros: MacroInfoRecord\n): void {\n // Some preliminaries that are only used if `ast` is an array.\n let currIndex: number;\n\n /**\n * Determine whether `node` matches one of the macros in `macros`.\n * Care is taken when matching because not all macros have\n * `\\` as their escape token.\n */\n const isRelevantMacro = match.createMacroMatcher(macros);\n\n function gobbleUntilMacro() {\n // Step backwards until we find the required macro\n while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) {\n currIndex--;\n }\n }\n\n // Search for an occurrence of any of the macros `macroName` and its arguments.\n // Some macros are right-associative, so we should start searching from\n // the right\n currIndex = nodes.length - 1;\n while (currIndex >= 0) {\n gobbleUntilMacro();\n if (currIndex < 0) {\n // We didn't find an occurrence of the macro\n return;\n }\n\n // Store the currIndex, which is where the macro is. Start searching\n // for its arguments at the next index.\n const macroIndex = currIndex;\n const macro = nodes[macroIndex] as Ast.Macro;\n const macroName = macro.content;\n const macroInfo = macros[macroName];\n\n // Add `._renderInfo` if we have any\n updateRenderInfo(macro, macroInfo.renderInfo);\n\n const signatureOrParser =\n macroInfo.argumentParser || macroInfo.signature;\n\n // If the macro has no signature, it shouldn't consume any arguments. Just move along.\n // Note: It is important that this happens *after* `updateRenderInfo` is called, since\n // we still want to update the render info even if there are no args.\n if (signatureOrParser == null) {\n currIndex--;\n continue;\n }\n\n // We don't want to search for macro arguments if we already\n // found them. If the macro has arguments, we assume that\n // they've already been attached\n if (macro.args != null) {\n currIndex = macroIndex - 1;\n continue;\n }\n\n // `currIndex` is the position of the macro. We want to start\n // looking for the arguments right after the macro\n currIndex++;\n const { args } = gobbleArguments(nodes, signatureOrParser, currIndex);\n macro.args = args;\n // After we've gobbled the arguments, set\n // ourselves one space before the macro so we can continue.\n currIndex = macroIndex - 1;\n }\n}\n\n/**\n * Recursively search for and attach the arguments for a\n * particular macro to its AST node. `macros` should\n * contain a `signature` property which specifies the arguments\n * signature in xparse syntax.\n */\nexport function attachMacroArgs(tree: Ast.Ast, macros: MacroInfoRecord) {\n visit(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n","import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { MacroInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { attachMacroArgsInArray } from \"./attach-arguments\";\n\ntype PluginOptions = { macros: MacroInfoRecord } | undefined;\n\n/**\n * Unified plugin to attach macro arguments to the macros specified via the `macros`\n * option.\n *\n * @param macros An object whose keys are macro names and values contains information about the macro and its argument signature.\n */\nexport const unifiedLatexAttachMacroArguments: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexAttachMacroArguments(options) {\n return (tree) => {\n const { macros = {} } = options || {};\n if (Object.keys(macros).length === 0) {\n console.warn(\n \"Attempting to attach macro arguments but no macros are specified.\"\n );\n }\n visit(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\n","import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Returns the content of `args` for a macro or environment as an array. If an argument\n * was omitted (e.g., because it was an optional arg that wasn't included), then `null` is returned.\n */\nexport function getArgsContent(\n node: Ast.Macro | Ast.Environment\n): (Ast.Node[] | null)[] {\n if (!Array.isArray(node.args)) {\n return [];\n }\n\n return node.args.map((arg) => {\n if (arg.openMark === \"\" && arg.content.length === 0) {\n return null;\n }\n return arg.content;\n });\n}\n\n/**\n * Returns the content of `args` for a macro or environment as an object whose keys are the \"names\"\n * of each argument. These names of the arguments must be specified in the `_renderInfo` prop. If `_renderInfo`\n * does not contain a `namedArguments` array, then an empty object will be returned.\n *\n * @namedArgumentsFallback - If `_renderInfo.namedArguments` is not provided, `namedArgumentsFallback` is ued.\n */\nexport function getNamedArgsContent(\n node: Ast.Macro | Ast.Environment,\n namedArgumentsFallback: readonly (string | null)[] = []\n): Record {\n const names = node._renderInfo?.namedArguments || namedArgumentsFallback;\n\n if (\n !Array.isArray(node.args) ||\n !Array.isArray(names) ||\n names.length === 0\n ) {\n return {};\n }\n const ret: Record = {};\n\n node.args.forEach((arg, i) => {\n const name = names[i];\n if (name == null) {\n // If a null name was given, it shouldn't be listed as a named argument.\n return;\n }\n let val: Ast.Node[] | null = arg.content;\n if (arg.openMark === \"\" && arg.content.length === 0) {\n val = null;\n }\n ret[name] = val;\n });\n\n return ret;\n}\n"],"names":["match","arg","bracePos","nodeContent","scan","parseArgspec","updateRenderInfo","visit","unifiedLatexAttachMacroArguments"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-arguments/index.d.ts b/node_modules/@unified-latex/unified-latex-util-arguments/index.d.ts new file mode 100644 index 0000000..c04f680 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-arguments/index.d.ts @@ -0,0 +1,72 @@ +import { ArgSpecAst } from '@unified-latex/unified-latex-util-argspec'; +import { ArgumentParser } from '@unified-latex/unified-latex-types'; +import * as Ast from '@unified-latex/unified-latex-types'; +import { MacroInfoRecord } from '@unified-latex/unified-latex-types'; +import { Plugin as Plugin_2 } from 'unified'; + +/** + * Recursively search for and attach the arguments for a + * particular macro to its AST node. `macros` should + * contain a `signature` property which specifies the arguments + * signature in xparse syntax. + */ +export declare function attachMacroArgs(tree: Ast.Ast, macros: MacroInfoRecord): void; + +/** + * Search (in a right-associative way) through the array for instances of + * `macros` and attach arguments to the macro. Argument signatures are + * specified by `macros[].signature`. + * + * Info stored in `macros[].renderInfo` will be attached to the node + * with attribute `_renderInfo`. + */ +export declare function attachMacroArgsInArray(nodes: Ast.Node[], macros: MacroInfoRecord): void; + +/** + * Returns the content of `args` for a macro or environment as an array. If an argument + * was omitted (e.g., because it was an optional arg that wasn't included), then `null` is returned. + */ +export declare function getArgsContent(node: Ast.Macro | Ast.Environment): (Ast.Node[] | null)[]; + +/** + * Returns the content of `args` for a macro or environment as an object whose keys are the "names" + * of each argument. These names of the arguments must be specified in the `_renderInfo` prop. If `_renderInfo` + * does not contain a `namedArguments` array, then an empty object will be returned. + * + * @namedArgumentsFallback - If `_renderInfo.namedArguments` is not provided, `namedArgumentsFallback` is ued. + */ +export declare function getNamedArgsContent(node: Ast.Macro | Ast.Environment, namedArgumentsFallback?: readonly (string | null)[]): Record; + +/** + * Gobbles an argument of whose type is specified + * by `argSpec` starting at the position `startPos`. If an argument couldn't be found, + * `argument` will be `null`. + */ +export declare function gobbleArguments(nodes: Ast.Node[], argSpec: string | ArgSpecAst.Node[] | ArgumentParser, startPos?: number): { + args: Ast.Argument[]; + nodesRemoved: number; +}; + +/** + * Gobbles an argument of whose type is specified + * by `argSpec` starting at the position `startPos`. + * If an argument couldn't be found, `argument` will be `null`. + */ +export declare function gobbleSingleArgument(nodes: Ast.Node[], argSpec: ArgSpecAst.Node, startPos?: number): { + argument: Ast.Argument | null; + nodesRemoved: number; +}; + +declare type PluginOptions = { + macros: MacroInfoRecord; +} | undefined; + +/** + * Unified plugin to attach macro arguments to the macros specified via the `macros` + * option. + * + * @param macros An object whose keys are macro names and values contains information about the macro and its argument signature. + */ +export declare const unifiedLatexAttachMacroArguments: Plugin_2; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-arguments/index.js b/node_modules/@unified-latex/unified-latex-util-arguments/index.js new file mode 100644 index 0000000..5aa1213 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-arguments/index.js @@ -0,0 +1,405 @@ +import { arg } from "@unified-latex/unified-latex-builder"; +import { parse } from "@unified-latex/unified-latex-util-argspec"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { scan } from "@unified-latex/unified-latex-util-scan"; +import { updateRenderInfo } from "@unified-latex/unified-latex-util-render-info"; +import { visit } from "@unified-latex/unified-latex-util-visit"; +function gobbleSingleArgument(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "string" || !argSpec.type) { + throw new Error( + `argSpec must be an already-parsed argument specification, not "${JSON.stringify( + argSpec + )}"` + ); + } + let argument = null; + let currPos = startPos; + const gobbleWhitespace = argSpec.noLeadingWhitespace ? () => { + } : () => { + while (currPos < nodes.length) { + if (!match.whitespace(nodes[currPos])) { + break; + } + currPos++; + } + }; + const openMark = argSpec.openBrace || ""; + const closeMark = argSpec.closeBrace || ""; + const acceptGroup = (argSpec.type === "mandatory" || argSpec.type === "optional") && openMark === "{" && closeMark === "}"; + gobbleWhitespace(); + const currNode = nodes[currPos]; + if (currNode == null || match.comment(currNode) || match.parbreak(currNode)) { + const ret = { + argument, + nodesRemoved: 0 + }; + return ret; + } + switch (argSpec.type) { + case "mandatory": + if (acceptGroup) { + let content = [currNode]; + if (match.group(currNode)) { + content = currNode.content; + } + argument = arg(content, { + openMark, + closeMark + }); + currPos++; + break; + } else { + const bracePos2 = findBracePositions( + nodes, + currPos, + openMark, + closeMark + ); + if (bracePos2) { + argument = arg(nodes.slice(bracePos2[0] + 1, bracePos2[1]), { + openMark, + closeMark + }); + currPos = bracePos2[1] + 1; + break; + } + } + // NOTE: Fallthrough is on purpose. + // Matching a mandatory argument and an optional argument is the same for our purposes + // because we're not going to fail to parse because of a missing argument. + case "optional": + if (acceptGroup && match.group(currNode)) { + argument = arg(currNode.content, { + openMark, + closeMark + }); + currPos++; + break; + } + const bracePos = findBracePositions( + nodes, + currPos, + openMark, + closeMark + ); + if (bracePos) { + argument = arg(nodes.slice(bracePos[0] + 1, bracePos[1]), { + openMark, + closeMark + }); + currPos = bracePos[1] + 1; + break; + } + break; + case "optionalStar": + case "optionalToken": { + const bracePos2 = findBracePositions( + nodes, + currPos, + argSpec.type === "optionalStar" ? "*" : argSpec.token + ); + if (bracePos2) { + argument = arg(currNode, { openMark: "", closeMark: "" }); + currPos = bracePos2[0] + 1; + } + break; + } + case "until": { + if (argSpec.stopTokens.length > 1) { + console.warn( + `"until" matches with multi-token stop conditions are not yet implemented` + ); + break; + } + const rawToken = argSpec.stopTokens[0]; + const stopToken = rawToken === " " ? { type: "whitespace" } : rawToken; + let bracePos2 = findBracePositions( + nodes, + startPos, + void 0, + stopToken + ); + if (!bracePos2) { + break; + } + argument = arg(nodes.slice(startPos, bracePos2[1]), { + openMark: "", + closeMark: rawToken + }); + currPos = bracePos2[1]; + if (currPos < nodes.length) { + currPos++; + } + break; + } + case "embellishment": { + for (const token of argSpec.embellishmentTokens) { + const bracePos2 = findBracePositions(nodes, currPos, token); + if (!bracePos2) { + continue; + } + let argNode = nodes[bracePos2[0] + 1]; + argument = arg( + match.group(argNode) ? argNode.content : argNode, + { + openMark: token, + closeMark: "" + } + ); + currPos = bracePos2[1] + 1; + break; + } + break; + } + default: + console.warn( + `Don't know how to find an argument of argspec type "${argSpec.type}"` + ); + } + const nodesRemoved = argument ? currPos - startPos : 0; + nodes.splice(startPos, nodesRemoved); + return { argument, nodesRemoved }; +} +function cloneStringNode(node, content) { + return Object.assign({}, node, { content }); +} +function findBracePositions(nodes, startPos, openMark, closeMark) { + const currNode = nodes[startPos]; + let openMarkPos = startPos; + let closeMarkPos = startPos; + if (openMark) { + if (!match.anyString(currNode)) { + return; + } + const nodeContent = currNode.content; + if (!nodeContent.startsWith(openMark)) { + return; + } + openMarkPos = startPos; + if (currNode.content.length > openMark.length) { + const nodeContent2 = currNode.content; + currNode.content = openMark; + nodes.splice( + openMarkPos + 1, + 0, + cloneStringNode(currNode, nodeContent2.slice(openMark.length)) + ); + } + closeMarkPos = openMarkPos + 1; + } + if (!closeMark) { + const argNode = nodes[closeMarkPos]; + if (!argNode) { + return; + } + if (match.anyString(argNode) && argNode.content.length > 1) { + const argContent = argNode.content; + argNode.content = argContent[0]; + nodes.splice( + closeMarkPos + 1, + 0, + cloneStringNode(argNode, argContent.slice(1)) + ); + } + return [openMarkPos, closeMarkPos]; + } + closeMarkPos = scan(nodes, closeMark, { + startIndex: closeMarkPos, + allowSubstringMatches: true + }); + if (closeMarkPos === null) { + return; + } + const closingNode = nodes[closeMarkPos]; + if (match.anyString(closingNode) && typeof closeMark === "string") { + const closingNodeContent = closingNode.content; + let closeMarkIndex = closingNodeContent.indexOf(closeMark); + if (closingNodeContent.length > closeMark.length) { + closingNode.content = closeMark; + const prev = closingNodeContent.slice(0, closeMarkIndex); + const next = closingNodeContent.slice( + closeMarkIndex + closeMark.length + ); + if (prev) { + nodes.splice( + closeMarkPos, + 0, + cloneStringNode(closingNode, prev) + ); + closeMarkPos++; + } + if (next) { + nodes.splice( + closeMarkPos + 1, + 0, + cloneStringNode(closingNode, next) + ); + } + } + } + return [openMarkPos, closeMarkPos]; +} +function gobbleArguments(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "function") { + return argSpec(nodes, startPos); + } + if (typeof argSpec === "string") { + argSpec = parse(argSpec); + } + const args = []; + let nodesRemoved = 0; + for (const spec of argSpec) { + if (spec.type === "embellishment") { + const remainingTokens = new Set(spec.embellishmentTokens); + const argForToken = Object.fromEntries( + spec.embellishmentTokens.map((t, i) => { + var _a; + const defaultArg = "defaultArg" in spec ? (_a = spec.defaultArg) == null ? void 0 : _a[i] : void 0; + return [t, emptyArg(defaultArg)]; + }) + ); + let { argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + embellishmentSpec(remainingTokens), + startPos + ); + while (argument) { + const token = argument.openMark; + remainingTokens.delete(token); + argForToken[token] = argument; + nodesRemoved += removed; + const newSpec = embellishmentSpec(remainingTokens); + ({ argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + newSpec, + startPos + )); + } + args.push(...spec.embellishmentTokens.map((t) => argForToken[t])); + } else { + const { argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + spec, + startPos + ); + const defaultArg = "defaultArg" in spec ? spec.defaultArg : void 0; + args.push(argument || emptyArg(defaultArg)); + nodesRemoved += removed; + } + } + return { args, nodesRemoved }; +} +function embellishmentSpec(tokens) { + return { + type: "embellishment", + embellishmentTokens: [...tokens] + }; +} +function emptyArg(defaultArg) { + const ret = arg([], { openMark: "", closeMark: "" }); + if (defaultArg != null) { + updateRenderInfo(ret, { defaultArg }); + } + return ret; +} +function attachMacroArgsInArray(nodes, macros) { + let currIndex; + const isRelevantMacro = match.createMacroMatcher(macros); + function gobbleUntilMacro() { + while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) { + currIndex--; + } + } + currIndex = nodes.length - 1; + while (currIndex >= 0) { + gobbleUntilMacro(); + if (currIndex < 0) { + return; + } + const macroIndex = currIndex; + const macro = nodes[macroIndex]; + const macroName = macro.content; + const macroInfo = macros[macroName]; + updateRenderInfo(macro, macroInfo.renderInfo); + const signatureOrParser = macroInfo.argumentParser || macroInfo.signature; + if (signatureOrParser == null) { + currIndex--; + continue; + } + if (macro.args != null) { + currIndex = macroIndex - 1; + continue; + } + currIndex++; + const { args } = gobbleArguments(nodes, signatureOrParser, currIndex); + macro.args = args; + currIndex = macroIndex - 1; + } +} +function attachMacroArgs(tree, macros) { + visit( + tree, + (nodes) => { + attachMacroArgsInArray(nodes, macros); + }, + { includeArrays: true, test: Array.isArray } + ); +} +const unifiedLatexAttachMacroArguments = function unifiedLatexAttachMacroArguments2(options) { + return (tree) => { + const { macros = {} } = options || {}; + if (Object.keys(macros).length === 0) { + console.warn( + "Attempting to attach macro arguments but no macros are specified." + ); + } + visit( + tree, + (nodes) => { + attachMacroArgsInArray(nodes, macros); + }, + { includeArrays: true, test: Array.isArray } + ); + }; +}; +function getArgsContent(node) { + if (!Array.isArray(node.args)) { + return []; + } + return node.args.map((arg2) => { + if (arg2.openMark === "" && arg2.content.length === 0) { + return null; + } + return arg2.content; + }); +} +function getNamedArgsContent(node, namedArgumentsFallback = []) { + var _a; + const names = ((_a = node._renderInfo) == null ? void 0 : _a.namedArguments) || namedArgumentsFallback; + if (!Array.isArray(node.args) || !Array.isArray(names) || names.length === 0) { + return {}; + } + const ret = {}; + node.args.forEach((arg2, i) => { + const name = names[i]; + if (name == null) { + return; + } + let val = arg2.content; + if (arg2.openMark === "" && arg2.content.length === 0) { + val = null; + } + ret[name] = val; + }); + return ret; +} +export { + attachMacroArgs, + attachMacroArgsInArray, + getArgsContent, + getNamedArgsContent, + gobbleArguments, + gobbleSingleArgument, + unifiedLatexAttachMacroArguments +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-arguments/index.js.map b/node_modules/@unified-latex/unified-latex-util-arguments/index.js.map new file mode 100644 index 0000000..b6f7b2e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-arguments/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/gobble-single-argument.ts","../libs/gobble-arguments.ts","../libs/attach-arguments.ts","../libs/unified-latex-attach-macro-arguments.ts","../libs/get-args-content.ts"],"sourcesContent":["/* eslint-disable no-fallthrough */\nimport { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n printRaw,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\n\n/**\n * Gobbles an argument of whose type is specified\n * by `argSpec` starting at the position `startPos`.\n * If an argument couldn't be found, `argument` will be `null`.\n */\nexport function gobbleSingleArgument(\n nodes: Ast.Node[],\n argSpec: ArgSpec.Node,\n startPos = 0\n): {\n argument: Ast.Argument | null;\n nodesRemoved: number;\n} {\n if (typeof argSpec === \"string\" || !argSpec.type) {\n throw new Error(\n `argSpec must be an already-parsed argument specification, not \"${JSON.stringify(\n argSpec\n )}\"`\n );\n }\n\n let argument: Ast.Argument | null = null;\n\n let currPos = startPos;\n\n // Gobble whitespace from `currPos` onward, updating `currPos`.\n // If `argSpec` specifies leading whitespace is not allowed,\n // this function does nothing.\n const gobbleWhitespace = (argSpec as ArgSpec.LeadingWhitespace)\n .noLeadingWhitespace\n ? () => {}\n : () => {\n while (currPos < nodes.length) {\n if (!match.whitespace(nodes[currPos])) {\n break;\n }\n currPos++;\n }\n };\n\n const openMark: string = (argSpec as any).openBrace || \"\";\n const closeMark: string = (argSpec as any).closeBrace || \"\";\n\n // Only mandatory arguments can be wrapped in {...}.\n // Since we already parse such things as groups, we need to\n // check the open and closing symbols to see if we allow for\n // groups to be accepted as arguments\n const acceptGroup =\n (argSpec.type === \"mandatory\" || argSpec.type === \"optional\") &&\n openMark === \"{\" &&\n closeMark === \"}\";\n\n // Do the actual matching\n gobbleWhitespace();\n const currNode = nodes[currPos];\n if (\n currNode == null ||\n match.comment(currNode) ||\n match.parbreak(currNode)\n ) {\n const ret: { argument: null; nodesRemoved: number } = {\n argument,\n nodesRemoved: 0,\n };\n return ret;\n }\n\n switch (argSpec.type) {\n case \"mandatory\":\n if (acceptGroup) {\n // We have already gobbled whitespace, so at this point, `currNode`\n // is either an openMark or we don't have an optional argument.\n let content: Ast.Node[] = [currNode];\n if (match.group(currNode)) {\n // Unwrap a group if there is one.\n content = currNode.content;\n }\n argument = arg(content, {\n openMark,\n closeMark,\n });\n currPos++;\n break;\n } else {\n const bracePos = findBracePositions(\n nodes,\n currPos,\n openMark,\n closeMark\n );\n if (bracePos) {\n argument = arg(nodes.slice(bracePos[0] + 1, bracePos[1]), {\n openMark,\n closeMark,\n });\n currPos = bracePos[1] + 1;\n break;\n }\n }\n // NOTE: Fallthrough is on purpose.\n // Matching a mandatory argument and an optional argument is the same for our purposes\n // because we're not going to fail to parse because of a missing argument.\n case \"optional\":\n // It is possible that an optional argument accepts a group if its open/close braces are `{}`\n if (acceptGroup && match.group(currNode)) {\n argument = arg(currNode.content, {\n openMark,\n closeMark,\n });\n currPos++;\n break;\n }\n // If we're here, we have custom braces to match\n const bracePos = findBracePositions(\n nodes,\n currPos,\n openMark,\n closeMark\n );\n if (bracePos) {\n argument = arg(nodes.slice(bracePos[0] + 1, bracePos[1]), {\n openMark,\n closeMark,\n });\n currPos = bracePos[1] + 1;\n break;\n }\n break;\n case \"optionalStar\":\n case \"optionalToken\": {\n const bracePos = findBracePositions(\n nodes,\n currPos,\n argSpec.type === \"optionalStar\" ? \"*\" : argSpec.token\n );\n if (bracePos) {\n argument = arg(currNode, { openMark: \"\", closeMark: \"\" });\n // Instead of `closeMarkPos` returned from findBracePositions,\n // one should use `openMarkPos + ` because there's no argument\n currPos = bracePos[0] + 1;\n }\n break;\n }\n case \"until\": {\n if (argSpec.stopTokens.length > 1) {\n console.warn(\n `\"until\" matches with multi-token stop conditions are not yet implemented`\n );\n break;\n }\n const rawToken = argSpec.stopTokens[0];\n const stopToken: string | Ast.Whitespace =\n rawToken === \" \" ? { type: \"whitespace\" } : rawToken;\n\n let bracePos = findBracePositions(\n nodes,\n startPos,\n undefined,\n stopToken\n );\n // If the corresponding token is not found, eat nothing;\n if (!bracePos) {\n break;\n }\n\n argument = arg(nodes.slice(startPos, bracePos[1]), {\n openMark: \"\",\n closeMark: rawToken,\n });\n currPos = bracePos[1];\n if (currPos < nodes.length) {\n currPos++;\n }\n break;\n }\n case \"embellishment\": {\n for (const token of argSpec.embellishmentTokens) {\n const bracePos = findBracePositions(nodes, currPos, token);\n if (!bracePos) {\n continue;\n }\n let argNode = nodes[bracePos[0] + 1];\n argument = arg(\n match.group(argNode) ? argNode.content : argNode,\n {\n openMark: token,\n closeMark: \"\",\n }\n );\n currPos = bracePos[1] + 1;\n break;\n }\n break;\n }\n default:\n console.warn(\n `Don't know how to find an argument of argspec type \"${argSpec.type}\"`\n );\n }\n\n // `currPos` is has already stepped past any whitespace. However,\n // if we did not consume an argument, we don't want to consume the whitespace.\n const nodesRemoved = argument ? currPos - startPos : 0;\n nodes.splice(startPos, nodesRemoved);\n return { argument, nodesRemoved };\n}\n\nfunction cloneStringNode(node: Ast.String, content: string): Ast.String {\n return Object.assign({}, node, { content });\n}\n\n/**\n * Find the position of the open brace and the closing brace.\n * Returns undefined if the brace isn't found.\n * This may mutate `nodes`, if braces are not a kind of characters that are\n * always parsed as a separate token\n */\nfunction findBracePositions(\n nodes: Ast.Node[],\n startPos: number,\n openMark?: string,\n closeMark?: string | Ast.Node\n): [number, number] | undefined {\n const currNode = nodes[startPos];\n let openMarkPos = startPos;\n let closeMarkPos: number | null = startPos;\n if (openMark) {\n if (!match.anyString(currNode)) {\n return;\n }\n const nodeContent = currNode.content;\n // The first node we encounter must contain the opening brace.\n if (!nodeContent.startsWith(openMark)) {\n return;\n }\n openMarkPos = startPos;\n if (currNode.content.length > openMark.length) {\n const nodeContent = currNode.content;\n currNode.content = openMark;\n nodes.splice(\n openMarkPos + 1,\n 0,\n cloneStringNode(currNode, nodeContent.slice(openMark.length))\n );\n }\n closeMarkPos = openMarkPos + 1;\n }\n if (!closeMark) {\n // In such a case, the token immediately preceding the opening brace\n // will be treated as an argument. If the next token is a string node,\n // only its first character is picked up.\n const argNode = nodes[closeMarkPos];\n if (!argNode) {\n return;\n }\n if (match.anyString(argNode) && argNode.content.length > 1) {\n const argContent = argNode.content;\n argNode.content = argContent[0];\n nodes.splice(\n closeMarkPos + 1,\n 0,\n cloneStringNode(argNode, argContent.slice(1))\n );\n }\n return [openMarkPos, closeMarkPos];\n }\n // scan for closing marks\n closeMarkPos = scan(nodes, closeMark, {\n startIndex: closeMarkPos,\n allowSubstringMatches: true,\n });\n if (closeMarkPos === null) {\n return;\n }\n const closingNode = nodes[closeMarkPos];\n if (match.anyString(closingNode) && typeof closeMark === \"string\") {\n const closingNodeContent = closingNode.content;\n let closeMarkIndex = closingNodeContent.indexOf(closeMark);\n if (closingNodeContent.length > closeMark.length) {\n closingNode.content = closeMark;\n const prev = closingNodeContent.slice(0, closeMarkIndex);\n const next = closingNodeContent.slice(\n closeMarkIndex + closeMark.length\n );\n if (prev) {\n nodes.splice(\n closeMarkPos,\n 0,\n cloneStringNode(closingNode, prev)\n );\n closeMarkPos++;\n }\n if (next) {\n nodes.splice(\n closeMarkPos + 1,\n 0,\n cloneStringNode(closingNode, next)\n );\n }\n }\n }\n return [openMarkPos, closeMarkPos];\n}\n","import { arg } from \"@unified-latex/unified-latex-builder\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { ArgumentParser } from \"@unified-latex/unified-latex-types\";\nimport {\n ArgSpecAst as ArgSpec,\n parse as parseArgspec,\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { gobbleSingleArgument } from \"./gobble-single-argument\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\n\n/**\n * Gobbles an argument of whose type is specified\n * by `argSpec` starting at the position `startPos`. If an argument couldn't be found,\n * `argument` will be `null`.\n */\nexport function gobbleArguments(\n nodes: Ast.Node[],\n argSpec: string | ArgSpec.Node[] | ArgumentParser,\n startPos = 0\n): {\n args: Ast.Argument[];\n nodesRemoved: number;\n} {\n if (typeof argSpec === \"function\") {\n return argSpec(nodes, startPos);\n }\n\n if (typeof argSpec === \"string\") {\n argSpec = parseArgspec(argSpec);\n }\n\n const args: Ast.Argument[] = [];\n let nodesRemoved = 0;\n\n for (const spec of argSpec) {\n if (spec.type === \"embellishment\") {\n // We need special behavior for embellishment argspecs.\n // Because an embellishment argspec specifies more than one argument,\n // we need to keep gobbling arguments until we've got them all.\n const remainingTokens = new Set(spec.embellishmentTokens);\n const argForToken = Object.fromEntries(\n spec.embellishmentTokens.map((t, i) => {\n // For empty arguments, we also store their default.\n const defaultArg =\n \"defaultArg\" in spec ? spec.defaultArg?.[i] : undefined;\n return [t, emptyArg(defaultArg)];\n })\n );\n\n let { argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n embellishmentSpec(remainingTokens),\n startPos\n );\n while (argument) {\n const token = argument.openMark;\n remainingTokens.delete(token);\n argForToken[token] = argument;\n nodesRemoved += removed;\n const newSpec = embellishmentSpec(remainingTokens);\n ({ argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n newSpec,\n startPos\n ));\n }\n\n args.push(...spec.embellishmentTokens.map((t) => argForToken[t]));\n } else {\n const { argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n spec,\n startPos\n );\n // For empty arguments, we also store their default.\n const defaultArg =\n \"defaultArg\" in spec ? spec.defaultArg : undefined;\n args.push(argument || emptyArg(defaultArg));\n nodesRemoved += removed;\n }\n }\n\n return { args, nodesRemoved };\n}\n\n/**\n * Create an embellishment argspec from a set of tokens.\n */\nfunction embellishmentSpec(tokens: Set): ArgSpec.Embellishment {\n return {\n type: \"embellishment\",\n embellishmentTokens: [...tokens],\n };\n}\n\n/**\n * Create an empty argument.\n */\nfunction emptyArg(defaultArg?: string): Ast.Argument {\n const ret = arg([], { openMark: \"\", closeMark: \"\" });\n if (defaultArg != null) {\n updateRenderInfo(ret, { defaultArg });\n }\n return ret;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { MacroInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { gobbleArguments } from \"./gobble-arguments\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Search (in a right-associative way) through the array for instances of\n * `macros` and attach arguments to the macro. Argument signatures are\n * specified by `macros[].signature`.\n *\n * Info stored in `macros[].renderInfo` will be attached to the node\n * with attribute `_renderInfo`.\n */\nexport function attachMacroArgsInArray(\n nodes: Ast.Node[],\n macros: MacroInfoRecord\n): void {\n // Some preliminaries that are only used if `ast` is an array.\n let currIndex: number;\n\n /**\n * Determine whether `node` matches one of the macros in `macros`.\n * Care is taken when matching because not all macros have\n * `\\` as their escape token.\n */\n const isRelevantMacro = match.createMacroMatcher(macros);\n\n function gobbleUntilMacro() {\n // Step backwards until we find the required macro\n while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) {\n currIndex--;\n }\n }\n\n // Search for an occurrence of any of the macros `macroName` and its arguments.\n // Some macros are right-associative, so we should start searching from\n // the right\n currIndex = nodes.length - 1;\n while (currIndex >= 0) {\n gobbleUntilMacro();\n if (currIndex < 0) {\n // We didn't find an occurrence of the macro\n return;\n }\n\n // Store the currIndex, which is where the macro is. Start searching\n // for its arguments at the next index.\n const macroIndex = currIndex;\n const macro = nodes[macroIndex] as Ast.Macro;\n const macroName = macro.content;\n const macroInfo = macros[macroName];\n\n // Add `._renderInfo` if we have any\n updateRenderInfo(macro, macroInfo.renderInfo);\n\n const signatureOrParser =\n macroInfo.argumentParser || macroInfo.signature;\n\n // If the macro has no signature, it shouldn't consume any arguments. Just move along.\n // Note: It is important that this happens *after* `updateRenderInfo` is called, since\n // we still want to update the render info even if there are no args.\n if (signatureOrParser == null) {\n currIndex--;\n continue;\n }\n\n // We don't want to search for macro arguments if we already\n // found them. If the macro has arguments, we assume that\n // they've already been attached\n if (macro.args != null) {\n currIndex = macroIndex - 1;\n continue;\n }\n\n // `currIndex` is the position of the macro. We want to start\n // looking for the arguments right after the macro\n currIndex++;\n const { args } = gobbleArguments(nodes, signatureOrParser, currIndex);\n macro.args = args;\n // After we've gobbled the arguments, set\n // ourselves one space before the macro so we can continue.\n currIndex = macroIndex - 1;\n }\n}\n\n/**\n * Recursively search for and attach the arguments for a\n * particular macro to its AST node. `macros` should\n * contain a `signature` property which specifies the arguments\n * signature in xparse syntax.\n */\nexport function attachMacroArgs(tree: Ast.Ast, macros: MacroInfoRecord) {\n visit(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n","import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { MacroInfoRecord } from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { attachMacroArgsInArray } from \"./attach-arguments\";\n\ntype PluginOptions = { macros: MacroInfoRecord } | undefined;\n\n/**\n * Unified plugin to attach macro arguments to the macros specified via the `macros`\n * option.\n *\n * @param macros An object whose keys are macro names and values contains information about the macro and its argument signature.\n */\nexport const unifiedLatexAttachMacroArguments: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexAttachMacroArguments(options) {\n return (tree) => {\n const { macros = {} } = options || {};\n if (Object.keys(macros).length === 0) {\n console.warn(\n \"Attempting to attach macro arguments but no macros are specified.\"\n );\n }\n visit(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\n","import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Returns the content of `args` for a macro or environment as an array. If an argument\n * was omitted (e.g., because it was an optional arg that wasn't included), then `null` is returned.\n */\nexport function getArgsContent(\n node: Ast.Macro | Ast.Environment\n): (Ast.Node[] | null)[] {\n if (!Array.isArray(node.args)) {\n return [];\n }\n\n return node.args.map((arg) => {\n if (arg.openMark === \"\" && arg.content.length === 0) {\n return null;\n }\n return arg.content;\n });\n}\n\n/**\n * Returns the content of `args` for a macro or environment as an object whose keys are the \"names\"\n * of each argument. These names of the arguments must be specified in the `_renderInfo` prop. If `_renderInfo`\n * does not contain a `namedArguments` array, then an empty object will be returned.\n *\n * @namedArgumentsFallback - If `_renderInfo.namedArguments` is not provided, `namedArgumentsFallback` is ued.\n */\nexport function getNamedArgsContent(\n node: Ast.Macro | Ast.Environment,\n namedArgumentsFallback: readonly (string | null)[] = []\n): Record {\n const names = node._renderInfo?.namedArguments || namedArgumentsFallback;\n\n if (\n !Array.isArray(node.args) ||\n !Array.isArray(names) ||\n names.length === 0\n ) {\n return {};\n }\n const ret: Record = {};\n\n node.args.forEach((arg, i) => {\n const name = names[i];\n if (name == null) {\n // If a null name was given, it shouldn't be listed as a named argument.\n return;\n }\n let val: Ast.Node[] | null = arg.content;\n if (arg.openMark === \"\" && arg.content.length === 0) {\n val = null;\n }\n ret[name] = val;\n });\n\n return ret;\n}\n"],"names":["bracePos","nodeContent","parseArgspec","unifiedLatexAttachMacroArguments","arg"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-arguments/package.json b/node_modules/@unified-latex/unified-latex-util-arguments/package.json new file mode 100644 index 0000000..f00e1c8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-arguments/package.json @@ -0,0 +1,58 @@ +{ + "name": "@unified-latex/unified-latex-util-arguments", + "version": "1.8.2", + "description": "Tools for manipulating unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-scan": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-catcode/README.md b/node_modules/@unified-latex/unified-latex-util-catcode/README.md new file mode 100644 index 0000000..5a325b3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-catcode/README.md @@ -0,0 +1,162 @@ + + + + +# unified-latex-util-catcode + +## What is this? + +Functions to identify regions of a `unified-latex` Abstract Syntax Tree (AST) that need to be reparsed because of different +category codes. For example, regions between `\makeatletter` and `\makeatother`. + +## When should I use this? + +If you need to identify regions of the AST that need to be reparsed. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-catcode +``` + +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 + +## `findExpl3AndAtLetterRegionsInArray(tree)` + +Find regions between `\ExplSyntaxOn...\ExplSyntaxOff` and `\makeatletter...\makeatother`. +Returns an object containing regions where one or both syntax's apply. + +```typescript +function findExpl3AndAtLetterRegionsInArray(tree: Ast.Node[]): { + explOnly: Region[]; + atLetterOnly: Region[]; + both: Region[]; +}; +``` + +**Parameters** + +| Param | Type | +| :---- | :----------- | +| tree | `Ast.Node[]` | + +## `findRegionInArray(tree, start, end)` + +Find all contiguous segments in the array that are between start and end blocks. +The `start` and `end` are functions that determine when a region starts and ends. + +```typescript +function findRegionInArray( + tree: Ast.Node[], + start: (node: Ast.Node) => boolean, + end: (node: Ast.Node) => boolean +): Region[]; +``` + +**Parameters** + +| Param | Type | +| :---- | :---------------------------- | +| tree | `Ast.Node[]` | +| start | `(node: Ast.Node) => boolean` | +| end | `(node: Ast.Node) => boolean` | + +## `hasReparsableMacroNames(tree, allowedTokens)` + +Checks whether `tree` has a macro that could be reparsed given the `allowedTokens` but +do not do any reparsing. This function can be used in auto-detection schemes to determine if +macro names should actually be reparsed. + +```typescript +function hasReparsableMacroNames( + tree: Ast.Ast, + allowedTokens: string | Set +): boolean; +``` + +**Parameters** + +| Param | Type | +| :------------ | :---------------------- | +| tree | `Ast.Ast` | +| allowedTokens | `string \| Set` | + +## `hasReparsableMacroNamesInArray(tree, allowedTokens)` + +Checks whether the array has a macro that could be reparsed given the `allowedTokens` but +do not do any reparsing. This function can be used in auto-detection schemes to determine if +macro names should actually be reparsed. + +```typescript +function hasReparsableMacroNamesInArray( + tree: Ast.Node[], + allowedTokens: Set +): boolean; +``` + +**Parameters** + +| Param | Type | +| :------------ | :------------ | +| tree | `Ast.Node[]` | +| allowedTokens | `Set` | + +## `reparseExpl3AndAtLetterRegions(tree)` + +Find regions between `\ExplSyntaxOn...\ExplSyntaxOff` and `\makeatletter...\makeatother` +and reparse their contents so that the relevant characters (e.g., `@`, `_`, and `:`) become +part of the macro names. + +```typescript +function reparseExpl3AndAtLetterRegions(tree: Ast.Ast): void; +``` + +**Parameters** + +| Param | Type | +| :---- | :-------- | +| tree | `Ast.Ast` | + +## `reparseMacroNames(tree, allowedTokens)` + +Reparses all macro names so that they may optionally include characters listed in `allowedTokens`. +This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though +`_` is normally stops the parsing for a macro name). Thus, a macro `\foo_bar:Nn` would be parsed as having +the name `foo_bar:Nn` rather than as `foo` followed by the strings `_`, `bar`, `:`, `Nn`. + +```typescript +function reparseMacroNames( + tree: Ast.Ast, + allowedTokens: string | Set +): void; +``` + +**Parameters** + +| Param | Type | +| :------------ | :---------------------- | +| tree | `Ast.Ast` | +| allowedTokens | `string \| Set` | + +## `reparseMacroNamesInArray(tree, allowedTokens)` + +Reparses all macro names in the array so that they may optionally include characters listed in `allowedTokens`. +This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though +`_` is normally stops the parsing for a macro name). + +```typescript +function reparseMacroNamesInArray( + tree: Ast.Node[], + allowedTokens: Set +): void; +``` + +**Parameters** + +| Param | Type | +| :------------ | :------------ | +| tree | `Ast.Node[]` | +| allowedTokens | `Set` | diff --git a/node_modules/@unified-latex/unified-latex-util-catcode/index.cjs b/node_modules/@unified-latex/unified-latex-util-catcode/index.cjs new file mode 100644 index 0000000..e79b309 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-catcode/index.cjs @@ -0,0 +1,295 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +function findRegionInArray(tree, start, end) { + const ret = []; + let currRegion = { start: void 0, end: tree.length }; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (start(node)) { + currRegion.start = i; + } + if (end(node)) { + currRegion.end = i + 1; + ret.push(currRegion); + currRegion = { start: void 0, end: tree.length }; + } + } + if (currRegion.start != null) { + ret.push(currRegion); + } + return ret; +} +function refineRegions(regions) { + const _regions = [...regions]; + _regions.sort((a, b) => a.start - b.start); + const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end])); + const cutPoints = Array.from(cutPointsSet); + cutPoints.sort((a, b) => a - b); + const retRegions = []; + const retRegionsContainedIn = []; + let seekIndex = 0; + for (let i = 0; i < cutPoints.length - 1; i++) { + const start = cutPoints[i]; + const end = cutPoints[i + 1]; + const region = { start, end }; + const regionContainedIn = /* @__PURE__ */ new Set(); + let encounteredEndPastStart = false; + for (let j = seekIndex; j < _regions.length; j++) { + const superRegion = _regions[j]; + if (superRegion.end >= region.start) { + encounteredEndPastStart = true; + } + if (!encounteredEndPastStart && superRegion.end < region.start) { + seekIndex = j + 1; + continue; + } + if (superRegion.start > end) { + break; + } + if (superRegion.start <= region.start && superRegion.end >= region.end) { + encounteredEndPastStart = true; + regionContainedIn.add(superRegion); + } + } + if (regionContainedIn.size > 0) { + retRegions.push(region); + retRegionsContainedIn.push(regionContainedIn); + } + } + return { regions: retRegions, regionsContainedIn: retRegionsContainedIn }; +} +function splitByRegions(array, regionsRecord) { + const ret = []; + const indices = [0, array.length]; + const reverseMap = {}; + for (const [key, records] of Object.entries(regionsRecord)) { + indices.push( + ...records.flatMap((r) => { + reverseMap["" + [r.start, r.end]] = key; + return [r.start, r.end]; + }) + ); + } + indices.sort((a, b) => a - b); + for (let i = 0; i < indices.length - 1; i++) { + const start = indices[i]; + const end = indices[i + 1]; + if (start === end) { + continue; + } + const regionKey = reverseMap["" + [start, end]]; + ret.push([regionKey || null, array.slice(start, end)]); + } + return ret; +} +function escapeRegExp(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function buildWordRegex(allowedSet) { + const regexpStr = `^(${["\\p{L}"].concat(Array.from(allowedSet).map(escapeRegExp)).join("|")})*`; + return new RegExp(regexpStr, "u"); +} +function hasReparsableMacroNamesInArray(tree, allowedTokens) { + for (let i = 0; i < tree.length; i++) { + const macro = tree[i]; + const string = tree[i + 1]; + if (unifiedLatexUtilMatch.match.anyMacro(macro) && unifiedLatexUtilMatch.match.anyString(string)) { + if (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0))) { + return true; + } + } + } + return false; +} +function hasReparsableMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + let ret = false; + unifiedLatexUtilVisit.visit( + tree, + (nodes) => { + if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) { + ret = true; + return unifiedLatexUtilVisit.EXIT; + } + }, + { includeArrays: true, test: Array.isArray } + ); + return ret; +} +function reparseMacroNamesInArray(tree, allowedTokens) { + var _a, _b, _c; + const regex = buildWordRegex(allowedTokens); + let i = 0; + while (i < tree.length) { + const macro = tree[i]; + const string = tree[i + 1]; + if (unifiedLatexUtilMatch.match.anyMacro(macro) && // The _^ macros in math mode should not be extended no-matter what; + // So we check to make sure that the macro we're dealing with has the default escape token. + (macro.escapeToken == null || macro.escapeToken === "\\") && unifiedLatexUtilMatch.match.anyString(string) && // There are two options. Either the macro ends with the special character, + // e.g. `\@foo` or the special character starts the next string, e.g. `\foo@`. + (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0)))) { + const match2 = string.content.match(regex); + const takeable = match2 ? match2[0] : ""; + if (takeable.length > 0) { + if (takeable.length === string.content.length) { + macro.content += string.content; + tree.splice(i + 1, 1); + if (macro.position && ((_a = string.position) == null ? void 0 : _a.end)) { + macro.position.end = string.position.end; + } + } else { + macro.content += takeable; + string.content = string.content.slice(takeable.length); + if ((_b = macro.position) == null ? void 0 : _b.end) { + macro.position.end.offset += takeable.length; + macro.position.end.column += takeable.length; + } + if ((_c = string.position) == null ? void 0 : _c.start) { + string.position.start.offset += takeable.length; + string.position.start.column += takeable.length; + } + } + } else { + i++; + } + } else { + ++i; + } + } +} +function reparseMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + unifiedLatexUtilVisit.visit( + tree, + (nodes) => { + reparseMacroNamesInArray(nodes, _allowedTokens); + }, + { includeArrays: true, test: Array.isArray } + ); +} +const expl3Find = { + start: unifiedLatexUtilMatch.match.createMacroMatcher(["ExplSyntaxOn"]), + end: unifiedLatexUtilMatch.match.createMacroMatcher(["ExplSyntaxOff"]) +}; +const atLetterFind = { + start: unifiedLatexUtilMatch.match.createMacroMatcher(["makeatletter"]), + end: unifiedLatexUtilMatch.match.createMacroMatcher(["makeatother"]) +}; +function findExpl3AndAtLetterRegionsInArray(tree) { + const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end); + const atLetter = findRegionInArray( + tree, + atLetterFind.start, + atLetterFind.end + ); + const regionMap = new Map([ + ...expl3.map((x) => [x, "expl"]), + ...atLetter.map((x) => [x, "atLetter"]) + ]); + const all = refineRegions([...expl3, ...atLetter]); + const ret = { + explOnly: [], + atLetterOnly: [], + both: [] + }; + for (let i = 0; i < all.regions.length; i++) { + const region = all.regions[i]; + const containedIn = all.regionsContainedIn[i]; + if (containedIn.size === 2) { + ret.both.push(region); + continue; + } + for (const v of containedIn.values()) { + if (regionMap.get(v) === "expl") { + ret.explOnly.push(region); + } + if (regionMap.get(v) === "atLetter") { + ret.atLetterOnly.push(region); + } + } + } + ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1); + ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1); + ret.both = ret.both.filter((r) => r.end - r.start > 1); + return ret; +} +const atLetterSet = /* @__PURE__ */ new Set(["@"]); +const explSet = /* @__PURE__ */ new Set(["_", ":"]); +const bothSet = /* @__PURE__ */ new Set(["_", ":", "@"]); +function reparseExpl3AndAtLetterRegions(tree) { + unifiedLatexUtilVisit.visit( + tree, + { + leave: (nodes) => { + const regions = findExpl3AndAtLetterRegionsInArray(nodes); + const totalNumRegions = regions.both.length + regions.atLetterOnly.length + regions.explOnly.length; + if (totalNumRegions === 0) { + return; + } + const splits = splitByRegions(nodes, regions); + const processed = []; + for (const [key, slice] of splits) { + switch (key) { + case null: + processed.push(...slice); + continue; + case "atLetterOnly": + reparseMacroNames(slice, atLetterSet); + processed.push(...slice); + continue; + case "explOnly": + reparseMacroNames(slice, explSet); + processed.push(...slice); + continue; + case "both": + reparseMacroNames(slice, bothSet); + processed.push(...slice); + continue; + default: + throw new Error( + `Unexpected case when splitting ${key}` + ); + } + } + nodes.length = 0; + nodes.push(...processed); + return unifiedLatexUtilVisit.SKIP; + } + }, + { includeArrays: true, test: Array.isArray } + ); +} +exports.findExpl3AndAtLetterRegionsInArray = findExpl3AndAtLetterRegionsInArray; +exports.findRegionInArray = findRegionInArray; +exports.hasReparsableMacroNames = hasReparsableMacroNames; +exports.hasReparsableMacroNamesInArray = hasReparsableMacroNamesInArray; +exports.reparseExpl3AndAtLetterRegions = reparseExpl3AndAtLetterRegions; +exports.reparseMacroNames = reparseMacroNames; +exports.reparseMacroNamesInArray = reparseMacroNamesInArray; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-catcode/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-catcode/index.cjs.map new file mode 100644 index 0000000..4250de2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-catcode/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/find-region.ts","../libs/regions.ts","../libs/reparse-macro-names.ts","../libs/special-regions.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { Region } from \"./regions\";\n\n/**\n * Find all contiguous segments in the array that are between start and end blocks.\n * The `start` and `end` are functions that determine when a region starts and ends.\n */\nexport function findRegionInArray(\n tree: Ast.Node[],\n start: (node: Ast.Node) => boolean,\n end: (node: Ast.Node) => boolean\n): Region[] {\n const ret: Region[] = [];\n let currRegion: Region = { start: undefined as any, end: tree.length };\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (start(node)) {\n currRegion.start = i;\n }\n if (end(node)) {\n currRegion.end = i + 1;\n ret.push(currRegion);\n currRegion = { start: undefined as any, end: tree.length };\n }\n }\n\n if (currRegion.start != null) {\n // Regions don't necessarily have to encounter an `end` to end.\n ret.push(currRegion);\n }\n return ret;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\n\nexport type Region = { start: number; end: number };\n\n/**\n * Given `regions`, a list of `Region`s (not necessarily ordered, possibly overlapping), return a list of in-order,\n * non-overlapping regions and a corresponding list containing a set of the original `Region`s that the new region\n * is a subset of.\n */\nexport function refineRegions(regions: Region[]): {\n regions: Region[];\n regionsContainedIn: Set[];\n} {\n const _regions = [...regions];\n _regions.sort((a, b) => a.start - b.start);\n const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end]));\n const cutPoints = Array.from(cutPointsSet);\n cutPoints.sort((a, b) => a - b);\n\n const retRegions: Region[] = [];\n const retRegionsContainedIn: Set[] = [];\n\n // We will be checking what regions we are completely contained in.\n // Because `_regions` is sorted by start, `seekIndex` will be incremented\n // by end, so that we don't do too much array testing.\n let seekIndex = 0;\n for (let i = 0; i < cutPoints.length - 1; i++) {\n const start = cutPoints[i];\n const end = cutPoints[i + 1];\n const region = { start, end };\n const regionContainedIn: Set = new Set();\n\n let encounteredEndPastStart = false;\n for (let j = seekIndex; j < _regions.length; j++) {\n const superRegion = _regions[j];\n if (superRegion.end >= region.start) {\n encounteredEndPastStart = true;\n }\n if (!encounteredEndPastStart && superRegion.end < region.start) {\n // In this case, the region (and all regions that came before)\n // end before the region we are testing, so we may safely skip past it\n // from here on out.\n seekIndex = j + 1;\n continue;\n }\n\n if (superRegion.start > end) {\n // Because `_regions` is sorted, we can stop here\n break;\n }\n if (\n superRegion.start <= region.start &&\n superRegion.end >= region.end\n ) {\n encounteredEndPastStart = true;\n regionContainedIn.add(superRegion);\n }\n }\n\n if (regionContainedIn.size > 0) {\n // We only count if we are contained in a subregion\n retRegions.push(region);\n retRegionsContainedIn.push(regionContainedIn);\n }\n }\n\n return { regions: retRegions, regionsContainedIn: retRegionsContainedIn };\n}\n\n/**\n * Split an array up into the disjoint regions specified by `regionRecord`.\n * Returned is a list of tuples, the first item being the key of `regionRecord` if there\n * was a corresponding region, or `null` if there was no corresponding region.\n *\n * This function assumes that the regions in `regionRecord` are disjoint and fully contained\n * within the bounds of `array`.\n */\nexport function splitByRegions<\n T,\n RegionRecord extends Record\n>(array: T[], regionsRecord: RegionRecord) {\n const ret: [keyof RegionRecord | null, T[]][] = [];\n\n const indices = [0, array.length];\n const reverseMap: Record = {};\n for (const [key, records] of Object.entries(regionsRecord)) {\n indices.push(\n ...records.flatMap((r) => {\n reverseMap[\"\" + [r.start, r.end]] = key;\n return [r.start, r.end];\n })\n );\n }\n indices.sort((a, b) => a - b);\n\n for (let i = 0; i < indices.length - 1; i++) {\n const start = indices[i];\n const end = indices[i + 1];\n if (start === end) {\n continue;\n }\n const regionKey = reverseMap[\"\" + [start, end]];\n\n ret.push([regionKey || null, array.slice(start, end)]);\n }\n\n return ret;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { EXIT, visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Escape a string so that it can be used to build a regular expression.\n *\n * From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n */\nfunction escapeRegExp(str: string) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n}\n\n/**\n * Build a regular expression that matches everything up to the first non-allowed symbol.\n */\nfunction buildWordRegex(allowedSet: Set): RegExp {\n // /\\p{L}/ matches all letters, including unicode letters. We join this with\n // everything allowed in our set to form a regexp like\n // /(\\p{L}|_|:)*/u\n // The `u` at the end allows unicode characters to be matched.\n const regexpStr = `^(${[\"\\\\p{L}\"]\n .concat(Array.from(allowedSet).map(escapeRegExp))\n .join(\"|\")})*`;\n return new RegExp(regexpStr, \"u\");\n}\n\n/**\n * Checks whether the array has a macro that could be reparsed given the `allowedTokens` but\n * do not do any reparsing. This function can be used in auto-detection schemes to determine if\n * macro names should actually be reparsed.\n */\nexport function hasReparsableMacroNamesInArray(\n tree: Ast.Node[],\n allowedTokens: Set\n): boolean {\n for (let i = 0; i < tree.length; i++) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (match.anyMacro(macro) && match.anyString(string)) {\n // There are two options. Either the macro ends with the special character,\n // e.g. `\\@foo` or the special character starts the next string, e.g. `\\foo@`.\n if (\n allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) ||\n allowedTokens.has(string.content.charAt(0))\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Checks whether `tree` has a macro that could be reparsed given the `allowedTokens` but\n * do not do any reparsing. This function can be used in auto-detection schemes to determine if\n * macro names should actually be reparsed.\n */\nexport function hasReparsableMacroNames(\n tree: Ast.Ast,\n allowedTokens: string | Set\n): boolean {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n // Recast so typescript doesn't complain\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n\n let ret = false;\n visit(\n tree,\n (nodes) => {\n if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) {\n ret = true;\n return EXIT;\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n return ret;\n}\n\n/**\n * Reparses all macro names in the array so that they may optionally include characters listed in `allowedTokens`.\n * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though\n * `_` is normally stops the parsing for a macro name).\n */\nexport function reparseMacroNamesInArray(\n tree: Ast.Node[],\n allowedTokens: Set\n) {\n const regex = buildWordRegex(allowedTokens);\n let i = 0;\n while (i < tree.length) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (\n match.anyMacro(macro) &&\n // The _^ macros in math mode should not be extended no-matter what;\n // So we check to make sure that the macro we're dealing with has the default escape token.\n (macro.escapeToken == null || macro.escapeToken === \"\\\\\") &&\n match.anyString(string) &&\n // There are two options. Either the macro ends with the special character,\n // e.g. `\\@foo` or the special character starts the next string, e.g. `\\foo@`.\n (allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) ||\n allowedTokens.has(string.content.charAt(0)))\n ) {\n // There might be a number somewhere in the string. If so, we should\n // break the string apart at that number\n const match = string.content.match(regex);\n const takeable = match ? match[0] : \"\";\n if (takeable.length > 0) {\n if (takeable.length === string.content.length) {\n // The whole string can be appended to the macro name\n macro.content += string.content;\n tree.splice(i + 1, 1);\n\n // Preserve the source location if available\n if (macro.position && string.position?.end) {\n macro.position.end = string.position.end;\n }\n } else {\n // Only part of the string can be appended to the macro name\n macro.content += takeable;\n string.content = string.content.slice(takeable.length);\n\n // Preserve the source location if available\n if (macro.position?.end) {\n macro.position.end.offset += takeable.length;\n macro.position.end.column += takeable.length;\n }\n if (string.position?.start) {\n string.position.start.offset += takeable.length;\n string.position.start.column += takeable.length;\n }\n }\n } else {\n i++;\n }\n } else {\n ++i;\n }\n }\n}\n\n/**\n * Reparses all macro names so that they may optionally include characters listed in `allowedTokens`.\n * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though\n * `_` is normally stops the parsing for a macro name). Thus, a macro `\\foo_bar:Nn` would be parsed as having\n * the name `foo_bar:Nn` rather than as `foo` followed by the strings `_`, `bar`, `:`, `Nn`.\n */\nexport function reparseMacroNames(\n tree: Ast.Ast,\n allowedTokens: string | Set\n) {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n // Recast so typescript doesn't complain\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n\n visit(\n tree,\n (nodes) => {\n reparseMacroNamesInArray(nodes, _allowedTokens);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { findRegionInArray } from \"./find-region\";\nimport { refineRegions, Region, splitByRegions } from \"./regions\";\nimport { SKIP, visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { reparseMacroNames } from \"./reparse-macro-names\";\n\nconst expl3Find = {\n start: match.createMacroMatcher([\"ExplSyntaxOn\"]),\n end: match.createMacroMatcher([\"ExplSyntaxOff\"]),\n};\nconst atLetterFind = {\n start: match.createMacroMatcher([\"makeatletter\"]),\n end: match.createMacroMatcher([\"makeatother\"]),\n};\n\n/**\n * Find regions between `\\ExplSyntaxOn...\\ExplSyntaxOff` and `\\makeatletter...\\makeatother`.\n * Returns an object containing regions where one or both syntax's apply.\n */\nexport function findExpl3AndAtLetterRegionsInArray(tree: Ast.Node[]): {\n explOnly: Region[];\n atLetterOnly: Region[];\n both: Region[];\n} {\n const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end);\n const atLetter = findRegionInArray(\n tree,\n atLetterFind.start,\n atLetterFind.end\n );\n\n const regionMap = new Map([\n ...(expl3.map((x) => [x, \"expl\"]) as [Region, \"expl\"][]),\n ...(atLetter.map((x) => [x, \"atLetter\"]) as [Region, \"atLetter\"][]),\n ]);\n const all = refineRegions([...expl3, ...atLetter]);\n\n const ret = {\n explOnly: [] as Region[],\n atLetterOnly: [] as Region[],\n both: [] as Region[],\n };\n\n for (let i = 0; i < all.regions.length; i++) {\n const region = all.regions[i];\n const containedIn = all.regionsContainedIn[i];\n if (containedIn.size === 2) {\n ret.both.push(region);\n continue;\n }\n for (const v of containedIn.values()) {\n if (regionMap.get(v) === \"expl\") {\n ret.explOnly.push(region);\n }\n if (regionMap.get(v) === \"atLetter\") {\n ret.atLetterOnly.push(region);\n }\n }\n }\n\n // Regions of size 1 only contain the starting/stopping macro, so they should be discarded\n ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1);\n ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1);\n ret.both = ret.both.filter((r) => r.end - r.start > 1);\n\n return ret;\n}\n\nconst atLetterSet = new Set([\"@\"]);\nconst explSet = new Set([\"_\", \":\"]);\nconst bothSet = new Set([\"_\", \":\", \"@\"]);\n\n/**\n * Find regions between `\\ExplSyntaxOn...\\ExplSyntaxOff` and `\\makeatletter...\\makeatother`\n * and reparse their contents so that the relevant characters (e.g., `@`, `_`, and `:`) become\n * part of the macro names.\n */\nexport function reparseExpl3AndAtLetterRegions(tree: Ast.Ast) {\n visit(\n tree,\n {\n leave: (nodes) => {\n const regions = findExpl3AndAtLetterRegionsInArray(nodes);\n // In all likelihood, we don't need to do any reparsing, so bail early here\n const totalNumRegions =\n regions.both.length +\n regions.atLetterOnly.length +\n regions.explOnly.length;\n if (totalNumRegions === 0) {\n return;\n }\n\n const splits = splitByRegions(nodes, regions);\n const processed: typeof nodes = [];\n for (const [key, slice] of splits) {\n switch (key) {\n case null:\n processed.push(...slice);\n continue;\n case \"atLetterOnly\":\n reparseMacroNames(slice, atLetterSet);\n processed.push(...slice);\n continue;\n case \"explOnly\":\n reparseMacroNames(slice, explSet);\n processed.push(...slice);\n continue;\n case \"both\":\n reparseMacroNames(slice, bothSet);\n processed.push(...slice);\n continue;\n default:\n throw new Error(\n `Unexpected case when splitting ${key}`\n );\n }\n }\n\n nodes.length = 0;\n nodes.push(...processed);\n return SKIP;\n },\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n"],"names":["match","visit","EXIT","SKIP"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-catcode/index.d.ts b/node_modules/@unified-latex/unified-latex-util-catcode/index.d.ts new file mode 100644 index 0000000..ddf03cb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-catcode/index.d.ts @@ -0,0 +1,60 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +/** + * Find regions between `\ExplSyntaxOn...\ExplSyntaxOff` and `\makeatletter...\makeatother`. + * Returns an object containing regions where one or both syntax's apply. + */ +export declare function findExpl3AndAtLetterRegionsInArray(tree: Ast.Node[]): { + explOnly: Region[]; + atLetterOnly: Region[]; + both: Region[]; +}; + +/** + * Find all contiguous segments in the array that are between start and end blocks. + * The `start` and `end` are functions that determine when a region starts and ends. + */ +export declare function findRegionInArray(tree: Ast.Node[], start: (node: Ast.Node) => boolean, end: (node: Ast.Node) => boolean): Region[]; + +/** + * Checks whether `tree` has a macro that could be reparsed given the `allowedTokens` but + * do not do any reparsing. This function can be used in auto-detection schemes to determine if + * macro names should actually be reparsed. + */ +export declare function hasReparsableMacroNames(tree: Ast.Ast, allowedTokens: string | Set): boolean; + +/** + * Checks whether the array has a macro that could be reparsed given the `allowedTokens` but + * do not do any reparsing. This function can be used in auto-detection schemes to determine if + * macro names should actually be reparsed. + */ +export declare function hasReparsableMacroNamesInArray(tree: Ast.Node[], allowedTokens: Set): boolean; + +declare type Region = { + start: number; + end: number; +}; + +/** + * Find regions between `\ExplSyntaxOn...\ExplSyntaxOff` and `\makeatletter...\makeatother` + * and reparse their contents so that the relevant characters (e.g., `@`, `_`, and `:`) become + * part of the macro names. + */ +export declare function reparseExpl3AndAtLetterRegions(tree: Ast.Ast): void; + +/** + * Reparses all macro names so that they may optionally include characters listed in `allowedTokens`. + * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though + * `_` is normally stops the parsing for a macro name). Thus, a macro `\foo_bar:Nn` would be parsed as having + * the name `foo_bar:Nn` rather than as `foo` followed by the strings `_`, `bar`, `:`, `Nn`. + */ +export declare function reparseMacroNames(tree: Ast.Ast, allowedTokens: string | Set): void; + +/** + * Reparses all macro names in the array so that they may optionally include characters listed in `allowedTokens`. + * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though + * `_` is normally stops the parsing for a macro name). + */ +export declare function reparseMacroNamesInArray(tree: Ast.Node[], allowedTokens: Set): void; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-catcode/index.js b/node_modules/@unified-latex/unified-latex-util-catcode/index.js new file mode 100644 index 0000000..2fe0643 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-catcode/index.js @@ -0,0 +1,295 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +import { visit, EXIT, SKIP } from "@unified-latex/unified-latex-util-visit"; +function findRegionInArray(tree, start, end) { + const ret = []; + let currRegion = { start: void 0, end: tree.length }; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (start(node)) { + currRegion.start = i; + } + if (end(node)) { + currRegion.end = i + 1; + ret.push(currRegion); + currRegion = { start: void 0, end: tree.length }; + } + } + if (currRegion.start != null) { + ret.push(currRegion); + } + return ret; +} +function refineRegions(regions) { + const _regions = [...regions]; + _regions.sort((a, b) => a.start - b.start); + const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end])); + const cutPoints = Array.from(cutPointsSet); + cutPoints.sort((a, b) => a - b); + const retRegions = []; + const retRegionsContainedIn = []; + let seekIndex = 0; + for (let i = 0; i < cutPoints.length - 1; i++) { + const start = cutPoints[i]; + const end = cutPoints[i + 1]; + const region = { start, end }; + const regionContainedIn = /* @__PURE__ */ new Set(); + let encounteredEndPastStart = false; + for (let j = seekIndex; j < _regions.length; j++) { + const superRegion = _regions[j]; + if (superRegion.end >= region.start) { + encounteredEndPastStart = true; + } + if (!encounteredEndPastStart && superRegion.end < region.start) { + seekIndex = j + 1; + continue; + } + if (superRegion.start > end) { + break; + } + if (superRegion.start <= region.start && superRegion.end >= region.end) { + encounteredEndPastStart = true; + regionContainedIn.add(superRegion); + } + } + if (regionContainedIn.size > 0) { + retRegions.push(region); + retRegionsContainedIn.push(regionContainedIn); + } + } + return { regions: retRegions, regionsContainedIn: retRegionsContainedIn }; +} +function splitByRegions(array, regionsRecord) { + const ret = []; + const indices = [0, array.length]; + const reverseMap = {}; + for (const [key, records] of Object.entries(regionsRecord)) { + indices.push( + ...records.flatMap((r) => { + reverseMap["" + [r.start, r.end]] = key; + return [r.start, r.end]; + }) + ); + } + indices.sort((a, b) => a - b); + for (let i = 0; i < indices.length - 1; i++) { + const start = indices[i]; + const end = indices[i + 1]; + if (start === end) { + continue; + } + const regionKey = reverseMap["" + [start, end]]; + ret.push([regionKey || null, array.slice(start, end)]); + } + return ret; +} +function escapeRegExp(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function buildWordRegex(allowedSet) { + const regexpStr = `^(${["\\p{L}"].concat(Array.from(allowedSet).map(escapeRegExp)).join("|")})*`; + return new RegExp(regexpStr, "u"); +} +function hasReparsableMacroNamesInArray(tree, allowedTokens) { + for (let i = 0; i < tree.length; i++) { + const macro = tree[i]; + const string = tree[i + 1]; + if (match.anyMacro(macro) && match.anyString(string)) { + if (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0))) { + return true; + } + } + } + return false; +} +function hasReparsableMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + let ret = false; + visit( + tree, + (nodes) => { + if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) { + ret = true; + return EXIT; + } + }, + { includeArrays: true, test: Array.isArray } + ); + return ret; +} +function reparseMacroNamesInArray(tree, allowedTokens) { + var _a, _b, _c; + const regex = buildWordRegex(allowedTokens); + let i = 0; + while (i < tree.length) { + const macro = tree[i]; + const string = tree[i + 1]; + if (match.anyMacro(macro) && // The _^ macros in math mode should not be extended no-matter what; + // So we check to make sure that the macro we're dealing with has the default escape token. + (macro.escapeToken == null || macro.escapeToken === "\\") && match.anyString(string) && // There are two options. Either the macro ends with the special character, + // e.g. `\@foo` or the special character starts the next string, e.g. `\foo@`. + (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0)))) { + const match2 = string.content.match(regex); + const takeable = match2 ? match2[0] : ""; + if (takeable.length > 0) { + if (takeable.length === string.content.length) { + macro.content += string.content; + tree.splice(i + 1, 1); + if (macro.position && ((_a = string.position) == null ? void 0 : _a.end)) { + macro.position.end = string.position.end; + } + } else { + macro.content += takeable; + string.content = string.content.slice(takeable.length); + if ((_b = macro.position) == null ? void 0 : _b.end) { + macro.position.end.offset += takeable.length; + macro.position.end.column += takeable.length; + } + if ((_c = string.position) == null ? void 0 : _c.start) { + string.position.start.offset += takeable.length; + string.position.start.column += takeable.length; + } + } + } else { + i++; + } + } else { + ++i; + } + } +} +function reparseMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + visit( + tree, + (nodes) => { + reparseMacroNamesInArray(nodes, _allowedTokens); + }, + { includeArrays: true, test: Array.isArray } + ); +} +const expl3Find = { + start: match.createMacroMatcher(["ExplSyntaxOn"]), + end: match.createMacroMatcher(["ExplSyntaxOff"]) +}; +const atLetterFind = { + start: match.createMacroMatcher(["makeatletter"]), + end: match.createMacroMatcher(["makeatother"]) +}; +function findExpl3AndAtLetterRegionsInArray(tree) { + const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end); + const atLetter = findRegionInArray( + tree, + atLetterFind.start, + atLetterFind.end + ); + const regionMap = new Map([ + ...expl3.map((x) => [x, "expl"]), + ...atLetter.map((x) => [x, "atLetter"]) + ]); + const all = refineRegions([...expl3, ...atLetter]); + const ret = { + explOnly: [], + atLetterOnly: [], + both: [] + }; + for (let i = 0; i < all.regions.length; i++) { + const region = all.regions[i]; + const containedIn = all.regionsContainedIn[i]; + if (containedIn.size === 2) { + ret.both.push(region); + continue; + } + for (const v of containedIn.values()) { + if (regionMap.get(v) === "expl") { + ret.explOnly.push(region); + } + if (regionMap.get(v) === "atLetter") { + ret.atLetterOnly.push(region); + } + } + } + ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1); + ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1); + ret.both = ret.both.filter((r) => r.end - r.start > 1); + return ret; +} +const atLetterSet = /* @__PURE__ */ new Set(["@"]); +const explSet = /* @__PURE__ */ new Set(["_", ":"]); +const bothSet = /* @__PURE__ */ new Set(["_", ":", "@"]); +function reparseExpl3AndAtLetterRegions(tree) { + visit( + tree, + { + leave: (nodes) => { + const regions = findExpl3AndAtLetterRegionsInArray(nodes); + const totalNumRegions = regions.both.length + regions.atLetterOnly.length + regions.explOnly.length; + if (totalNumRegions === 0) { + return; + } + const splits = splitByRegions(nodes, regions); + const processed = []; + for (const [key, slice] of splits) { + switch (key) { + case null: + processed.push(...slice); + continue; + case "atLetterOnly": + reparseMacroNames(slice, atLetterSet); + processed.push(...slice); + continue; + case "explOnly": + reparseMacroNames(slice, explSet); + processed.push(...slice); + continue; + case "both": + reparseMacroNames(slice, bothSet); + processed.push(...slice); + continue; + default: + throw new Error( + `Unexpected case when splitting ${key}` + ); + } + } + nodes.length = 0; + nodes.push(...processed); + return SKIP; + } + }, + { includeArrays: true, test: Array.isArray } + ); +} +export { + findExpl3AndAtLetterRegionsInArray, + findRegionInArray, + hasReparsableMacroNames, + hasReparsableMacroNamesInArray, + reparseExpl3AndAtLetterRegions, + reparseMacroNames, + reparseMacroNamesInArray +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-catcode/index.js.map b/node_modules/@unified-latex/unified-latex-util-catcode/index.js.map new file mode 100644 index 0000000..9f98cbb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-catcode/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/find-region.ts","../libs/regions.ts","../libs/reparse-macro-names.ts","../libs/special-regions.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { Region } from \"./regions\";\n\n/**\n * Find all contiguous segments in the array that are between start and end blocks.\n * The `start` and `end` are functions that determine when a region starts and ends.\n */\nexport function findRegionInArray(\n tree: Ast.Node[],\n start: (node: Ast.Node) => boolean,\n end: (node: Ast.Node) => boolean\n): Region[] {\n const ret: Region[] = [];\n let currRegion: Region = { start: undefined as any, end: tree.length };\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (start(node)) {\n currRegion.start = i;\n }\n if (end(node)) {\n currRegion.end = i + 1;\n ret.push(currRegion);\n currRegion = { start: undefined as any, end: tree.length };\n }\n }\n\n if (currRegion.start != null) {\n // Regions don't necessarily have to encounter an `end` to end.\n ret.push(currRegion);\n }\n return ret;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\n\nexport type Region = { start: number; end: number };\n\n/**\n * Given `regions`, a list of `Region`s (not necessarily ordered, possibly overlapping), return a list of in-order,\n * non-overlapping regions and a corresponding list containing a set of the original `Region`s that the new region\n * is a subset of.\n */\nexport function refineRegions(regions: Region[]): {\n regions: Region[];\n regionsContainedIn: Set[];\n} {\n const _regions = [...regions];\n _regions.sort((a, b) => a.start - b.start);\n const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end]));\n const cutPoints = Array.from(cutPointsSet);\n cutPoints.sort((a, b) => a - b);\n\n const retRegions: Region[] = [];\n const retRegionsContainedIn: Set[] = [];\n\n // We will be checking what regions we are completely contained in.\n // Because `_regions` is sorted by start, `seekIndex` will be incremented\n // by end, so that we don't do too much array testing.\n let seekIndex = 0;\n for (let i = 0; i < cutPoints.length - 1; i++) {\n const start = cutPoints[i];\n const end = cutPoints[i + 1];\n const region = { start, end };\n const regionContainedIn: Set = new Set();\n\n let encounteredEndPastStart = false;\n for (let j = seekIndex; j < _regions.length; j++) {\n const superRegion = _regions[j];\n if (superRegion.end >= region.start) {\n encounteredEndPastStart = true;\n }\n if (!encounteredEndPastStart && superRegion.end < region.start) {\n // In this case, the region (and all regions that came before)\n // end before the region we are testing, so we may safely skip past it\n // from here on out.\n seekIndex = j + 1;\n continue;\n }\n\n if (superRegion.start > end) {\n // Because `_regions` is sorted, we can stop here\n break;\n }\n if (\n superRegion.start <= region.start &&\n superRegion.end >= region.end\n ) {\n encounteredEndPastStart = true;\n regionContainedIn.add(superRegion);\n }\n }\n\n if (regionContainedIn.size > 0) {\n // We only count if we are contained in a subregion\n retRegions.push(region);\n retRegionsContainedIn.push(regionContainedIn);\n }\n }\n\n return { regions: retRegions, regionsContainedIn: retRegionsContainedIn };\n}\n\n/**\n * Split an array up into the disjoint regions specified by `regionRecord`.\n * Returned is a list of tuples, the first item being the key of `regionRecord` if there\n * was a corresponding region, or `null` if there was no corresponding region.\n *\n * This function assumes that the regions in `regionRecord` are disjoint and fully contained\n * within the bounds of `array`.\n */\nexport function splitByRegions<\n T,\n RegionRecord extends Record\n>(array: T[], regionsRecord: RegionRecord) {\n const ret: [keyof RegionRecord | null, T[]][] = [];\n\n const indices = [0, array.length];\n const reverseMap: Record = {};\n for (const [key, records] of Object.entries(regionsRecord)) {\n indices.push(\n ...records.flatMap((r) => {\n reverseMap[\"\" + [r.start, r.end]] = key;\n return [r.start, r.end];\n })\n );\n }\n indices.sort((a, b) => a - b);\n\n for (let i = 0; i < indices.length - 1; i++) {\n const start = indices[i];\n const end = indices[i + 1];\n if (start === end) {\n continue;\n }\n const regionKey = reverseMap[\"\" + [start, end]];\n\n ret.push([regionKey || null, array.slice(start, end)]);\n }\n\n return ret;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { EXIT, visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Escape a string so that it can be used to build a regular expression.\n *\n * From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n */\nfunction escapeRegExp(str: string) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n}\n\n/**\n * Build a regular expression that matches everything up to the first non-allowed symbol.\n */\nfunction buildWordRegex(allowedSet: Set): RegExp {\n // /\\p{L}/ matches all letters, including unicode letters. We join this with\n // everything allowed in our set to form a regexp like\n // /(\\p{L}|_|:)*/u\n // The `u` at the end allows unicode characters to be matched.\n const regexpStr = `^(${[\"\\\\p{L}\"]\n .concat(Array.from(allowedSet).map(escapeRegExp))\n .join(\"|\")})*`;\n return new RegExp(regexpStr, \"u\");\n}\n\n/**\n * Checks whether the array has a macro that could be reparsed given the `allowedTokens` but\n * do not do any reparsing. This function can be used in auto-detection schemes to determine if\n * macro names should actually be reparsed.\n */\nexport function hasReparsableMacroNamesInArray(\n tree: Ast.Node[],\n allowedTokens: Set\n): boolean {\n for (let i = 0; i < tree.length; i++) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (match.anyMacro(macro) && match.anyString(string)) {\n // There are two options. Either the macro ends with the special character,\n // e.g. `\\@foo` or the special character starts the next string, e.g. `\\foo@`.\n if (\n allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) ||\n allowedTokens.has(string.content.charAt(0))\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Checks whether `tree` has a macro that could be reparsed given the `allowedTokens` but\n * do not do any reparsing. This function can be used in auto-detection schemes to determine if\n * macro names should actually be reparsed.\n */\nexport function hasReparsableMacroNames(\n tree: Ast.Ast,\n allowedTokens: string | Set\n): boolean {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n // Recast so typescript doesn't complain\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n\n let ret = false;\n visit(\n tree,\n (nodes) => {\n if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) {\n ret = true;\n return EXIT;\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n return ret;\n}\n\n/**\n * Reparses all macro names in the array so that they may optionally include characters listed in `allowedTokens`.\n * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though\n * `_` is normally stops the parsing for a macro name).\n */\nexport function reparseMacroNamesInArray(\n tree: Ast.Node[],\n allowedTokens: Set\n) {\n const regex = buildWordRegex(allowedTokens);\n let i = 0;\n while (i < tree.length) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (\n match.anyMacro(macro) &&\n // The _^ macros in math mode should not be extended no-matter what;\n // So we check to make sure that the macro we're dealing with has the default escape token.\n (macro.escapeToken == null || macro.escapeToken === \"\\\\\") &&\n match.anyString(string) &&\n // There are two options. Either the macro ends with the special character,\n // e.g. `\\@foo` or the special character starts the next string, e.g. `\\foo@`.\n (allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) ||\n allowedTokens.has(string.content.charAt(0)))\n ) {\n // There might be a number somewhere in the string. If so, we should\n // break the string apart at that number\n const match = string.content.match(regex);\n const takeable = match ? match[0] : \"\";\n if (takeable.length > 0) {\n if (takeable.length === string.content.length) {\n // The whole string can be appended to the macro name\n macro.content += string.content;\n tree.splice(i + 1, 1);\n\n // Preserve the source location if available\n if (macro.position && string.position?.end) {\n macro.position.end = string.position.end;\n }\n } else {\n // Only part of the string can be appended to the macro name\n macro.content += takeable;\n string.content = string.content.slice(takeable.length);\n\n // Preserve the source location if available\n if (macro.position?.end) {\n macro.position.end.offset += takeable.length;\n macro.position.end.column += takeable.length;\n }\n if (string.position?.start) {\n string.position.start.offset += takeable.length;\n string.position.start.column += takeable.length;\n }\n }\n } else {\n i++;\n }\n } else {\n ++i;\n }\n }\n}\n\n/**\n * Reparses all macro names so that they may optionally include characters listed in `allowedTokens`.\n * This is used, for example, when parsing expl3 syntax which allows `_` to be used in a macro name (even though\n * `_` is normally stops the parsing for a macro name). Thus, a macro `\\foo_bar:Nn` would be parsed as having\n * the name `foo_bar:Nn` rather than as `foo` followed by the strings `_`, `bar`, `:`, `Nn`.\n */\nexport function reparseMacroNames(\n tree: Ast.Ast,\n allowedTokens: string | Set\n) {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n // Recast so typescript doesn't complain\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n\n visit(\n tree,\n (nodes) => {\n reparseMacroNamesInArray(nodes, _allowedTokens);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { findRegionInArray } from \"./find-region\";\nimport { refineRegions, Region, splitByRegions } from \"./regions\";\nimport { SKIP, visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { reparseMacroNames } from \"./reparse-macro-names\";\n\nconst expl3Find = {\n start: match.createMacroMatcher([\"ExplSyntaxOn\"]),\n end: match.createMacroMatcher([\"ExplSyntaxOff\"]),\n};\nconst atLetterFind = {\n start: match.createMacroMatcher([\"makeatletter\"]),\n end: match.createMacroMatcher([\"makeatother\"]),\n};\n\n/**\n * Find regions between `\\ExplSyntaxOn...\\ExplSyntaxOff` and `\\makeatletter...\\makeatother`.\n * Returns an object containing regions where one or both syntax's apply.\n */\nexport function findExpl3AndAtLetterRegionsInArray(tree: Ast.Node[]): {\n explOnly: Region[];\n atLetterOnly: Region[];\n both: Region[];\n} {\n const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end);\n const atLetter = findRegionInArray(\n tree,\n atLetterFind.start,\n atLetterFind.end\n );\n\n const regionMap = new Map([\n ...(expl3.map((x) => [x, \"expl\"]) as [Region, \"expl\"][]),\n ...(atLetter.map((x) => [x, \"atLetter\"]) as [Region, \"atLetter\"][]),\n ]);\n const all = refineRegions([...expl3, ...atLetter]);\n\n const ret = {\n explOnly: [] as Region[],\n atLetterOnly: [] as Region[],\n both: [] as Region[],\n };\n\n for (let i = 0; i < all.regions.length; i++) {\n const region = all.regions[i];\n const containedIn = all.regionsContainedIn[i];\n if (containedIn.size === 2) {\n ret.both.push(region);\n continue;\n }\n for (const v of containedIn.values()) {\n if (regionMap.get(v) === \"expl\") {\n ret.explOnly.push(region);\n }\n if (regionMap.get(v) === \"atLetter\") {\n ret.atLetterOnly.push(region);\n }\n }\n }\n\n // Regions of size 1 only contain the starting/stopping macro, so they should be discarded\n ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1);\n ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1);\n ret.both = ret.both.filter((r) => r.end - r.start > 1);\n\n return ret;\n}\n\nconst atLetterSet = new Set([\"@\"]);\nconst explSet = new Set([\"_\", \":\"]);\nconst bothSet = new Set([\"_\", \":\", \"@\"]);\n\n/**\n * Find regions between `\\ExplSyntaxOn...\\ExplSyntaxOff` and `\\makeatletter...\\makeatother`\n * and reparse their contents so that the relevant characters (e.g., `@`, `_`, and `:`) become\n * part of the macro names.\n */\nexport function reparseExpl3AndAtLetterRegions(tree: Ast.Ast) {\n visit(\n tree,\n {\n leave: (nodes) => {\n const regions = findExpl3AndAtLetterRegionsInArray(nodes);\n // In all likelihood, we don't need to do any reparsing, so bail early here\n const totalNumRegions =\n regions.both.length +\n regions.atLetterOnly.length +\n regions.explOnly.length;\n if (totalNumRegions === 0) {\n return;\n }\n\n const splits = splitByRegions(nodes, regions);\n const processed: typeof nodes = [];\n for (const [key, slice] of splits) {\n switch (key) {\n case null:\n processed.push(...slice);\n continue;\n case \"atLetterOnly\":\n reparseMacroNames(slice, atLetterSet);\n processed.push(...slice);\n continue;\n case \"explOnly\":\n reparseMacroNames(slice, explSet);\n processed.push(...slice);\n continue;\n case \"both\":\n reparseMacroNames(slice, bothSet);\n processed.push(...slice);\n continue;\n default:\n throw new Error(\n `Unexpected case when splitting ${key}`\n );\n }\n }\n\n nodes.length = 0;\n nodes.push(...processed);\n return SKIP;\n },\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n"],"names":["match"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-catcode/package.json b/node_modules/@unified-latex/unified-latex-util-catcode/package.json new file mode 100644 index 0000000..c75803a --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-catcode/package.json @@ -0,0 +1,53 @@ +{ + "name": "@unified-latex/unified-latex-util-catcode", + "version": "1.8.2", + "description": "Tools for manipulating unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-comments/README.md b/node_modules/@unified-latex/unified-latex-util-comments/README.md new file mode 100644 index 0000000..65192d8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-comments/README.md @@ -0,0 +1,49 @@ + + + + +# unified-latex-util-comments + +## What is this? + +Functions to help modify comments in a `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you want to process comments in a `unified-latex` AST. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-comments +``` + +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 + +## `deleteComments(ast)` + +Returns a new AST with all comments removed. Care is taken to preserve whitespace. +For example + + x% + y + +becomes `xy` but + + x % + y + +becomes `x y` + +```typescript +function deleteComments(ast: Ast.Ast): void; +``` + +**Parameters** + +| Param | Type | +| :---- | :-------- | +| ast | `Ast.Ast` | diff --git a/node_modules/@unified-latex/unified-latex-util-comments/index.cjs b/node_modules/@unified-latex/unified-latex-util-comments/index.cjs new file mode 100644 index 0000000..3cbd176 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-comments/index.cjs @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilReplace = require("@unified-latex/unified-latex-util-replace"); +function deleteComments(ast) { + return unifiedLatexUtilReplace.replaceNode(ast, (node) => { + if (!unifiedLatexUtilMatch.match.comment(node)) { + return; + } + if (node.leadingWhitespace) { + return { type: "whitespace" }; + } + return null; + }); +} +exports.deleteComments = deleteComments; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-comments/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-comments/index.cjs.map new file mode 100644 index 0000000..8e8d507 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-comments/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/delete-comments.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { replaceNode } from \"@unified-latex/unified-latex-util-replace\";\n\n/**\n * Returns a new AST with all comments removed. Care is taken to preserve whitespace.\n * For example\n * ```\n * x%\n * y\n * ```\n * becomes `xy` but\n * ```\n * x %\n * y\n * ```\n * becomes `x y`\n */\nexport function deleteComments(ast: Ast.Ast) {\n return replaceNode(ast, (node) => {\n if (!match.comment(node)) {\n return;\n }\n\n if (node.leadingWhitespace) {\n return { type: \"whitespace\" };\n }\n\n return null;\n });\n}\n"],"names":["replaceNode","match"],"mappings":";;;;AAkBO,SAAS,eAAe,KAAc;AAClC,SAAAA,wBAAA,YAAY,KAAK,CAAC,SAAS;AAC9B,QAAI,CAACC,sBAAA,MAAM,QAAQ,IAAI,GAAG;AACtB;AAAA,IAAA;AAGJ,QAAI,KAAK,mBAAmB;AACjB,aAAA,EAAE,MAAM,aAAa;AAAA,IAAA;AAGzB,WAAA;AAAA,EAAA,CACV;AACL;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-comments/index.d.ts b/node_modules/@unified-latex/unified-latex-util-comments/index.d.ts new file mode 100644 index 0000000..6c2334c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-comments/index.d.ts @@ -0,0 +1,19 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +/** + * Returns a new AST with all comments removed. Care is taken to preserve whitespace. + * For example + * ``` + * x% + * y + * ``` + * becomes `xy` but + * ``` + * x % + * y + * ``` + * becomes `x y` + */ +export declare function deleteComments(ast: Ast.Ast): void; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-comments/index.js b/node_modules/@unified-latex/unified-latex-util-comments/index.js new file mode 100644 index 0000000..38ad14c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-comments/index.js @@ -0,0 +1,17 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +import { replaceNode } from "@unified-latex/unified-latex-util-replace"; +function deleteComments(ast) { + return replaceNode(ast, (node) => { + if (!match.comment(node)) { + return; + } + if (node.leadingWhitespace) { + return { type: "whitespace" }; + } + return null; + }); +} +export { + deleteComments +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-comments/index.js.map b/node_modules/@unified-latex/unified-latex-util-comments/index.js.map new file mode 100644 index 0000000..b0b9b2b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-comments/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/delete-comments.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { replaceNode } from \"@unified-latex/unified-latex-util-replace\";\n\n/**\n * Returns a new AST with all comments removed. Care is taken to preserve whitespace.\n * For example\n * ```\n * x%\n * y\n * ```\n * becomes `xy` but\n * ```\n * x %\n * y\n * ```\n * becomes `x y`\n */\nexport function deleteComments(ast: Ast.Ast) {\n return replaceNode(ast, (node) => {\n if (!match.comment(node)) {\n return;\n }\n\n if (node.leadingWhitespace) {\n return { type: \"whitespace\" };\n }\n\n return null;\n });\n}\n"],"names":[],"mappings":";;AAkBO,SAAS,eAAe,KAAc;AAClC,SAAA,YAAY,KAAK,CAAC,SAAS;AAC9B,QAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACtB;AAAA,IAAA;AAGJ,QAAI,KAAK,mBAAmB;AACjB,aAAA,EAAE,MAAM,aAAa;AAAA,IAAA;AAGzB,WAAA;AAAA,EAAA,CACV;AACL;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-comments/package.json b/node_modules/@unified-latex/unified-latex-util-comments/package.json new file mode 100644 index 0000000..8a524e3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-comments/package.json @@ -0,0 +1,53 @@ +{ + "name": "@unified-latex/unified-latex-util-comments", + "version": "1.8.2", + "description": "Tools for manipulating unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-replace": "^1.8.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-environments/README.md b/node_modules/@unified-latex/unified-latex-util-environments/README.md new file mode 100644 index 0000000..1fc6ead --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-environments/README.md @@ -0,0 +1,91 @@ + + + + +# unified-latex-util-environments + +## What is this? + +Functions to report on/manipulate environments in a `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you are working on the internals of `unified-latex-util-parse` or need to make a custom parser +that treats environments differently. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-environments +``` + +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. + +# Plugins + +## `unifiedLatexProcessEnvironments` + +Unified plugin to process environment content and attach arguments. + +### Usage + +`unified().use(unifiedLatexProcessEnvironments[, options])` + +#### options + +```typescript +{ environments: EnvInfoRecord; } +``` + +### Type + +`Plugin<{ environments: EnvInfoRecord; }[], Ast.Root, Ast.Root>` + +```typescript +function unifiedLatexProcessEnvironments(options: { + environments: EnvInfoRecord; +}): (tree: Ast.Root) => void; +``` + +# Functions + +## `processEnvironment(envNode, envInfo)` + +Performs any needed processing on the environment (as specified by `envInfo`) +including attaching arguments and possibly manipulating the environment's body. + +```typescript +function processEnvironment( + envNode: Ast.Environment, + envInfo: Ast.EnvInfo +): void; +``` + +**Parameters** + +| Param | Type | +| :------ | :---------------- | +| envNode | `Ast.Environment` | +| envInfo | `Ast.EnvInfo` | + +## `processEnvironments(tree, environments)` + +Recursively search for and process the specified environments. Arguments are +consumed according to the `signature` specified. The body is processed +with the specified `processContent` function (if given). Any specified `renderInfo` +is attached to the environment node. + +```typescript +function processEnvironments( + tree: Ast.Ast, + environments: Ast.EnvInfoRecord +): void; +``` + +**Parameters** + +| Param | Type | +| :----------- | :------------------ | +| tree | `Ast.Ast` | +| environments | `Ast.EnvInfoRecord` | diff --git a/node_modules/@unified-latex/unified-latex-util-environments/index.cjs b/node_modules/@unified-latex/unified-latex-util-environments/index.cjs new file mode 100644 index 0000000..002ad7a --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-environments/index.cjs @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilRenderInfo = require("@unified-latex/unified-latex-util-render-info"); +const unifiedLatexUtilArguments = require("@unified-latex/unified-latex-util-arguments"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +function processEnvironment(envNode, envInfo) { + if (envInfo.signature && envNode.args == null) { + const { args } = unifiedLatexUtilArguments.gobbleArguments(envNode.content, envInfo.signature); + envNode.args = args; + } + unifiedLatexUtilRenderInfo.updateRenderInfo(envNode, envInfo.renderInfo); + if (typeof envInfo.processContent === "function") { + envNode.content = envInfo.processContent(envNode.content); + } +} +function processEnvironments(tree, environments) { + const isRelevantEnvironment = unifiedLatexUtilMatch.match.createEnvironmentMatcher(environments); + unifiedLatexUtilVisit.visit( + tree, + { + leave: (node) => { + const envName = unifiedLatexUtilPrintRaw.printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { test: isRelevantEnvironment } + ); +} +const unifiedLatexProcessEnvironments = function unifiedLatexAttachMacroArguments(options) { + const { environments = {} } = options || {}; + const isRelevantEnvironment = unifiedLatexUtilMatch.match.createEnvironmentMatcher(environments); + return (tree) => { + if (Object.keys(environments).length === 0) { + console.warn( + "Attempting to attach macro arguments but no macros are specified." + ); + } + unifiedLatexUtilVisit.visit( + tree, + { + leave: (node) => { + const envName = unifiedLatexUtilPrintRaw.printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { test: isRelevantEnvironment } + ); + }; +}; +exports.processEnvironment = processEnvironment; +exports.processEnvironments = processEnvironments; +exports.unifiedLatexProcessEnvironments = unifiedLatexProcessEnvironments; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-environments/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-environments/index.cjs.map new file mode 100644 index 0000000..b750b74 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-environments/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/process-environment.ts","../libs/unified-latex-process-environment.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"],"names":["gobbleArguments","updateRenderInfo","match","visit","printRaw"],"mappings":";;;;;;;AAYgB,SAAA,mBAAmB,SAA0B,SAAkB;AAC3E,MAAI,QAAQ,aAAa,QAAQ,QAAQ,MAAM;AAC3C,UAAM,EAAE,KAAK,IAAIA,0CAAgB,QAAQ,SAAS,QAAQ,SAAS;AACnE,YAAQ,OAAO;AAAA,EAAA;AAGFC,8CAAA,SAAS,QAAQ,UAAU;AACxC,MAAA,OAAO,QAAQ,mBAAmB,YAAY;AAC9C,YAAQ,UAAU,QAAQ,eAAe,QAAQ,OAAO;AAAA,EAAA;AAEhE;AAQgB,SAAA,oBACZ,MACA,cACF;AACQ,QAAA,wBAAwBC,sBAAAA,MAAM,yBAAyB,YAAY;AAEzEC,wBAAA;AAAA,IACI;AAAA,IACA;AAAA,MACI,OAAO,CAAC,SAAS;AACP,cAAA,UAAUC,yBAAAA,SAAS,KAAK,GAAG;AAC3B,cAAA,UAAU,aAAa,OAAO;AACpC,YAAI,CAAC,SAAS;AACV,gBAAM,IAAI;AAAA,YACN,oDAAoD,OAAO;AAAA,UAC/D;AAAA,QAAA;AAEJ,2BAAmB,MAAM,OAAO;AAAA,MAAA;AAAA,IAExC;AAAA,IACA,EAAE,MAAM,sBAAsB;AAAA,EAClC;AACJ;ACrCa,MAAA,kCAIT,SAAS,iCAAiC,SAAS;AACnD,QAAM,EAAE,eAAe,GAAG,IAAI,WAAW,CAAC;AACpC,QAAA,wBAAwBF,sBAAAA,MAAM,yBAAyB,YAAY;AAEzE,SAAO,CAAC,SAAS;AACb,QAAI,OAAO,KAAK,YAAY,EAAE,WAAW,GAAG;AAChC,cAAA;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA;AAGJC,0BAAA;AAAA,MACI;AAAA,MACA;AAAA,QACI,OAAO,CAAC,SAAS;AACP,gBAAA,UAAUC,yBAAAA,SAAS,KAAK,GAAG;AAC3B,gBAAA,UAAU,aAAa,OAAO;AACpC,cAAI,CAAC,SAAS;AACV,kBAAM,IAAI;AAAA,cACN,oDAAoD,OAAO;AAAA,YAC/D;AAAA,UAAA;AAEJ,6BAAmB,MAAM,OAAO;AAAA,QAAA;AAAA,MAExC;AAAA,MACA,EAAE,MAAM,sBAAsB;AAAA,IAClC;AAAA,EACJ;AACJ;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-environments/index.d.ts b/node_modules/@unified-latex/unified-latex-util-environments/index.d.ts new file mode 100644 index 0000000..8123fb2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-environments/index.d.ts @@ -0,0 +1,31 @@ +import * as Ast from '@unified-latex/unified-latex-types'; +import { EnvInfo } from '@unified-latex/unified-latex-types'; +import { EnvInfoRecord } from '@unified-latex/unified-latex-types'; +import { Plugin as Plugin_2 } from 'unified'; + +declare type PluginOptions = { + environments: EnvInfoRecord; +} | undefined; + +/** + * Performs any needed processing on the environment (as specified by `envInfo`) + * including attaching arguments and possibly manipulating the environment's body. + */ +export declare function processEnvironment(envNode: Ast.Environment, envInfo: EnvInfo): void; + +/** + * Recursively search for and process the specified environments. Arguments are + * consumed according to the `signature` specified. The body is processed + * with the specified `processContent` function (if given). Any specified `renderInfo` + * is attached to the environment node. + */ +export declare function processEnvironments(tree: Ast.Ast, environments: EnvInfoRecord): void; + +/** + * Unified plugin to process environment content and attach arguments. + * + * @param environments An object whose keys are environment names and values contains information about the environment and its argument signature. + */ +export declare const unifiedLatexProcessEnvironments: Plugin_2; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-environments/index.js b/node_modules/@unified-latex/unified-latex-util-environments/index.js new file mode 100644 index 0000000..31908b1 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-environments/index.js @@ -0,0 +1,67 @@ +import { updateRenderInfo } from "@unified-latex/unified-latex-util-render-info"; +import { gobbleArguments } from "@unified-latex/unified-latex-util-arguments"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { visit } from "@unified-latex/unified-latex-util-visit"; +import { printRaw } from "@unified-latex/unified-latex-util-print-raw"; +function processEnvironment(envNode, envInfo) { + if (envInfo.signature && envNode.args == null) { + const { args } = gobbleArguments(envNode.content, envInfo.signature); + envNode.args = args; + } + updateRenderInfo(envNode, envInfo.renderInfo); + if (typeof envInfo.processContent === "function") { + envNode.content = envInfo.processContent(envNode.content); + } +} +function processEnvironments(tree, environments) { + const isRelevantEnvironment = match.createEnvironmentMatcher(environments); + visit( + tree, + { + leave: (node) => { + const envName = printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { test: isRelevantEnvironment } + ); +} +const unifiedLatexProcessEnvironments = function unifiedLatexAttachMacroArguments(options) { + const { environments = {} } = options || {}; + const isRelevantEnvironment = match.createEnvironmentMatcher(environments); + return (tree) => { + if (Object.keys(environments).length === 0) { + console.warn( + "Attempting to attach macro arguments but no macros are specified." + ); + } + visit( + tree, + { + leave: (node) => { + const envName = printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { test: isRelevantEnvironment } + ); + }; +}; +export { + processEnvironment, + processEnvironments, + unifiedLatexProcessEnvironments +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-environments/index.js.map b/node_modules/@unified-latex/unified-latex-util-environments/index.js.map new file mode 100644 index 0000000..80dcb77 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-environments/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/process-environment.ts","../libs/unified-latex-process-environment.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"],"names":[],"mappings":";;;;;AAYgB,SAAA,mBAAmB,SAA0B,SAAkB;AAC3E,MAAI,QAAQ,aAAa,QAAQ,QAAQ,MAAM;AAC3C,UAAM,EAAE,KAAK,IAAI,gBAAgB,QAAQ,SAAS,QAAQ,SAAS;AACnE,YAAQ,OAAO;AAAA,EAAA;AAGF,mBAAA,SAAS,QAAQ,UAAU;AACxC,MAAA,OAAO,QAAQ,mBAAmB,YAAY;AAC9C,YAAQ,UAAU,QAAQ,eAAe,QAAQ,OAAO;AAAA,EAAA;AAEhE;AAQgB,SAAA,oBACZ,MACA,cACF;AACQ,QAAA,wBAAwB,MAAM,yBAAyB,YAAY;AAEzE;AAAA,IACI;AAAA,IACA;AAAA,MACI,OAAO,CAAC,SAAS;AACP,cAAA,UAAU,SAAS,KAAK,GAAG;AAC3B,cAAA,UAAU,aAAa,OAAO;AACpC,YAAI,CAAC,SAAS;AACV,gBAAM,IAAI;AAAA,YACN,oDAAoD,OAAO;AAAA,UAC/D;AAAA,QAAA;AAEJ,2BAAmB,MAAM,OAAO;AAAA,MAAA;AAAA,IAExC;AAAA,IACA,EAAE,MAAM,sBAAsB;AAAA,EAClC;AACJ;ACrCa,MAAA,kCAIT,SAAS,iCAAiC,SAAS;AACnD,QAAM,EAAE,eAAe,GAAG,IAAI,WAAW,CAAC;AACpC,QAAA,wBAAwB,MAAM,yBAAyB,YAAY;AAEzE,SAAO,CAAC,SAAS;AACb,QAAI,OAAO,KAAK,YAAY,EAAE,WAAW,GAAG;AAChC,cAAA;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA;AAGJ;AAAA,MACI;AAAA,MACA;AAAA,QACI,OAAO,CAAC,SAAS;AACP,gBAAA,UAAU,SAAS,KAAK,GAAG;AAC3B,gBAAA,UAAU,aAAa,OAAO;AACpC,cAAI,CAAC,SAAS;AACV,kBAAM,IAAI;AAAA,cACN,oDAAoD,OAAO;AAAA,YAC/D;AAAA,UAAA;AAEJ,6BAAmB,MAAM,OAAO;AAAA,QAAA;AAAA,MAExC;AAAA,MACA,EAAE,MAAM,sBAAsB;AAAA,IAClC;AAAA,EACJ;AACJ;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-environments/package.json b/node_modules/@unified-latex/unified-latex-util-environments/package.json new file mode 100644 index 0000000..54c5d4b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-environments/package.json @@ -0,0 +1,57 @@ +{ + "name": "@unified-latex/unified-latex-util-environments", + "version": "1.8.2", + "description": "Tools for manipulating unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-match/README.md b/node_modules/@unified-latex/unified-latex-util-match/README.md new file mode 100644 index 0000000..df4a426 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-match/README.md @@ -0,0 +1,28 @@ + + + + +# unified-latex-util-match + +## What is this? + +Functions to match different `Ast.Node` types in a `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you need a type-guard to ensure a node is of a certain type; for example, during a call to `unified-latex-until-visit`. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-match +``` + +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. + +# Constants + +| Name | Type | Description | +| :------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------- | +| `match` | `{ macro(node: any, macroName?: string): node is Ast.Macro; anyMacro(node: any): node is Ast.Macro; environment(node: any, envName?: string): node is Ast.Environment; ... 12 more ...; createEnvironmentMatcher: (macros: string[] \| Record) => Ast.TypeGuard; }` | Functions to match different types of nodes. | diff --git a/node_modules/@unified-latex/unified-latex-util-match/index.cjs b/node_modules/@unified-latex/unified-latex-util-match/index.cjs new file mode 100644 index 0000000..f3ba43d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-match/index.cjs @@ -0,0 +1,169 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +function createMacroMatcher(macros) { + const macrosHash = Array.isArray(macros) ? macros.length > 0 ? typeof macros[0] === "string" ? Object.fromEntries( + macros.map((macro2) => { + if (typeof macro2 !== "string") { + throw new Error("Wrong branch of map function"); + } + return [macro2, {}]; + }) + ) : Object.fromEntries( + macros.map((macro2) => { + if (typeof macro2 === "string") { + throw new Error("Wrong branch of map function"); + } + if (macro2.escapeToken != null) { + return [ + macro2.content, + { escapeToken: macro2.escapeToken } + ]; + } + return [macro2.content, {}]; + }) + ) : {} : macros; + return function matchAgainstMacros(node) { + if (node == null || node.type !== "macro") { + return false; + } + const spec = macrosHash[node.content]; + if (!spec) { + return false; + } + if (typeof spec === "object" && "escapeToken" in spec) { + return spec.escapeToken == null || spec.escapeToken === node.escapeToken; + } + return true; + }; +} +function createEnvironmentMatcher(macros) { + const environmentsHash = Array.isArray(macros) ? Object.fromEntries( + macros.map((str) => { + return [str, {}]; + }) + ) : macros; + return function matchAgainstEnvironments(node) { + if (!match.anyEnvironment(node)) { + return false; + } + const envName = unifiedLatexUtilPrintRaw.printRaw(node.env); + const spec = environmentsHash[envName]; + if (!spec) { + return false; + } + return true; + }; +} +const match = { + macro(node, macroName) { + if (node == null) { + return false; + } + return node.type === "macro" && (macroName == null || node.content === macroName); + }, + anyMacro(node) { + return match.macro(node); + }, + environment(node, envName) { + if (node == null) { + return false; + } + return (node.type === "environment" || node.type === "mathenv") && (envName == null || unifiedLatexUtilPrintRaw.printRaw(node.env) === envName); + }, + anyEnvironment(node) { + return match.environment(node); + }, + comment(node) { + if (node == null) { + return false; + } + return node.type === "comment"; + }, + parbreak(node) { + if (node == null) { + return false; + } + return node.type === "parbreak"; + }, + whitespace(node) { + if (node == null) { + return false; + } + return node.type === "whitespace"; + }, + /** + * Matches whitespace or a comment with leading whitespace. + */ + whitespaceLike(node) { + if (node == null) { + return false; + } + return node.type === "whitespace" || node.type === "whitespace" && node.leadingWhitespace === true; + }, + string(node, value) { + if (node == null) { + return false; + } + return node.type === "string" && (value == null || node.content === value); + }, + anyString(node) { + return match.string(node); + }, + group(node) { + if (node == null) { + return false; + } + return node.type === "group"; + }, + argument(node) { + if (node == null) { + return false; + } + return node.type === "argument"; + }, + blankArgument(node) { + if (!match.argument(node)) { + return false; + } + return node.openMark === "" && node.closeMark === "" && node.content.length === 0; + }, + math(node) { + if (node == null) { + return false; + } + return node.type === "displaymath" || node.type === "inlinemath"; + }, + createMacroMatcher, + createEnvironmentMatcher +}; +const { + anyEnvironment, + anyMacro, + anyString, + argument, + blankArgument, + comment, + environment, + group, + macro, + math, + parbreak, + string, + whitespace +} = match; +exports.anyEnvironment = anyEnvironment; +exports.anyMacro = anyMacro; +exports.anyString = anyString; +exports.argument = argument; +exports.blankArgument = blankArgument; +exports.comment = comment; +exports.environment = environment; +exports.group = group; +exports.macro = macro; +exports.match = match; +exports.math = math; +exports.parbreak = parbreak; +exports.string = string; +exports.whitespace = whitespace; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-match/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-match/index.cjs.map new file mode 100644 index 0000000..5d1500c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-match/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/match.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfo,\n MacroInfo,\n MacroInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros\n * and generates a hash for quick lookup.\n */\nfunction createMacroMatcher(\n macros: Ast.Macro[] | S[] | Record\n) {\n // We first make sure we have a record type with keys being the macro's contents\n const macrosHash: Record = Array.isArray(macros)\n ? macros.length > 0\n ? typeof macros[0] === \"string\"\n ? Object.fromEntries(\n macros.map((macro) => {\n if (typeof macro !== \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n return [macro, {}] as [string, MacroInfo];\n })\n )\n : Object.fromEntries(\n macros.map((macro) => {\n if (typeof macro === \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n if (macro.escapeToken != null) {\n return [\n macro.content,\n { escapeToken: macro.escapeToken },\n ] as [string, MacroInfo];\n }\n return [macro.content, {}] as [string, MacroInfo];\n })\n )\n : {}\n : macros;\n\n return function matchAgainstMacros(node: any | Ast.Macro) {\n if (node == null || node.type !== \"macro\") {\n return false;\n }\n // At this point we have a macro type\n const spec = macrosHash[node.content];\n if (!spec) {\n return false;\n }\n\n if (typeof spec === \"object\" && \"escapeToken\" in spec) {\n return (\n (spec as MacroInfoRecord).escapeToken == null ||\n (spec as MacroInfoRecord).escapeToken === node.escapeToken\n );\n }\n return true;\n } as Ast.TypeGuard;\n}\n\n/**\n * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros\n * and generates a hash for quick lookup.\n */\nfunction createEnvironmentMatcher(macros: string[] | Record) {\n // We first make sure we have a record type with keys being the macro's contents\n const environmentsHash = Array.isArray(macros)\n ? Object.fromEntries(\n macros.map((str) => {\n return [str, {}] as [string, EnvInfo];\n })\n )\n : macros;\n\n return function matchAgainstEnvironments(node: any | Ast.Environment) {\n if (!match.anyEnvironment(node)) {\n return false;\n }\n // At this point we have an environment type\n const envName = printRaw(node.env);\n const spec = environmentsHash[envName];\n if (!spec) {\n return false;\n }\n\n return true;\n } as Ast.TypeGuard;\n}\n\n/**\n * Functions to match different types of nodes.\n */\nexport const match = {\n macro(node: any, macroName?: string): node is Ast.Macro {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"macro\" &&\n (macroName == null || node.content === macroName)\n );\n },\n anyMacro(node: any): node is Ast.Macro {\n return match.macro(node);\n },\n environment(node: any, envName?: string): node is Ast.Environment {\n if (node == null) {\n return false;\n }\n return (\n (node.type === \"environment\" || node.type === \"mathenv\") &&\n (envName == null || printRaw(node.env) === envName)\n );\n },\n anyEnvironment(node: any): node is Ast.Environment {\n return match.environment(node);\n },\n comment(node: any): node is Ast.Comment {\n if (node == null) {\n return false;\n }\n return node.type === \"comment\";\n },\n parbreak(node: any): node is Ast.Parbreak {\n if (node == null) {\n return false;\n }\n return node.type === \"parbreak\";\n },\n whitespace(node: any): node is Ast.Whitespace {\n if (node == null) {\n return false;\n }\n return node.type === \"whitespace\";\n },\n /**\n * Matches whitespace or a comment with leading whitespace.\n */\n whitespaceLike(\n node: any\n ): node is Ast.Whitespace | (Ast.Comment & { leadingWhitespace: true }) {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"whitespace\" ||\n (node.type === \"whitespace\" && node.leadingWhitespace === true)\n );\n },\n string(node: any, value?: string): node is Ast.String {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"string\" && (value == null || node.content === value)\n );\n },\n anyString(node: any): node is Ast.String {\n return match.string(node);\n },\n group(node: any): node is Ast.Group {\n if (node == null) {\n return false;\n }\n return node.type === \"group\";\n },\n argument(node: any): node is Ast.Argument {\n if (node == null) {\n return false;\n }\n return node.type === \"argument\";\n },\n blankArgument(node: any): boolean {\n if (!match.argument(node)) {\n return false;\n }\n return (\n node.openMark === \"\" &&\n node.closeMark === \"\" &&\n node.content.length === 0\n );\n },\n math(node: any): node is Ast.DisplayMath | Ast.InlineMath {\n if (node == null) {\n return false;\n }\n return node.type === \"displaymath\" || node.type === \"inlinemath\";\n },\n createMacroMatcher,\n createEnvironmentMatcher,\n};\n\nexport const {\n anyEnvironment,\n anyMacro,\n anyString,\n argument,\n blankArgument,\n comment,\n environment,\n group,\n macro,\n math,\n parbreak,\n string,\n whitespace,\n} = match;\n"],"names":["macro","printRaw"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-match/index.d.ts b/node_modules/@unified-latex/unified-latex-util-match/index.d.ts new file mode 100644 index 0000000..475c1eb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-match/index.d.ts @@ -0,0 +1,70 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +export declare const anyEnvironment: (node: any) => node is Ast.Environment; + +export declare const anyMacro: (node: any) => node is Ast.Macro; + +export declare const anyString: (node: any) => node is Ast.String; + +export declare const argument: (node: any) => node is Ast.Argument; + +export declare const blankArgument: (node: any) => boolean; + +export declare const comment: (node: any) => node is Ast.Comment; + +/** + * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros + * and generates a hash for quick lookup. + */ +declare function createEnvironmentMatcher(macros: string[] | Record): Ast.TypeGuard; + +/** + * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros + * and generates a hash for quick lookup. + */ +declare function createMacroMatcher(macros: Ast.Macro[] | S[] | Record): Ast.TypeGuard; + +export declare const environment: (node: any, envName?: string) => node is Ast.Environment; + +export declare const group: (node: any) => node is Ast.Group; + +export declare const macro: (node: any, macroName?: string) => node is Ast.Macro; + +/** + * Functions to match different types of nodes. + */ +export declare const match: { + macro(node: any, macroName?: string): node is Ast.Macro; + anyMacro(node: any): node is Ast.Macro; + environment(node: any, envName?: string): node is Ast.Environment; + anyEnvironment(node: any): node is Ast.Environment; + comment(node: any): node is Ast.Comment; + parbreak(node: any): node is Ast.Parbreak; + whitespace(node: any): node is Ast.Whitespace; + /** + * Matches whitespace or a comment with leading whitespace. + */ + whitespaceLike(node: any): node is Ast.Whitespace | (Ast.Comment & { + leadingWhitespace: true; + }); + string(node: any, value?: string): node is Ast.String; + anyString(node: any): node is Ast.String; + group(node: any): node is Ast.Group; + argument(node: any): node is Ast.Argument; + blankArgument(node: any): boolean; + math(node: any): node is Ast.DisplayMath | Ast.InlineMath; + createMacroMatcher: typeof createMacroMatcher; + createEnvironmentMatcher: typeof createEnvironmentMatcher; +}; + +export declare const math: (node: any) => node is Ast.DisplayMath | Ast.InlineMath; + +export declare const parbreak: (node: any) => node is Ast.Parbreak; + +export declare const string: (node: any, value?: string) => node is Ast.String; + +export declare const whitespace: (node: any) => node is Ast.Whitespace; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-match/index.js b/node_modules/@unified-latex/unified-latex-util-match/index.js new file mode 100644 index 0000000..afcd83b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-match/index.js @@ -0,0 +1,169 @@ +import { printRaw } from "@unified-latex/unified-latex-util-print-raw"; +function createMacroMatcher(macros) { + const macrosHash = Array.isArray(macros) ? macros.length > 0 ? typeof macros[0] === "string" ? Object.fromEntries( + macros.map((macro2) => { + if (typeof macro2 !== "string") { + throw new Error("Wrong branch of map function"); + } + return [macro2, {}]; + }) + ) : Object.fromEntries( + macros.map((macro2) => { + if (typeof macro2 === "string") { + throw new Error("Wrong branch of map function"); + } + if (macro2.escapeToken != null) { + return [ + macro2.content, + { escapeToken: macro2.escapeToken } + ]; + } + return [macro2.content, {}]; + }) + ) : {} : macros; + return function matchAgainstMacros(node) { + if (node == null || node.type !== "macro") { + return false; + } + const spec = macrosHash[node.content]; + if (!spec) { + return false; + } + if (typeof spec === "object" && "escapeToken" in spec) { + return spec.escapeToken == null || spec.escapeToken === node.escapeToken; + } + return true; + }; +} +function createEnvironmentMatcher(macros) { + const environmentsHash = Array.isArray(macros) ? Object.fromEntries( + macros.map((str) => { + return [str, {}]; + }) + ) : macros; + return function matchAgainstEnvironments(node) { + if (!match.anyEnvironment(node)) { + return false; + } + const envName = printRaw(node.env); + const spec = environmentsHash[envName]; + if (!spec) { + return false; + } + return true; + }; +} +const match = { + macro(node, macroName) { + if (node == null) { + return false; + } + return node.type === "macro" && (macroName == null || node.content === macroName); + }, + anyMacro(node) { + return match.macro(node); + }, + environment(node, envName) { + if (node == null) { + return false; + } + return (node.type === "environment" || node.type === "mathenv") && (envName == null || printRaw(node.env) === envName); + }, + anyEnvironment(node) { + return match.environment(node); + }, + comment(node) { + if (node == null) { + return false; + } + return node.type === "comment"; + }, + parbreak(node) { + if (node == null) { + return false; + } + return node.type === "parbreak"; + }, + whitespace(node) { + if (node == null) { + return false; + } + return node.type === "whitespace"; + }, + /** + * Matches whitespace or a comment with leading whitespace. + */ + whitespaceLike(node) { + if (node == null) { + return false; + } + return node.type === "whitespace" || node.type === "whitespace" && node.leadingWhitespace === true; + }, + string(node, value) { + if (node == null) { + return false; + } + return node.type === "string" && (value == null || node.content === value); + }, + anyString(node) { + return match.string(node); + }, + group(node) { + if (node == null) { + return false; + } + return node.type === "group"; + }, + argument(node) { + if (node == null) { + return false; + } + return node.type === "argument"; + }, + blankArgument(node) { + if (!match.argument(node)) { + return false; + } + return node.openMark === "" && node.closeMark === "" && node.content.length === 0; + }, + math(node) { + if (node == null) { + return false; + } + return node.type === "displaymath" || node.type === "inlinemath"; + }, + createMacroMatcher, + createEnvironmentMatcher +}; +const { + anyEnvironment, + anyMacro, + anyString, + argument, + blankArgument, + comment, + environment, + group, + macro, + math, + parbreak, + string, + whitespace +} = match; +export { + anyEnvironment, + anyMacro, + anyString, + argument, + blankArgument, + comment, + environment, + group, + macro, + match, + math, + parbreak, + string, + whitespace +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-match/index.js.map b/node_modules/@unified-latex/unified-latex-util-match/index.js.map new file mode 100644 index 0000000..6a8127d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-match/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/match.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfo,\n MacroInfo,\n MacroInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros\n * and generates a hash for quick lookup.\n */\nfunction createMacroMatcher(\n macros: Ast.Macro[] | S[] | Record\n) {\n // We first make sure we have a record type with keys being the macro's contents\n const macrosHash: Record = Array.isArray(macros)\n ? macros.length > 0\n ? typeof macros[0] === \"string\"\n ? Object.fromEntries(\n macros.map((macro) => {\n if (typeof macro !== \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n return [macro, {}] as [string, MacroInfo];\n })\n )\n : Object.fromEntries(\n macros.map((macro) => {\n if (typeof macro === \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n if (macro.escapeToken != null) {\n return [\n macro.content,\n { escapeToken: macro.escapeToken },\n ] as [string, MacroInfo];\n }\n return [macro.content, {}] as [string, MacroInfo];\n })\n )\n : {}\n : macros;\n\n return function matchAgainstMacros(node: any | Ast.Macro) {\n if (node == null || node.type !== \"macro\") {\n return false;\n }\n // At this point we have a macro type\n const spec = macrosHash[node.content];\n if (!spec) {\n return false;\n }\n\n if (typeof spec === \"object\" && \"escapeToken\" in spec) {\n return (\n (spec as MacroInfoRecord).escapeToken == null ||\n (spec as MacroInfoRecord).escapeToken === node.escapeToken\n );\n }\n return true;\n } as Ast.TypeGuard;\n}\n\n/**\n * Creates a macro matching function that uses a `SpecialMacroSpec` or list of macros\n * and generates a hash for quick lookup.\n */\nfunction createEnvironmentMatcher(macros: string[] | Record) {\n // We first make sure we have a record type with keys being the macro's contents\n const environmentsHash = Array.isArray(macros)\n ? Object.fromEntries(\n macros.map((str) => {\n return [str, {}] as [string, EnvInfo];\n })\n )\n : macros;\n\n return function matchAgainstEnvironments(node: any | Ast.Environment) {\n if (!match.anyEnvironment(node)) {\n return false;\n }\n // At this point we have an environment type\n const envName = printRaw(node.env);\n const spec = environmentsHash[envName];\n if (!spec) {\n return false;\n }\n\n return true;\n } as Ast.TypeGuard;\n}\n\n/**\n * Functions to match different types of nodes.\n */\nexport const match = {\n macro(node: any, macroName?: string): node is Ast.Macro {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"macro\" &&\n (macroName == null || node.content === macroName)\n );\n },\n anyMacro(node: any): node is Ast.Macro {\n return match.macro(node);\n },\n environment(node: any, envName?: string): node is Ast.Environment {\n if (node == null) {\n return false;\n }\n return (\n (node.type === \"environment\" || node.type === \"mathenv\") &&\n (envName == null || printRaw(node.env) === envName)\n );\n },\n anyEnvironment(node: any): node is Ast.Environment {\n return match.environment(node);\n },\n comment(node: any): node is Ast.Comment {\n if (node == null) {\n return false;\n }\n return node.type === \"comment\";\n },\n parbreak(node: any): node is Ast.Parbreak {\n if (node == null) {\n return false;\n }\n return node.type === \"parbreak\";\n },\n whitespace(node: any): node is Ast.Whitespace {\n if (node == null) {\n return false;\n }\n return node.type === \"whitespace\";\n },\n /**\n * Matches whitespace or a comment with leading whitespace.\n */\n whitespaceLike(\n node: any\n ): node is Ast.Whitespace | (Ast.Comment & { leadingWhitespace: true }) {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"whitespace\" ||\n (node.type === \"whitespace\" && node.leadingWhitespace === true)\n );\n },\n string(node: any, value?: string): node is Ast.String {\n if (node == null) {\n return false;\n }\n return (\n node.type === \"string\" && (value == null || node.content === value)\n );\n },\n anyString(node: any): node is Ast.String {\n return match.string(node);\n },\n group(node: any): node is Ast.Group {\n if (node == null) {\n return false;\n }\n return node.type === \"group\";\n },\n argument(node: any): node is Ast.Argument {\n if (node == null) {\n return false;\n }\n return node.type === \"argument\";\n },\n blankArgument(node: any): boolean {\n if (!match.argument(node)) {\n return false;\n }\n return (\n node.openMark === \"\" &&\n node.closeMark === \"\" &&\n node.content.length === 0\n );\n },\n math(node: any): node is Ast.DisplayMath | Ast.InlineMath {\n if (node == null) {\n return false;\n }\n return node.type === \"displaymath\" || node.type === \"inlinemath\";\n },\n createMacroMatcher,\n createEnvironmentMatcher,\n};\n\nexport const {\n anyEnvironment,\n anyMacro,\n anyString,\n argument,\n blankArgument,\n comment,\n environment,\n group,\n macro,\n math,\n parbreak,\n string,\n whitespace,\n} = match;\n"],"names":["macro"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-match/package.json b/node_modules/@unified-latex/unified-latex-util-match/package.json new file mode 100644 index 0000000..9d07d50 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-match/package.json @@ -0,0 +1,52 @@ +{ + "name": "@unified-latex/unified-latex-util-match", + "version": "1.8.0", + "description": "Match nodes in a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-parse/README.md b/node_modules/@unified-latex/unified-latex-util-parse/README.md new file mode 100644 index 0000000..5fadbb8 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-parse/README.md @@ -0,0 +1,317 @@ + + + + +# unified-latex-util-parse + +## What is this? + +Functions parse strings to a `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you have a string that you would like to parse to a `unified-latex` `Ast.Ast`, or +if you are building a plugin for `unified()` that manipulates LaTeX. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-parse +``` + +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. + +# Plugins + +## `unifiedLatexAstComplier` + +Unified complier plugin that passes through a LaTeX AST without modification. + +### Usage + +`unified().use(unifiedLatexAstComplier)` + +### Type + +`Plugin` + +```typescript +function unifiedLatexAstComplier(): void; +``` + +## `unifiedLatexFromString` + +Parse a string to a LaTeX AST. + +### Usage + +`unified().use(unifiedLatexFromString[, options])` + +#### options + +```typescript +{ mode?: "math" | "regular"; macros?: MacroInfoRecord; environments?: EnvInfoRecord; flags?: { atLetter?: boolean; expl3?: boolean; autodetectExpl3AndAtLetter?: boolean; }; } +``` + +### Type + +`Plugin<{ mode?: "math" | "regular"; macros?: MacroInfoRecord; environments?: EnvInfoRecord; flags?: { atLetter?: boolean; expl3?: boolean; autodetectExpl3AndAtLetter?: boolean; }; }[], string, Ast.Root>` + +```typescript +function unifiedLatexFromString(options: { + mode?: "math" | "regular"; + macros?: MacroInfoRecord; + environments?: EnvInfoRecord; + flags?: { + atLetter?: boolean; + expl3?: boolean; + autodetectExpl3AndAtLetter?: boolean; + }; +}): void; +``` + +## `unifiedLatexFromStringMinimal` + +Parse a string to a LaTeX AST with no post processing. For example, +no macro arguments will be attached, etc. + +### Usage + +`unified().use(unifiedLatexFromStringMinimal[, options])` + +#### options + +```typescript +PluginOptions +``` + +### Type + +`Plugin` + +```typescript +function unifiedLatexFromStringMinimal(options: PluginOptions): void; +``` + +## `unifiedLatexProcessAtLetterAndExplMacros` + +Unified plugin to reprocess macros names to possibly include `@`, `_`, or `:`. +This plugin detects the `\makeatletter` and `\ExplSyntaxOn` commands and reprocesses macro names +inside of those blocks to include those characters. + +### Usage + +`unified().use(unifiedLatexProcessAtLetterAndExplMacros[, options])` + +#### options + +```typescript +{ atLetter?: boolean; expl3?: boolean; autodetectExpl3AndAtLetter?: boolean; } +``` + +### Type + +`Plugin<{ atLetter?: boolean; expl3?: boolean; autodetectExpl3AndAtLetter?: boolean; }[], Ast.Root, Ast.Root>` + +```typescript +function unifiedLatexProcessAtLetterAndExplMacros(options: { + atLetter?: boolean; + expl3?: boolean; + autodetectExpl3AndAtLetter?: boolean; +}): (tree: Ast.Root) => void; +``` + +## `unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse` + +Unified plugin to process macros and environments. Any environments that contain math content +are reparsed (if needed) in math mode. + +### Usage + +`unified().use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse[, options])` + +#### options + +```typescript +{ environments: EnvInfoRecord; macros: MacroInfoRecord; } +``` + +### Type + +`Plugin<{ environments: EnvInfoRecord; macros: MacroInfoRecord; }[], Ast.Root, Ast.Root>` + +```typescript +function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse(options: { + environments: EnvInfoRecord; + macros: MacroInfoRecord; +}): (tree: Ast.Root) => void; +``` + +## `unifiedLatexReparseMath` + +Reparse math environments/macro contents that should have been parsed in math mode but weren't. + +### Usage + +`unified().use(unifiedLatexReparseMath[, options])` + +#### options + +```typescript +{ mathEnvs: string[]; mathMacros: string[]; } +``` + +### Type + +`Plugin<{ mathEnvs: string[]; mathMacros: string[]; }[], Ast.Root, Ast.Root>` + +```typescript +function unifiedLatexReparseMath(options: { + mathEnvs: string[]; + mathMacros: string[]; +}): (tree: Ast.Root) => void; +``` + +# Functions + +## `getParser(options)` + +Returns the default `unified-latex` parser, or create a new one with the +provided `unifiedLatexFromString` options + +```typescript +function getParser(options: { + mode?: "math" | "regular"; + macros?: Ast.MacroInfoRecord; + environments?: Ast.EnvInfoRecord; + flags?: { + atLetter?: boolean; + expl3?: boolean; + autodetectExpl3AndAtLetter?: boolean; + }; +}): FrozenProcessor; +``` + +**Parameters** + +| Param | Type | Description | +| :------ | :-------------------------------- | -------------------------------------------------- | +| options | Omitted | Plugin options of `unifiedLatexFromString` plugin. | + +## `parse(str)` + +Parse the string into an AST. + +```typescript +function parse(str: String): Ast.Root; +``` + +**Parameters** + +| Param | Type | +| :---- | :------- | +| str | `String` | + +## `parseMath(str)` + +Parse `str` into an AST. Parsing starts in math mode and a list of +nodes is returned (instead of a "root" node). + +```typescript +function parseMath(str: string | Ast.Ast): Ast.Node[]; +``` + +**Parameters** + +| Param | Type | +| :---- | :------------------ | +| str | `string \| Ast.Ast` | + +## `parseMathMinimal(str)` + +Parse `str` to an AST with minimal processing. E.g., macro +arguments are not attached to macros, etc. when parsed with this +function. + +The parsing assumes a math-mode context, so, for example, `^` and `_` are +parsed as macros (even though arguments are not attached to them). + +```typescript +function parseMathMinimal(str: String): Ast.Node[]; +``` + +**Parameters** + +| Param | Type | +| :---- | :------- | +| str | `String` | + +## `parseMinimal(str)` + +Parse `str` to an AST with minimal processing. E.g., macro +arguments are not attached to macros, etc. when parsed with this +function. + +```typescript +function parseMinimal(str: String): Ast.Root; +``` + +**Parameters** + +| Param | Type | +| :---- | :------- | +| str | `String` | + +`unifiedLatexReparseMathConstructPlugin({ + mathEnvs, + mathMacros, +})` +--- + +Construct the inner function for the `unifiedLatexReparseMath` plugin. This function should not be used by libraries. + +```typescript +function unifiedLatexReparseMathConstructPlugin({ + mathEnvs, + mathMacros, +}: { + mathEnvs: string[]; + mathMacros: string[]; +}): (tree: Ast.Root) => void; +``` + +**Parameters** + +| Param | Type | +| :-------------------------------------------- | :-------------------------------- | +| { mathEnvs, mathMacros, } | Omitted | + +# Types + +## `PluginOptions` + +```typescript +export type PluginOptions = + | { + mode?: "math" | "regular"; + macros?: MacroInfoRecord; + environments?: EnvInfoRecord; + flags?: { + /** + * Whether to parse macros as if `\makeatletter` is set (i.e., parse `@` as a regular macro character) + */ + atLetter?: boolean; + /** + * Whether to parse macros as if `\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character) + */ + expl3?: boolean; + /** + * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`. + * Defaults to `false`. + */ + autodetectExpl3AndAtLetter?: boolean; + }; + } + | undefined; +``` diff --git a/node_modules/@unified-latex/unified-latex-util-parse/index.cjs b/node_modules/@unified-latex/unified-latex-util-parse/index.cjs new file mode 100644 index 0000000..cbe3ed4 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-parse/index.cjs @@ -0,0 +1,1389 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexCtan = require("@unified-latex/unified-latex-ctan"); +const unifiedLatexUtilTrim = require("@unified-latex/unified-latex-util-trim"); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +const unifiedLatexUtilArguments = require("@unified-latex/unified-latex-util-arguments"); +const unifiedLatexUtilEnvironments = require("@unified-latex/unified-latex-util-environments"); +const unifiedLatexUtilCatcode = require("@unified-latex/unified-latex-util-catcode"); +const unifiedLatexAstComplier = function unifiedLatexAstComplier2() { + Object.assign(this, { Compiler: (x) => x }); +}; +function bail(error) { + if (error) { + throw error; + } +} +function getDefaultExportFromCjs(x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; +} +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var isBuffer$1; +var hasRequiredIsBuffer; +function requireIsBuffer() { + if (hasRequiredIsBuffer) return isBuffer$1; + hasRequiredIsBuffer = 1; + isBuffer$1 = function isBuffer2(obj) { + return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj); + }; + return isBuffer$1; +} +var isBufferExports = requireIsBuffer(); +const isBuffer = /* @__PURE__ */ getDefaultExportFromCjs(isBufferExports); +var extend$1; +var hasRequiredExtend; +function requireExtend() { + if (hasRequiredExtend) return extend$1; + hasRequiredExtend = 1; + var hasOwn = Object.prototype.hasOwnProperty; + var toStr = Object.prototype.toString; + var defineProperty = Object.defineProperty; + var gOPD = Object.getOwnPropertyDescriptor; + var isArray = function isArray2(arr) { + if (typeof Array.isArray === "function") { + return Array.isArray(arr); + } + return toStr.call(arr) === "[object Array]"; + }; + var isPlainObject2 = function isPlainObject3(obj) { + if (!obj || toStr.call(obj) !== "[object Object]") { + return false; + } + var hasOwnConstructor = hasOwn.call(obj, "constructor"); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf"); + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } + var key; + for (key in obj) { + } + return typeof key === "undefined" || hasOwn.call(obj, key); + }; + var setProperty = function setProperty2(target, options) { + if (defineProperty && options.name === "__proto__") { + defineProperty(target, options.name, { + enumerable: true, + configurable: true, + value: options.newValue, + writable: true + }); + } else { + target[options.name] = options.newValue; + } + }; + var getProperty = function getProperty2(obj, name) { + if (name === "__proto__") { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + return gOPD(obj, name).value; + } + } + return obj[name]; + }; + extend$1 = function extend2() { + var options, name, src, copy, copyIsArray, clone; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + i = 2; + } + if (target == null || typeof target !== "object" && typeof target !== "function") { + target = {}; + } + for (; i < length; ++i) { + options = arguments[i]; + if (options != null) { + for (name in options) { + src = getProperty(target, name); + copy = getProperty(options, name); + if (target !== copy) { + if (deep && copy && (isPlainObject2(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + } else { + clone = src && isPlainObject2(src) ? src : {}; + } + setProperty(target, { name, newValue: extend2(deep, clone, copy) }); + } else if (typeof copy !== "undefined") { + setProperty(target, { name, newValue: copy }); + } + } + } + } + } + return target; + }; + return extend$1; +} +var extendExports = requireExtend(); +const extend = /* @__PURE__ */ getDefaultExportFromCjs(extendExports); +function isPlainObject(value) { + if (typeof value !== "object" || value === null) { + return false; + } + const prototype = Object.getPrototypeOf(value); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); +} +function trough() { + const fns = []; + const pipeline = { run, use }; + return pipeline; + function run(...values) { + let middlewareIndex = -1; + const callback = values.pop(); + if (typeof callback !== "function") { + throw new TypeError("Expected function as last argument, not " + callback); + } + next(null, ...values); + function next(error, ...output) { + const fn = fns[++middlewareIndex]; + let index2 = -1; + if (error) { + callback(error); + return; + } + while (++index2 < values.length) { + if (output[index2] === null || output[index2] === void 0) { + output[index2] = values[index2]; + } + } + values = output; + if (fn) { + wrap(fn, next)(...output); + } else { + callback(null, ...output); + } + } + } + function use(middelware) { + if (typeof middelware !== "function") { + throw new TypeError( + "Expected `middelware` to be a function, not " + middelware + ); + } + fns.push(middelware); + return pipeline; + } +} +function wrap(middleware, callback) { + let called; + return wrapped; + function wrapped(...parameters) { + const fnExpectsCallback = middleware.length > parameters.length; + let result; + if (fnExpectsCallback) { + parameters.push(done); + } + try { + result = middleware.apply(this, parameters); + } catch (error) { + const exception = ( + /** @type {Error} */ + error + ); + if (fnExpectsCallback && called) { + throw exception; + } + return done(exception); + } + if (!fnExpectsCallback) { + if (result && result.then && typeof result.then === "function") { + result.then(then, done); + } else if (result instanceof Error) { + done(result); + } else { + then(result); + } + } + } + function done(error, ...output) { + if (!called) { + called = true; + callback(error, ...output); + } + } + function then(value) { + done(null, value); + } +} +function stringifyPosition(value) { + if (!value || typeof value !== "object") { + return ""; + } + if ("position" in value || "type" in value) { + return position(value.position); + } + if ("start" in value || "end" in value) { + return position(value); + } + if ("line" in value || "column" in value) { + return point(value); + } + return ""; +} +function point(point2) { + return index(point2 && point2.line) + ":" + index(point2 && point2.column); +} +function position(pos) { + return point(pos && pos.start) + "-" + point(pos && pos.end); +} +function index(value) { + return value && typeof value === "number" ? value : 1; +} +class VFileMessage extends Error { + /** + * Create a message for `reason` at `place` from `origin`. + * + * When an error is passed in as `reason`, the `stack` is copied. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * + * > 👉 **Note**: you should use markdown. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns + * Instance of `VFileMessage`. + */ + // To do: next major: expose `undefined` everywhere instead of `null`. + constructor(reason, place, origin) { + const parts = [null, null]; + let position2 = { + // @ts-expect-error: we always follows the structure of `position`. + start: { line: null, column: null }, + // @ts-expect-error: " + end: { line: null, column: null } + }; + super(); + if (typeof place === "string") { + origin = place; + place = void 0; + } + if (typeof origin === "string") { + const index2 = origin.indexOf(":"); + if (index2 === -1) { + parts[1] = origin; + } else { + parts[0] = origin.slice(0, index2); + parts[1] = origin.slice(index2 + 1); + } + } + if (place) { + if ("type" in place || "position" in place) { + if (place.position) { + position2 = place.position; + } + } else if ("start" in place || "end" in place) { + position2 = place; + } else if ("line" in place || "column" in place) { + position2.start = place; + } + } + this.name = stringifyPosition(place) || "1:1"; + this.message = typeof reason === "object" ? reason.message : reason; + this.stack = ""; + if (typeof reason === "object" && reason.stack) { + this.stack = reason.stack; + } + this.reason = this.message; + this.fatal; + this.line = position2.start.line; + this.column = position2.start.column; + this.position = position2; + this.source = parts[0]; + this.ruleId = parts[1]; + this.file; + this.actual; + this.expected; + this.url; + this.note; + } +} +VFileMessage.prototype.file = ""; +VFileMessage.prototype.name = ""; +VFileMessage.prototype.reason = ""; +VFileMessage.prototype.message = ""; +VFileMessage.prototype.stack = ""; +VFileMessage.prototype.fatal = null; +VFileMessage.prototype.column = null; +VFileMessage.prototype.line = null; +VFileMessage.prototype.source = null; +VFileMessage.prototype.ruleId = null; +VFileMessage.prototype.position = null; +const path = { basename, dirname, extname, join, sep: "/" }; +function basename(path2, ext) { + if (ext !== void 0 && typeof ext !== "string") { + throw new TypeError('"ext" argument must be a string'); + } + assertPath$1(path2); + let start = 0; + let end = -1; + let index2 = path2.length; + let seenNonSlash; + if (ext === void 0 || ext.length === 0 || ext.length > path2.length) { + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else if (end < 0) { + seenNonSlash = true; + end = index2 + 1; + } + } + return end < 0 ? "" : path2.slice(start, end); + } + if (ext === path2) { + return ""; + } + let firstNonSlashEnd = -1; + let extIndex = ext.length - 1; + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else { + if (firstNonSlashEnd < 0) { + seenNonSlash = true; + firstNonSlashEnd = index2 + 1; + } + if (extIndex > -1) { + if (path2.charCodeAt(index2) === ext.charCodeAt(extIndex--)) { + if (extIndex < 0) { + end = index2; + } + } else { + extIndex = -1; + end = firstNonSlashEnd; + } + } + } + } + if (start === end) { + end = firstNonSlashEnd; + } else if (end < 0) { + end = path2.length; + } + return path2.slice(start, end); +} +function dirname(path2) { + assertPath$1(path2); + if (path2.length === 0) { + return "."; + } + let end = -1; + let index2 = path2.length; + let unmatchedSlash; + while (--index2) { + if (path2.charCodeAt(index2) === 47) { + if (unmatchedSlash) { + end = index2; + break; + } + } else if (!unmatchedSlash) { + unmatchedSlash = true; + } + } + return end < 0 ? path2.charCodeAt(0) === 47 ? "/" : "." : end === 1 && path2.charCodeAt(0) === 47 ? "//" : path2.slice(0, end); +} +function extname(path2) { + assertPath$1(path2); + let index2 = path2.length; + let end = -1; + let startPart = 0; + let startDot = -1; + let preDotState = 0; + let unmatchedSlash; + while (index2--) { + const code = path2.charCodeAt(index2); + if (code === 47) { + if (unmatchedSlash) { + startPart = index2 + 1; + break; + } + continue; + } + if (end < 0) { + unmatchedSlash = true; + end = index2 + 1; + } + if (code === 46) { + if (startDot < 0) { + startDot = index2; + } else if (preDotState !== 1) { + preDotState = 1; + } + } else if (startDot > -1) { + preDotState = -1; + } + } + if (startDot < 0 || end < 0 || // We saw a non-dot character immediately before the dot. + preDotState === 0 || // The (right-most) trimmed path component is exactly `..`. + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ""; + } + return path2.slice(startDot, end); +} +function join(...segments) { + let index2 = -1; + let joined; + while (++index2 < segments.length) { + assertPath$1(segments[index2]); + if (segments[index2]) { + joined = joined === void 0 ? segments[index2] : joined + "/" + segments[index2]; + } + } + return joined === void 0 ? "." : normalize(joined); +} +function normalize(path2) { + assertPath$1(path2); + const absolute = path2.charCodeAt(0) === 47; + let value = normalizeString(path2, !absolute); + if (value.length === 0 && !absolute) { + value = "."; + } + if (value.length > 0 && path2.charCodeAt(path2.length - 1) === 47) { + value += "/"; + } + return absolute ? "/" + value : value; +} +function normalizeString(path2, allowAboveRoot) { + let result = ""; + let lastSegmentLength = 0; + let lastSlash = -1; + let dots = 0; + let index2 = -1; + let code; + let lastSlashIndex; + while (++index2 <= path2.length) { + if (index2 < path2.length) { + code = path2.charCodeAt(index2); + } else if (code === 47) { + break; + } else { + code = 47; + } + if (code === 47) { + if (lastSlash === index2 - 1 || dots === 1) ; + else if (lastSlash !== index2 - 1 && dots === 2) { + if (result.length < 2 || lastSegmentLength !== 2 || result.charCodeAt(result.length - 1) !== 46 || result.charCodeAt(result.length - 2) !== 46) { + if (result.length > 2) { + lastSlashIndex = result.lastIndexOf("/"); + if (lastSlashIndex !== result.length - 1) { + if (lastSlashIndex < 0) { + result = ""; + lastSegmentLength = 0; + } else { + result = result.slice(0, lastSlashIndex); + lastSegmentLength = result.length - 1 - result.lastIndexOf("/"); + } + lastSlash = index2; + dots = 0; + continue; + } + } else if (result.length > 0) { + result = ""; + lastSegmentLength = 0; + lastSlash = index2; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + result = result.length > 0 ? result + "/.." : ".."; + lastSegmentLength = 2; + } + } else { + if (result.length > 0) { + result += "/" + path2.slice(lastSlash + 1, index2); + } else { + result = path2.slice(lastSlash + 1, index2); + } + lastSegmentLength = index2 - lastSlash - 1; + } + lastSlash = index2; + dots = 0; + } else if (code === 46 && dots > -1) { + dots++; + } else { + dots = -1; + } + } + return result; +} +function assertPath$1(path2) { + if (typeof path2 !== "string") { + throw new TypeError( + "Path must be a string. Received " + JSON.stringify(path2) + ); + } +} +const proc = { cwd }; +function cwd() { + return "/"; +} +function isUrl(fileUrlOrPath) { + return fileUrlOrPath !== null && typeof fileUrlOrPath === "object" && // @ts-expect-error: indexable. + fileUrlOrPath.href && // @ts-expect-error: indexable. + fileUrlOrPath.origin; +} +function urlToPath(path2) { + if (typeof path2 === "string") { + path2 = new URL(path2); + } else if (!isUrl(path2)) { + const error = new TypeError( + 'The "path" argument must be of type string or an instance of URL. Received `' + path2 + "`" + ); + error.code = "ERR_INVALID_ARG_TYPE"; + throw error; + } + if (path2.protocol !== "file:") { + const error = new TypeError("The URL must be of scheme file"); + error.code = "ERR_INVALID_URL_SCHEME"; + throw error; + } + return getPathFromURLPosix(path2); +} +function getPathFromURLPosix(url) { + if (url.hostname !== "") { + const error = new TypeError( + 'File URL host must be "localhost" or empty on darwin' + ); + error.code = "ERR_INVALID_FILE_URL_HOST"; + throw error; + } + const pathname = url.pathname; + let index2 = -1; + while (++index2 < pathname.length) { + if (pathname.charCodeAt(index2) === 37 && pathname.charCodeAt(index2 + 1) === 50) { + const third = pathname.charCodeAt(index2 + 2); + if (third === 70 || third === 102) { + const error = new TypeError( + "File URL path must not include encoded / characters" + ); + error.code = "ERR_INVALID_FILE_URL_PATH"; + throw error; + } + } + } + return decodeURIComponent(pathname); +} +const order = ["history", "path", "basename", "stem", "extname", "dirname"]; +class VFile { + /** + * Create a new virtual file. + * + * `options` is treated as: + * + * * `string` or `Buffer` — `{value: options}` + * * `URL` — `{path: options}` + * * `VFile` — shallow copies its data over to the new file + * * `object` — all fields are shallow copied over to the new file + * + * Path related fields are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * You cannot set `dirname` or `extname` without setting either `history`, + * `path`, `basename`, or `stem` too. + * + * @param {Compatible | null | undefined} [value] + * File value. + * @returns + * New instance. + */ + constructor(value) { + let options; + if (!value) { + options = {}; + } else if (typeof value === "string" || buffer(value)) { + options = { value }; + } else if (isUrl(value)) { + options = { path: value }; + } else { + options = value; + } + this.data = {}; + this.messages = []; + this.history = []; + this.cwd = proc.cwd(); + this.value; + this.stored; + this.result; + this.map; + let index2 = -1; + while (++index2 < order.length) { + const prop2 = order[index2]; + if (prop2 in options && options[prop2] !== void 0 && options[prop2] !== null) { + this[prop2] = prop2 === "history" ? [...options[prop2]] : options[prop2]; + } + } + let prop; + for (prop in options) { + if (!order.includes(prop)) { + this[prop] = options[prop]; + } + } + } + /** + * Get the full path (example: `'~/index.min.js'`). + * + * @returns {string} + */ + get path() { + return this.history[this.history.length - 1]; + } + /** + * Set the full path (example: `'~/index.min.js'`). + * + * Cannot be nullified. + * You can set a file URL (a `URL` object with a `file:` protocol) which will + * be turned into a path with `url.fileURLToPath`. + * + * @param {string | URL} path + */ + set path(path2) { + if (isUrl(path2)) { + path2 = urlToPath(path2); + } + assertNonEmpty(path2, "path"); + if (this.path !== path2) { + this.history.push(path2); + } + } + /** + * Get the parent path (example: `'~'`). + */ + get dirname() { + return typeof this.path === "string" ? path.dirname(this.path) : void 0; + } + /** + * Set the parent path (example: `'~'`). + * + * Cannot be set if there’s no `path` yet. + */ + set dirname(dirname2) { + assertPath(this.basename, "dirname"); + this.path = path.join(dirname2 || "", this.basename); + } + /** + * Get the basename (including extname) (example: `'index.min.js'`). + */ + get basename() { + return typeof this.path === "string" ? path.basename(this.path) : void 0; + } + /** + * Set basename (including extname) (`'index.min.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set basename(basename2) { + assertNonEmpty(basename2, "basename"); + assertPart(basename2, "basename"); + this.path = path.join(this.dirname || "", basename2); + } + /** + * Get the extname (including dot) (example: `'.js'`). + */ + get extname() { + return typeof this.path === "string" ? path.extname(this.path) : void 0; + } + /** + * Set the extname (including dot) (example: `'.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be set if there’s no `path` yet. + */ + set extname(extname2) { + assertPart(extname2, "extname"); + assertPath(this.dirname, "extname"); + if (extname2) { + if (extname2.charCodeAt(0) !== 46) { + throw new Error("`extname` must start with `.`"); + } + if (extname2.includes(".", 1)) { + throw new Error("`extname` cannot contain multiple dots"); + } + } + this.path = path.join(this.dirname, this.stem + (extname2 || "")); + } + /** + * Get the stem (basename w/o extname) (example: `'index.min'`). + */ + get stem() { + return typeof this.path === "string" ? path.basename(this.path, this.extname) : void 0; + } + /** + * Set the stem (basename w/o extname) (example: `'index.min'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set stem(stem) { + assertNonEmpty(stem, "stem"); + assertPart(stem, "stem"); + this.path = path.join(this.dirname || "", stem + (this.extname || "")); + } + /** + * Serialize the file. + * + * @param {BufferEncoding | null | undefined} [encoding='utf8'] + * Character encoding to understand `value` as when it’s a `Buffer` + * (default: `'utf8'`). + * @returns {string} + * Serialized file. + */ + toString(encoding) { + return (this.value || "").toString(encoding || void 0); + } + /** + * Create a warning message associated with the file. + * + * Its `fatal` is set to `false` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + message(reason, place, origin) { + const message = new VFileMessage(reason, place, origin); + if (this.path) { + message.name = this.path + ":" + message.name; + message.file = this.path; + } + message.fatal = false; + this.messages.push(message); + return message; + } + /** + * Create an info message associated with the file. + * + * Its `fatal` is set to `null` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + info(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = null; + return message; + } + /** + * Create a fatal error associated with the file. + * + * Its `fatal` is set to `true` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * > 👉 **Note**: a fatal error means that a file is no longer processable. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {never} + * Message. + * @throws {VFileMessage} + * Message. + */ + fail(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = true; + throw message; + } +} +function assertPart(part, name) { + if (part && part.includes(path.sep)) { + throw new Error( + "`" + name + "` cannot be a path: did not expect `" + path.sep + "`" + ); + } +} +function assertNonEmpty(part, name) { + if (!part) { + throw new Error("`" + name + "` cannot be empty"); + } +} +function assertPath(path2, name) { + if (!path2) { + throw new Error("Setting `" + name + "` requires `path` to be set too"); + } +} +function buffer(value) { + return isBuffer(value); +} +const unified = base().freeze(); +const own = {}.hasOwnProperty; +function base() { + const transformers = trough(); + const attachers = []; + let namespace = {}; + let frozen; + let freezeIndex = -1; + processor.data = data; + processor.Parser = void 0; + processor.Compiler = void 0; + processor.freeze = freeze; + processor.attachers = attachers; + processor.use = use; + processor.parse = parse2; + processor.stringify = stringify; + processor.run = run; + processor.runSync = runSync; + processor.process = process; + processor.processSync = processSync; + return processor; + function processor() { + const destination = base(); + let index2 = -1; + while (++index2 < attachers.length) { + destination.use(...attachers[index2]); + } + destination.data(extend(true, {}, namespace)); + return destination; + } + function data(key, value) { + if (typeof key === "string") { + if (arguments.length === 2) { + assertUnfrozen("data", frozen); + namespace[key] = value; + return processor; + } + return own.call(namespace, key) && namespace[key] || null; + } + if (key) { + assertUnfrozen("data", frozen); + namespace = key; + return processor; + } + return namespace; + } + function freeze() { + if (frozen) { + return processor; + } + while (++freezeIndex < attachers.length) { + const [attacher, ...options] = attachers[freezeIndex]; + if (options[0] === false) { + continue; + } + if (options[0] === true) { + options[0] = void 0; + } + const transformer = attacher.call(processor, ...options); + if (typeof transformer === "function") { + transformers.use(transformer); + } + } + frozen = true; + freezeIndex = Number.POSITIVE_INFINITY; + return processor; + } + function use(value, ...options) { + let settings; + assertUnfrozen("use", frozen); + if (value === null || value === void 0) ; + else if (typeof value === "function") { + addPlugin(value, ...options); + } else if (typeof value === "object") { + if (Array.isArray(value)) { + addList(value); + } else { + addPreset(value); + } + } else { + throw new TypeError("Expected usable value, not `" + value + "`"); + } + if (settings) { + namespace.settings = Object.assign(namespace.settings || {}, settings); + } + return processor; + function add(value2) { + if (typeof value2 === "function") { + addPlugin(value2); + } else if (typeof value2 === "object") { + if (Array.isArray(value2)) { + const [plugin, ...options2] = value2; + addPlugin(plugin, ...options2); + } else { + addPreset(value2); + } + } else { + throw new TypeError("Expected usable value, not `" + value2 + "`"); + } + } + function addPreset(result) { + addList(result.plugins); + if (result.settings) { + settings = Object.assign(settings || {}, result.settings); + } + } + function addList(plugins) { + let index2 = -1; + if (plugins === null || plugins === void 0) ; + else if (Array.isArray(plugins)) { + while (++index2 < plugins.length) { + const thing = plugins[index2]; + add(thing); + } + } else { + throw new TypeError("Expected a list of plugins, not `" + plugins + "`"); + } + } + function addPlugin(plugin, value2) { + let index2 = -1; + let entry; + while (++index2 < attachers.length) { + if (attachers[index2][0] === plugin) { + entry = attachers[index2]; + break; + } + } + if (entry) { + if (isPlainObject(entry[1]) && isPlainObject(value2)) { + value2 = extend(true, entry[1], value2); + } + entry[1] = value2; + } else { + attachers.push([...arguments]); + } + } + } + function parse2(doc) { + processor.freeze(); + const file = vfile(doc); + const Parser = processor.Parser; + assertParser("parse", Parser); + if (newable(Parser, "parse")) { + return new Parser(String(file), file).parse(); + } + return Parser(String(file), file); + } + function stringify(node, doc) { + processor.freeze(); + const file = vfile(doc); + const Compiler = processor.Compiler; + assertCompiler("stringify", Compiler); + assertNode(node); + if (newable(Compiler, "compile")) { + return new Compiler(node, file).compile(); + } + return Compiler(node, file); + } + function run(node, doc, callback) { + assertNode(node); + processor.freeze(); + if (!callback && typeof doc === "function") { + callback = doc; + doc = void 0; + } + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + transformers.run(node, vfile(doc), done); + function done(error, tree, file) { + tree = tree || node; + if (error) { + reject(error); + } else if (resolve) { + resolve(tree); + } else { + callback(null, tree, file); + } + } + } + } + function runSync(node, file) { + let result; + let complete; + processor.run(node, file, done); + assertDone("runSync", "run", complete); + return result; + function done(error, tree) { + bail(error); + result = tree; + complete = true; + } + } + function process(doc, callback) { + processor.freeze(); + assertParser("process", processor.Parser); + assertCompiler("process", processor.Compiler); + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + const file = vfile(doc); + processor.run(processor.parse(file), file, (error, tree, file2) => { + if (error || !tree || !file2) { + done(error); + } else { + const result = processor.stringify(tree, file2); + if (result === void 0 || result === null) ; + else if (looksLikeAVFileValue(result)) { + file2.value = result; + } else { + file2.result = result; + } + done(error, file2); + } + }); + function done(error, file2) { + if (error || !file2) { + reject(error); + } else if (resolve) { + resolve(file2); + } else { + callback(null, file2); + } + } + } + } + function processSync(doc) { + let complete; + processor.freeze(); + assertParser("processSync", processor.Parser); + assertCompiler("processSync", processor.Compiler); + const file = vfile(doc); + processor.process(file, done); + assertDone("processSync", "process", complete); + return file; + function done(error) { + complete = true; + bail(error); + } + } +} +function newable(value, name) { + return typeof value === "function" && // Prototypes do exist. + // type-coverage:ignore-next-line + value.prototype && // A function with keys in its prototype is probably a constructor. + // Classes’ prototype methods are not enumerable, so we check if some value + // exists in the prototype. + // type-coverage:ignore-next-line + (keys(value.prototype) || name in value.prototype); +} +function keys(value) { + let key; + for (key in value) { + if (own.call(value, key)) { + return true; + } + } + return false; +} +function assertParser(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Parser`"); + } +} +function assertCompiler(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Compiler`"); + } +} +function assertUnfrozen(name, frozen) { + if (frozen) { + throw new Error( + "Cannot call `" + name + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`." + ); + } +} +function assertNode(node) { + if (!isPlainObject(node) || typeof node.type !== "string") { + throw new TypeError("Expected node, got `" + node + "`"); + } +} +function assertDone(name, asyncName, complete) { + if (!complete) { + throw new Error( + "`" + name + "` finished async. Use `" + asyncName + "` instead" + ); + } +} +function vfile(value) { + return looksLikeAVFile(value) ? value : new VFile(value); +} +function looksLikeAVFile(value) { + return Boolean( + value && typeof value === "object" && "message" in value && "messages" in value + ); +} +function looksLikeAVFileValue(value) { + return typeof value === "string" || isBuffer(value); +} +function parseMinimal(str) { + return unifiedLatexUtilPegjs.LatexPegParser.parse(str); +} +function parseMathMinimal(str) { + return unifiedLatexUtilPegjs.LatexPegParser.parse(str, { startRule: "math" }); +} +const unifiedLatexFromStringMinimal = function unifiedLatexFromStringMinimal2(options) { + const parser2 = (str) => { + if ((options == null ? void 0 : options.mode) === "math") { + return { + type: "root", + content: parseMathMinimal(str), + _renderInfo: { inMathMode: true } + }; + } + return parseMinimal(str); + }; + Object.assign(this, { Parser: parser2 }); +}; +const unifiedLatexReparseMath = function unifiedLatexReparseMath2(options) { + const { mathEnvs = [], mathMacros = [] } = options || {}; + return unifiedLatexReparseMathConstructPlugin({ mathMacros, mathEnvs }); +}; +function unifiedLatexReparseMathConstructPlugin({ + mathEnvs, + mathMacros +}) { + const isMathEnvironment = unifiedLatexUtilMatch.match.createEnvironmentMatcher(mathEnvs); + const isMathMacro = unifiedLatexUtilMatch.match.createMacroMatcher(mathMacros); + return (tree) => { + unifiedLatexUtilVisit.visit( + tree, + (node) => { + if (unifiedLatexUtilMatch.match.anyMacro(node)) { + for (const arg of node.args || []) { + if (arg.content.length > 0 && !wasParsedInMathMode(arg.content)) { + arg.content = parseMathMinimal( + unifiedLatexUtilPrintRaw.printRaw(arg.content) + ); + } + } + } + if (unifiedLatexUtilMatch.match.anyEnvironment(node)) { + if (!wasParsedInMathMode(node.content)) { + node.content = parseMathMinimal(unifiedLatexUtilPrintRaw.printRaw(node.content)); + } + } + }, + { + test: (node) => isMathEnvironment(node) || isMathMacro(node) + } + ); + }; +} +function wasParsedInMathMode(nodes) { + return !nodes.some( + (node) => ( + // If there are multi-char strings or ^ and _ have been parsed as strings, we know + // that we were not parsed in math mode. + unifiedLatexUtilMatch.match.anyString(node) && node.content.length > 1 || unifiedLatexUtilMatch.match.string(node, "^") || unifiedLatexUtilMatch.match.string(node, "_") + ) + ); +} +const unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse2(options) { + const { environments = {}, macros = {} } = options || {}; + const mathMacros = Object.fromEntries( + Object.entries(macros).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathEnvs = Object.fromEntries( + Object.entries(environments).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathReparser = unifiedLatexReparseMathConstructPlugin({ + mathEnvs: Object.keys(mathEnvs), + mathMacros: Object.keys(mathMacros) + }); + const isRelevantEnvironment = unifiedLatexUtilMatch.match.createEnvironmentMatcher(environments); + const isRelevantMathEnvironment = unifiedLatexUtilMatch.match.createEnvironmentMatcher(mathEnvs); + return (tree) => { + unifiedLatexUtilVisit.visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + unifiedLatexUtilArguments.attachMacroArgsInArray(nodes, mathMacros); + }, + leave: (node) => { + if (!isRelevantMathEnvironment(node)) { + return; + } + const envName = unifiedLatexUtilPrintRaw.printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + unifiedLatexUtilEnvironments.processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + mathReparser(tree); + unifiedLatexUtilVisit.visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + unifiedLatexUtilArguments.attachMacroArgsInArray(nodes, macros); + }, + leave: (node) => { + if (!isRelevantEnvironment(node)) { + return; + } + const envName = unifiedLatexUtilPrintRaw.printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + unifiedLatexUtilEnvironments.processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + }; +}; +const unifiedLatexProcessAtLetterAndExplMacros = function unifiedLatexProcessAtLetterAndExplMacros2(options) { + let { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = options || {}; + return (tree) => { + unifiedLatexUtilCatcode.reparseExpl3AndAtLetterRegions(tree); + if (atLetter || expl3) { + autodetectExpl3AndAtLetter = false; + } + if (autodetectExpl3AndAtLetter) { + atLetter = unifiedLatexUtilCatcode.hasReparsableMacroNames(tree, "@"); + expl3 = unifiedLatexUtilCatcode.hasReparsableMacroNames(tree, "_"); + } + const charSet = /* @__PURE__ */ new Set(); + if (atLetter) { + charSet.add("@"); + } + if (expl3) { + charSet.add(":"); + charSet.add("_"); + } + if (charSet.size > 0) { + unifiedLatexUtilCatcode.reparseMacroNames(tree, charSet); + } + }; +}; +const unifiedLatexFromString = function unifiedLatexFromString2(options) { + const { + mode = "regular", + macros = {}, + environments = {}, + flags: { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = {} + } = options || {}; + const allMacroInfo = Object.assign( + {}, + ...Object.values(unifiedLatexCtan.macroInfo), + macros + ); + const allEnvInfo = Object.assign( + {}, + ...Object.values(unifiedLatexCtan.environmentInfo), + environments + ); + const fullParser = unified().use(unifiedLatexFromStringMinimal, { mode }).use(unifiedLatexProcessAtLetterAndExplMacros, { + atLetter, + expl3, + autodetectExpl3AndAtLetter + }).use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, { + macros: allMacroInfo, + environments: allEnvInfo + }).use(unifiedLatexUtilTrim.unifiedLatexTrimEnvironmentContents).use(unifiedLatexUtilTrim.unifiedLatexTrimRoot).use(unifiedLatexAstComplier); + const parser2 = (str) => { + const file = fullParser.processSync({ value: str }); + return file.result; + }; + Object.assign(this, { Parser: parser2 }); +}; +let parser = unified().use(unifiedLatexFromString).freeze(); +function parse(str) { + return parser.parse(str); +} +function getParser(options) { + return options ? unified().use(unifiedLatexFromString, options).freeze() : parser; +} +function parseMath(str) { + if (typeof str !== "string") { + str = unifiedLatexUtilPrintRaw.printRaw(str); + } + const file = unified().use(unifiedLatexFromString, { mode: "math" }).use(unifiedLatexAstComplier).processSync({ value: str }); + return file.result.content; +} +exports.getParser = getParser; +exports.parse = parse; +exports.parseMath = parseMath; +exports.parseMathMinimal = parseMathMinimal; +exports.parseMinimal = parseMinimal; +exports.unifiedLatexAstComplier = unifiedLatexAstComplier; +exports.unifiedLatexFromString = unifiedLatexFromString; +exports.unifiedLatexFromStringMinimal = unifiedLatexFromStringMinimal; +exports.unifiedLatexProcessAtLetterAndExplMacros = unifiedLatexProcessAtLetterAndExplMacros; +exports.unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse = unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse; +exports.unifiedLatexReparseMath = unifiedLatexReparseMath; +exports.unifiedLatexReparseMathConstructPlugin = unifiedLatexReparseMathConstructPlugin; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-parse/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-parse/index.cjs.map new file mode 100644 index 0000000..600eaf5 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-parse/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/compiler-ast.ts","../../../node_modules/bail/index.js","../../../node_modules/is-buffer/index.js","../../../node_modules/extend/index.js","../node_modules/is-plain-obj/index.js","../../../node_modules/trough/lib/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/index.js","../libs/parse-minimal.ts","../libs/plugin-from-string-minimal.ts","../libs/reparse-math.ts","../libs/process-macros-and-environments.ts","../libs/process-at-letter-and-expl-macros.ts","../libs/plugin-from-string.ts","../libs/parse.ts","../libs/parse-math.ts"],"sourcesContent":["import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Unified complier plugin that passes through a LaTeX AST without modification.\n */\nexport const unifiedLatexAstComplier: Plugin =\n function unifiedLatexAstComplier() {\n Object.assign(this, { Compiler: (x: Ast.Root) => x });\n };\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason` at `place` from `origin`.\n *\n * When an error is passed in as `reason`, the `stack` is copied.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n *\n * > 👉 **Note**: you should use markdown.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // To do: next major: expose `undefined` everywhere instead of `null`.\n constructor(reason, place, origin) {\n /** @type {[string | null, string | null]} */\n const parts = [null, null]\n /** @type {Position} */\n let position = {\n // @ts-expect-error: we always follows the structure of `position`.\n start: {line: null, column: null},\n // @ts-expect-error: \"\n end: {line: null, column: null}\n }\n\n super()\n\n if (typeof place === 'string') {\n origin = place\n place = undefined\n }\n\n if (typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n parts[1] = origin\n } else {\n parts[0] = origin.slice(0, index)\n parts[1] = origin.slice(index + 1)\n }\n }\n\n if (place) {\n // Node.\n if ('type' in place || 'position' in place) {\n if (place.position) {\n // To do: next major: deep clone.\n // @ts-expect-error: looks like a position.\n position = place.position\n }\n }\n // Position.\n else if ('start' in place || 'end' in place) {\n // @ts-expect-error: looks like a position.\n // To do: next major: deep clone.\n position = place\n }\n // Point.\n else if ('line' in place || 'column' in place) {\n // To do: next major: deep clone.\n position.start = place\n }\n }\n\n // Fields from `Error`.\n /**\n * Serialized positional info of error.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(place) || '1:1'\n\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = typeof reason === 'object' ? reason.message : reason\n\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack = ''\n\n if (typeof reason === 'object' && reason.stack) {\n this.stack = reason.stack\n }\n\n /**\n * Reason for message.\n *\n * > 👉 **Note**: you should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /* eslint-disable no-unused-expressions */\n /**\n * State of problem.\n *\n * * `true` — marks associated file as no longer processable (error)\n * * `false` — necessitates a (potential) change (warning)\n * * `null | undefined` — for things that might not need changing (info)\n *\n * @type {boolean | null | undefined}\n */\n this.fatal\n\n /**\n * Starting line of error.\n *\n * @type {number | null}\n */\n this.line = position.start.line\n\n /**\n * Starting column of error.\n *\n * @type {number | null}\n */\n this.column = position.start.column\n\n /**\n * Full unist position.\n *\n * @type {Position | null}\n */\n this.position = position\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | null}\n */\n this.source = parts[0]\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | null}\n */\n this.ruleId = parts[1]\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | null}\n */\n this.file\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | null}\n */\n this.actual\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array | null}\n */\n this.expected\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | null}\n */\n this.url\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | null}\n */\n this.note\n /* eslint-enable no-unused-expressions */\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.fatal = null\nVFileMessage.prototype.column = null\nVFileMessage.prototype.line = null\nVFileMessage.prototype.source = null\nVFileMessage.prototype.ruleId = null\nVFileMessage.prototype.position = null\n","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | undefined} [ext]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (ext === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extIndex = ext.length - 1\n\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extIndex > -1) {\n // Try to match the explicit extension.\n if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) {\n if (extIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.charCodeAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.charCodeAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.charCodeAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.charCodeAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.charCodeAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.charCodeAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.charCodeAt(result.length - 1) !== 46 /* `.` */ ||\n result.charCodeAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const proc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * @typedef URL\n * @property {string} hash\n * @property {string} host\n * @property {string} hostname\n * @property {string} href\n * @property {string} origin\n * @property {string} password\n * @property {string} pathname\n * @property {string} port\n * @property {string} protocol\n * @property {string} search\n * @property {any} searchParams\n * @property {string} username\n * @property {() => string} toString\n * @property {() => string} toJSON\n */\n\n/**\n * Check if `fileUrlOrPath` looks like a URL.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return (\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n // @ts-expect-error: indexable.\n fileUrlOrPath.href &&\n // @ts-expect-error: indexable.\n fileUrlOrPath.origin\n )\n}\n","/// \n\nimport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {string | URL} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.charCodeAt(index) === 37 /* `%` */ &&\n pathname.charCodeAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.charCodeAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n\nexport {isUrl} from './minurl.shared.js'\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {import('./minurl.shared.js').URL} URL\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {Record & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'} BufferEncoding\n * Encodings supported by the buffer class.\n *\n * This is a copy of the types from Node, copied to prevent Node globals from\n * being needed.\n * Copied from: \n *\n * @typedef {Options | URL | Value | VFile} Compatible\n * Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n * Set multiple values.\n * @property {Value | null | undefined} [value]\n * Set `value`.\n * @property {string | null | undefined} [cwd]\n * Set `cwd`.\n * @property {Array | null | undefined} [history]\n * Set `history`.\n * @property {URL | string | null | undefined} [path]\n * Set `path`.\n * @property {string | null | undefined} [basename]\n * Set `basename`.\n * @property {string | null | undefined} [stem]\n * Set `stem`.\n * @property {string | null | undefined} [extname]\n * Set `extname`.\n * @property {string | null | undefined} [dirname]\n * Set `dirname`.\n * @property {Data | null | undefined} [data]\n * Set `data`.\n *\n * @typedef Map\n * Raw source map.\n *\n * See:\n * .\n * @property {number} version\n * Which version of the source map spec this map is following.\n * @property {Array} sources\n * An array of URLs to the original source files.\n * @property {Array} names\n * An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n * The URL root from which all sources are relative.\n * @property {Array | undefined} [sourcesContent]\n * An array of contents of the original source files.\n * @property {string} mappings\n * A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n * The generated file this source map is associated with.\n *\n * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options\n * Configuration.\n *\n * A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record} ReporterSettings\n * Configuration for reporters.\n */\n\n/**\n * @template {ReporterSettings} Settings\n * Options type.\n * @callback Reporter\n * Type for a reporter.\n * @param {Array} files\n * Files to report.\n * @param {Settings} options\n * Configuration.\n * @returns {string}\n * Report.\n */\n\nimport bufferLike from 'is-buffer'\nimport {VFileMessage} from 'vfile-message'\nimport {path} from './minpath.js'\nimport {proc} from './minproc.js'\nimport {urlToPath, isUrl} from './minurl.js'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n *\n * @type {Array<'basename' | 'dirname' | 'extname' | 'history' | 'path' | 'stem'>}\n */\nconst order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Buffer` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (typeof value === 'string' || buffer(value)) {\n options = {value}\n } else if (isUrl(value)) {\n options = {path: value}\n } else {\n options = value\n }\n\n /**\n * Place to store custom information (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n this.messages = []\n\n /**\n * List of filepaths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n this.history = []\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n this.cwd = proc.cwd()\n\n /* eslint-disable no-unused-expressions */\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const prop = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n prop in options &&\n options[prop] !== undefined &&\n options[prop] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n }\n }\n\n /** @type {string} */\n let prop\n\n // Set non-path related properties.\n for (prop in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(prop)) {\n // @ts-expect-error: fine to set other things.\n this[prop] = options[prop]\n }\n }\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {string | URL} path\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the parent path (example: `'~'`).\n */\n get dirname() {\n return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = path.join(dirname || '', this.basename)\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n */\n get basename() {\n return typeof this.path === 'string' ? path.basename(this.path) : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = path.join(this.dirname || '', basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n */\n get extname() {\n return typeof this.path === 'string' ? path.extname(this.path) : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.charCodeAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = path.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n */\n get stem() {\n return typeof this.path === 'string'\n ? path.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n /**\n * Serialize the file.\n *\n * @param {BufferEncoding | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Buffer`\n * (default: `'utf8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n return (this.value || '').toString(encoding || undefined)\n }\n\n /**\n * Create a warning message associated with the file.\n *\n * Its `fatal` is set to `false` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(reason, place, origin) {\n const message = new VFileMessage(reason, place, origin)\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Create an info message associated with the file.\n *\n * Its `fatal` is set to `null` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(reason, place, origin) {\n const message = this.message(reason, place, origin)\n\n message.fatal = null\n\n return message\n }\n\n /**\n * Create a fatal error associated with the file.\n *\n * Its `fatal` is set to `true` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * > 👉 **Note**: a fatal error means that a file is no longer processable.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Message.\n * @throws {VFileMessage}\n * Message.\n */\n fail(reason, place, origin) {\n const message = this.message(reason, place, origin)\n\n message.fatal = true\n\n throw message\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {void}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(path.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is a buffer.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Buffer}\n * Whether `value` is a Node.js buffer.\n */\nfunction buffer(value) {\n return bufferLike(value)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('vfile').VFileCompatible} VFileCompatible\n * @typedef {import('vfile').VFileValue} VFileValue\n * @typedef {import('..').Processor} Processor\n * @typedef {import('..').Plugin} Plugin\n * @typedef {import('..').Preset} Preset\n * @typedef {import('..').Pluggable} Pluggable\n * @typedef {import('..').PluggableList} PluggableList\n * @typedef {import('..').Transformer} Transformer\n * @typedef {import('..').Parser} Parser\n * @typedef {import('..').Compiler} Compiler\n * @typedef {import('..').RunCallback} RunCallback\n * @typedef {import('..').ProcessCallback} ProcessCallback\n *\n * @typedef Context\n * @property {Node} tree\n * @property {VFile} file\n */\n\nimport {bail} from 'bail'\nimport isBuffer from 'is-buffer'\nimport extend from 'extend'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\n\n// Expose a frozen processor.\nexport const unified = base().freeze()\n\nconst own = {}.hasOwnProperty\n\n// Function to create the first processor.\n/**\n * @returns {Processor}\n */\nfunction base() {\n const transformers = trough()\n /** @type {Processor['attachers']} */\n const attachers = []\n /** @type {Record} */\n let namespace = {}\n /** @type {boolean|undefined} */\n let frozen\n let freezeIndex = -1\n\n // Data management.\n // @ts-expect-error: overloads are handled.\n processor.data = data\n processor.Parser = undefined\n processor.Compiler = undefined\n\n // Lock.\n processor.freeze = freeze\n\n // Plugins.\n processor.attachers = attachers\n // @ts-expect-error: overloads are handled.\n processor.use = use\n\n // API.\n processor.parse = parse\n processor.stringify = stringify\n // @ts-expect-error: overloads are handled.\n processor.run = run\n processor.runSync = runSync\n // @ts-expect-error: overloads are handled.\n processor.process = process\n processor.processSync = processSync\n\n // Expose.\n return processor\n\n // Create a new processor based on the processor in the current scope.\n /** @type {Processor} */\n function processor() {\n const destination = base()\n let index = -1\n\n while (++index < attachers.length) {\n destination.use(...attachers[index])\n }\n\n destination.data(extend(true, {}, namespace))\n\n return destination\n }\n\n /**\n * @param {string|Record} [key]\n * @param {unknown} [value]\n * @returns {unknown}\n */\n function data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', frozen)\n namespace[key] = value\n return processor\n }\n\n // Get `key`.\n return (own.call(namespace, key) && namespace[key]) || null\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', frozen)\n namespace = key\n return processor\n }\n\n // Get space.\n return namespace\n }\n\n /** @type {Processor['freeze']} */\n function freeze() {\n if (frozen) {\n return processor\n }\n\n while (++freezeIndex < attachers.length) {\n const [attacher, ...options] = attachers[freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n /** @type {Transformer|void} */\n const transformer = attacher.call(processor, ...options)\n\n if (typeof transformer === 'function') {\n transformers.use(transformer)\n }\n }\n\n frozen = true\n freezeIndex = Number.POSITIVE_INFINITY\n\n return processor\n }\n\n /**\n * @param {Pluggable|null|undefined} [value]\n * @param {...unknown} options\n * @returns {Processor}\n */\n function use(value, ...options) {\n /** @type {Record|undefined} */\n let settings\n\n assertUnfrozen('use', frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, ...options)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n if (settings) {\n namespace.settings = Object.assign(namespace.settings || {}, settings)\n }\n\n return processor\n\n /**\n * @param {import('..').Pluggable} value\n * @returns {void}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...options] = value\n addPlugin(plugin, ...options)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {void}\n */\n function addPreset(result) {\n addList(result.plugins)\n\n if (result.settings) {\n settings = Object.assign(settings || {}, result.settings)\n }\n }\n\n /**\n * @param {PluggableList|null|undefined} [plugins]\n * @returns {void}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {...unknown} [value]\n * @returns {void}\n */\n function addPlugin(plugin, value) {\n let index = -1\n /** @type {Processor['attachers'][number]|undefined} */\n let entry\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entry = attachers[index]\n break\n }\n }\n\n if (entry) {\n if (isPlainObj(entry[1]) && isPlainObj(value)) {\n value = extend(true, entry[1], value)\n }\n\n entry[1] = value\n } else {\n // @ts-expect-error: fine.\n attachers.push([...arguments])\n }\n }\n }\n\n /** @type {Processor['parse']} */\n function parse(doc) {\n processor.freeze()\n const file = vfile(doc)\n const Parser = processor.Parser\n assertParser('parse', Parser)\n\n if (newable(Parser, 'parse')) {\n // @ts-expect-error: `newable` checks this.\n return new Parser(String(file), file).parse()\n }\n\n // @ts-expect-error: `newable` checks this.\n return Parser(String(file), file) // eslint-disable-line new-cap\n }\n\n /** @type {Processor['stringify']} */\n function stringify(node, doc) {\n processor.freeze()\n const file = vfile(doc)\n const Compiler = processor.Compiler\n assertCompiler('stringify', Compiler)\n assertNode(node)\n\n if (newable(Compiler, 'compile')) {\n // @ts-expect-error: `newable` checks this.\n return new Compiler(node, file).compile()\n }\n\n // @ts-expect-error: `newable` checks this.\n return Compiler(node, file) // eslint-disable-line new-cap\n }\n\n /**\n * @param {Node} node\n * @param {VFileCompatible|RunCallback} [doc]\n * @param {RunCallback} [callback]\n * @returns {Promise|void}\n */\n function run(node, doc, callback) {\n assertNode(node)\n processor.freeze()\n\n if (!callback && typeof doc === 'function') {\n callback = doc\n doc = undefined\n }\n\n if (!callback) {\n return new Promise(executor)\n }\n\n executor(null, callback)\n\n /**\n * @param {null|((node: Node) => void)} resolve\n * @param {(error: Error) => void} reject\n * @returns {void}\n */\n function executor(resolve, reject) {\n // @ts-expect-error: `doc` can’t be a callback anymore, we checked.\n transformers.run(node, vfile(doc), done)\n\n /**\n * @param {Error|null} error\n * @param {Node} tree\n * @param {VFile} file\n * @returns {void}\n */\n function done(error, tree, file) {\n tree = tree || node\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(tree)\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, tree, file)\n }\n }\n }\n }\n\n /** @type {Processor['runSync']} */\n function runSync(node, file) {\n /** @type {Node|undefined} */\n let result\n /** @type {boolean|undefined} */\n let complete\n\n processor.run(node, file, done)\n\n assertDone('runSync', 'run', complete)\n\n // @ts-expect-error: we either bailed on an error or have a tree.\n return result\n\n /**\n * @param {Error|null} [error]\n * @param {Node} [tree]\n * @returns {void}\n */\n function done(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * @param {VFileCompatible} doc\n * @param {ProcessCallback} [callback]\n * @returns {Promise|undefined}\n */\n function process(doc, callback) {\n processor.freeze()\n assertParser('process', processor.Parser)\n assertCompiler('process', processor.Compiler)\n\n if (!callback) {\n return new Promise(executor)\n }\n\n executor(null, callback)\n\n /**\n * @param {null|((file: VFile) => void)} resolve\n * @param {(error?: Error|null|undefined) => void} reject\n * @returns {void}\n */\n function executor(resolve, reject) {\n const file = vfile(doc)\n\n processor.run(processor.parse(file), file, (error, tree, file) => {\n if (error || !tree || !file) {\n done(error)\n } else {\n /** @type {unknown} */\n const result = processor.stringify(tree, file)\n\n if (result === undefined || result === null) {\n // Empty.\n } else if (looksLikeAVFileValue(result)) {\n file.value = result\n } else {\n file.result = result\n }\n\n done(error, file)\n }\n })\n\n /**\n * @param {Error|null|undefined} [error]\n * @param {VFile|undefined} [file]\n * @returns {void}\n */\n function done(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, file)\n }\n }\n }\n }\n\n /** @type {Processor['processSync']} */\n function processSync(doc) {\n /** @type {boolean|undefined} */\n let complete\n\n processor.freeze()\n assertParser('processSync', processor.Parser)\n assertCompiler('processSync', processor.Compiler)\n\n const file = vfile(doc)\n\n processor.process(file, done)\n\n assertDone('processSync', 'process', complete)\n\n return file\n\n /**\n * @param {Error|null|undefined} [error]\n * @returns {void}\n */\n function done(error) {\n complete = true\n bail(error)\n }\n }\n}\n\n/**\n * Check if `value` is a constructor.\n *\n * @param {unknown} value\n * @param {string} name\n * @returns {boolean}\n */\nfunction newable(value, name) {\n return (\n typeof value === 'function' &&\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n value.prototype &&\n // A function with keys in its prototype is probably a constructor.\n // Classes’ prototype methods are not enumerable, so we check if some value\n // exists in the prototype.\n // type-coverage:ignore-next-line\n (keys(value.prototype) || name in value.prototype)\n )\n}\n\n/**\n * Check if `value` is an object with keys.\n *\n * @param {Record} value\n * @returns {boolean}\n */\nfunction keys(value) {\n /** @type {string} */\n let key\n\n for (key in value) {\n if (own.call(value, key)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is VFileValue}\n */\nfunction looksLikeAVFileValue(value) {\n return typeof value === 'string' || isBuffer(value)\n}\n","import { LatexPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Parse `str` to an AST with minimal processing. E.g., macro\n * arguments are not attached to macros, etc. when parsed with this\n * function.\n */\nexport function parseMinimal(str: string): Ast.Root {\n return LatexPegParser.parse(str);\n}\n\n/**\n * Parse `str` to an AST with minimal processing. E.g., macro\n * arguments are not attached to macros, etc. when parsed with this\n * function.\n *\n * The parsing assumes a math-mode context, so, for example, `^` and `_` are\n * parsed as macros (even though arguments are not attached to them).\n */\nexport function parseMathMinimal(str: string): Ast.Node[] {\n return LatexPegParser.parse(str, { startRule: \"math\" });\n}\n","import { Plugin, Parser } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { parseMathMinimal, parseMinimal } from \"./parse-minimal\";\n\ntype PluginOptions = {\n /**\n * Whether the text will be parsed assuming math mode or not.\n */\n mode: \"math\" | \"regular\";\n} | void;\n\n/**\n * Parse a string to a LaTeX AST with no post processing. For example,\n * no macro arguments will be attached, etc.\n */\nexport const unifiedLatexFromStringMinimal: Plugin<\n PluginOptions[],\n string,\n Ast.Root\n> = function unifiedLatexFromStringMinimal(options) {\n const parser: Parser = (str) => {\n if (options?.mode === \"math\") {\n return {\n type: \"root\",\n content: parseMathMinimal(str),\n _renderInfo: { inMathMode: true },\n };\n }\n return parseMinimal(str);\n };\n\n Object.assign(this, { Parser: parser });\n};\n","import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { parseMathMinimal } from \"./parse-minimal\";\n\ntype PluginOptions =\n | {\n /**\n * List of environments whose body should be parsed in math mode\n */\n mathEnvs: string[];\n /**\n * List of macros whose bodies should be parsed in math mode\n */\n mathMacros: string[];\n }\n | undefined;\n\n/**\n * Reparse math environments/macro contents that should have been parsed in math mode but weren't.\n */\nexport const unifiedLatexReparseMath: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexReparseMath(options) {\n const { mathEnvs = [], mathMacros = [] } = options || {};\n\n return unifiedLatexReparseMathConstructPlugin({ mathMacros, mathEnvs });\n};\n\n/**\n * Construct the inner function for the `unifiedLatexReparseMath` plugin. This function should not be used by libraries.\n */\nexport function unifiedLatexReparseMathConstructPlugin({\n mathEnvs,\n mathMacros,\n}: {\n mathEnvs: string[];\n mathMacros: string[];\n}) {\n const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs);\n const isMathMacro = match.createMacroMatcher(mathMacros);\n\n return (tree: Ast.Root) => {\n visit(\n tree,\n (node) => {\n if (match.anyMacro(node)) {\n for (const arg of node.args || []) {\n if (\n arg.content.length > 0 &&\n !wasParsedInMathMode(arg.content)\n ) {\n arg.content = parseMathMinimal(\n printRaw(arg.content)\n );\n }\n }\n }\n if (match.anyEnvironment(node)) {\n if (!wasParsedInMathMode(node.content)) {\n node.content = parseMathMinimal(printRaw(node.content));\n }\n }\n },\n {\n test: (node) => isMathEnvironment(node) || isMathMacro(node),\n }\n );\n };\n}\n\n/**\n * Use a heuristic to decide whether a string was parsed in math mode. The heuristic\n * looks for strings of length greater than 1 or the failure for \"_\" and \"^\" to be parsed\n * as a macro.\n */\nfunction wasParsedInMathMode(nodes: Ast.Node[]): boolean {\n return !nodes.some(\n (node) =>\n // If there are multi-char strings or ^ and _ have been parsed as strings, we know\n // that we were not parsed in math mode.\n (match.anyString(node) && node.content.length > 1) ||\n match.string(node, \"^\") ||\n match.string(node, \"_\")\n );\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfoRecord,\n MacroInfoRecord,\n} 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 { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { unifiedLatexReparseMathConstructPlugin } from \"./reparse-math\";\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\nimport { processEnvironment } from \"@unified-latex/unified-latex-util-environments\";\n\ntype PluginOptions =\n | { environments: EnvInfoRecord; macros: MacroInfoRecord }\n | undefined;\n\n/**\n * Unified plugin to process macros and environments. Any environments that contain math content\n * are reparsed (if needed) in math mode.\n */\nexport const unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse(options) {\n const { environments = {}, macros = {} } = options || {};\n\n const mathMacros = Object.fromEntries(\n Object.entries(macros).filter(\n ([_, info]) => info.renderInfo?.inMathMode === true\n )\n );\n const mathEnvs = Object.fromEntries(\n Object.entries(environments).filter(\n ([_, info]) => info.renderInfo?.inMathMode === true\n )\n );\n\n const mathReparser = unifiedLatexReparseMathConstructPlugin({\n mathEnvs: Object.keys(mathEnvs),\n mathMacros: Object.keys(mathMacros),\n });\n\n const isRelevantEnvironment = match.createEnvironmentMatcher(environments);\n const isRelevantMathEnvironment = match.createEnvironmentMatcher(mathEnvs);\n\n return (tree) => {\n // First we attach all arguments/process all nodes/environments that have math content\n visit(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, mathMacros);\n },\n leave: (node) => {\n if (!isRelevantMathEnvironment(node)) {\n return;\n }\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 { includeArrays: true }\n );\n\n // Next we reparse macros/envs that may not have been parsed in math mode\n mathReparser(tree);\n\n // Now we attach all arguments/process all environment bodies\n visit(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, macros);\n },\n leave: (node) => {\n if (!isRelevantEnvironment(node)) {\n return;\n }\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 { includeArrays: true }\n );\n };\n};\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { Plugin } from \"unified\";\nimport { reparseExpl3AndAtLetterRegions } from \"@unified-latex/unified-latex-util-catcode\";\nimport {\n hasReparsableMacroNames,\n reparseMacroNames,\n} from \"@unified-latex/unified-latex-util-catcode\";\n\ntype PluginOptions =\n | {\n /**\n * Whether to parse macros as if `\\makeatletter` is set (i.e., parse `@` as a regular macro character).\n * If this option is true, it disables autodetect.\n */\n atLetter?: boolean;\n /**\n * Whether to parse macros as if `\\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character)\n * If this option is true, it disables autodetect.\n */\n expl3?: boolean;\n /**\n * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`.\n * Defaults to `true`.\n */\n autodetectExpl3AndAtLetter?: boolean;\n }\n | undefined;\n\n/**\n * Unified plugin to reprocess macros names to possibly include `@`, `_`, or `:`.\n * This plugin detects the `\\makeatletter` and `\\ExplSyntaxOn` commands and reprocesses macro names\n * inside of those blocks to include those characters.\n */\nexport const unifiedLatexProcessAtLetterAndExplMacros: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexProcessAtLetterAndExplMacros(options) {\n let {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false,\n } = options || {};\n\n return (tree) => {\n // First we reparse based on explicit \\makeatletter and \\ExplSyntaxOn macros\n reparseExpl3AndAtLetterRegions(tree);\n if (atLetter || expl3) {\n autodetectExpl3AndAtLetter = false;\n }\n if (autodetectExpl3AndAtLetter) {\n atLetter = hasReparsableMacroNames(tree, \"@\");\n // We don't check for the `:` here because it could be prone to misidentification.\n expl3 = hasReparsableMacroNames(tree, \"_\");\n }\n const charSet: Set = new Set();\n if (atLetter) {\n charSet.add(\"@\");\n }\n if (expl3) {\n charSet.add(\":\");\n charSet.add(\"_\");\n }\n\n if (charSet.size > 0) {\n reparseMacroNames(tree, charSet);\n }\n };\n};\n","import { Plugin, Parser, unified } from \"unified\";\nimport { environmentInfo, macroInfo } from \"@unified-latex/unified-latex-ctan\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfoRecord,\n MacroInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport {\n unifiedLatexTrimEnvironmentContents,\n unifiedLatexTrimRoot,\n} from \"@unified-latex/unified-latex-util-trim\";\nimport { unifiedLatexAstComplier } from \"./compiler-ast\";\nimport { unifiedLatexFromStringMinimal } from \"./plugin-from-string-minimal\";\nimport { unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse } from \"./process-macros-and-environments\";\nimport { unifiedLatexProcessAtLetterAndExplMacros } from \"./process-at-letter-and-expl-macros\";\n\nexport type PluginOptions =\n | {\n mode?: \"math\" | \"regular\";\n macros?: MacroInfoRecord;\n environments?: EnvInfoRecord;\n flags?: {\n /**\n * Whether to parse macros as if `\\makeatletter` is set (i.e., parse `@` as a regular macro character)\n */\n atLetter?: boolean;\n /**\n * Whether to parse macros as if `\\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character)\n */\n expl3?: boolean;\n /**\n * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`.\n * Defaults to `false`.\n */\n autodetectExpl3AndAtLetter?: boolean;\n };\n }\n | undefined;\n\n/**\n * Parse a string to a LaTeX AST.\n */\nexport const unifiedLatexFromString: Plugin =\n function unifiedLatexFromString(options) {\n const {\n mode = \"regular\",\n macros = {},\n environments = {},\n flags: {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false,\n } = {},\n } = options || {};\n\n // Build up a parsing plugin with only unified components\n const allMacroInfo: MacroInfoRecord = Object.assign(\n {},\n ...Object.values(macroInfo),\n macros\n );\n const allEnvInfo: EnvInfoRecord = Object.assign(\n {},\n ...Object.values(environmentInfo),\n environments\n );\n\n // Build up a parser that will perform all the needed steps\n const fullParser = unified()\n .use(unifiedLatexFromStringMinimal, { mode })\n .use(unifiedLatexProcessAtLetterAndExplMacros, {\n atLetter,\n expl3,\n autodetectExpl3AndAtLetter,\n })\n // Math environments that aren't hardcoded into the PEG grammar need to be re-parsed,\n // so do a minimal pass first with just those environments.\n .use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, {\n macros: allMacroInfo,\n environments: allEnvInfo,\n })\n .use(unifiedLatexTrimEnvironmentContents)\n .use(unifiedLatexTrimRoot)\n .use(unifiedLatexAstComplier);\n\n const parser: Parser = (str) => {\n const file = fullParser.processSync({ value: str });\n return file.result;\n };\n\n Object.assign(this, { Parser: parser });\n };\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { type FrozenProcessor, unified } from \"unified\";\nimport { unifiedLatexFromString } from \"./plugin-from-string\";\nimport type { PluginOptions } from \"./plugin-from-string\";\n\nlet parser = unified().use(unifiedLatexFromString).freeze();\n\n/**\n * Parse the string into an AST.\n */\nexport function parse(str: string): Ast.Root {\n return parser.parse(str);\n}\n\n/**\n * Returns the default `unified-latex` parser, or create a new one with the\n * provided `unifiedLatexFromString` options\n * @param options Plugin options of `unifiedLatexFromString` plugin.\n * @returns The default `unified-latex` parser if `options` is `undefined`, or a\n * newly created `unified-latex` parser with the provided `options`.\n */\nexport function getParser(\n options?: PluginOptions\n): FrozenProcessor {\n return options\n ? unified().use(unifiedLatexFromString, options).freeze()\n : parser;\n}\n","import { unified } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { unifiedLatexAstComplier } from \"./compiler-ast\";\nimport { unifiedLatexFromString } from \"./plugin-from-string\";\n\n/**\n * Parse `str` into an AST. Parsing starts in math mode and a list of\n * nodes is returned (instead of a \"root\" node).\n */\nexport function parseMath(str: string | Ast.Ast): Ast.Node[] {\n if (typeof str !== \"string\") {\n str = printRaw(str);\n }\n const file = unified()\n .use(unifiedLatexFromString, { mode: \"math\" })\n .use(unifiedLatexAstComplier)\n .processSync({ value: str });\n return (file.result as Ast.Root).content;\n}\n"],"names":["unifiedLatexAstComplier","isBuffer","isArray","isPlainObject","setProperty","getProperty","extend","index","point","position","path","assertPath","prop","dirname","basename","extname","bufferLike","parse","value","options","isPlainObj","file","LatexPegParser","unifiedLatexFromStringMinimal","parser","unifiedLatexReparseMath","match","visit","printRaw","unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse","attachMacroArgsInArray","processEnvironment","unifiedLatexProcessAtLetterAndExplMacros","reparseExpl3AndAtLetterRegions","hasReparsableMacroNames","reparseMacroNames","unifiedLatexFromString","macroInfo","environmentInfo","unifiedLatexTrimEnvironmentContents","unifiedLatexTrimRoot"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13]} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-parse/index.d.ts b/node_modules/@unified-latex/unified-latex-util-parse/index.d.ts new file mode 100644 index 0000000..92f1179 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-parse/index.d.ts @@ -0,0 +1,148 @@ +import * as Ast from '@unified-latex/unified-latex-types'; +import { EnvInfoRecord } from '@unified-latex/unified-latex-types'; +import { FrozenProcessor } from 'unified'; +import { MacroInfoRecord } from '@unified-latex/unified-latex-types'; +import { Plugin as Plugin_2 } from 'unified'; + +/** + * Returns the default `unified-latex` parser, or create a new one with the + * provided `unifiedLatexFromString` options + * @param options Plugin options of `unifiedLatexFromString` plugin. + * @returns The default `unified-latex` parser if `options` is `undefined`, or a + * newly created `unified-latex` parser with the provided `options`. + */ +export declare function getParser(options?: PluginOptions): FrozenProcessor; + +/** + * Parse the string into an AST. + */ +export declare function parse(str: string): Ast.Root; + +/** + * Parse `str` into an AST. Parsing starts in math mode and a list of + * nodes is returned (instead of a "root" node). + */ +export declare function parseMath(str: string | Ast.Ast): Ast.Node[]; + +/** + * Parse `str` to an AST with minimal processing. E.g., macro + * arguments are not attached to macros, etc. when parsed with this + * function. + * + * The parsing assumes a math-mode context, so, for example, `^` and `_` are + * parsed as macros (even though arguments are not attached to them). + */ +export declare function parseMathMinimal(str: string): Ast.Node[]; + +/** + * Parse `str` to an AST with minimal processing. E.g., macro + * arguments are not attached to macros, etc. when parsed with this + * function. + */ +export declare function parseMinimal(str: string): Ast.Root; + +export declare type PluginOptions = { + mode?: "math" | "regular"; + macros?: MacroInfoRecord; + environments?: EnvInfoRecord; + flags?: { + /** + * Whether to parse macros as if `\makeatletter` is set (i.e., parse `@` as a regular macro character) + */ + atLetter?: boolean; + /** + * Whether to parse macros as if `\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character) + */ + expl3?: boolean; + /** + * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`. + * Defaults to `false`. + */ + autodetectExpl3AndAtLetter?: boolean; + }; +} | undefined; + +declare type PluginOptions_2 = { + /** + * Whether the text will be parsed assuming math mode or not. + */ + mode: "math" | "regular"; +} | void; + +declare type PluginOptions_3 = { + /** + * Whether to parse macros as if `\makeatletter` is set (i.e., parse `@` as a regular macro character). + * If this option is true, it disables autodetect. + */ + atLetter?: boolean; + /** + * Whether to parse macros as if `\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character) + * If this option is true, it disables autodetect. + */ + expl3?: boolean; + /** + * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`. + * Defaults to `true`. + */ + autodetectExpl3AndAtLetter?: boolean; +} | undefined; + +declare type PluginOptions_4 = { + environments: EnvInfoRecord; + macros: MacroInfoRecord; +} | undefined; + +declare type PluginOptions_5 = { + /** + * List of environments whose body should be parsed in math mode + */ + mathEnvs: string[]; + /** + * List of macros whose bodies should be parsed in math mode + */ + mathMacros: string[]; +} | undefined; + +/** + * Unified complier plugin that passes through a LaTeX AST without modification. + */ +export declare const unifiedLatexAstComplier: Plugin_2; + +/** + * Parse a string to a LaTeX AST. + */ +export declare const unifiedLatexFromString: Plugin_2; + +/** + * Parse a string to a LaTeX AST with no post processing. For example, + * no macro arguments will be attached, etc. + */ +export declare const unifiedLatexFromStringMinimal: Plugin_2; + +/** + * Unified plugin to reprocess macros names to possibly include `@`, `_`, or `:`. + * This plugin detects the `\makeatletter` and `\ExplSyntaxOn` commands and reprocesses macro names + * inside of those blocks to include those characters. + */ +export declare const unifiedLatexProcessAtLetterAndExplMacros: Plugin_2; + +/** + * Unified plugin to process macros and environments. Any environments that contain math content + * are reparsed (if needed) in math mode. + */ +export declare const unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse: Plugin_2; + +/** + * Reparse math environments/macro contents that should have been parsed in math mode but weren't. + */ +export declare const unifiedLatexReparseMath: Plugin_2; + +/** + * Construct the inner function for the `unifiedLatexReparseMath` plugin. This function should not be used by libraries. + */ +export declare function unifiedLatexReparseMathConstructPlugin({ mathEnvs, mathMacros, }: { + mathEnvs: string[]; + mathMacros: string[]; +}): (tree: Ast.Root) => void; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-parse/index.js b/node_modules/@unified-latex/unified-latex-util-parse/index.js new file mode 100644 index 0000000..7405d7d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-parse/index.js @@ -0,0 +1,246 @@ +import { unified } from "unified"; +import { macroInfo, environmentInfo } from "@unified-latex/unified-latex-ctan"; +import { unifiedLatexTrimEnvironmentContents, unifiedLatexTrimRoot } from "@unified-latex/unified-latex-util-trim"; +import { LatexPegParser } from "@unified-latex/unified-latex-util-pegjs"; +import { visit } from "@unified-latex/unified-latex-util-visit"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { printRaw } from "@unified-latex/unified-latex-util-print-raw"; +import { attachMacroArgsInArray } from "@unified-latex/unified-latex-util-arguments"; +import { processEnvironment } from "@unified-latex/unified-latex-util-environments"; +import { reparseExpl3AndAtLetterRegions, hasReparsableMacroNames, reparseMacroNames } from "@unified-latex/unified-latex-util-catcode"; +const unifiedLatexAstComplier = function unifiedLatexAstComplier2() { + Object.assign(this, { Compiler: (x) => x }); +}; +function parseMinimal(str) { + return LatexPegParser.parse(str); +} +function parseMathMinimal(str) { + return LatexPegParser.parse(str, { startRule: "math" }); +} +const unifiedLatexFromStringMinimal = function unifiedLatexFromStringMinimal2(options) { + const parser2 = (str) => { + if ((options == null ? void 0 : options.mode) === "math") { + return { + type: "root", + content: parseMathMinimal(str), + _renderInfo: { inMathMode: true } + }; + } + return parseMinimal(str); + }; + Object.assign(this, { Parser: parser2 }); +}; +const unifiedLatexReparseMath = function unifiedLatexReparseMath2(options) { + const { mathEnvs = [], mathMacros = [] } = options || {}; + return unifiedLatexReparseMathConstructPlugin({ mathMacros, mathEnvs }); +}; +function unifiedLatexReparseMathConstructPlugin({ + mathEnvs, + mathMacros +}) { + const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + const isMathMacro = match.createMacroMatcher(mathMacros); + return (tree) => { + visit( + tree, + (node) => { + if (match.anyMacro(node)) { + for (const arg of node.args || []) { + if (arg.content.length > 0 && !wasParsedInMathMode(arg.content)) { + arg.content = parseMathMinimal( + printRaw(arg.content) + ); + } + } + } + if (match.anyEnvironment(node)) { + if (!wasParsedInMathMode(node.content)) { + node.content = parseMathMinimal(printRaw(node.content)); + } + } + }, + { + test: (node) => isMathEnvironment(node) || isMathMacro(node) + } + ); + }; +} +function wasParsedInMathMode(nodes) { + return !nodes.some( + (node) => ( + // If there are multi-char strings or ^ and _ have been parsed as strings, we know + // that we were not parsed in math mode. + match.anyString(node) && node.content.length > 1 || match.string(node, "^") || match.string(node, "_") + ) + ); +} +const unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse2(options) { + const { environments = {}, macros = {} } = options || {}; + const mathMacros = Object.fromEntries( + Object.entries(macros).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathEnvs = Object.fromEntries( + Object.entries(environments).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathReparser = unifiedLatexReparseMathConstructPlugin({ + mathEnvs: Object.keys(mathEnvs), + mathMacros: Object.keys(mathMacros) + }); + const isRelevantEnvironment = match.createEnvironmentMatcher(environments); + const isRelevantMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + return (tree) => { + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, mathMacros); + }, + leave: (node) => { + if (!isRelevantMathEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + mathReparser(tree); + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, macros); + }, + leave: (node) => { + if (!isRelevantEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + }; +}; +const unifiedLatexProcessAtLetterAndExplMacros = function unifiedLatexProcessAtLetterAndExplMacros2(options) { + let { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = options || {}; + return (tree) => { + reparseExpl3AndAtLetterRegions(tree); + if (atLetter || expl3) { + autodetectExpl3AndAtLetter = false; + } + if (autodetectExpl3AndAtLetter) { + atLetter = hasReparsableMacroNames(tree, "@"); + expl3 = hasReparsableMacroNames(tree, "_"); + } + const charSet = /* @__PURE__ */ new Set(); + if (atLetter) { + charSet.add("@"); + } + if (expl3) { + charSet.add(":"); + charSet.add("_"); + } + if (charSet.size > 0) { + reparseMacroNames(tree, charSet); + } + }; +}; +const unifiedLatexFromString = function unifiedLatexFromString2(options) { + const { + mode = "regular", + macros = {}, + environments = {}, + flags: { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = {} + } = options || {}; + const allMacroInfo = Object.assign( + {}, + ...Object.values(macroInfo), + macros + ); + const allEnvInfo = Object.assign( + {}, + ...Object.values(environmentInfo), + environments + ); + const fullParser = unified().use(unifiedLatexFromStringMinimal, { mode }).use(unifiedLatexProcessAtLetterAndExplMacros, { + atLetter, + expl3, + autodetectExpl3AndAtLetter + }).use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, { + macros: allMacroInfo, + environments: allEnvInfo + }).use(unifiedLatexTrimEnvironmentContents).use(unifiedLatexTrimRoot).use(unifiedLatexAstComplier); + const parser2 = (str) => { + const file = fullParser.processSync({ value: str }); + return file.result; + }; + Object.assign(this, { Parser: parser2 }); +}; +let parser = unified().use(unifiedLatexFromString).freeze(); +function parse(str) { + return parser.parse(str); +} +function getParser(options) { + return options ? unified().use(unifiedLatexFromString, options).freeze() : parser; +} +function parseMath(str) { + if (typeof str !== "string") { + str = printRaw(str); + } + const file = unified().use(unifiedLatexFromString, { mode: "math" }).use(unifiedLatexAstComplier).processSync({ value: str }); + return file.result.content; +} +export { + getParser, + parse, + parseMath, + parseMathMinimal, + parseMinimal, + unifiedLatexAstComplier, + unifiedLatexFromString, + unifiedLatexFromStringMinimal, + unifiedLatexProcessAtLetterAndExplMacros, + unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, + unifiedLatexReparseMath, + unifiedLatexReparseMathConstructPlugin +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-parse/index.js.map b/node_modules/@unified-latex/unified-latex-util-parse/index.js.map new file mode 100644 index 0000000..b8425aa --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-parse/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/compiler-ast.ts","../libs/parse-minimal.ts","../libs/plugin-from-string-minimal.ts","../libs/reparse-math.ts","../libs/process-macros-and-environments.ts","../libs/process-at-letter-and-expl-macros.ts","../libs/plugin-from-string.ts","../libs/parse.ts","../libs/parse-math.ts"],"sourcesContent":["import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Unified complier plugin that passes through a LaTeX AST without modification.\n */\nexport const unifiedLatexAstComplier: Plugin =\n function unifiedLatexAstComplier() {\n Object.assign(this, { Compiler: (x: Ast.Root) => x });\n };\n","import { LatexPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Parse `str` to an AST with minimal processing. E.g., macro\n * arguments are not attached to macros, etc. when parsed with this\n * function.\n */\nexport function parseMinimal(str: string): Ast.Root {\n return LatexPegParser.parse(str);\n}\n\n/**\n * Parse `str` to an AST with minimal processing. E.g., macro\n * arguments are not attached to macros, etc. when parsed with this\n * function.\n *\n * The parsing assumes a math-mode context, so, for example, `^` and `_` are\n * parsed as macros (even though arguments are not attached to them).\n */\nexport function parseMathMinimal(str: string): Ast.Node[] {\n return LatexPegParser.parse(str, { startRule: \"math\" });\n}\n","import { Plugin, Parser } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { parseMathMinimal, parseMinimal } from \"./parse-minimal\";\n\ntype PluginOptions = {\n /**\n * Whether the text will be parsed assuming math mode or not.\n */\n mode: \"math\" | \"regular\";\n} | void;\n\n/**\n * Parse a string to a LaTeX AST with no post processing. For example,\n * no macro arguments will be attached, etc.\n */\nexport const unifiedLatexFromStringMinimal: Plugin<\n PluginOptions[],\n string,\n Ast.Root\n> = function unifiedLatexFromStringMinimal(options) {\n const parser: Parser = (str) => {\n if (options?.mode === \"math\") {\n return {\n type: \"root\",\n content: parseMathMinimal(str),\n _renderInfo: { inMathMode: true },\n };\n }\n return parseMinimal(str);\n };\n\n Object.assign(this, { Parser: parser });\n};\n","import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { parseMathMinimal } from \"./parse-minimal\";\n\ntype PluginOptions =\n | {\n /**\n * List of environments whose body should be parsed in math mode\n */\n mathEnvs: string[];\n /**\n * List of macros whose bodies should be parsed in math mode\n */\n mathMacros: string[];\n }\n | undefined;\n\n/**\n * Reparse math environments/macro contents that should have been parsed in math mode but weren't.\n */\nexport const unifiedLatexReparseMath: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexReparseMath(options) {\n const { mathEnvs = [], mathMacros = [] } = options || {};\n\n return unifiedLatexReparseMathConstructPlugin({ mathMacros, mathEnvs });\n};\n\n/**\n * Construct the inner function for the `unifiedLatexReparseMath` plugin. This function should not be used by libraries.\n */\nexport function unifiedLatexReparseMathConstructPlugin({\n mathEnvs,\n mathMacros,\n}: {\n mathEnvs: string[];\n mathMacros: string[];\n}) {\n const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs);\n const isMathMacro = match.createMacroMatcher(mathMacros);\n\n return (tree: Ast.Root) => {\n visit(\n tree,\n (node) => {\n if (match.anyMacro(node)) {\n for (const arg of node.args || []) {\n if (\n arg.content.length > 0 &&\n !wasParsedInMathMode(arg.content)\n ) {\n arg.content = parseMathMinimal(\n printRaw(arg.content)\n );\n }\n }\n }\n if (match.anyEnvironment(node)) {\n if (!wasParsedInMathMode(node.content)) {\n node.content = parseMathMinimal(printRaw(node.content));\n }\n }\n },\n {\n test: (node) => isMathEnvironment(node) || isMathMacro(node),\n }\n );\n };\n}\n\n/**\n * Use a heuristic to decide whether a string was parsed in math mode. The heuristic\n * looks for strings of length greater than 1 or the failure for \"_\" and \"^\" to be parsed\n * as a macro.\n */\nfunction wasParsedInMathMode(nodes: Ast.Node[]): boolean {\n return !nodes.some(\n (node) =>\n // If there are multi-char strings or ^ and _ have been parsed as strings, we know\n // that we were not parsed in math mode.\n (match.anyString(node) && node.content.length > 1) ||\n match.string(node, \"^\") ||\n match.string(node, \"_\")\n );\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfoRecord,\n MacroInfoRecord,\n} 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 { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { unifiedLatexReparseMathConstructPlugin } from \"./reparse-math\";\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\nimport { processEnvironment } from \"@unified-latex/unified-latex-util-environments\";\n\ntype PluginOptions =\n | { environments: EnvInfoRecord; macros: MacroInfoRecord }\n | undefined;\n\n/**\n * Unified plugin to process macros and environments. Any environments that contain math content\n * are reparsed (if needed) in math mode.\n */\nexport const unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse(options) {\n const { environments = {}, macros = {} } = options || {};\n\n const mathMacros = Object.fromEntries(\n Object.entries(macros).filter(\n ([_, info]) => info.renderInfo?.inMathMode === true\n )\n );\n const mathEnvs = Object.fromEntries(\n Object.entries(environments).filter(\n ([_, info]) => info.renderInfo?.inMathMode === true\n )\n );\n\n const mathReparser = unifiedLatexReparseMathConstructPlugin({\n mathEnvs: Object.keys(mathEnvs),\n mathMacros: Object.keys(mathMacros),\n });\n\n const isRelevantEnvironment = match.createEnvironmentMatcher(environments);\n const isRelevantMathEnvironment = match.createEnvironmentMatcher(mathEnvs);\n\n return (tree) => {\n // First we attach all arguments/process all nodes/environments that have math content\n visit(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, mathMacros);\n },\n leave: (node) => {\n if (!isRelevantMathEnvironment(node)) {\n return;\n }\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 { includeArrays: true }\n );\n\n // Next we reparse macros/envs that may not have been parsed in math mode\n mathReparser(tree);\n\n // Now we attach all arguments/process all environment bodies\n visit(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, macros);\n },\n leave: (node) => {\n if (!isRelevantEnvironment(node)) {\n return;\n }\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 { includeArrays: true }\n );\n };\n};\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { Plugin } from \"unified\";\nimport { reparseExpl3AndAtLetterRegions } from \"@unified-latex/unified-latex-util-catcode\";\nimport {\n hasReparsableMacroNames,\n reparseMacroNames,\n} from \"@unified-latex/unified-latex-util-catcode\";\n\ntype PluginOptions =\n | {\n /**\n * Whether to parse macros as if `\\makeatletter` is set (i.e., parse `@` as a regular macro character).\n * If this option is true, it disables autodetect.\n */\n atLetter?: boolean;\n /**\n * Whether to parse macros as if `\\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character)\n * If this option is true, it disables autodetect.\n */\n expl3?: boolean;\n /**\n * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`.\n * Defaults to `true`.\n */\n autodetectExpl3AndAtLetter?: boolean;\n }\n | undefined;\n\n/**\n * Unified plugin to reprocess macros names to possibly include `@`, `_`, or `:`.\n * This plugin detects the `\\makeatletter` and `\\ExplSyntaxOn` commands and reprocesses macro names\n * inside of those blocks to include those characters.\n */\nexport const unifiedLatexProcessAtLetterAndExplMacros: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexProcessAtLetterAndExplMacros(options) {\n let {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false,\n } = options || {};\n\n return (tree) => {\n // First we reparse based on explicit \\makeatletter and \\ExplSyntaxOn macros\n reparseExpl3AndAtLetterRegions(tree);\n if (atLetter || expl3) {\n autodetectExpl3AndAtLetter = false;\n }\n if (autodetectExpl3AndAtLetter) {\n atLetter = hasReparsableMacroNames(tree, \"@\");\n // We don't check for the `:` here because it could be prone to misidentification.\n expl3 = hasReparsableMacroNames(tree, \"_\");\n }\n const charSet: Set = new Set();\n if (atLetter) {\n charSet.add(\"@\");\n }\n if (expl3) {\n charSet.add(\":\");\n charSet.add(\"_\");\n }\n\n if (charSet.size > 0) {\n reparseMacroNames(tree, charSet);\n }\n };\n};\n","import { Plugin, Parser, unified } from \"unified\";\nimport { environmentInfo, macroInfo } from \"@unified-latex/unified-latex-ctan\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport {\n EnvInfoRecord,\n MacroInfoRecord,\n} from \"@unified-latex/unified-latex-types\";\nimport {\n unifiedLatexTrimEnvironmentContents,\n unifiedLatexTrimRoot,\n} from \"@unified-latex/unified-latex-util-trim\";\nimport { unifiedLatexAstComplier } from \"./compiler-ast\";\nimport { unifiedLatexFromStringMinimal } from \"./plugin-from-string-minimal\";\nimport { unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse } from \"./process-macros-and-environments\";\nimport { unifiedLatexProcessAtLetterAndExplMacros } from \"./process-at-letter-and-expl-macros\";\n\nexport type PluginOptions =\n | {\n mode?: \"math\" | \"regular\";\n macros?: MacroInfoRecord;\n environments?: EnvInfoRecord;\n flags?: {\n /**\n * Whether to parse macros as if `\\makeatletter` is set (i.e., parse `@` as a regular macro character)\n */\n atLetter?: boolean;\n /**\n * Whether to parse macros as if `\\ExplSyntaxOn` is set (i.e., parse `_` and `:` as a regular macro character)\n */\n expl3?: boolean;\n /**\n * Attempt to autodetect whether there are macros that look like they should contain `@`, `_`, or `:`.\n * Defaults to `false`.\n */\n autodetectExpl3AndAtLetter?: boolean;\n };\n }\n | undefined;\n\n/**\n * Parse a string to a LaTeX AST.\n */\nexport const unifiedLatexFromString: Plugin =\n function unifiedLatexFromString(options) {\n const {\n mode = \"regular\",\n macros = {},\n environments = {},\n flags: {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false,\n } = {},\n } = options || {};\n\n // Build up a parsing plugin with only unified components\n const allMacroInfo: MacroInfoRecord = Object.assign(\n {},\n ...Object.values(macroInfo),\n macros\n );\n const allEnvInfo: EnvInfoRecord = Object.assign(\n {},\n ...Object.values(environmentInfo),\n environments\n );\n\n // Build up a parser that will perform all the needed steps\n const fullParser = unified()\n .use(unifiedLatexFromStringMinimal, { mode })\n .use(unifiedLatexProcessAtLetterAndExplMacros, {\n atLetter,\n expl3,\n autodetectExpl3AndAtLetter,\n })\n // Math environments that aren't hardcoded into the PEG grammar need to be re-parsed,\n // so do a minimal pass first with just those environments.\n .use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, {\n macros: allMacroInfo,\n environments: allEnvInfo,\n })\n .use(unifiedLatexTrimEnvironmentContents)\n .use(unifiedLatexTrimRoot)\n .use(unifiedLatexAstComplier);\n\n const parser: Parser = (str) => {\n const file = fullParser.processSync({ value: str });\n return file.result;\n };\n\n Object.assign(this, { Parser: parser });\n };\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { type FrozenProcessor, unified } from \"unified\";\nimport { unifiedLatexFromString } from \"./plugin-from-string\";\nimport type { PluginOptions } from \"./plugin-from-string\";\n\nlet parser = unified().use(unifiedLatexFromString).freeze();\n\n/**\n * Parse the string into an AST.\n */\nexport function parse(str: string): Ast.Root {\n return parser.parse(str);\n}\n\n/**\n * Returns the default `unified-latex` parser, or create a new one with the\n * provided `unifiedLatexFromString` options\n * @param options Plugin options of `unifiedLatexFromString` plugin.\n * @returns The default `unified-latex` parser if `options` is `undefined`, or a\n * newly created `unified-latex` parser with the provided `options`.\n */\nexport function getParser(\n options?: PluginOptions\n): FrozenProcessor {\n return options\n ? unified().use(unifiedLatexFromString, options).freeze()\n : parser;\n}\n","import { unified } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { unifiedLatexAstComplier } from \"./compiler-ast\";\nimport { unifiedLatexFromString } from \"./plugin-from-string\";\n\n/**\n * Parse `str` into an AST. Parsing starts in math mode and a list of\n * nodes is returned (instead of a \"root\" node).\n */\nexport function parseMath(str: string | Ast.Ast): Ast.Node[] {\n if (typeof str !== \"string\") {\n str = printRaw(str);\n }\n const file = unified()\n .use(unifiedLatexFromString, { mode: \"math\" })\n .use(unifiedLatexAstComplier)\n .processSync({ value: str });\n return (file.result as Ast.Root).content;\n}\n"],"names":["unifiedLatexAstComplier","unifiedLatexFromStringMinimal","parser","unifiedLatexReparseMath","unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse","unifiedLatexProcessAtLetterAndExplMacros","unifiedLatexFromString"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-parse/package.json b/node_modules/@unified-latex/unified-latex-util-parse/package.json new file mode 100644 index 0000000..cd99234 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-parse/package.json @@ -0,0 +1,61 @@ +{ + "name": "@unified-latex/unified-latex-util-parse", + "version": "1.8.2", + "description": "Tools for manipulating unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-ctan": "^1.8.2", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-catcode": "^1.8.2", + "@unified-latex/unified-latex-util-environments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-pegjs/README.md b/node_modules/@unified-latex/unified-latex-util-pegjs/README.md new file mode 100644 index 0000000..4290482 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pegjs/README.md @@ -0,0 +1,60 @@ + + + + +# unified-latex-util-pegjs + +## What is this? + +Pegjs grammars to help parse strings into a `unified-latex` Abstract Syntax Tree (AST). Note, +because of the dynamic nature of LaTeX, to get a full AST with arguments attached to macros, etc., +the tree is parsed multiple times. + +Also included are functions to decorate a `Ast.Node[]` array so that Pegjs can process it as if it were +a string. This allows for complex second-pass parsing. + +## When should I use this? + +If you are building libraries to parse specific LaTeX syntax (e.g., to parse `tabular` environments or +`systeme` environments, etc.). + +## Install + +```bash +npm install @unified-latex/unified-latex-util-pegjs +``` + +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 + +## `decorateArrayForPegjs(array)` + +Pegjs operates on strings. However, strings and arrays are very similar! +This function adds `charAt`, `charCodeAt`, and `substring` methods to +`array` so that `array` can then be fed to a Pegjs generated parser. + +```typescript +function decorateArrayForPegjs(array: any[]): StringlikeArray; +``` + +**Parameters** + +| Param | Type | +| :---- | :------ | +| array | `any[]` | + +## `splitStringsIntoSingleChars(nodes)` + +Splits all multi-character strings into strings that are all single characters. + +```typescript +function splitStringsIntoSingleChars(nodes: Ast.Node[]): Ast.Node[]; +``` + +**Parameters** + +| Param | Type | +| :---- | :----------- | +| nodes | `Ast.Node[]` | diff --git a/node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs b/node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs new file mode 100644 index 0000000..9eea025 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs @@ -0,0 +1,16700 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +function decorateArrayForPegjs(array) { + array.charAt = function(i) { + return this[i]; + }; + array.charCodeAt = () => 0; + array.substring = function(i, j) { + return this.slice(i, j); + }; + array.replace = function(a, b) { + const ret = JSON.stringify(this); + return ret.replace(a, b); + }; + return array; +} +function splitStringsIntoSingleChars(nodes) { + return nodes.flatMap( + (node) => unifiedLatexUtilMatch.match.anyString(node) ? Array.from(node.content).map((c) => ({ + type: "string", + content: c + })) : node + ); +} +const _LatexPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath }; + var peg$startRuleFunction = peg$parsedocument; + var peg$c0 = "%"; + var peg$c1 = "."; + var peg$c2 = "verb*"; + var peg$c3 = "verb"; + var peg$c4 = "["; + var peg$c5 = "]"; + var peg$c6 = "lstinline"; + var peg$c7 = "mintinline"; + var peg$c8 = "mint"; + var peg$c9 = "minted"; + var peg$c10 = "verbatim*"; + var peg$c11 = "verbatim"; + var peg$c12 = "filecontents*"; + var peg$c13 = "filecontents"; + var peg$c14 = "comment"; + var peg$c15 = "lstlisting"; + var peg$c16 = "("; + var peg$c17 = ")"; + var peg$c18 = "begin"; + var peg$c19 = "end"; + var peg$c20 = "equation*"; + var peg$c21 = "equation"; + var peg$c22 = "align*"; + var peg$c23 = "align"; + var peg$c24 = "alignat*"; + var peg$c25 = "alignat"; + var peg$c26 = "gather*"; + var peg$c27 = "gather"; + var peg$c28 = "multline*"; + var peg$c29 = "multline"; + var peg$c30 = "flalign*"; + var peg$c31 = "flalign"; + var peg$c32 = "split"; + var peg$c33 = "math"; + var peg$c34 = "displaymath"; + var peg$c35 = "\\"; + var peg$c36 = "{"; + var peg$c37 = "}"; + var peg$c38 = "$"; + var peg$c39 = "&"; + var peg$c40 = "\r"; + var peg$c41 = "\n"; + var peg$c42 = "\r\n"; + var peg$c43 = "#"; + var peg$c44 = "^"; + var peg$c45 = "_"; + var peg$c46 = "\0"; + var peg$r0 = /^[^ \t\n\r]/; + var peg$r1 = /^[ \t]/; + var peg$r2 = /^[a-zA-Z]/; + var peg$r3 = /^[0-9]/; + var peg$r4 = /^[.,;:\-*\/()!?=+<>[\]`'"~]/; + var peg$e0 = peg$otherExpectation("document"); + var peg$e1 = peg$otherExpectation("math"); + var peg$e2 = peg$otherExpectation("token"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("parbreak"); + var peg$e5 = peg$otherExpectation("math token"); + var peg$e6 = peg$otherExpectation("nonchar token"); + var peg$e7 = peg$literalExpectation("%", false); + var peg$e8 = peg$otherExpectation("whitespace"); + var peg$e9 = peg$otherExpectation("number"); + var peg$e10 = peg$literalExpectation(".", false); + var peg$e11 = peg$otherExpectation("special macro"); + var peg$e12 = peg$literalExpectation("verb*", false); + var peg$e13 = peg$literalExpectation("verb", false); + var peg$e14 = peg$literalExpectation("[", false); + var peg$e15 = peg$literalExpectation("]", false); + var peg$e16 = peg$classExpectation([" ", " ", "\n", "\r"], true, false); + var peg$e17 = peg$otherExpectation("verbatim listings"); + var peg$e18 = peg$literalExpectation("lstinline", false); + var peg$e19 = peg$otherExpectation("verbatim minted"); + var peg$e20 = peg$literalExpectation("mintinline", false); + var peg$e21 = peg$literalExpectation("mint", false); + var peg$e22 = peg$otherExpectation("verbatim minted environment"); + var peg$e23 = peg$literalExpectation("minted", false); + var peg$e24 = peg$otherExpectation("verbatim environment"); + var peg$e25 = peg$literalExpectation("verbatim*", false); + var peg$e26 = peg$literalExpectation("verbatim", false); + var peg$e27 = peg$literalExpectation("filecontents*", false); + var peg$e28 = peg$literalExpectation("filecontents", false); + var peg$e29 = peg$literalExpectation("comment", false); + var peg$e30 = peg$literalExpectation("lstlisting", false); + var peg$e31 = peg$otherExpectation("macro"); + var peg$e32 = peg$otherExpectation("group"); + var peg$e33 = peg$otherExpectation("environment"); + var peg$e34 = peg$otherExpectation("math environment"); + var peg$e36 = peg$literalExpectation("(", false); + var peg$e37 = peg$literalExpectation(")", false); + var peg$e38 = peg$literalExpectation("begin", false); + var peg$e39 = peg$literalExpectation("end", false); + var peg$e40 = peg$literalExpectation("equation*", false); + var peg$e41 = peg$literalExpectation("equation", false); + var peg$e42 = peg$literalExpectation("align*", false); + var peg$e43 = peg$literalExpectation("align", false); + var peg$e44 = peg$literalExpectation("alignat*", false); + var peg$e45 = peg$literalExpectation("alignat", false); + var peg$e46 = peg$literalExpectation("gather*", false); + var peg$e47 = peg$literalExpectation("gather", false); + var peg$e48 = peg$literalExpectation("multline*", false); + var peg$e49 = peg$literalExpectation("multline", false); + var peg$e50 = peg$literalExpectation("flalign*", false); + var peg$e51 = peg$literalExpectation("flalign", false); + var peg$e52 = peg$literalExpectation("split", false); + var peg$e53 = peg$literalExpectation("math", false); + var peg$e54 = peg$literalExpectation("displaymath", false); + var peg$e55 = peg$otherExpectation("escape"); + var peg$e56 = peg$literalExpectation("\\", false); + var peg$e57 = peg$literalExpectation("{", false); + var peg$e58 = peg$literalExpectation("}", false); + var peg$e59 = peg$literalExpectation("$", false); + var peg$e60 = peg$literalExpectation("&", false); + var peg$e61 = peg$otherExpectation("newline"); + var peg$e62 = peg$literalExpectation("\r", false); + var peg$e63 = peg$literalExpectation("\n", false); + var peg$e64 = peg$literalExpectation("\r\n", false); + var peg$e65 = peg$literalExpectation("#", false); + var peg$e66 = peg$literalExpectation("^", false); + var peg$e67 = peg$literalExpectation("_", false); + var peg$e68 = peg$literalExpectation("\0", false); + var peg$e69 = peg$classExpectation([" ", " "], false, false); + var peg$e70 = peg$otherExpectation("letter"); + var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false); + var peg$e72 = peg$otherExpectation("digit"); + var peg$e73 = peg$classExpectation([["0", "9"]], false, false); + var peg$e74 = peg$otherExpectation("punctuation"); + var peg$e75 = peg$classExpectation([".", ",", ";", ":", "-", "*", "/", "(", ")", "!", "?", "=", "+", "<", ">", "[", "]", "`", "'", '"', "~"], false, false); + var peg$e76 = peg$otherExpectation("full comment"); + var peg$e77 = peg$otherExpectation("comment"); + var peg$f0 = function(content) { + return createNode("root", { content: content.flatMap((x) => x) }); + }; + var peg$f1 = function(t) { + return t; + }; + var peg$f2 = function(eq) { + return createNode("inlinemath", { content: eq.flatMap((x) => x) }); + }; + var peg$f3 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f4 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f5 = function() { + return createNode("parbreak"); + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(x) { + return x; + }; + var peg$f8 = function() { + return createNode("macro", { content: "^", escapeToken: "" }); + }; + var peg$f9 = function() { + return createNode("macro", { content: "_", escapeToken: "" }); + }; + var peg$f10 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f11 = function() { + return createNode("whitespace"); + }; + var peg$f12 = function(a, b) { + return a.join("") + "." + b.join(""); + }; + var peg$f13 = function(b) { + return "." + b.join(""); + }; + var peg$f14 = function(a) { + return a.join("") + "."; + }; + var peg$f15 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f16 = function(env, e, end) { + return end == e; + }; + var peg$f17 = function(env, e, x) { + return x; + }; + var peg$f18 = function(env, e, x, end) { + return end == e; + }; + var peg$f19 = function(env, e, x) { + return createNode("verb", { + env, + escape: e, + content: x.join("") + }); + }; + var peg$f20 = function(x) { + return x; + }; + var peg$f21 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f22 = function(x) { + return x; + }; + var peg$f23 = function(x) { + return createNode("inlinemath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f24 = function(x) { + return x; + }; + var peg$f25 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f26 = function(end) { + return end.type === "string" && end.content === "]"; + }; + var peg$f27 = function(x) { + return x; + }; + var peg$f28 = function(o) { + return [ + createNode("string", { content: "[" }), + ...o, + createNode("string", { content: "]" }) + ]; + }; + var peg$f29 = function(x) { + return x; + }; + var peg$f30 = function(v) { + return createNode("group", { + content: createNode("string", { content: v.join("") }) + }); + }; + var peg$f31 = function(d, end) { + return end == d; + }; + var peg$f32 = function(d, x) { + return x; + }; + var peg$f33 = function(d, v, end) { + return end == d; + }; + var peg$f34 = function(d, v) { + return [ + createNode("string", { content: d }), + createNode("string", { content: v.join("") }), + createNode("string", { content: d }) + ]; + }; + var peg$f35 = function(macro, option, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + ...[].concat(verbatim) + ]; + }; + var peg$f36 = function(macro, option, language, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + language, + ...[].concat(verbatim) + ]; + }; + var peg$f37 = function(env, option, language, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f38 = function(env, option, language, body) { + const content = [ + ...option || [], + language, + { type: "string", content: body } + ]; + return createNode("environment", { + env, + content + }); + }; + var peg$f39 = function(env, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f40 = function(env, x) { + return x; + }; + var peg$f41 = function(env, body) { + return createNode("verbatim", { + env, + content: body + }); + }; + var peg$f42 = function(n) { + return n.join(""); + }; + var peg$f43 = function(n) { + return n; + }; + var peg$f44 = function(m) { + return createNode("macro", { content: m }); + }; + var peg$f45 = function(c) { + return c; + }; + var peg$f46 = function(x) { + return createNode("group", { content: x.flatMap((x2) => x2) }); + }; + var peg$f47 = function(g) { + return text().slice(1, -1); + }; + var peg$f48 = function(env, env_comment, end_env) { + return compare_env(env, end_env); + }; + var peg$f49 = function(env, env_comment, x) { + return x; + }; + var peg$f50 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("environment", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f51 = function(env, env_comment, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f52 = function(env, env_comment, x) { + return x; + }; + var peg$f53 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("mathenv", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f56 = function(e) { + return createNode("string", { content: e }); + }; + var peg$f57 = function() { + return createNode("string", { content: "\\" }); + }; + var peg$f58 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f59 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f60 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f61 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f62 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f63 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f64 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f65 = function() { + return " "; + }; + var peg$f66 = function(p) { + return createNode("string", { content: p }); + }; + var peg$f67 = function(leading_sp, comment) { + return createNode("comment", { + ...comment, + sameline: false, + leadingWhitespace: leading_sp.length > 0 + }); + }; + var peg$f68 = function(spaces, x) { + return createNode("comment", { + ...x, + sameline: true, + leadingWhitespace: spaces.length > 0 + }); + }; + var peg$f69 = function(c) { + return c; + }; + var peg$f70 = function(c) { + return { content: c.join(""), suffixParbreak: true }; + }; + var peg$f71 = function(c) { + return c; + }; + var peg$f72 = function(c) { + return { content: c.join("") }; + }; + var peg$f73 = function() { + var loc = location(); + return loc.start.column === 1; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$resultsCache = {}; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsedocument() { + var s0, s1, s2; + var key = peg$currPos * 52 + 0; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + peg$savedPos = s0; + s1 = peg$f0(s1); + s0 = s1; + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath() { + var s0, s1; + var key = peg$currPos * 52 + 1; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = []; + s1 = peg$parsemath_token(); + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsemath_token(); + } + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 2; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsegroup(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_shift(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parseparbreak(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsenumber(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f3(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f4(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 3; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_token() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 4; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsealignment_tab(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesuperscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f8(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesubscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenonchar_token() { + var s0; + var key = peg$currPos * 52 + 5; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parseescape(); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parsenl(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsesp(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$parseEOF(); + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 6; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsenl(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsecomment_start(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsenl(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = []; + s2 = peg$parsesp(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + } else { + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f11(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 7; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parsenum(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parsenum(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f12(s2, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsenum(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenum(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f13(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f14(s2); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f15(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsespecial_macro() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + var key = peg$currPos * 52 + 8; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c2) { + s2 = peg$c2; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c3) { + s2 = peg$c3; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f18(s2, s3, s4, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f19(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_listings(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_minted(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_minted_environment(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_environment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_display_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_display_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_inline_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_inline_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = peg$parsemath_shift(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s4 = peg$parsemath_shift(); + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_shift(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemath_environment(); + if (s0 === peg$FAILED) { + s0 = peg$parseenvironment(); + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesquare_bracket_argument() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 9; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_group() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 10; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_delimited_by_char() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 11; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (peg$r0.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$f33(s1, s2, s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f34(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_listings() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 12; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c6) { + s2 = peg$c6; + peg$currPos += 9; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseverbatim_group(); + if (s4 === peg$FAILED) { + s4 = peg$parseverbatim_delimited_by_char(); + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f35(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_minted() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 13; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c7) { + s2 = peg$c7; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c8) { + s2 = peg$c8; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s5 = peg$parseverbatim_group(); + if (s5 === peg$FAILED) { + s5 = peg$parseverbatim_delimited_by_char(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f36(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_minted_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14; + var key = peg$currPos * 52 + 14; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c9) { + s3 = peg$c9; + peg$currPos += 6; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsesquare_bracket_argument(); + if (s5 === peg$FAILED) { + s5 = null; + } + s6 = peg$parsegroup(); + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + s8 = []; + s9 = peg$currPos; + s10 = peg$currPos; + peg$silentFails++; + s11 = peg$currPos; + s12 = peg$parseend_env(); + if (s12 !== peg$FAILED) { + s13 = peg$parsegroup(); + if (s13 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s14 = peg$f37(s3, s5, s6, s13); + if (s14) { + s14 = void 0; + } else { + s14 = peg$FAILED; + } + if (s14 !== peg$FAILED) { + s12 = [s12, s13, s14]; + s11 = s12; + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + peg$silentFails--; + if (s11 === peg$FAILED) { + s10 = void 0; + } else { + peg$currPos = s10; + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + if (input.length > peg$currPos) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s11 !== peg$FAILED) { + s10 = [s10, s11]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$currPos; + s10 = peg$currPos; + peg$silentFails++; + s11 = peg$currPos; + s12 = peg$parseend_env(); + if (s12 !== peg$FAILED) { + s13 = peg$parsegroup(); + if (s13 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s14 = peg$f37(s3, s5, s6, s13); + if (s14) { + s14 = void 0; + } else { + s14 = peg$FAILED; + } + if (s14 !== peg$FAILED) { + s12 = [s12, s13, s14]; + s11 = s12; + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + peg$silentFails--; + if (s11 === peg$FAILED) { + s10 = void 0; + } else { + peg$currPos = s10; + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + if (input.length > peg$currPos) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s11 !== peg$FAILED) { + s10 = [s10, s11]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } + s7 = input.substring(s7, peg$currPos); + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsebegin_group(); + if (s9 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c9) { + s10 = peg$c9; + peg$currPos += 6; + } else { + s10 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s10 !== peg$FAILED) { + s11 = peg$parseend_group(); + if (s11 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f38(s3, s5, s6, s7); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + var key = peg$currPos * 52 + 15; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parseverbatim_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f39(s3, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f40(s3, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f39(s3, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f40(s3, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s5 = input.substring(s5, peg$currPos); + s6 = peg$parseend_env(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebegin_group(); + if (s7 !== peg$FAILED) { + s8 = peg$parseverbatim_env_name(); + if (s8 !== peg$FAILED) { + s9 = peg$parseend_group(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f41(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_env_name() { + var s0; + var key = peg$currPos * 52 + 16; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + if (input.substr(peg$currPos, 9) === peg$c10) { + s0 = peg$c10; + peg$currPos += 9; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c11) { + s0 = peg$c11; + peg$currPos += 8; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 13) === peg$c12) { + s0 = peg$c12; + peg$currPos += 13; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 12) === peg$c13) { + s0 = peg$c13; + peg$currPos += 12; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c14) { + s0 = peg$c14; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c15) { + s0 = peg$c15; + peg$currPos += 10; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + } + } + } + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemacro() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 17; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsechar(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsechar(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f42(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f43(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f44(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsegroup() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 18; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f45(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f45(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f46(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsegroup_contents_as_string() { + var s0, s1; + var key = peg$currPos * 52 + 19; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parsegroup(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f47(); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseenvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + var key = peg$currPos * 52 + 20; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup_contents_as_string(); + if (s2 !== peg$FAILED) { + s3 = peg$parsesameline_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f48(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f49(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f48(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f49(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$parseend_env(); + if (s5 !== peg$FAILED) { + s6 = peg$parsegroup_contents_as_string(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f50(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + var key = peg$currPos * 52 + 21; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsesameline_comment(); + if (s5 === peg$FAILED) { + s5 = null; + } + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f51(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f52(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f51(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f52(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s7 = peg$parseend_env(); + if (s7 !== peg$FAILED) { + s8 = peg$parsebegin_group(); + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_env_name(); + if (s9 !== peg$FAILED) { + s10 = peg$parseend_group(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f53(s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_display_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 23; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 91) { + s2 = peg$c4; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_display_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 24; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s2 = peg$c5; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_inline_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 25; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_inline_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 26; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s2 = peg$c17; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_env() { + var s0, s1, s2; + var key = peg$currPos * 52 + 27; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c18) { + s2 = peg$c18; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e38); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_env() { + var s0, s1, s2; + var key = peg$currPos * 52 + 28; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c19) { + s2 = peg$c19; + peg$currPos += 3; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e39); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_env_name() { + var s0, s1; + var key = peg$currPos * 52 + 29; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.substr(peg$currPos, 9) === peg$c20) { + s1 = peg$c20; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e40); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c21) { + s1 = peg$c21; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e41); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c22) { + s1 = peg$c22; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e42); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c23) { + s1 = peg$c23; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e43); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c24) { + s1 = peg$c24; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e44); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c25) { + s1 = peg$c25; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e45); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c26) { + s1 = peg$c26; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e46); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c27) { + s1 = peg$c27; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e47); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c28) { + s1 = peg$c28; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e48); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c29) { + s1 = peg$c29; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e49); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c30) { + s1 = peg$c30; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e50); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c31) { + s1 = peg$c31; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e51); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c32) { + s1 = peg$c32; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e52); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c33) { + s1 = peg$c33; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e53); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 11) === peg$c34) { + s1 = peg$c34; + peg$currPos += 11; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e54); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f56(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseescape() { + var s0, s1; + var key = peg$currPos * 52 + 30; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e56); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f57(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e55); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_group() { + var s0, s1; + var key = peg$currPos * 52 + 31; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c36; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e57); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f58(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_group() { + var s0, s1; + var key = peg$currPos * 52 + 32; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 125) { + s1 = peg$c37; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e58); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f59(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_shift() { + var s0, s1; + var key = peg$currPos * 52 + 33; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 36) { + s1 = peg$c38; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e59); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f60(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsealignment_tab() { + var s0, s1; + var key = peg$currPos * 52 + 34; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 38) { + s1 = peg$c39; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e60); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f61(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenl() { + var s0, s1, s2; + var key = peg$currPos * 52 + 35; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 13) { + s2 = peg$c40; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c41; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e63); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c40; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c42) { + s0 = peg$c42; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e64); + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e61); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemacro_parameter() { + var s0, s1; + var key = peg$currPos * 52 + 36; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 35) { + s1 = peg$c43; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e65); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f62(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesuperscript() { + var s0, s1; + var key = peg$currPos * 52 + 37; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 94) { + s1 = peg$c44; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e66); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f63(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesubscript() { + var s0, s1; + var key = peg$currPos * 52 + 38; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s1 = peg$c45; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e67); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f64(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseignore() { + var s0; + var key = peg$currPos * 52 + 39; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + if (input.charCodeAt(peg$currPos) === 0) { + s0 = peg$c46; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e68); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesp() { + var s0, s1, s2; + var key = peg$currPos * 52 + 40; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f65(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsechar() { + var s0; + var key = peg$currPos * 52 + 41; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + if (peg$r2.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e71); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e70); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenum() { + var s0; + var key = peg$currPos * 52 + 42; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + if (peg$r3.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e73); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e72); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsepunctuation() { + var s0, s1; + var key = peg$currPos * 52 + 43; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + if (peg$r4.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e75); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f66(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e74); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsecomment_start() { + var s0; + var key = peg$currPos * 52 + 44; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsefull_comment() { + var s0; + var key = peg$currPos * 52 + 45; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parseownline_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsesameline_comment(); + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e76); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseownline_comment() { + var s0, s1, s2, s3; + var key = peg$currPos * 52 + 46; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseleading_sp(); + if (s2 !== peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f67(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesameline_comment() { + var s0, s1, s2; + var key = peg$currPos * 52 + 47; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = []; + s2 = peg$parsesp(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + s2 = peg$parsecomment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f68(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 48; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f69(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f69(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseparbreak(); + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f70(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f71(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f71(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + s4 = peg$parsenl(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = peg$parsenl(); + if (s3 === peg$FAILED) { + s3 = peg$parseEOF(); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f72(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e77); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseleading_sp() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 49; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsestart_of_line(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsestart_of_line() { + var s0; + var key = peg$currPos * 52 + 50; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$savedPos = peg$currPos; + s0 = peg$f73(); + if (s0) { + s0 = void 0; + } else { + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseEOF() { + var s0, s1; + var key = peg$currPos * 52 + 51; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function toString(e) { + if (typeof e === "string") { + return e; + } + if (typeof e.content === "string") { + return e.content; + } + if (e && e.type === "whitespace") { + return " "; + } + return e; + } + function compare_env(g1, g2) { + const g1Name = typeof g1 === "string" ? g1 : g1.content.map(toString).join(""); + const g2Name = typeof g2 === "string" ? g2 : g2.content.map(toString).join(""); + return g1Name === g2Name; + } + function createNode(type, extra = {}) { + return { type, ...extra, position: location() }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _AlignEnvironmentPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(x) { + return { cells: [], colSeps: [], ...x }; + }; + var peg$f2 = function(rowItems, rowSep, trailingComment) { + return { ...rowItems, rowSep, trailingComment }; + }; + var peg$f3 = function(rowItems, trailingComment) { + return { ...rowItems, rowSep: null, trailingComment }; + }; + var peg$f4 = function(x) { + return x; + }; + var peg$f5 = function(x) { + return { + cells: [], + colSeps: [], + rowSep: null, + trailingComment: x + }; + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(colSep, cell) { + return { colSep, cell }; + }; + var peg$f8 = function(colSep) { + return { colSep }; + }; + var peg$f9 = function(a, b) { + return processRow(a, b); + }; + var peg$f10 = function(b) { + return processRow(null, b); + }; + var peg$f11 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f12 = function(tok) { + return tok; + }; + var peg$f13 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f14 = function(tok) { + return tok; + }; + var peg$f15 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f16 = function(tok) { + return tok; + }; + var peg$f17 = function(tok) { + return options.isRowSep(tok); + }; + var peg$f18 = function(tok) { + return tok; + }; + var peg$f19 = function(tok) { + return options.isColSep(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f0(); + } + s0 = s1; + } + return s0; + } + function peg$parserow_with_end() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + s2 = peg$f1(s2); + s1 = s2; + s2 = peg$parserow_sep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_without_end() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parserow_items(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f5(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parserow_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsecol_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parseseparated_cell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsecell(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s1 = peg$f8(s1); + } + s0 = s1; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsecell(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_cell(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_cell(); + } + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_cell(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_cell(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f11(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f12(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f13(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f15(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f16(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f17(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f18(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecol_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processRow(leadCell, otherCells) { + const cells = [leadCell || []]; + const seps = []; + for (const x of otherCells) { + cells.push(x.cell || []); + seps.push(x.colSep); + } + return { cells, colSeps: seps }; + } + if (!options.isWhitespace) { + try { + Object.assign( + options, + createMatchers(["\\", "hline", "cr"], ["&"]) + ); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _ArgSpecPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list }; + var peg$startRuleFunction = peg$parseargs_spec_list; + var peg$c1 = "v"; + var peg$c2 = "b"; + var peg$c3 = "!"; + var peg$c4 = "D"; + var peg$c5 = "d"; + var peg$c6 = "s"; + var peg$c7 = "O"; + var peg$c8 = "o"; + var peg$c9 = "e"; + var peg$c10 = "E"; + var peg$c11 = "t"; + var peg$c12 = "R"; + var peg$c13 = "r"; + var peg$c14 = "u"; + var peg$c15 = "m"; + var peg$c16 = "{"; + var peg$c17 = "}"; + var peg$c18 = " "; + var peg$c19 = "\n"; + var peg$c20 = "\r"; + var peg$c21 = "\\"; + var peg$r0 = /^[{ ]/; + var peg$r1 = /^[a-zA-Z]/; + var peg$r2 = /^[{}]/; + var peg$e0 = peg$literalExpectation("+", false); + var peg$e1 = peg$literalExpectation("v", false); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$literalExpectation("b", false); + var peg$e4 = peg$literalExpectation("!", false); + var peg$e5 = peg$literalExpectation("D", false); + var peg$e6 = peg$literalExpectation("d", false); + var peg$e7 = peg$literalExpectation("s", false); + var peg$e8 = peg$literalExpectation("O", false); + var peg$e9 = peg$literalExpectation("o", false); + var peg$e10 = peg$literalExpectation("e", false); + var peg$e11 = peg$literalExpectation("E", false); + var peg$e12 = peg$literalExpectation("t", false); + var peg$e13 = peg$literalExpectation("R", false); + var peg$e14 = peg$literalExpectation("r", false); + var peg$e15 = peg$literalExpectation("u", false); + var peg$e16 = peg$classExpectation(["{", " "], false, false); + var peg$e17 = peg$literalExpectation("m", false); + var peg$e18 = peg$literalExpectation("{", false); + var peg$e19 = peg$literalExpectation("}", false); + var peg$e20 = peg$literalExpectation(" ", false); + var peg$e21 = peg$literalExpectation("\n", false); + var peg$e22 = peg$literalExpectation("\r", false); + var peg$e23 = peg$literalExpectation("\\", false); + var peg$e24 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false); + var peg$e25 = peg$classExpectation(["{", "}"], false, false); + var peg$f0 = function(x) { + return x; + }; + var peg$f1 = function(spec) { + return spec; + }; + var peg$f2 = function(spec) { + return spec; + }; + var peg$f3 = function(openBrace) { + return createNode("verbatim", { openBrace, closeBrace: openBrace }); + }; + var peg$f4 = function() { + return createNode("body"); + }; + var peg$f5 = function(leading_bang, spec) { + return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec; + }; + var peg$f6 = function(braceSpec, defaultArg) { + return createNode("optional", { ...braceSpec, defaultArg }); + }; + var peg$f7 = function(braceSpec) { + return createNode("optional", braceSpec); + }; + var peg$f8 = function() { + return createNode("optionalStar"); + }; + var peg$f9 = function(g) { + return createNode("optional", { defaultArg: g }); + }; + var peg$f10 = function() { + return createNode("optional"); + }; + var peg$f11 = function(args) { + return createNode("embellishment", { + embellishmentTokens: args + }); + }; + var peg$f12 = function(args, g) { + return createNode("embellishment", { + embellishmentTokens: args, + defaultArg: g + }); + }; + var peg$f13 = function(tok) { + return createNode("optionalToken", { token: tok }); + }; + var peg$f14 = function(braceSpec, defaultArg) { + return createNode("mandatory", { ...braceSpec, defaultArg }); + }; + var peg$f15 = function(braceSpec) { + return createNode("mandatory", braceSpec); + }; + var peg$f16 = function(stopTokens) { + return createNode("until", { stopTokens }); + }; + var peg$f17 = function(x) { + return [x]; + }; + var peg$f18 = function(g) { + return g.content; + }; + var peg$f19 = function() { + return createNode("mandatory"); + }; + var peg$f20 = function(openBrace, closeBrace) { + return { openBrace, closeBrace }; + }; + var peg$f21 = function(g) { + return g.content.map(groupToStr).join(""); + }; + var peg$f22 = function(t) { + return [t]; + }; + var peg$f23 = function(args) { + return args.filter((a) => !a.match(/^\s*$/)); + }; + var peg$f24 = function(content) { + return { type: "group", content }; + }; + var peg$f25 = function() { + return ""; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseargs_spec_list() { + var s0, s1, s2, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + s2 = peg$parsewhitespace(); + s0 = peg$f1(s1); + return s0; + } + function peg$parsearg_spec() { + var s0, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + peg$currPos++; + } else { + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + s2 = peg$parseoptional(); + if (s2 === peg$FAILED) { + s2 = peg$parsemandatory(); + if (s2 === peg$FAILED) { + s2 = peg$parseverbatim(); + if (s2 === peg$FAILED) { + s2 = peg$parserequired(); + if (s2 === peg$FAILED) { + s2 = peg$parsebody(); + if (s2 === peg$FAILED) { + s2 = peg$parseuntil(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 118) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebody() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 98) { + s1 = peg$c2; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(); + } + s0 = s1; + return s0; + } + function peg$parseoptional() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c3; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseoptional_star(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_standard(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_delimited(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_embellishment(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_token(); + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseoptional_delimited() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 68) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsearg(); + if (s3 !== peg$FAILED) { + s0 = peg$f6(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 100) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_star() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 115) { + s1 = peg$c6; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f8(); + } + s0 = s1; + return s0; + } + function peg$parseoptional_standard() { + var s0, s1, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 79) { + s1 = peg$c7; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s1 !== peg$FAILED) { + peg$parsewhitespace(); + s3 = peg$parsearg(); + if (s3 !== peg$FAILED) { + s0 = peg$f9(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 111) { + s1 = peg$c8; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + } + return s0; + } + function peg$parseoptional_embellishment() { + var s0, s1, s3, s5; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 101) { + s1 = peg$c9; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s1 !== peg$FAILED) { + peg$parsewhitespace(); + s3 = peg$parseargs(); + if (s3 !== peg$FAILED) { + s0 = peg$f11(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 69) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + peg$parsewhitespace(); + s3 = peg$parseargs(); + if (s3 !== peg$FAILED) { + peg$parsewhitespace(); + s5 = peg$parseargs(); + if (s5 !== peg$FAILED) { + s0 = peg$f12(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_token() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 116) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserequired() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 82) { + s1 = peg$c12; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsearg(); + if (s3 !== peg$FAILED) { + s0 = peg$f14(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 114) { + s1 = peg$c13; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseuntil() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 117) { + s1 = peg$c14; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseuntil_stop_token(); + if (s2 !== peg$FAILED) { + s0 = peg$f16(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseuntil_stop_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebraced_group(); + if (s1 !== peg$FAILED) { + s1 = peg$f18(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsemandatory() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 109) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f19(); + } + s0 = s1; + return s0; + } + function peg$parsebrace_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsemacro(); + if (s4 === peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemacro(); + if (s5 === peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = null; + } + s2 = input.substring(s2, peg$currPos); + s0 = peg$f20(s1, s2); + return s0; + } + function peg$parsearg() { + var s0, s1; + s0 = peg$parsetoken(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebraced_group(); + if (s1 !== peg$FAILED) { + s1 = peg$f21(s1); + } + s0 = s1; + } + return s0; + } + function peg$parseargs() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsetoken(); + if (s1 !== peg$FAILED) { + s1 = peg$f22(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsearg(); + if (s3 === peg$FAILED) { + s3 = peg$parsewhitespace_token(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsearg(); + if (s3 === peg$FAILED) { + s3 = peg$parsewhitespace_token(); + } + } + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c17; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f23(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parsebraced_group() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 === peg$FAILED) { + s7 = peg$parsewhitespace_token(); + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 === peg$FAILED) { + s7 = peg$parsewhitespace_token(); + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + } + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c17; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f24(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace_token(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace_token(); + } + s1 = peg$f25(); + s0 = s1; + return s0; + } + function peg$parsewhitespace_token() { + var s0; + if (input.charCodeAt(peg$currPos) === 32) { + s0 = peg$c18; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + } + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s2 = peg$c21; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$r1.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s2 = peg$c21; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (peg$r1.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3; + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (peg$r2.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s3 !== peg$FAILED) { + s0 = s3; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + const DEFAULT_OPTIONS = { + optional: { openBrace: "[", closeBrace: "]" }, + mandatory: { openBrace: "{", closeBrace: "}" } + }; + function createNode(type, options2) { + const computedOptions = DEFAULT_OPTIONS[type] || {}; + return { type, ...computedOptions, ...options2 }; + } + function groupToStr(node) { + if (typeof node !== "object" || !node) { + return node; + } + if (node.type === "group") { + return `{${node.content.map(groupToStr).join("")}}`; + } + return node; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _PgfkeysPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(rowItems, trailingComment) { + return { + itemParts: [], + ...rowItems, + trailingComment, + trailingComma: true + }; + }; + var peg$f2 = function(rowItems, trailingComment) { + return { ...rowItems, trailingComment }; + }; + var peg$f3 = function(a, b) { + return processItem(a, b); + }; + var peg$f4 = function(b) { + return processItem(null, b); + }; + var peg$f5 = function(cell) { + return { cell }; + }; + var peg$f6 = function() { + return {}; + }; + var peg$f7 = function(part) { + return part; + }; + var peg$f8 = function(x) { + return x; + }; + var peg$f9 = function(space, x) { + return { + trailingComment: x, + leadingParbreak: space.parbreak > 0 + }; + }; + var peg$f10 = function(list) { + return { + whitespace: list.filter((x) => options.isWhitespace(x)).length, + parbreak: list.filter((x) => options.isParbreak(x)).length + }; + }; + var peg$f11 = function() { + return !options.allowParenGroups; + }; + var peg$f12 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options.isParbreak(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options.isComma(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options.isEquals(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options.isChar(tok, "("); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options.isChar(tok, ")"); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_with_end() { + var s0, s2, s4, s5, s6, s7, s8; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$parsewhitespace_or_parbreaks(); + s4 = peg$parseitem_sep(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsewhitespace(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsewhitespace(); + } + s6 = peg$parsetrailing_comment(); + if (s6 === peg$FAILED) { + s6 = null; + } + s7 = []; + s8 = peg$parsewhitespace(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsewhitespace(); + } + s0 = peg$f1(s2, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_without_end() { + var s0, s2, s3; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseitem_part(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_part(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_part(); + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_part(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_part(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(s1); + } + s0 = s1; + } + return s0; + } + function peg$parseseparated_part() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseparbreak(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseparbreak(); + } + s4 = peg$parseitem_part(); + if (s4 !== peg$FAILED) { + s0 = peg$f5(s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_part() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$currPos; + s3 = []; + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsewhitespace_or_parbreaks(); + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsenon_token(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_whitespace_non_parbreak_token() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewhitespace(); + if (s3 === peg$FAILED) { + s3 = peg$parseparbreak(); + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseparen_block(); + if (s3 === peg$FAILED) { + s3 = peg$parsetoken(); + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_token() { + var s0; + s0 = peg$parseitem_sep(); + if (s0 === peg$FAILED) { + s0 = peg$parseequals(); + if (s0 === peg$FAILED) { + s0 = peg$parsetrailing_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parseown_line_comment(); + } + } + } + return s0; + } + function peg$parsewhitespace_or_parbreaks() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + } + s1 = peg$f10(s1); + s0 = s1; + return s0; + } + function peg$parseparen_block() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + s0 = peg$currPos; + s1 = peg$f11(); + if (s1) { + s1 = peg$FAILED; + } else { + s1 = void 0; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$parseopen_paren(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseclose_paren(); + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processItem(leadCell, otherCells) { + const cells = [leadCell || []]; + for (const x of otherCells) { + cells.push(x.cell || []); + } + return { itemParts: cells }; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isChar: (node, char) => node.type === "string" && node.content === char, + isComma(node) { + return node.type === "string" && node.content === ","; + }, + isEquals(node) { + return node.type === "string" && node.content === "="; + }, + isParbreak(node) { + return node.type === "parbreak"; + }, + isWhitespace(node) { + return node.type === "whitespace"; + }, + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + allowParenGroups: true + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _MacroSubstitutionPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(tok) { + return options.isHash(tok); + }; + var peg$f3 = function(tok) { + return tok; + }; + var peg$f4 = function(tok) { + return options.isNumber(tok); + }; + var peg$f5 = function(tok) { + return tok; + }; + var peg$f6 = function() { + return { type: "string", content: "#" }; + }; + var peg$f7 = function(num) { + const split = options.splitNumber(num); + return [{ type: "hash_number", number: split.number }, split.rest]; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsehash() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f4(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_hash() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsehash(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehash_number() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isHash) { + try { + Object.assign(options, { + isHash: (node) => node.type === "string" && node.content === "#", + isNumber: (node) => node.type === "string" && 0 < +node.content.charAt(0), + splitNumber: (node) => { + const number = +node.content.charAt(0); + if (node.content.length > 1) { + return { + number, + rest: { + type: "string", + content: node.content.slice(1) + } + }; + } + return { number }; + } + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _LigaturesPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f3 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f4 = function(tok1, tok2) { + const split = options.split(tok2); + return options.isRecognized([tok1, split[0]]); + }; + var peg$f5 = function(tok1, tok2) { + const split = options.split(tok2); + return [options.isRecognized([tok1, split[0]]), split[1]]; + }; + var peg$f6 = function(tok1, tok2) { + return options.isRecognized([tok1, tok2]); + }; + var peg$f7 = function(tok1, tok2) { + return options.isRecognized([tok1, tok2]); + }; + var peg$f8 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f9 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f10 = function(tok) { + return options.isRecognized([tok]); + }; + var peg$f11 = function(tok) { + return options.isRecognized([tok]); + }; + var peg$f12 = function(tok) { + return options.isMacro(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options.isSplitable(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsetriple_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_ligature() { + var s0; + s0 = peg$parsedouble_macro_ligature(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_macro_ligature_extracted(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_char_ligature(); + } + } + return s0; + } + function peg$parsedouble_macro_ligature_extracted() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + s3 = peg$parsesplitable(); + if (s3 !== peg$FAILED) { + s4 = peg$f4(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f5(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_macro_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$f6(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f7(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_char_ligature() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f8(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemono_ligature() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f10(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f11(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesplitable() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isMacro: (node) => node.type === "macro", + isWhitespace: (node) => node.type === "whitespace", + isRecognized: (nodes) => { + if (nodes.length == 2 && nodes[0].content === "^" && nodes[1].content === "o") { + return { type: "string", content: "ô" }; + } + return null; + }, + isSplitable: (node) => node.type === "string" && node.content.length > 1, + split: (node) => [ + { type: "string", content: node.content.charAt(0) }, + { type: "string", content: node.content.slice(1) } + ] + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _XColorPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { start: peg$parsestart }; + var peg$startRuleFunction = peg$parsestart; + var peg$c0 = ";"; + var peg$c1 = ","; + var peg$c2 = ":"; + var peg$c3 = "/"; + var peg$c4 = ">"; + var peg$c5 = "!"; + var peg$c6 = "."; + var peg$c7 = "!!["; + var peg$c8 = "]"; + var peg$c9 = "!!"; + var peg$c10 = "+"; + var peg$c11 = "-"; + var peg$r0 = /^[a-zA-Z0-9]/; + var peg$r1 = /^[0-9]/; + var peg$r2 = /^[ \t\n\r]/; + var peg$r3 = /^[0-9a-fA-F]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation(";", false); + var peg$e2 = peg$literalExpectation(",", false); + var peg$e3 = peg$otherExpectation("model list"); + var peg$e4 = peg$literalExpectation(":", false); + var peg$e5 = peg$literalExpectation("/", false); + var peg$e6 = peg$otherExpectation("model"); + var peg$e7 = peg$otherExpectation("color spec list"); + var peg$e8 = peg$otherExpectation("color spec"); + var peg$e9 = peg$otherExpectation("color"); + var peg$e10 = peg$otherExpectation("function expression"); + var peg$e11 = peg$literalExpectation(">", false); + var peg$e12 = peg$otherExpectation("function"); + var peg$e13 = peg$otherExpectation("extended expression"); + var peg$e14 = peg$otherExpectation("core model"); + var peg$e15 = peg$otherExpectation("expr"); + var peg$e16 = peg$literalExpectation("!", false); + var peg$e17 = peg$otherExpectation("mix expr"); + var peg$e18 = peg$otherExpectation("name"); + var peg$e19 = peg$literalExpectation(".", false); + var peg$e20 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e21 = peg$otherExpectation("postfix"); + var peg$e22 = peg$literalExpectation("!![", false); + var peg$e23 = peg$literalExpectation("]", false); + var peg$e24 = peg$literalExpectation("!!", false); + var peg$e25 = peg$otherExpectation("prefix"); + var peg$e26 = peg$otherExpectation("plus"); + var peg$e27 = peg$literalExpectation("+", false); + var peg$e28 = peg$otherExpectation("minus"); + var peg$e29 = peg$literalExpectation("-", false); + var peg$e30 = peg$otherExpectation("num"); + var peg$e31 = peg$classExpectation([["0", "9"]], false, false); + var peg$e32 = peg$otherExpectation("positive float"); + var peg$e33 = peg$otherExpectation("divisor"); + var peg$e34 = peg$otherExpectation("int"); + var peg$e36 = peg$classExpectation([" ", " ", "\n", "\r"], false, false); + var peg$e37 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false); + var peg$f0 = function(m) { + return m; + }; + var peg$f1 = function(m) { + return m; + }; + var peg$f2 = function(m) { + return m; + }; + var peg$f3 = function(m) { + return m; + }; + var peg$f4 = function(m) { + return m; + }; + var peg$f5 = function(a) { + return { type: "invalid_spec", content: a }; + }; + var peg$f6 = function(f, c) { + return c; + }; + var peg$f7 = function(f, r) { + return { type: "color_set", content: [f].concat(r) }; + }; + var peg$f8 = function(n, s) { + return { type: "color_set_item", name: n, spec_list: s }; + }; + var peg$f9 = function(c, m) { + return { type: "model_list", contents: m, core_model: c }; + }; + var peg$f10 = function(m) { + return { type: "model_list", contents: m, core_model: null }; + }; + var peg$f11 = function(m, a) { + return a; + }; + var peg$f12 = function(m, r) { + return [m].concat(r); + }; + var peg$f13 = function(s, a) { + return a; + }; + var peg$f14 = function(s, r) { + return { type: "spec_list", content: [s].concat(r) }; + }; + var peg$f15 = function(c) { + return { type: "hex_spec", content: [c] }; + }; + var peg$f16 = function(c, d) { + return d; + }; + var peg$f17 = function(c, d) { + return d; + }; + var peg$f18 = function(c, r) { + return { type: "num_spec", content: r ? [c].concat(r) : [c] }; + }; + var peg$f19 = function(c, fs) { + return { type: "color", color: c, functions: fs }; + }; + var peg$f20 = function(f, n) { + return n; + }; + var peg$f21 = function(f, args) { + return { type: "function", name: f, args }; + }; + var peg$f22 = function(core, d, e, es) { + return { + type: "extended_expr", + core_model: core, + div: d, + expressions: [e].concat(es) + }; + }; + var peg$f23 = function(core, e, es) { + return { + type: "extended_expr", + core_model: core, + div: null, + expressions: [e].concat(es) + }; + }; + var peg$f24 = function(e, d) { + return { type: "weighted_expr", color: e, weight: d }; + }; + var peg$f25 = function(e) { + return e; + }; + var peg$f26 = function(p, n, e, po) { + return { + type: "expr", + prefix: p, + name: n, + mix_expr: e, + postfix: po + }; + }; + var peg$f27 = function(p, n) { + return { type: "complete_mix", mix_percent: p, name: n }; + }; + var peg$f28 = function(p) { + return { type: "partial_mix", mix_percent: p }; + }; + var peg$f29 = function(c, p) { + return c.concat(p || []); + }; + var peg$f30 = function(n) { + return { type: "postfix", num: n }; + }; + var peg$f31 = function(p) { + return { type: "postfix", plusses: p }; + }; + var peg$f32 = function(n) { + return parseInt(n, 10); + }; + var peg$f33 = function(n) { + return parseFloat(n); + }; + var peg$f34 = function(n) { + return n; + }; + var peg$f35 = function(n) { + return -n; + }; + var peg$f36 = function(m, n) { + return m ? -n : n; + }; + var peg$f37 = function(h) { + return h.toUpperCase(); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsestart() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsespec_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f2(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor_set_spec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + s1 = input.substring(s1, peg$currPos); + s1 = peg$f5(s1); + s0 = s1; + } + } + } + } + } + return s0; + } + function peg$parsecolor_set_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsecolor_set_item(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolor_set_item() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsename(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsespec_list(); + if (s3 !== peg$FAILED) { + s0 = peg$f8(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel_list() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemodel_list_tail(); + if (s3 !== peg$FAILED) { + s0 = peg$f9(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list_tail(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parsemodel_list_tail() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsemodel(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f12(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel() { + var s0; + peg$silentFails++; + s0 = peg$parsecore_model(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsespec_list() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f14(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsespec() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsehex(); + if (s3 !== peg$FAILED) { + s4 = peg$parsehex(); + if (s4 !== peg$FAILED) { + s5 = peg$parsehex(); + if (s5 !== peg$FAILED) { + s6 = peg$parsehex(); + if (s6 !== peg$FAILED) { + s7 = peg$parsehex(); + if (s7 !== peg$FAILED) { + s8 = peg$parsehex(); + if (s8 !== peg$FAILED) { + s3 = [s3, s4, s5, s6, s7, s8]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f15(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsedec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + } + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f18(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsecolor() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecolor_expr(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsefunc_expr(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsefunc_expr(); + } + s0 = peg$f19(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsecolor_expr() { + var s0; + s0 = peg$parseext_expr(); + if (s0 === peg$FAILED) { + s0 = peg$parseexpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsename(); + } + } + return s0; + } + function peg$parsefunc_expr() { + var s0, s1, s2, s3, s4, s5, s6; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 62) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsefunction(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s0 = peg$f21(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parsefunction() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseext_expr() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsediv(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c2; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseweighted_expr(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseadditional_weighted_expr(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f22(s1, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseweighted_expr(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseadditional_weighted_expr(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f23(s1, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseweighted_expr() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseexpr(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsedec(); + if (s3 !== peg$FAILED) { + s0 = peg$f24(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseadditional_weighted_expr() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s1 = peg$c0; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseweighted_expr(); + if (s2 !== peg$FAILED) { + s0 = peg$f25(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecore_model() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseexpr() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseprefix(); + s2 = peg$parsename(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemix_expr(); + s4 = peg$parsepostfix(); + if (s4 === peg$FAILED) { + s4 = null; + } + s0 = peg$f26(s1, s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsecomplete_mix() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsename(); + if (s4 !== peg$FAILED) { + s0 = peg$f27(s2, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_mix() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemix_expr() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomplete_mix(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomplete_mix(); + } + s2 = peg$parsepartial_mix(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f29(s1, s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + return s0; + } + function peg$parsename() { + var s0, s1, s2; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 46) { + s0 = peg$c6; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parsepostfix() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c7) { + s1 = peg$c7; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c8; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c9) { + s1 = peg$c9; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$parseplus(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseplus(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + return s0; + } + function peg$parseprefix() { + var s0; + peg$silentFails++; + s0 = peg$parseminus(); + if (s0 === peg$FAILED) { + s0 = null; + } + peg$silentFails--; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + return s0; + } + function peg$parsenum() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f32(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + return s0; + } + function peg$parsepct() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + s4 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c6; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + s8 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + while (s9 !== peg$FAILED) { + s8.push(s9); + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + s7 = input.substring(s7, peg$currPos); + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 === peg$FAILED) { + s5 = null; + } + s4 = input.substring(s4, peg$currPos); + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c6; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f33(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsediv() { + var s0; + peg$silentFails++; + s0 = peg$parsepct(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsedec() { + var s0, s1, s2; + s0 = peg$parsepct(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f34(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f35(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parseint() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + s0 = peg$f36(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parsesp() { + var s0, s1; + s0 = []; + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + } + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehex() { + var s0, s1; + s0 = peg$currPos; + if (peg$r3.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f37(s1); + } + s0 = s1; + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _TabularPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$otherExpectation("decl_start"); + var peg$e1 = peg$otherExpectation("decl_end"); + var peg$e2 = peg$otherExpectation("vert"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("l"); + var peg$e5 = peg$otherExpectation("r"); + var peg$e6 = peg$otherExpectation("c"); + var peg$e7 = peg$otherExpectation("p"); + var peg$e8 = peg$otherExpectation("m"); + var peg$e9 = peg$otherExpectation("b"); + var peg$e10 = peg$otherExpectation("w"); + var peg$e11 = peg$otherExpectation("W"); + var peg$e12 = peg$otherExpectation("X"); + var peg$e13 = peg$otherExpectation("!"); + var peg$e14 = peg$otherExpectation("@"); + var peg$e15 = peg$otherExpectation("<"); + var peg$e16 = peg$otherExpectation(">"); + var peg$e17 = peg$otherExpectation("group"); + var peg$e18 = peg$otherExpectation("whitespace"); + var peg$f0 = function(c) { + return c; + }; + var peg$f1 = function(cols) { + return cols; + }; + var peg$f2 = function() { + return []; + }; + var peg$f3 = function(divs1, start, a, end, divs2) { + return { + type: "column", + pre_dividers: divs1, + post_dividers: divs2, + before_start_code: start, + before_end_code: end, + alignment: a + }; + }; + var peg$f4 = function() { + return { + type: "vert_divider" + }; + }; + var peg$f5 = function(b, g) { + return { + type: "bang_divider", + content: g[0].content + }; + }; + var peg$f6 = function(g) { + return { + type: "at_divider", + content: g[0].content + }; + }; + var peg$f7 = function(div) { + return div; + }; + var peg$f8 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f9 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f10 = function() { + return { type: "alignment", alignment: "left" }; + }; + var peg$f11 = function() { + return { type: "alignment", alignment: "center" }; + }; + var peg$f12 = function() { + return { type: "alignment", alignment: "right" }; + }; + var peg$f13 = function() { + return { type: "alignment", alignment: "X" }; + }; + var peg$f14 = function() { + return "top"; + }; + var peg$f15 = function() { + return "default"; + }; + var peg$f16 = function() { + return "bottom"; + }; + var peg$f17 = function(a, g) { + return { + type: "alignment", + alignment: "parbox", + baseline: a, + size: g[0].content + }; + }; + var peg$f18 = function(g1, g2) { + return { + type: "alignment", + alignment: "parbox", + baseline: g1[0].content, + size: g2[0].content + }; + }; + var peg$f19 = function(tok) { + return options.matchChar(tok, "|"); + }; + var peg$f20 = function(tok) { + return options.matchChar(tok, "l"); + }; + var peg$f21 = function(tok) { + return options.matchChar(tok, "r"); + }; + var peg$f22 = function(tok) { + return options.matchChar(tok, "c"); + }; + var peg$f23 = function(tok) { + return options.matchChar(tok, "p"); + }; + var peg$f24 = function(tok) { + return options.matchChar(tok, "m"); + }; + var peg$f25 = function(tok) { + return options.matchChar(tok, "b"); + }; + var peg$f26 = function(tok) { + return options.matchChar(tok, "w"); + }; + var peg$f27 = function(tok) { + return options.matchChar(tok, "W"); + }; + var peg$f28 = function(tok) { + return options.matchChar(tok, "X"); + }; + var peg$f29 = function(tok) { + return options.matchChar(tok, "!"); + }; + var peg$f30 = function(tok) { + return options.matchChar(tok, "@"); + }; + var peg$f31 = function(tok) { + return options.matchChar(tok, "<"); + }; + var peg$f32 = function(tok) { + return options.matchChar(tok, ">"); + }; + var peg$f33 = function(tok) { + return options.isGroup(tok); + }; + var peg$f34 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f2(); + } + s0 = s1; + } + return s0; + } + function peg$parsecolumn() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecolumn_divider(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecolumn_divider(); + } + s2 = peg$parsedecl_start(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = peg$parsealignment(); + if (s3 !== peg$FAILED) { + s4 = peg$parsedecl_end(); + if (s4 === peg$FAILED) { + s4 = null; + } + s5 = []; + s6 = peg$parsecolumn_divider(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsecolumn_divider(); + } + s0 = peg$f3(s1, s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolumn_divider() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$currPos; + s3 = peg$parsevert(); + if (s3 !== peg$FAILED) { + s3 = peg$f4(); + } + s2 = s3; + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parsebang(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f5(s3, s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parseat(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f6(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedecl_start() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsegreater(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + return s0; + } + function peg$parsedecl_end() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseless(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parsealignment() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsel(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsec(); + if (s1 !== peg$FAILED) { + s1 = peg$f11(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parser(); + if (s1 !== peg$FAILED) { + s1 = peg$f12(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseX(); + if (s1 !== peg$FAILED) { + s1 = peg$f13(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsep(); + if (s2 !== peg$FAILED) { + s2 = peg$f14(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parsem(); + if (s2 !== peg$FAILED) { + s2 = peg$f15(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseb(); + if (s2 !== peg$FAILED) { + s2 = peg$f16(); + } + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s0 = peg$f17(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsew(); + if (s1 === peg$FAILED) { + s1 = peg$parseW(); + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f18(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + return s0; + } + function peg$parsevert() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parsel() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parser() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsec() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f23(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsem() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseb() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f25(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsew() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseW() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f27(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parseX() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parsebang() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f29(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseless() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f31(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsegreater() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f33(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isHash) { + try { + Object.assign(options, { + matchChar: (node, char) => node.type === "string" && node.content === char, + isGroup: (node) => node.type === "group", + isWhitespace: (node) => node.type === "whitespace" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _SystemePegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e1 = peg$otherExpectation("item"); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("equation"); + var peg$e4 = peg$otherExpectation("trailing comment"); + var peg$e5 = peg$otherExpectation("comment only line"); + var peg$e6 = peg$otherExpectation("non-var token"); + var peg$e7 = peg$otherExpectation("token"); + var peg$e8 = peg$otherExpectation("same line comment"); + var peg$e9 = peg$otherExpectation("own line comment"); + var peg$e10 = peg$otherExpectation(","); + var peg$e11 = peg$otherExpectation("@"); + var peg$e12 = peg$otherExpectation("variable token"); + var peg$e13 = peg$otherExpectation("+/-"); + var peg$e14 = peg$otherExpectation("="); + var peg$f0 = function(a, b) { + return a.concat(b ? b : []); + }; + var peg$f1 = function() { + return []; + }; + var peg$f3 = function(op, a, b, c) { + return { type: "item", op, variable: b, content: a.concat(b, c) }; + }; + var peg$f4 = function(op, a) { + return { type: "item", op, variable: null, content: a }; + }; + var peg$f5 = function(line, sep, comment) { + return { ...line, sep: [].concat(sep), trailingComment: comment }; + }; + var peg$f6 = function(line, comment) { + return { ...line, trailingComment: comment }; + }; + var peg$f7 = function(eq, ann) { + return { + type: "line", + equation: eq, + annotation: ann, + sep: null + }; + }; + var peg$f8 = function(at, ann) { + return at ? { type: "annotation", marker: at, content: ann } : null; + }; + var peg$f9 = function(left, eq, right) { + return { type: "equation", left, right, equals: eq }; + }; + var peg$f10 = function(x) { + return x; + }; + var peg$f11 = function(x) { + return { + type: "line", + trailingComment: x + }; + }; + var peg$f12 = function(v, s) { + return [v].concat(s ? s : []); + }; + var peg$f13 = function(t) { + return t; + }; + var peg$f14 = function(x) { + return x; + }; + var peg$f15 = function(x) { + return x; + }; + var peg$f16 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options.isSep(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options.isAt(tok); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options.isVar(tok); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options.isOperation(tok); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options.isEquals(tok); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options.isSubscript(tok); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + } + s2 = peg$parseline_without_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parseEOL(); + } + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parseitem() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsevar(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parse_(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parse_(); + } + s7 = []; + s8 = peg$parsetoken(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsetoken(); + } + s8 = []; + s9 = peg$parse_(); + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parse_(); + } + s0 = peg$f3(s1, s3, s5, s7); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s0 = peg$f4(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parseline_with_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f5(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_line_with_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_without_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s2 !== peg$FAILED) { + peg$currPos = s1; + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseequation(); + s3 = peg$parseannotation(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f7(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseannotation() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseat(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsenon_sep_token(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenon_sep_token(); + } + s0 = peg$f8(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseitem(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseitem(); + } + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + } + s0 = peg$f9(s1, s2, s3); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsevar() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsevar_token(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsesubscript(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenon_var_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsevar(); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsenon_sep_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parseat(); + if (s2 === peg$FAILED) { + s2 = peg$parseoperation(); + if (s2 === peg$FAILED) { + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsevar_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s4 = peg$f28(s2); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f29(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parsesubscript() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isSep: (node) => node.type === "string" && node.content === ",", + isVar: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isOperation: (node) => node.type === "string" && node.content.match(/[+-]/), + isEquals: (node) => node.type === "string" && node.content === "=", + isAt: (node) => node.type === "string" && node.content === "@", + isSubscript: (node) => node.content === "_", + isWhitespace: (node) => node.type === "whitespace", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _GluePegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { root: peg$parseroot }; + var peg$startRuleFunction = peg$parseroot; + var peg$c0 = "plus"; + var peg$c1 = "minus"; + var peg$c2 = "pt"; + var peg$c3 = "mm"; + var peg$c4 = "cm"; + var peg$c5 = "in"; + var peg$c6 = "ex"; + var peg$c7 = "em"; + var peg$c8 = "bp"; + var peg$c9 = "pc"; + var peg$c10 = "dd"; + var peg$c11 = "cc"; + var peg$c12 = "nd"; + var peg$c13 = "nc"; + var peg$c14 = "sp"; + var peg$c15 = "filll"; + var peg$c16 = "fill"; + var peg$c17 = "fil"; + var peg$c18 = "."; + var peg$c19 = "+"; + var peg$c20 = "-"; + var peg$r0 = /^[0-9]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation("plus", false); + var peg$e2 = peg$literalExpectation("minus", false); + var peg$e3 = peg$literalExpectation("pt", false); + var peg$e4 = peg$literalExpectation("mm", false); + var peg$e5 = peg$literalExpectation("cm", false); + var peg$e6 = peg$literalExpectation("in", false); + var peg$e7 = peg$literalExpectation("ex", false); + var peg$e8 = peg$literalExpectation("em", false); + var peg$e9 = peg$literalExpectation("bp", false); + var peg$e10 = peg$literalExpectation("pc", false); + var peg$e11 = peg$literalExpectation("dd", false); + var peg$e12 = peg$literalExpectation("cc", false); + var peg$e13 = peg$literalExpectation("nd", false); + var peg$e14 = peg$literalExpectation("nc", false); + var peg$e15 = peg$literalExpectation("sp", false); + var peg$e16 = peg$literalExpectation("filll", false); + var peg$e17 = peg$literalExpectation("fill", false); + var peg$e18 = peg$literalExpectation("fil", false); + var peg$e19 = peg$otherExpectation("number"); + var peg$e20 = peg$classExpectation([["0", "9"]], false, false); + var peg$e21 = peg$literalExpectation(".", false); + var peg$e22 = peg$literalExpectation("+", false); + var peg$e23 = peg$literalExpectation("-", false); + var peg$f0 = function(b, st, sh) { + return { + type: "glue", + fixed: b, + stretchable: st, + shrinkable: sh, + position: location() + }; + }; + var peg$f1 = function(glue) { + return glue; + }; + var peg$f2 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f3 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f4 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f5 = function(n) { + return parseFloat(n); + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseroot() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsebase(); + if (s2 !== peg$FAILED) { + s3 = peg$parsestretchable(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseshrinkable(); + if (s4 === peg$FAILED) { + s4 = null; + } + peg$savedPos = s1; + s1 = peg$f0(s2, s3, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + peg$savedPos = s0; + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebase() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + s2 = peg$parseunit(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsestretchable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c0) { + s1 = peg$c0; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseshrinkable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 5) === peg$c1) { + s1 = peg$c1; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunit() { + var s0; + if (input.substr(peg$currPos, 2) === peg$c2) { + s0 = peg$c2; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c3) { + s0 = peg$c3; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c4) { + s0 = peg$c4; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c5) { + s0 = peg$c5; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c6) { + s0 = peg$c6; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c7) { + s0 = peg$c7; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c8) { + s0 = peg$c8; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c9) { + s0 = peg$c9; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c10) { + s0 = peg$c10; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c11) { + s0 = peg$c11; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c12) { + s0 = peg$c12; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c13) { + s0 = peg$c13; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c14) { + s0 = peg$c14; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return s0; + } + function peg$parserubber_unit() { + var s0; + s0 = peg$parseunit(); + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c15) { + s0 = peg$c15; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c16) { + s0 = peg$c16; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c17) { + s0 = peg$c17; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + } + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsesign(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$currPos; + s5 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c18; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s6 !== peg$FAILED) { + s7 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 === peg$FAILED) { + s4 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parsesign() { + var s0; + if (input.charCodeAt(peg$currPos) === 43) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _TikzPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body }; + var peg$startRuleFunction = peg$parsepath_spec; + var peg$e0 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("comment"); + var peg$e4 = peg$otherExpectation("floating comment"); + var peg$e5 = peg$otherExpectation("operation"); + var peg$e6 = peg$otherExpectation("="); + var peg$f0 = function(v) { + return v; + }; + var peg$f1 = function(ops) { + return { type: "path_spec", content: ops }; + }; + var peg$f2 = function(c1, op, comment) { + return { op, comment }; + }; + var peg$f3 = function(c1, ops, c2, body) { + const comments = [c1, ...ops.map((x) => x.comment), c2].filter( + (x) => x + ); + const attribute = ops.map((x) => x.op.content.content).join(" "); + return { + type: "animation", + comments, + attribute, + content: body.content + }; + }; + var peg$f4 = function(start, b) { + return { ...b, start, type: "foreach" }; + }; + var peg$f5 = function(c1, variables, options2, c2, c3, list, c4, command) { + const comments = [c1, c2, c3, c4].filter((x) => x); + return { + type: "foreach_body", + variables, + options: options2 && options2.content, + list, + command, + comments + }; + }; + var peg$f6 = function(c1, options2, c2, body) { + const comments = [c1, c2].filter((x) => x); + return { + type: "svg_operation", + options: options2 && options2.content, + content: body, + comments + }; + }; + var peg$f7 = function(c1, c2, coord, c3, c4, x) { + return { coord: x, comment: c4 }; + }; + var peg$f8 = function(c1, c2, coord, c3, a, c5) { + const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x); + return { + type: "curve_to", + controls: a ? [coord, a.coord] : [coord], + comments + }; + }; + var peg$f9 = function() { + return { type: "line_to", command: "|-" }; + }; + var peg$f10 = function() { + return { type: "line_to", command: "-|" }; + }; + var peg$f11 = function() { + return { type: "line_to", command: "--" }; + }; + var peg$f12 = function(prefix, content) { + return { type: "coordinate", content, prefix }; + }; + var peg$f13 = function(content) { + return { type: "square_brace_group", content }; + }; + var peg$f14 = function(v) { + return { type: "unknown", content: v }; + }; + var peg$f19 = function(tok) { + return options.isComment(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$f21 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f22 = function(tok) { + return tok; + }; + var peg$f23 = function(c) { + return c; + }; + var peg$f24 = function(tok) { + return options.isOperation(tok); + }; + var peg$f25 = function(tok) { + return { type: "operation", content: tok }; + }; + var peg$f26 = function(tok) { + return options.isChar(tok, "="); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options.isChar(tok, "["); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options.isChar(tok, "]"); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options.isChar(tok, "("); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$f34 = function(tok) { + return options.isChar(tok, ")"); + }; + var peg$f35 = function(tok) { + return tok; + }; + var peg$f36 = function(tok) { + return options.isChar(tok, "+"); + }; + var peg$f37 = function(tok) { + return tok; + }; + var peg$f38 = function(tok) { + return options.isChar(tok, "-"); + }; + var peg$f39 = function(tok) { + return tok; + }; + var peg$f40 = function(tok) { + return options.isChar(tok, "|"); + }; + var peg$f41 = function(tok) { + return tok; + }; + var peg$f42 = function(tok) { + return options.isChar(tok, "."); + }; + var peg$f43 = function(tok) { + return tok; + }; + var peg$f44 = function(tok) { + return options.isChar(tok, "controls"); + }; + var peg$f45 = function(tok) { + return tok; + }; + var peg$f46 = function(tok) { + return options.isChar(tok, "and"); + }; + var peg$f47 = function(tok) { + return tok; + }; + var peg$f48 = function(tok) { + return options.isChar(tok, "svg"); + }; + var peg$f49 = function(tok) { + return tok; + }; + var peg$f50 = function(tok) { + return options.isGroup(tok); + }; + var peg$f51 = function(tok) { + return tok; + }; + var peg$f52 = function(tok) { + return options.isAnyMacro(tok); + }; + var peg$f53 = function(tok) { + return tok; + }; + var peg$f54 = function(tok) { + return options.isChar(tok, "foreach"); + }; + var peg$f55 = function(tok) { + return tok; + }; + var peg$f56 = function(tok) { + return options.isMacro(tok, "foreach"); + }; + var peg$f57 = function(tok) { + return tok; + }; + var peg$f58 = function(tok) { + return options.isChar(tok, "in"); + }; + var peg$f59 = function(tok) { + return tok; + }; + var peg$f60 = function(tok) { + return options.isChar(tok, ":"); + }; + var peg$f61 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsepath_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + return s0; + } + function peg$parseanimation() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parsecolon(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = []; + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseequals(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_comment_(); + s6 = peg$parsegroup(); + if (s6 !== peg$FAILED) { + s0 = peg$f3(s2, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseforeach_keyword(); + if (s1 === peg$FAILED) { + s1 = peg$parseforeach_macro(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parseforeach_body(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_body() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = peg$parse_comment_(); + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsein_keyword(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$parsegroup(); + if (s7 === peg$FAILED) { + s7 = peg$parsemacro(); + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_comment_(); + s9 = peg$parseforeach(); + if (s9 === peg$FAILED) { + s9 = peg$parsegroup(); + if (s9 === peg$FAILED) { + s9 = peg$parsemacro(); + } + } + if (s9 !== peg$FAILED) { + s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsesvg_keyword(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f6(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecurve_to() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + s0 = peg$currPos; + s1 = peg$parsedotdot(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsecontrols_keyword(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_comment_(); + s5 = peg$parsecoordinate(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$currPos; + s8 = peg$parseand_keyword(); + if (s8 !== peg$FAILED) { + s9 = peg$parse_comment_(); + s10 = peg$parsecoordinate(); + if (s10 !== peg$FAILED) { + s7 = peg$f7(s2, s4, s5, s6, s9, s10); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 === peg$FAILED) { + s7 = null; + } + s8 = peg$parse_comment_(); + s9 = peg$parsedotdot(); + if (s9 !== peg$FAILED) { + s0 = peg$f8(s2, s4, s5, s6, s7, s8); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_to() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsepipe(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parsepipe(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parsecoordinate() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parseplus(); + if (s3 !== peg$FAILED) { + s4 = peg$parseplus(); + if (s4 === peg$FAILED) { + s4 = null; + } + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$parseopen_paren(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s3 = input.substring(s3, peg$currPos); + s4 = peg$parseclose_paren(); + if (s4 !== peg$FAILED) { + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesquare_brace_group() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parseopen_square_brace(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parseclose_square_brace(); + if (s3 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedotdot() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsedot(); + if (s1 !== peg$FAILED) { + s2 = peg$parsedot(); + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunknown() { + var s0, s1; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f14(s1); + } + s0 = s1; + return s0; + } + function peg$parsecomment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f22(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parse_comment_() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsecomment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f23(s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parseopen_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f29(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f35(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f36(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f37(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f38(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f39(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepipe() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f41(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedot() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f43(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecontrols_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f44(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f45(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseand_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f46(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f47(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f48(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f49(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f50(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f51(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f52(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f53(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f54(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f55(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_macro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f56(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f57(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsein_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f58(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f59(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolon() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f60(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f61(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isChar: (node, char) => node.type === "string" && node.content === char, + isOperation: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => node.type === "whitespace" || node.type === "parbreak", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + isGroup: (node) => node.type === "group", + isMacro: (node, name) => node.type === "macro" && node.content === name, + isAnyMacro: (node) => node.type === "macro" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const LatexPegParser = _LatexPegParser; +const AlignEnvironmentPegParser = _AlignEnvironmentPegParser; +const ArgSpecPegParser = _ArgSpecPegParser; +const PgfkeysPegParser = _PgfkeysPegParser; +const MacroSubstitutionPegParser = _MacroSubstitutionPegParser; +const LigaturesPegParser = _LigaturesPegParser; +const XColorPegParser = _XColorPegParser; +const TabularPegParser = _TabularPegParser; +const SystemePegParser = _SystemePegParser; +const GluePegParser = _GluePegParser; +const TikzPegParser = _TikzPegParser; +exports.AlignEnvironmentPegParser = AlignEnvironmentPegParser; +exports.ArgSpecPegParser = ArgSpecPegParser; +exports.GluePegParser = GluePegParser; +exports.LatexPegParser = LatexPegParser; +exports.LigaturesPegParser = LigaturesPegParser; +exports.MacroSubstitutionPegParser = MacroSubstitutionPegParser; +exports.PgfkeysPegParser = PgfkeysPegParser; +exports.SystemePegParser = SystemePegParser; +exports.TabularPegParser = TabularPegParser; +exports.TikzPegParser = TikzPegParser; +exports.XColorPegParser = XColorPegParser; +exports.decorateArrayForPegjs = decorateArrayForPegjs; +exports.splitStringsIntoSingleChars = splitStringsIntoSingleChars; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs.map new file mode 100644 index 0000000..2edc814 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pegjs/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/decorate-array-for-pegjs.ts","../libs/split-strings.ts","../grammars/latex.pegjs","../grammars/align-environment.pegjs","../grammars/xparse-argspec.pegjs","../grammars/pgfkeys.pegjs","../grammars/macro-substitutions.pegjs","../grammars/ligatures.pegjs","../grammars/xcolor-expressions.pegjs","../grammars/tabular-spec.pegjs","../grammars/systeme-environment.pegjs","../grammars/tex-glue.pegjs","../grammars/tikz.pegjs","../libs/pegjs-parsers.ts"],"sourcesContent":["type StringlikeArray = any[] & string;\n\n/**\n * Pegjs operates on strings. However, strings and arrays are very similar!\n * This function adds `charAt`, `charCodeAt`, and `substring` methods to\n * `array` so that `array` can then be fed to a Pegjs generated parser.\n *\n * @param {[object]} array\n * @returns {[object]}\n */\nexport function decorateArrayForPegjs(array: any[]): StringlikeArray {\n (array as any).charAt = function (i: number) {\n return this[i];\n };\n // We don't have a hope of imitating `charCodeAt`, so\n // make it something that won't interfere\n (array as any).charCodeAt = () => 0;\n (array as any).substring = function (i: number, j: number) {\n return this.slice(i, j);\n };\n // This function is called when reporting an error,\n // so we convert back to a string.\n (array as any).replace = function (a: string, b: string) {\n const ret = JSON.stringify(this);\n return ret.replace(a, b);\n };\n return array as StringlikeArray;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Splits all multi-character strings into strings that are all single characters.\n */\nexport function splitStringsIntoSingleChars(nodes: Ast.Node[]): Ast.Node[] {\n return nodes.flatMap((node) =>\n match.anyString(node)\n ? (Array.from(node.content).map((c) => ({\n type: \"string\",\n content: c,\n })) as Ast.Node[])\n : node\n );\n}\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath };\n var peg$startRuleFunction = peg$parsedocument;\n var peg$c0 = \"%\";\n var peg$c1 = \".\";\n var peg$c2 = \"verb*\";\n var peg$c3 = \"verb\";\n var peg$c4 = \"[\";\n var peg$c5 = \"]\";\n var peg$c6 = \"lstinline\";\n var peg$c7 = \"mintinline\";\n var peg$c8 = \"mint\";\n var peg$c9 = \"minted\";\n var peg$c10 = \"verbatim*\";\n var peg$c11 = \"verbatim\";\n var peg$c12 = \"filecontents*\";\n var peg$c13 = \"filecontents\";\n var peg$c14 = \"comment\";\n var peg$c15 = \"lstlisting\";\n var peg$c16 = \"(\";\n var peg$c17 = \")\";\n var peg$c18 = \"begin\";\n var peg$c19 = \"end\";\n var peg$c20 = \"equation*\";\n var peg$c21 = \"equation\";\n var peg$c22 = \"align*\";\n var peg$c23 = \"align\";\n var peg$c24 = \"alignat*\";\n var peg$c25 = \"alignat\";\n var peg$c26 = \"gather*\";\n var peg$c27 = \"gather\";\n var peg$c28 = \"multline*\";\n var peg$c29 = \"multline\";\n var peg$c30 = \"flalign*\";\n var peg$c31 = \"flalign\";\n var peg$c32 = \"split\";\n var peg$c33 = \"math\";\n var peg$c34 = \"displaymath\";\n var peg$c35 = \"\\\\\";\n var peg$c36 = \"{\";\n var peg$c37 = \"}\";\n var peg$c38 = \"$\";\n var peg$c39 = \"&\";\n var peg$c40 = \"\\r\";\n var peg$c41 = \"\\n\";\n var peg$c42 = \"\\r\\n\";\n var peg$c43 = \"#\";\n var peg$c44 = \"^\";\n var peg$c45 = \"_\";\n var peg$c46 = \"\\0\";\n var peg$r0 = /^[^ \\t\\n\\r]/;\n var peg$r1 = /^[ \\t]/;\n var peg$r2 = /^[a-zA-Z]/;\n var peg$r3 = /^[0-9]/;\n var peg$r4 = /^[.,;:\\-*\\/()!?=+<>[\\]`'\"~]/;\n var peg$e0 = peg$otherExpectation(\"document\");\n var peg$e1 = peg$otherExpectation(\"math\");\n var peg$e2 = peg$otherExpectation(\"token\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"parbreak\");\n var peg$e5 = peg$otherExpectation(\"math token\");\n var peg$e6 = peg$otherExpectation(\"nonchar token\");\n var peg$e7 = peg$literalExpectation(\"%\", false);\n var peg$e8 = peg$otherExpectation(\"whitespace\");\n var peg$e9 = peg$otherExpectation(\"number\");\n var peg$e10 = peg$literalExpectation(\".\", false);\n var peg$e11 = peg$otherExpectation(\"special macro\");\n var peg$e12 = peg$literalExpectation(\"verb*\", false);\n var peg$e13 = peg$literalExpectation(\"verb\", false);\n var peg$e14 = peg$literalExpectation(\"[\", false);\n var peg$e15 = peg$literalExpectation(\"]\", false);\n var peg$e16 = peg$classExpectation([\" \", \"\t\", \"\\n\", \"\\r\"], true, false);\n var peg$e17 = peg$otherExpectation(\"verbatim listings\");\n var peg$e18 = peg$literalExpectation(\"lstinline\", false);\n var peg$e19 = peg$otherExpectation(\"verbatim minted\");\n var peg$e20 = peg$literalExpectation(\"mintinline\", false);\n var peg$e21 = peg$literalExpectation(\"mint\", false);\n var peg$e22 = peg$otherExpectation(\"verbatim minted environment\");\n var peg$e23 = peg$literalExpectation(\"minted\", false);\n var peg$e24 = peg$otherExpectation(\"verbatim environment\");\n var peg$e25 = peg$literalExpectation(\"verbatim*\", false);\n var peg$e26 = peg$literalExpectation(\"verbatim\", false);\n var peg$e27 = peg$literalExpectation(\"filecontents*\", false);\n var peg$e28 = peg$literalExpectation(\"filecontents\", false);\n var peg$e29 = peg$literalExpectation(\"comment\", false);\n var peg$e30 = peg$literalExpectation(\"lstlisting\", false);\n var peg$e31 = peg$otherExpectation(\"macro\");\n var peg$e32 = peg$otherExpectation(\"group\");\n var peg$e33 = peg$otherExpectation(\"environment\");\n var peg$e34 = peg$otherExpectation(\"math environment\");\n var peg$e35 = peg$otherExpectation(\"math group\");\n var peg$e36 = peg$literalExpectation(\"(\", false);\n var peg$e37 = peg$literalExpectation(\")\", false);\n var peg$e38 = peg$literalExpectation(\"begin\", false);\n var peg$e39 = peg$literalExpectation(\"end\", false);\n var peg$e40 = peg$literalExpectation(\"equation*\", false);\n var peg$e41 = peg$literalExpectation(\"equation\", false);\n var peg$e42 = peg$literalExpectation(\"align*\", false);\n var peg$e43 = peg$literalExpectation(\"align\", false);\n var peg$e44 = peg$literalExpectation(\"alignat*\", false);\n var peg$e45 = peg$literalExpectation(\"alignat\", false);\n var peg$e46 = peg$literalExpectation(\"gather*\", false);\n var peg$e47 = peg$literalExpectation(\"gather\", false);\n var peg$e48 = peg$literalExpectation(\"multline*\", false);\n var peg$e49 = peg$literalExpectation(\"multline\", false);\n var peg$e50 = peg$literalExpectation(\"flalign*\", false);\n var peg$e51 = peg$literalExpectation(\"flalign\", false);\n var peg$e52 = peg$literalExpectation(\"split\", false);\n var peg$e53 = peg$literalExpectation(\"math\", false);\n var peg$e54 = peg$literalExpectation(\"displaymath\", false);\n var peg$e55 = peg$otherExpectation(\"escape\");\n var peg$e56 = peg$literalExpectation(\"\\\\\", false);\n var peg$e57 = peg$literalExpectation(\"{\", false);\n var peg$e58 = peg$literalExpectation(\"}\", false);\n var peg$e59 = peg$literalExpectation(\"$\", false);\n var peg$e60 = peg$literalExpectation(\"&\", false);\n var peg$e61 = peg$otherExpectation(\"newline\");\n var peg$e62 = peg$literalExpectation(\"\\r\", false);\n var peg$e63 = peg$literalExpectation(\"\\n\", false);\n var peg$e64 = peg$literalExpectation(\"\\r\\n\", false);\n var peg$e65 = peg$literalExpectation(\"#\", false);\n var peg$e66 = peg$literalExpectation(\"^\", false);\n var peg$e67 = peg$literalExpectation(\"_\", false);\n var peg$e68 = peg$literalExpectation(\"\\0\", false);\n var peg$e69 = peg$classExpectation([\" \", \"\t\"], false, false);\n var peg$e70 = peg$otherExpectation(\"letter\");\n var peg$e71 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$e72 = peg$otherExpectation(\"digit\");\n var peg$e73 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e74 = peg$otherExpectation(\"punctuation\");\n var peg$e75 = peg$classExpectation([\".\", \",\", \";\", \":\", \"-\", \"*\", \"/\", \"(\", \")\", \"!\", \"?\", \"=\", \"+\", \"<\", \">\", \"[\", \"]\", \"`\", \"'\", '\"', \"~\"], false, false);\n var peg$e76 = peg$otherExpectation(\"full comment\");\n var peg$e77 = peg$otherExpectation(\"comment\");\n var peg$f0 = function(content) {\n return createNode(\"root\", { content: content.flatMap((x) => x) });\n };\n var peg$f1 = function(t) {\n return t;\n };\n var peg$f2 = function(eq) {\n return createNode(\"inlinemath\", { content: eq.flatMap((x) => x) });\n };\n var peg$f3 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f4 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f5 = function() {\n return createNode(\"parbreak\");\n };\n var peg$f6 = function(x) {\n return x;\n };\n var peg$f7 = function(x) {\n return x;\n };\n var peg$f8 = function() {\n return createNode(\"macro\", { content: \"^\", escapeToken: \"\" });\n };\n var peg$f9 = function() {\n return createNode(\"macro\", { content: \"_\", escapeToken: \"\" });\n };\n var peg$f10 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f11 = function() {\n return createNode(\"whitespace\");\n };\n var peg$f12 = function(a, b) {\n return a.join(\"\") + \".\" + b.join(\"\");\n };\n var peg$f13 = function(b) {\n return \".\" + b.join(\"\");\n };\n var peg$f14 = function(a) {\n return a.join(\"\") + \".\";\n };\n var peg$f15 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f16 = function(env, e, end) {\n return end == e;\n };\n var peg$f17 = function(env, e, x) {\n return x;\n };\n var peg$f18 = function(env, e, x, end) {\n return end == e;\n };\n var peg$f19 = function(env, e, x) {\n return createNode(\"verb\", {\n env,\n escape: e,\n content: x.join(\"\")\n });\n };\n var peg$f20 = function(x) {\n return x;\n };\n var peg$f21 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f22 = function(x) {\n return x;\n };\n var peg$f23 = function(x) {\n return createNode(\"inlinemath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f24 = function(x) {\n return x;\n };\n var peg$f25 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f26 = function(end) {\n return end.type === \"string\" && end.content === \"]\";\n };\n var peg$f27 = function(x) {\n return x;\n };\n var peg$f28 = function(o) {\n return [\n createNode(\"string\", { content: \"[\" }),\n ...o,\n createNode(\"string\", { content: \"]\" })\n ];\n };\n var peg$f29 = function(x) {\n return x;\n };\n var peg$f30 = function(v) {\n return createNode(\"group\", {\n content: createNode(\"string\", { content: v.join(\"\") })\n });\n };\n var peg$f31 = function(d, end) {\n return end == d;\n };\n var peg$f32 = function(d, x) {\n return x;\n };\n var peg$f33 = function(d, v, end) {\n return end == d;\n };\n var peg$f34 = function(d, v) {\n return [\n createNode(\"string\", { content: d }),\n createNode(\"string\", { content: v.join(\"\") }),\n createNode(\"string\", { content: d })\n ];\n };\n var peg$f35 = function(macro, option, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...option || [],\n ...[].concat(verbatim)\n ];\n };\n var peg$f36 = function(macro, option, language, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...option || [],\n language,\n ...[].concat(verbatim)\n ];\n };\n var peg$f37 = function(env, option, language, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f38 = function(env, option, language, body) {\n const content = [\n ...option || [],\n language,\n { type: \"string\", content: body }\n ];\n return createNode(\"environment\", {\n env,\n content\n });\n };\n var peg$f39 = function(env, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f40 = function(env, x) {\n return x;\n };\n var peg$f41 = function(env, body) {\n return createNode(\"verbatim\", {\n env,\n content: body\n });\n };\n var peg$f42 = function(n) {\n return n.join(\"\");\n };\n var peg$f43 = function(n) {\n return n;\n };\n var peg$f44 = function(m) {\n return createNode(\"macro\", { content: m });\n };\n var peg$f45 = function(c) {\n return c;\n };\n var peg$f46 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f47 = function(g) {\n return text().slice(1, -1);\n };\n var peg$f48 = function(env, env_comment, end_env) {\n return compare_env(env, end_env);\n };\n var peg$f49 = function(env, env_comment, x) {\n return x;\n };\n var peg$f50 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"environment\", {\n env,\n content: env_comment ? [env_comment, ...body] : body\n });\n };\n var peg$f51 = function(env, env_comment, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f52 = function(env, env_comment, x) {\n return x;\n };\n var peg$f53 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"mathenv\", {\n env,\n content: env_comment ? [env_comment, ...body] : body\n });\n };\n var peg$f54 = function(c) {\n return c;\n };\n var peg$f55 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f56 = function(e) {\n return createNode(\"string\", { content: e });\n };\n var peg$f57 = function() {\n return createNode(\"string\", { content: \"\\\\\" });\n };\n var peg$f58 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f59 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f60 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f61 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f62 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f63 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f64 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f65 = function() {\n return \" \";\n };\n var peg$f66 = function(p) {\n return createNode(\"string\", { content: p });\n };\n var peg$f67 = function(leading_sp, comment) {\n return createNode(\"comment\", {\n ...comment,\n sameline: false,\n leadingWhitespace: leading_sp.length > 0\n });\n };\n var peg$f68 = function(spaces, x) {\n return createNode(\"comment\", {\n ...x,\n sameline: true,\n leadingWhitespace: spaces.length > 0\n });\n };\n var peg$f69 = function(c) {\n return c;\n };\n var peg$f70 = function(c) {\n return { content: c.join(\"\"), suffixParbreak: true };\n };\n var peg$f71 = function(c) {\n return c;\n };\n var peg$f72 = function(c) {\n return { content: c.join(\"\") };\n };\n var peg$f73 = function() {\n var loc = location();\n return loc.start.column === 1;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$resultsCache = {};\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsedocument() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 0;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n s0 = s1;\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath() {\n var s0, s1;\n var key = peg$currPos * 52 + 1;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = [];\n s1 = peg$parsemath_token();\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemath_token();\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 2;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsegroup();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_shift();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parseparbreak();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseparbreak() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 3;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_token() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 4;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsealignment_tab();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesuperscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f8();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesubscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenonchar_token() {\n var s0, s1;\n var key = peg$currPos * 52 + 5;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parseescape();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenl();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesp();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseEOF();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 6;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsenl();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsecomment_start();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsenl();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = [];\n s2 = peg$parsesp();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n } else {\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 7;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsenum();\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsenum();\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f12(s2, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenum();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenum();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f13(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f14(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsespecial_macro() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n var key = peg$currPos * 52 + 8;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c2) {\n s2 = peg$c2;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c3) {\n s2 = peg$c3;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = void 0;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = void 0;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f18(s2, s3, s4, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_listings();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_minted();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_minted_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_display_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_display_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_inline_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_inline_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemath_shift();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s4 = peg$parsemath_shift();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_shift();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseenvironment();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesquare_bracket_argument() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 9;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_group() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 10;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_delimited_by_char() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 11;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$f33(s1, s2, s4);\n if (s5) {\n s5 = void 0;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_listings() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 12;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c6) {\n s2 = peg$c6;\n peg$currPos += 9;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseverbatim_group();\n if (s4 === peg$FAILED) {\n s4 = peg$parseverbatim_delimited_by_char();\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_minted() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 13;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c7) {\n s2 = peg$c7;\n peg$currPos += 10;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s2 = peg$c8;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseverbatim_group();\n if (s5 === peg$FAILED) {\n s5 = peg$parseverbatim_delimited_by_char();\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_minted_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n var key = peg$currPos * 52 + 14;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c9) {\n s3 = peg$c9;\n peg$currPos += 6;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesquare_bracket_argument();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = peg$parsegroup();\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$currPos;\n s10 = peg$currPos;\n peg$silentFails++;\n s11 = peg$currPos;\n s12 = peg$parseend_env();\n if (s12 !== peg$FAILED) {\n s13 = peg$parsegroup();\n if (s13 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s14 = peg$f37(s3, s5, s6, s13);\n if (s14) {\n s14 = void 0;\n } else {\n s14 = peg$FAILED;\n }\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n peg$silentFails--;\n if (s11 === peg$FAILED) {\n s10 = void 0;\n } else {\n peg$currPos = s10;\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s11 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s11 !== peg$FAILED) {\n s10 = [s10, s11];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$currPos;\n s10 = peg$currPos;\n peg$silentFails++;\n s11 = peg$currPos;\n s12 = peg$parseend_env();\n if (s12 !== peg$FAILED) {\n s13 = peg$parsegroup();\n if (s13 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s14 = peg$f37(s3, s5, s6, s13);\n if (s14) {\n s14 = void 0;\n } else {\n s14 = peg$FAILED;\n }\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n peg$silentFails--;\n if (s11 === peg$FAILED) {\n s10 = void 0;\n } else {\n peg$currPos = s10;\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s11 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s11 !== peg$FAILED) {\n s10 = [s10, s11];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n }\n s7 = input.substring(s7, peg$currPos);\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsebegin_group();\n if (s9 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c9) {\n s10 = peg$c9;\n peg$currPos += 6;\n } else {\n s10 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s10 !== peg$FAILED) {\n s11 = peg$parseend_group();\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f38(s3, s5, s6, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n var key = peg$currPos * 52 + 15;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseverbatim_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f39(s3, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f40(s3, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f39(s3, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f40(s3, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s5 = input.substring(s5, peg$currPos);\n s6 = peg$parseend_env();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsebegin_group();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseverbatim_env_name();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseend_group();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f41(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_env_name() {\n var s0;\n var key = peg$currPos * 52 + 16;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n if (input.substr(peg$currPos, 9) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e26);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 13;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 12;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e28);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e30);\n }\n }\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 17;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsechar();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsechar();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f42(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f43(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f44(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 18;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f45(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f45(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f46(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e32);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsegroup_contents_as_string() {\n var s0, s1;\n var key = peg$currPos * 52 + 19;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parsegroup();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f47(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseenvironment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n var key = peg$currPos * 52 + 20;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup_contents_as_string();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesameline_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f48(s2, s3, s9);\n if (s10) {\n s10 = void 0;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f49(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f48(s2, s3, s9);\n if (s10) {\n s10 = void 0;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f49(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$parseend_env();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsegroup_contents_as_string();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f50(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e33);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n var key = peg$currPos * 52 + 21;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesameline_comment();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f51(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f52(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f51(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f52(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s7 = peg$parseend_env();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsebegin_group();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_env_name();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseend_group();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f53(s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e34);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_group() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 22;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f54(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f54(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f55(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e35);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_display_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 23;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 91) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_display_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 24;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s2 = peg$c5;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_inline_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 25;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_inline_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 26;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e37);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_env() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 27;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c18) {\n s2 = peg$c18;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e38);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_env() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 28;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c19) {\n s2 = peg$c19;\n peg$currPos += 3;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e39);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_env_name() {\n var s0, s1;\n var key = peg$currPos * 52 + 29;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c20) {\n s1 = peg$c20;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e40);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e41);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e42);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c23) {\n s1 = peg$c23;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e43);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c24) {\n s1 = peg$c24;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e44);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c25) {\n s1 = peg$c25;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e45);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c26) {\n s1 = peg$c26;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e46);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e47);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e48);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c29) {\n s1 = peg$c29;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e49);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c30) {\n s1 = peg$c30;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e50);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c31) {\n s1 = peg$c31;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e51);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c32) {\n s1 = peg$c32;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e52);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c33) {\n s1 = peg$c33;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e53);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c34) {\n s1 = peg$c34;\n peg$currPos += 11;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e54);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f56(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseescape() {\n var s0, s1;\n var key = peg$currPos * 52 + 30;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e56);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f57();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e55);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_group() {\n var s0, s1;\n var key = peg$currPos * 52 + 31;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e57);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f58(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_group() {\n var s0, s1;\n var key = peg$currPos * 52 + 32;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s1 = peg$c37;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e58);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f59(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_shift() {\n var s0, s1;\n var key = peg$currPos * 52 + 33;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 36) {\n s1 = peg$c38;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e59);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f60(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsealignment_tab() {\n var s0, s1;\n var key = peg$currPos * 52 + 34;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 38) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e60);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f61(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenl() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 35;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 13) {\n s2 = peg$c40;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e62);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s2 = peg$c41;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e63);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c40;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e62);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c42) {\n s0 = peg$c42;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e64);\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e61);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemacro_parameter() {\n var s0, s1;\n var key = peg$currPos * 52 + 36;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c43;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e65);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f62(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesuperscript() {\n var s0, s1;\n var key = peg$currPos * 52 + 37;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 94) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e66);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f63(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesubscript() {\n var s0, s1;\n var key = peg$currPos * 52 + 38;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 95) {\n s1 = peg$c45;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e67);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f64(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseignore() {\n var s0;\n var key = peg$currPos * 52 + 39;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n if (input.charCodeAt(peg$currPos) === 0) {\n s0 = peg$c46;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e68);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesp() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 40;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e69);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e69);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f65();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsechar() {\n var s0, s1;\n var key = peg$currPos * 52 + 41;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e71);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e70);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenum() {\n var s0, s1;\n var key = peg$currPos * 52 + 42;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e73);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e72);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsepunctuation() {\n var s0, s1;\n var key = peg$currPos * 52 + 43;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e75);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f66(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e74);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsecomment_start() {\n var s0;\n var key = peg$currPos * 52 + 44;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsefull_comment() {\n var s0, s1;\n var key = peg$currPos * 52 + 45;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parseownline_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesameline_comment();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e76);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseownline_comment() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 52 + 46;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseleading_sp();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f67(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesameline_comment() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 47;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsesp();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n s2 = peg$parsecomment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f68(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsecomment() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 48;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f69(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f69(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseparbreak();\n peg$silentFails--;\n if (s4 !== peg$FAILED) {\n peg$currPos = s3;\n s3 = void 0;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f70(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f71(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f71(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n s4 = peg$parsenl();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 === peg$FAILED) {\n s3 = peg$parseEOF();\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f72(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e77);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseleading_sp() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 49;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsestart_of_line();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsestart_of_line() {\n var s0;\n var key = peg$currPos * 52 + 50;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$savedPos = peg$currPos;\n s0 = peg$f73();\n if (s0) {\n s0 = void 0;\n } else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseEOF() {\n var s0, s1;\n var key = peg$currPos * 52 + 51;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function toString(e) {\n if (typeof e === \"string\") {\n return e;\n }\n if (typeof e.content === \"string\") {\n return e.content;\n }\n if (e && e.type === \"whitespace\") {\n return \" \";\n }\n return e;\n }\n function compare_env(g1, g2) {\n const g1Name = typeof g1 === \"string\" ? g1 : g1.content.map(toString).join(\"\");\n const g2Name = typeof g2 === \"string\" ? g2 : g2.content.map(toString).join(\"\");\n return g1Name === g2Name;\n }\n function createNode(type, extra = {}) {\n return { type, ...extra, position: location() };\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function() {\n return [];\n };\n var peg$f1 = function(x) {\n return { cells: [], colSeps: [], ...x };\n };\n var peg$f2 = function(rowItems, rowSep, trailingComment) {\n return { ...rowItems, rowSep, trailingComment };\n };\n var peg$f3 = function(rowItems, trailingComment) {\n return { ...rowItems, rowSep: null, trailingComment };\n };\n var peg$f4 = function(x) {\n return x;\n };\n var peg$f5 = function(x) {\n return {\n cells: [],\n colSeps: [],\n rowSep: null,\n trailingComment: x\n };\n };\n var peg$f6 = function(x) {\n return x;\n };\n var peg$f7 = function(colSep, cell) {\n return { colSep, cell };\n };\n var peg$f8 = function(colSep) {\n return { colSep };\n };\n var peg$f9 = function(a, b) {\n return processRow(a, b);\n };\n var peg$f10 = function(b) {\n return processRow(null, b);\n };\n var peg$f11 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f12 = function(tok) {\n return tok;\n };\n var peg$f13 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f14 = function(tok) {\n return tok;\n };\n var peg$f15 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f16 = function(tok) {\n return tok;\n };\n var peg$f17 = function(tok) {\n return options.isRowSep(tok);\n };\n var peg$f18 = function(tok) {\n return tok;\n };\n var peg$f19 = function(tok) {\n return options.isColSep(tok);\n };\n var peg$f20 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parserow_with_end() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s1;\n s2 = peg$f1(s2);\n s1 = s2;\n s2 = peg$parserow_sep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_without_end() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parserow_items();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parserow_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsecol_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecell() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parseseparated_cell() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsecell();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsecell();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_cell();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_cell();\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_cell();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_cell();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f11(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f13(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecol_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function processRow(leadCell, otherCells) {\n const cells = [leadCell || []];\n const seps = [];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n seps.push(x.colSep);\n }\n return { cells, colSeps: seps };\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(\n options,\n createMatchers([\"\\\\\", \"hline\", \"cr\"], [\"&\"])\n );\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list };\n var peg$startRuleFunction = peg$parseargs_spec_list;\n var peg$c0 = \"+\";\n var peg$c1 = \"v\";\n var peg$c2 = \"b\";\n var peg$c3 = \"!\";\n var peg$c4 = \"D\";\n var peg$c5 = \"d\";\n var peg$c6 = \"s\";\n var peg$c7 = \"O\";\n var peg$c8 = \"o\";\n var peg$c9 = \"e\";\n var peg$c10 = \"E\";\n var peg$c11 = \"t\";\n var peg$c12 = \"R\";\n var peg$c13 = \"r\";\n var peg$c14 = \"u\";\n var peg$c15 = \"m\";\n var peg$c16 = \"{\";\n var peg$c17 = \"}\";\n var peg$c18 = \" \";\n var peg$c19 = \"\\n\";\n var peg$c20 = \"\\r\";\n var peg$c21 = \"\\\\\";\n var peg$r0 = /^[{ ]/;\n var peg$r1 = /^[a-zA-Z]/;\n var peg$r2 = /^[{}]/;\n var peg$e0 = peg$literalExpectation(\"+\", false);\n var peg$e1 = peg$literalExpectation(\"v\", false);\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$literalExpectation(\"b\", false);\n var peg$e4 = peg$literalExpectation(\"!\", false);\n var peg$e5 = peg$literalExpectation(\"D\", false);\n var peg$e6 = peg$literalExpectation(\"d\", false);\n var peg$e7 = peg$literalExpectation(\"s\", false);\n var peg$e8 = peg$literalExpectation(\"O\", false);\n var peg$e9 = peg$literalExpectation(\"o\", false);\n var peg$e10 = peg$literalExpectation(\"e\", false);\n var peg$e11 = peg$literalExpectation(\"E\", false);\n var peg$e12 = peg$literalExpectation(\"t\", false);\n var peg$e13 = peg$literalExpectation(\"R\", false);\n var peg$e14 = peg$literalExpectation(\"r\", false);\n var peg$e15 = peg$literalExpectation(\"u\", false);\n var peg$e16 = peg$classExpectation([\"{\", \" \"], false, false);\n var peg$e17 = peg$literalExpectation(\"m\", false);\n var peg$e18 = peg$literalExpectation(\"{\", false);\n var peg$e19 = peg$literalExpectation(\"}\", false);\n var peg$e20 = peg$literalExpectation(\" \", false);\n var peg$e21 = peg$literalExpectation(\"\\n\", false);\n var peg$e22 = peg$literalExpectation(\"\\r\", false);\n var peg$e23 = peg$literalExpectation(\"\\\\\", false);\n var peg$e24 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$e25 = peg$classExpectation([\"{\", \"}\"], false, false);\n var peg$f0 = function(x) {\n return x;\n };\n var peg$f1 = function(spec) {\n return spec;\n };\n var peg$f2 = function(spec) {\n return spec;\n };\n var peg$f3 = function(openBrace) {\n return createNode(\"verbatim\", { openBrace, closeBrace: openBrace });\n };\n var peg$f4 = function() {\n return createNode(\"body\");\n };\n var peg$f5 = function(leading_bang, spec) {\n return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec;\n };\n var peg$f6 = function(braceSpec, defaultArg) {\n return createNode(\"optional\", { ...braceSpec, defaultArg });\n };\n var peg$f7 = function(braceSpec) {\n return createNode(\"optional\", braceSpec);\n };\n var peg$f8 = function() {\n return createNode(\"optionalStar\");\n };\n var peg$f9 = function(g) {\n return createNode(\"optional\", { defaultArg: g });\n };\n var peg$f10 = function() {\n return createNode(\"optional\");\n };\n var peg$f11 = function(args) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args\n });\n };\n var peg$f12 = function(args, g) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args,\n defaultArg: g\n });\n };\n var peg$f13 = function(tok) {\n return createNode(\"optionalToken\", { token: tok });\n };\n var peg$f14 = function(braceSpec, defaultArg) {\n return createNode(\"mandatory\", { ...braceSpec, defaultArg });\n };\n var peg$f15 = function(braceSpec) {\n return createNode(\"mandatory\", braceSpec);\n };\n var peg$f16 = function(stopTokens) {\n return createNode(\"until\", { stopTokens });\n };\n var peg$f17 = function(x) {\n return [x];\n };\n var peg$f18 = function(g) {\n return g.content;\n };\n var peg$f19 = function() {\n return createNode(\"mandatory\");\n };\n var peg$f20 = function(openBrace, closeBrace) {\n return { openBrace, closeBrace };\n };\n var peg$f21 = function(g) {\n return g.content.map(groupToStr).join(\"\");\n };\n var peg$f22 = function(t) {\n return [t];\n };\n var peg$f23 = function(args) {\n return args.filter((a) => !a.match(/^\\s*$/));\n };\n var peg$f24 = function(content) {\n return { type: \"group\", content };\n };\n var peg$f25 = function() {\n return \"\";\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parseargs_spec_list() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n s2 = peg$parsewhitespace();\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n return s0;\n }\n function peg$parsearg_spec() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemandatory();\n if (s2 === peg$FAILED) {\n s2 = peg$parseverbatim();\n if (s2 === peg$FAILED) {\n s2 = peg$parserequired();\n if (s2 === peg$FAILED) {\n s2 = peg$parsebody();\n if (s2 === peg$FAILED) {\n s2 = peg$parseuntil();\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseverbatim() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 118) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebody() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 98) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseoptional() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional_star();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_standard();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_delimited();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_embellishment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_token();\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseoptional_delimited() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 68) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsearg();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 100) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseoptional_star() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 115) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseoptional_standard() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 79) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsewhitespace();\n s3 = peg$parsearg();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 111) {\n s1 = peg$c8;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseoptional_embellishment() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s1 = peg$c9;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsewhitespace();\n s3 = peg$parseargs();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 69) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsewhitespace();\n s3 = peg$parseargs();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsewhitespace();\n s5 = peg$parseargs();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseoptional_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 116) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserequired() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 82) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsearg();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 114) {\n s1 = peg$c13;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseuntil() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseuntil_stop_token();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseuntil_stop_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebraced_group();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f18(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsemandatory() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 109) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n return s0;\n }\n function peg$parsebrace_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = void 0;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsemacro();\n if (s4 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemacro();\n if (s5 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s2 = input.substring(s2, peg$currPos);\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n return s0;\n }\n function peg$parsearg() {\n var s0, s1;\n s0 = peg$parsetoken();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebraced_group();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseargs() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsetoken();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f22(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsearg();\n if (s3 === peg$FAILED) {\n s3 = peg$parsewhitespace_token();\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsearg();\n if (s3 === peg$FAILED) {\n s3 = peg$parsewhitespace_token();\n }\n }\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c17;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parsebraced_group() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 === peg$FAILED) {\n s7 = peg$parsewhitespace_token();\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 === peg$FAILED) {\n s7 = peg$parsewhitespace_token();\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n }\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c17;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace_token();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace_token();\n }\n peg$savedPos = s0;\n s1 = peg$f25();\n s0 = s1;\n return s0;\n }\n function peg$parsewhitespace_token() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 32) {\n s0 = peg$c18;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n }\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c21;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c21;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n peg$silentFails++;\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = void 0;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3;\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s3 !== peg$FAILED) {\n s0 = s3;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n const DEFAULT_OPTIONS = {\n optional: { openBrace: \"[\", closeBrace: \"]\" },\n mandatory: { openBrace: \"{\", closeBrace: \"}\" }\n };\n function createNode(type, options2) {\n const computedOptions = DEFAULT_OPTIONS[type] || {};\n return { type, ...computedOptions, ...options2 };\n }\n function groupToStr(node) {\n if (typeof node !== \"object\" || !node) {\n return node;\n }\n if (node.type === \"group\") {\n return `{${node.content.map(groupToStr).join(\"\")}}`;\n }\n return node;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function() {\n return [];\n };\n var peg$f1 = function(rowItems, trailingComment) {\n return {\n itemParts: [],\n ...rowItems,\n trailingComment,\n trailingComma: true\n };\n };\n var peg$f2 = function(rowItems, trailingComment) {\n return { ...rowItems, trailingComment };\n };\n var peg$f3 = function(a, b) {\n return processItem(a, b);\n };\n var peg$f4 = function(b) {\n return processItem(null, b);\n };\n var peg$f5 = function(cell) {\n return { cell };\n };\n var peg$f6 = function() {\n return {};\n };\n var peg$f7 = function(part) {\n return part;\n };\n var peg$f8 = function(x) {\n return x;\n };\n var peg$f9 = function(space, x) {\n return {\n trailingComment: x,\n leadingParbreak: space.parbreak > 0\n };\n };\n var peg$f10 = function(list) {\n return {\n whitespace: list.filter((x) => options.isWhitespace(x)).length,\n parbreak: list.filter((x) => options.isParbreak(x)).length\n };\n };\n var peg$f11 = function() {\n return !options.allowParenGroups;\n };\n var peg$f12 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f13 = function(tok) {\n return tok;\n };\n var peg$f14 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f15 = function(tok) {\n return tok;\n };\n var peg$f16 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$f18 = function(tok) {\n return options.isParbreak(tok);\n };\n var peg$f19 = function(tok) {\n return tok;\n };\n var peg$f20 = function(tok) {\n return options.isComma(tok);\n };\n var peg$f21 = function(tok) {\n return tok;\n };\n var peg$f22 = function(tok) {\n return options.isEquals(tok);\n };\n var peg$f23 = function(tok) {\n return tok;\n };\n var peg$f24 = function(tok) {\n return options.isChar(tok, \"(\");\n };\n var peg$f25 = function(tok) {\n return tok;\n };\n var peg$f26 = function(tok) {\n return options.isChar(tok, \")\");\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseitem_with_end() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsewhitespace_or_parbreaks();\n s4 = peg$parseitem_sep();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsewhitespace();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsewhitespace();\n }\n s6 = peg$parsetrailing_comment();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewhitespace();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s2, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseitem_without_end() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseitem_part();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_part();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_part();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_part();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_part();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseseparated_part() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseparbreak();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseparbreak();\n }\n s4 = peg$parseitem_part();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseitem_part() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = void 0;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = void 0;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsenon_token();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parsenon_whitespace_non_parbreak_token() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsewhitespace();\n if (s3 === peg$FAILED) {\n s3 = peg$parseparbreak();\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseparen_block();\n if (s3 === peg$FAILED) {\n s3 = peg$parsetoken();\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parsenon_token() {\n var s0;\n s0 = peg$parseitem_sep();\n if (s0 === peg$FAILED) {\n s0 = peg$parseequals();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetrailing_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseown_line_comment();\n }\n }\n }\n return s0;\n }\n function peg$parsewhitespace_or_parbreaks() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n }\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n s0 = s1;\n return s0;\n }\n function peg$parseparen_block() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$f11();\n if (s1) {\n s1 = peg$FAILED;\n } else {\n s1 = void 0;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseopen_paren();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n s6 = peg$parseclose_paren();\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseparbreak() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseitem_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseopen_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function processItem(leadCell, otherCells) {\n const cells = [leadCell || []];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n }\n return { itemParts: cells };\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) => node.type === \"string\" && node.content === char,\n isComma(node) {\n return node.type === \"string\" && node.content === \",\";\n },\n isEquals(node) {\n return node.type === \"string\" && node.content === \"=\";\n },\n isParbreak(node) {\n return node.type === \"parbreak\";\n },\n isWhitespace(node) {\n return node.type === \"whitespace\";\n },\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n allowParenGroups: true\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function(e) {\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(tok) {\n return options.isHash(tok);\n };\n var peg$f3 = function(tok) {\n return tok;\n };\n var peg$f4 = function(tok) {\n return options.isNumber(tok);\n };\n var peg$f5 = function(tok) {\n return tok;\n };\n var peg$f6 = function() {\n return { type: \"string\", content: \"#\" };\n };\n var peg$f7 = function(num) {\n const split = options.splitNumber(num);\n return [{ type: \"hash_number\", number: split.number }, split.rest];\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsehash() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f4(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_hash() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehash();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsehash_number() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isHash) {\n try {\n Object.assign(options, {\n isHash: (node) => node.type === \"string\" && node.content === \"#\",\n isNumber: (node) => node.type === \"string\" && 0 < +node.content.charAt(0),\n splitNumber: (node) => {\n const number = +node.content.charAt(0);\n if (node.content.length > 1) {\n return {\n number,\n rest: {\n type: \"string\",\n content: node.content.slice(1)\n }\n };\n }\n return { number };\n }\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function(e) {\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f3 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f4 = function(tok1, tok2) {\n const split = options.split(tok2);\n return options.isRecognized([tok1, split[0]]);\n };\n var peg$f5 = function(tok1, tok2) {\n const split = options.split(tok2);\n return [options.isRecognized([tok1, split[0]]), split[1]];\n };\n var peg$f6 = function(tok1, tok2) {\n return options.isRecognized([tok1, tok2]);\n };\n var peg$f7 = function(tok1, tok2) {\n return options.isRecognized([tok1, tok2]);\n };\n var peg$f8 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f9 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f10 = function(tok) {\n return options.isRecognized([tok]);\n };\n var peg$f11 = function(tok) {\n return options.isRecognized([tok]);\n };\n var peg$f12 = function(tok) {\n return options.isMacro(tok);\n };\n var peg$f13 = function(tok) {\n return tok;\n };\n var peg$f14 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f15 = function(tok) {\n return tok;\n };\n var peg$f16 = function(tok) {\n return options.isSplitable(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsetriple_ligature() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_ligature() {\n var s0;\n s0 = peg$parsedouble_macro_ligature();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_macro_ligature_extracted();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_char_ligature();\n }\n }\n return s0;\n }\n function peg$parsedouble_macro_ligature_extracted() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n s3 = peg$parsesplitable();\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f4(s1, s3);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_macro_ligature() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f6(s1, s3);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_char_ligature() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f8(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemono_ligature() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f10(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesplitable() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isMacro: (node) => node.type === \"macro\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isRecognized: (nodes) => {\n if (nodes.length == 2 && nodes[0].content === \"^\" && nodes[1].content === \"o\") {\n return { type: \"string\", content: \"\\xF4\" };\n }\n return null;\n },\n isSplitable: (node) => node.type === \"string\" && node.content.length > 1,\n split: (node) => [\n { type: \"string\", content: node.content.charAt(0) },\n { type: \"string\", content: node.content.slice(1) }\n ]\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { start: peg$parsestart };\n var peg$startRuleFunction = peg$parsestart;\n var peg$c0 = \";\";\n var peg$c1 = \",\";\n var peg$c2 = \":\";\n var peg$c3 = \"/\";\n var peg$c4 = \">\";\n var peg$c5 = \"!\";\n var peg$c6 = \".\";\n var peg$c7 = \"!![\";\n var peg$c8 = \"]\";\n var peg$c9 = \"!!\";\n var peg$c10 = \"+\";\n var peg$c11 = \"-\";\n var peg$r0 = /^[a-zA-Z0-9]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[ \\t\\n\\r]/;\n var peg$r3 = /^[0-9a-fA-F]/;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\";\", false);\n var peg$e2 = peg$literalExpectation(\",\", false);\n var peg$e3 = peg$otherExpectation(\"model list\");\n var peg$e4 = peg$literalExpectation(\":\", false);\n var peg$e5 = peg$literalExpectation(\"/\", false);\n var peg$e6 = peg$otherExpectation(\"model\");\n var peg$e7 = peg$otherExpectation(\"color spec list\");\n var peg$e8 = peg$otherExpectation(\"color spec\");\n var peg$e9 = peg$otherExpectation(\"color\");\n var peg$e10 = peg$otherExpectation(\"function expression\");\n var peg$e11 = peg$literalExpectation(\">\", false);\n var peg$e12 = peg$otherExpectation(\"function\");\n var peg$e13 = peg$otherExpectation(\"extended expression\");\n var peg$e14 = peg$otherExpectation(\"core model\");\n var peg$e15 = peg$otherExpectation(\"expr\");\n var peg$e16 = peg$literalExpectation(\"!\", false);\n var peg$e17 = peg$otherExpectation(\"mix expr\");\n var peg$e18 = peg$otherExpectation(\"name\");\n var peg$e19 = peg$literalExpectation(\".\", false);\n var peg$e20 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"]], false, false);\n var peg$e21 = peg$otherExpectation(\"postfix\");\n var peg$e22 = peg$literalExpectation(\"!![\", false);\n var peg$e23 = peg$literalExpectation(\"]\", false);\n var peg$e24 = peg$literalExpectation(\"!!\", false);\n var peg$e25 = peg$otherExpectation(\"prefix\");\n var peg$e26 = peg$otherExpectation(\"plus\");\n var peg$e27 = peg$literalExpectation(\"+\", false);\n var peg$e28 = peg$otherExpectation(\"minus\");\n var peg$e29 = peg$literalExpectation(\"-\", false);\n var peg$e30 = peg$otherExpectation(\"num\");\n var peg$e31 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e32 = peg$otherExpectation(\"positive float\");\n var peg$e33 = peg$otherExpectation(\"divisor\");\n var peg$e34 = peg$otherExpectation(\"int\");\n var peg$e35 = peg$otherExpectation(\"whitespace\");\n var peg$e36 = peg$classExpectation([\" \", \"\t\", \"\\n\", \"\\r\"], false, false);\n var peg$e37 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"], [\"A\", \"F\"]], false, false);\n var peg$f0 = function(m) {\n return m;\n };\n var peg$f1 = function(m) {\n return m;\n };\n var peg$f2 = function(m) {\n return m;\n };\n var peg$f3 = function(m) {\n return m;\n };\n var peg$f4 = function(m) {\n return m;\n };\n var peg$f5 = function(a) {\n return { type: \"invalid_spec\", content: a };\n };\n var peg$f6 = function(f, c) {\n return c;\n };\n var peg$f7 = function(f, r) {\n return { type: \"color_set\", content: [f].concat(r) };\n };\n var peg$f8 = function(n, s) {\n return { type: \"color_set_item\", name: n, spec_list: s };\n };\n var peg$f9 = function(c, m) {\n return { type: \"model_list\", contents: m, core_model: c };\n };\n var peg$f10 = function(m) {\n return { type: \"model_list\", contents: m, core_model: null };\n };\n var peg$f11 = function(m, a) {\n return a;\n };\n var peg$f12 = function(m, r) {\n return [m].concat(r);\n };\n var peg$f13 = function(s, a) {\n return a;\n };\n var peg$f14 = function(s, r) {\n return { type: \"spec_list\", content: [s].concat(r) };\n };\n var peg$f15 = function(c) {\n return { type: \"hex_spec\", content: [c] };\n };\n var peg$f16 = function(c, d) {\n return d;\n };\n var peg$f17 = function(c, d) {\n return d;\n };\n var peg$f18 = function(c, r) {\n return { type: \"num_spec\", content: r ? [c].concat(r) : [c] };\n };\n var peg$f19 = function(c, fs) {\n return { type: \"color\", color: c, functions: fs };\n };\n var peg$f20 = function(f, n) {\n return n;\n };\n var peg$f21 = function(f, args) {\n return { type: \"function\", name: f, args };\n };\n var peg$f22 = function(core, d, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: d,\n expressions: [e].concat(es)\n };\n };\n var peg$f23 = function(core, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: null,\n expressions: [e].concat(es)\n };\n };\n var peg$f24 = function(e, d) {\n return { type: \"weighted_expr\", color: e, weight: d };\n };\n var peg$f25 = function(e) {\n return e;\n };\n var peg$f26 = function(p, n, e, po) {\n return {\n type: \"expr\",\n prefix: p,\n name: n,\n mix_expr: e,\n postfix: po\n };\n };\n var peg$f27 = function(p, n) {\n return { type: \"complete_mix\", mix_percent: p, name: n };\n };\n var peg$f28 = function(p) {\n return { type: \"partial_mix\", mix_percent: p };\n };\n var peg$f29 = function(c, p) {\n return c.concat(p || []);\n };\n var peg$f30 = function(n) {\n return { type: \"postfix\", num: n };\n };\n var peg$f31 = function(p) {\n return { type: \"postfix\", plusses: p };\n };\n var peg$f32 = function(n) {\n return parseInt(n, 10);\n };\n var peg$f33 = function(n) {\n return parseFloat(n);\n };\n var peg$f34 = function(n) {\n return n;\n };\n var peg$f35 = function(n) {\n return -n;\n };\n var peg$f36 = function(m, n) {\n return m ? -n : n;\n };\n var peg$f37 = function(h) {\n return h.toUpperCase();\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsestart() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsespec_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_spec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n s1 = input.substring(s1, peg$currPos);\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n s0 = s1;\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsecolor_set_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_item();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolor_set_item() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsename();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsespec_list();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemodel_list() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemodel_list_tail();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list_tail();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n return s0;\n }\n function peg$parsemodel_list_tail() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsemodel();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemodel() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsecore_model();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsespec_list() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsespec() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsehex();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehex();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehex();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsehex();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsehex();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsehex();\n if (s8 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6, s7, s8];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parsecolor() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecolor_expr();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsefunc_expr();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsefunc_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f19(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parsecolor_expr() {\n var s0;\n s0 = peg$parseext_expr();\n if (s0 === peg$FAILED) {\n s0 = peg$parseexpr();\n if (s0 === peg$FAILED) {\n s0 = peg$parsename();\n }\n }\n return s0;\n }\n function peg$parsefunc_expr() {\n var s0, s1, s2, s3, s4, s5, s6;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 62) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsefunction();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f21(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parsefunction() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parseext_expr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsediv();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c2;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseweighted_expr();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parseadditional_weighted_expr();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f22(s1, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseweighted_expr();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseadditional_weighted_expr();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s1, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseweighted_expr() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseexpr();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsedec();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseadditional_weighted_expr() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseweighted_expr();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecore_model() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parseexpr() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseprefix();\n s2 = peg$parsename();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemix_expr();\n s4 = peg$parsepostfix();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f26(s1, s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n return s0;\n }\n function peg$parsecomplete_mix() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 33) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsename();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s2, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepartial_mix() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemix_expr() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomplete_mix();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomplete_mix();\n }\n s2 = peg$parsepartial_mix();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f29(s1, s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n return s0;\n }\n function peg$parsename() {\n var s0, s1, s2;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 46) {\n s0 = peg$c6;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n return s0;\n }\n function peg$parsepostfix() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parseplus();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseplus();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n return s0;\n }\n function peg$parseprefix() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parseminus();\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n return s0;\n }\n function peg$parseplus() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e26);\n }\n }\n return s0;\n }\n function peg$parseminus() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e28);\n }\n }\n return s0;\n }\n function peg$parsenum() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f32(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e30);\n }\n }\n return s0;\n }\n function peg$parsepct() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c6;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n s7 = input.substring(s7, peg$currPos);\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s4 = input.substring(s4, peg$currPos);\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c6;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = input.substring(s4, peg$currPos);\n } else {\n s4 = s5;\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f33(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e32);\n }\n }\n return s0;\n }\n function peg$parsediv() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsepct();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e33);\n }\n }\n return s0;\n }\n function peg$parsedec() {\n var s0, s1, s2;\n s0 = peg$parsepct();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n return s0;\n }\n function peg$parseint() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e34);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1;\n peg$silentFails++;\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e35);\n }\n return s0;\n }\n function peg$parsesp() {\n var s0, s1;\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsehex() {\n var s0, s1;\n s0 = peg$currPos;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e37);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f37(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$otherExpectation(\"decl_start\");\n var peg$e1 = peg$otherExpectation(\"decl_end\");\n var peg$e2 = peg$otherExpectation(\"vert\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"l\");\n var peg$e5 = peg$otherExpectation(\"r\");\n var peg$e6 = peg$otherExpectation(\"c\");\n var peg$e7 = peg$otherExpectation(\"p\");\n var peg$e8 = peg$otherExpectation(\"m\");\n var peg$e9 = peg$otherExpectation(\"b\");\n var peg$e10 = peg$otherExpectation(\"w\");\n var peg$e11 = peg$otherExpectation(\"W\");\n var peg$e12 = peg$otherExpectation(\"X\");\n var peg$e13 = peg$otherExpectation(\"!\");\n var peg$e14 = peg$otherExpectation(\"@\");\n var peg$e15 = peg$otherExpectation(\"<\");\n var peg$e16 = peg$otherExpectation(\">\");\n var peg$e17 = peg$otherExpectation(\"group\");\n var peg$e18 = peg$otherExpectation(\"whitespace\");\n var peg$f0 = function(c) {\n return c;\n };\n var peg$f1 = function(cols) {\n return cols;\n };\n var peg$f2 = function() {\n return [];\n };\n var peg$f3 = function(divs1, start, a, end, divs2) {\n return {\n type: \"column\",\n pre_dividers: divs1,\n post_dividers: divs2,\n before_start_code: start,\n before_end_code: end,\n alignment: a\n };\n };\n var peg$f4 = function() {\n return {\n type: \"vert_divider\"\n };\n };\n var peg$f5 = function(b, g) {\n return {\n type: \"bang_divider\",\n content: g[0].content\n };\n };\n var peg$f6 = function(g) {\n return {\n type: \"at_divider\",\n content: g[0].content\n };\n };\n var peg$f7 = function(div) {\n return div;\n };\n var peg$f8 = function(g) {\n return { type: \"decl_code\", code: g[0].content };\n };\n var peg$f9 = function(g) {\n return { type: \"decl_code\", code: g[0].content };\n };\n var peg$f10 = function() {\n return { type: \"alignment\", alignment: \"left\" };\n };\n var peg$f11 = function() {\n return { type: \"alignment\", alignment: \"center\" };\n };\n var peg$f12 = function() {\n return { type: \"alignment\", alignment: \"right\" };\n };\n var peg$f13 = function() {\n return { type: \"alignment\", alignment: \"X\" };\n };\n var peg$f14 = function() {\n return \"top\";\n };\n var peg$f15 = function() {\n return \"default\";\n };\n var peg$f16 = function() {\n return \"bottom\";\n };\n var peg$f17 = function(a, g) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: a,\n size: g[0].content\n };\n };\n var peg$f18 = function(g1, g2) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: g1[0].content,\n size: g2[0].content\n };\n };\n var peg$f19 = function(tok) {\n return options.matchChar(tok, \"|\");\n };\n var peg$f20 = function(tok) {\n return options.matchChar(tok, \"l\");\n };\n var peg$f21 = function(tok) {\n return options.matchChar(tok, \"r\");\n };\n var peg$f22 = function(tok) {\n return options.matchChar(tok, \"c\");\n };\n var peg$f23 = function(tok) {\n return options.matchChar(tok, \"p\");\n };\n var peg$f24 = function(tok) {\n return options.matchChar(tok, \"m\");\n };\n var peg$f25 = function(tok) {\n return options.matchChar(tok, \"b\");\n };\n var peg$f26 = function(tok) {\n return options.matchChar(tok, \"w\");\n };\n var peg$f27 = function(tok) {\n return options.matchChar(tok, \"W\");\n };\n var peg$f28 = function(tok) {\n return options.matchChar(tok, \"X\");\n };\n var peg$f29 = function(tok) {\n return options.matchChar(tok, \"!\");\n };\n var peg$f30 = function(tok) {\n return options.matchChar(tok, \"@\");\n };\n var peg$f31 = function(tok) {\n return options.matchChar(tok, \"<\");\n };\n var peg$f32 = function(tok) {\n return options.matchChar(tok, \">\");\n };\n var peg$f33 = function(tok) {\n return options.isGroup(tok);\n };\n var peg$f34 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f2();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsecolumn() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecolumn_divider();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecolumn_divider();\n }\n s2 = peg$parsedecl_start();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsealignment();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsedecl_end();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parsecolumn_divider();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsecolumn_divider();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolumn_divider() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$currPos;\n s3 = peg$parsevert();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$f4();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsebang();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f5(s3, s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseat();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f6(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedecl_start() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsegreater();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n return s0;\n }\n function peg$parsedecl_end() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseless();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parsealignment() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsel();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsec();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parser();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f12();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseX();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f13();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsep();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f14();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parsem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f15();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseb();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f16();\n }\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsew();\n if (s1 === peg$FAILED) {\n s1 = peg$parseW();\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsevert() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n return s0;\n }\n function peg$parsel() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n return s0;\n }\n function peg$parser() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parsec() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsep() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f23(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsem() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parseb() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f25(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parsew() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parseW() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f27(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n return s0;\n }\n function peg$parseX() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parsebang() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f29(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseat() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parseless() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f31(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n return s0;\n }\n function peg$parsegreater() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f33(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isHash) {\n try {\n Object.assign(options, {\n matchChar: (node, char) => node.type === \"string\" && node.content === char,\n isGroup: (node) => node.type === \"group\",\n isWhitespace: (node) => node.type === \"whitespace\"\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$otherExpectation(\"partial item\");\n var peg$e1 = peg$otherExpectation(\"item\");\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$otherExpectation(\"equation\");\n var peg$e4 = peg$otherExpectation(\"trailing comment\");\n var peg$e5 = peg$otherExpectation(\"comment only line\");\n var peg$e6 = peg$otherExpectation(\"non-var token\");\n var peg$e7 = peg$otherExpectation(\"token\");\n var peg$e8 = peg$otherExpectation(\"same line comment\");\n var peg$e9 = peg$otherExpectation(\"own line comment\");\n var peg$e10 = peg$otherExpectation(\",\");\n var peg$e11 = peg$otherExpectation(\"@\");\n var peg$e12 = peg$otherExpectation(\"variable token\");\n var peg$e13 = peg$otherExpectation(\"+/-\");\n var peg$e14 = peg$otherExpectation(\"=\");\n var peg$f0 = function(a, b) {\n return a.concat(b ? b : []);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(a, b, c) {\n return a.concat(b, c);\n };\n var peg$f3 = function(op, a, b, c) {\n return { type: \"item\", op, variable: b, content: a.concat(b, c) };\n };\n var peg$f4 = function(op, a) {\n return { type: \"item\", op, variable: null, content: a };\n };\n var peg$f5 = function(line, sep, comment) {\n return { ...line, sep: [].concat(sep), trailingComment: comment };\n };\n var peg$f6 = function(line, comment) {\n return { ...line, trailingComment: comment };\n };\n var peg$f7 = function(eq, ann) {\n return {\n type: \"line\",\n equation: eq,\n annotation: ann,\n sep: null\n };\n };\n var peg$f8 = function(at, ann) {\n return at ? { type: \"annotation\", marker: at, content: ann } : null;\n };\n var peg$f9 = function(left, eq, right) {\n return { type: \"equation\", left, right, equals: eq };\n };\n var peg$f10 = function(x) {\n return x;\n };\n var peg$f11 = function(x) {\n return {\n type: \"line\",\n trailingComment: x\n };\n };\n var peg$f12 = function(v, s) {\n return [v].concat(s ? s : []);\n };\n var peg$f13 = function(t) {\n return t;\n };\n var peg$f14 = function(x) {\n return x;\n };\n var peg$f15 = function(x) {\n return x;\n };\n var peg$f16 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$f18 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f19 = function(tok) {\n return tok;\n };\n var peg$f20 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f21 = function(tok) {\n return tok;\n };\n var peg$f22 = function(tok) {\n return options.isSep(tok);\n };\n var peg$f23 = function(tok) {\n return tok;\n };\n var peg$f24 = function(tok) {\n return options.isAt(tok);\n };\n var peg$f25 = function(tok) {\n return tok;\n };\n var peg$f26 = function(tok) {\n return options.isVar(tok);\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$f28 = function(tok) {\n return options.isOperation(tok);\n };\n var peg$f29 = function(tok) {\n return tok;\n };\n var peg$f30 = function(tok) {\n return options.isEquals(tok);\n };\n var peg$f31 = function(tok) {\n return tok;\n };\n var peg$f32 = function(tok) {\n return options.isSubscript(tok);\n };\n var peg$f33 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n }\n s2 = peg$parseline_without_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseEOL();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsepartial_item() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = [];\n s3 = peg$parsenon_var_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_var_token();\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parsevar();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n s6 = [];\n s7 = peg$parsetoken();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsetoken();\n }\n s7 = [];\n s8 = peg$parse_();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n return s0;\n }\n function peg$parseitem() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsevar();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parse_();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parse_();\n }\n s7 = [];\n s8 = peg$parsetoken();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsetoken();\n }\n s8 = [];\n s9 = peg$parse_();\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s5, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f4(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parseline_with_sep() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepartial_line_with_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseline_without_sep() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$silentFails--;\n if (s2 !== peg$FAILED) {\n peg$currPos = s1;\n s1 = void 0;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequation();\n s3 = peg$parseannotation();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseannotation() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseat();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsenon_sep_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_sep_token();\n }\n peg$savedPos = s0;\n s0 = peg$f8(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseequation() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseitem();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseitem();\n }\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2, s3);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parsevar() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsevar_token();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsesubscript();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsenon_var_token() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsevar();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsenon_sep_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseat();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoperation();\n if (s2 === peg$FAILED) {\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesep() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parseat() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n return s0;\n }\n function peg$parsevar_token() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parseoperation() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = peg$currPos;\n s4 = peg$f28(s2);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parsesubscript() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isSep: (node) => node.type === \"string\" && node.content === \",\",\n isVar: (node) => node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isOperation: (node) => node.type === \"string\" && node.content.match(/[+-]/),\n isEquals: (node) => node.type === \"string\" && node.content === \"=\",\n isAt: (node) => node.type === \"string\" && node.content === \"@\",\n isSubscript: (node) => node.content === \"_\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { root: peg$parseroot };\n var peg$startRuleFunction = peg$parseroot;\n var peg$c0 = \"plus\";\n var peg$c1 = \"minus\";\n var peg$c2 = \"pt\";\n var peg$c3 = \"mm\";\n var peg$c4 = \"cm\";\n var peg$c5 = \"in\";\n var peg$c6 = \"ex\";\n var peg$c7 = \"em\";\n var peg$c8 = \"bp\";\n var peg$c9 = \"pc\";\n var peg$c10 = \"dd\";\n var peg$c11 = \"cc\";\n var peg$c12 = \"nd\";\n var peg$c13 = \"nc\";\n var peg$c14 = \"sp\";\n var peg$c15 = \"filll\";\n var peg$c16 = \"fill\";\n var peg$c17 = \"fil\";\n var peg$c18 = \".\";\n var peg$c19 = \"+\";\n var peg$c20 = \"-\";\n var peg$r0 = /^[0-9]/;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\"plus\", false);\n var peg$e2 = peg$literalExpectation(\"minus\", false);\n var peg$e3 = peg$literalExpectation(\"pt\", false);\n var peg$e4 = peg$literalExpectation(\"mm\", false);\n var peg$e5 = peg$literalExpectation(\"cm\", false);\n var peg$e6 = peg$literalExpectation(\"in\", false);\n var peg$e7 = peg$literalExpectation(\"ex\", false);\n var peg$e8 = peg$literalExpectation(\"em\", false);\n var peg$e9 = peg$literalExpectation(\"bp\", false);\n var peg$e10 = peg$literalExpectation(\"pc\", false);\n var peg$e11 = peg$literalExpectation(\"dd\", false);\n var peg$e12 = peg$literalExpectation(\"cc\", false);\n var peg$e13 = peg$literalExpectation(\"nd\", false);\n var peg$e14 = peg$literalExpectation(\"nc\", false);\n var peg$e15 = peg$literalExpectation(\"sp\", false);\n var peg$e16 = peg$literalExpectation(\"filll\", false);\n var peg$e17 = peg$literalExpectation(\"fill\", false);\n var peg$e18 = peg$literalExpectation(\"fil\", false);\n var peg$e19 = peg$otherExpectation(\"number\");\n var peg$e20 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e21 = peg$literalExpectation(\".\", false);\n var peg$e22 = peg$literalExpectation(\"+\", false);\n var peg$e23 = peg$literalExpectation(\"-\", false);\n var peg$f0 = function(b, st, sh) {\n return {\n type: \"glue\",\n fixed: b,\n stretchable: st,\n shrinkable: sh,\n position: location()\n };\n };\n var peg$f1 = function(glue) {\n return glue;\n };\n var peg$f2 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f3 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f4 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f5 = function(n) {\n return parseFloat(n);\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parseroot() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsebase();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsestretchable();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseshrinkable();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s1;\n s1 = peg$f0(s2, s3, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebase() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseunit();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsestretchable() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseshrinkable() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c1) {\n s1 = peg$c1;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseunit() {\n var s0;\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s0 = peg$c2;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c3) {\n s0 = peg$c3;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s0 = peg$c4;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c5) {\n s0 = peg$c5;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s0 = peg$c6;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s0 = peg$c7;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s0 = peg$c8;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s0 = peg$c9;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parserubber_unit() {\n var s0;\n s0 = peg$parseunit();\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c16) {\n s0 = peg$c16;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c17) {\n s0 = peg$c17;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsesign();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$currPos;\n s5 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c18;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n return s0;\n }\n function peg$parsesign() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 43) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body };\n var peg$startRuleFunction = peg$parsepath_spec;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$otherExpectation(\"same line comment\");\n var peg$e2 = peg$otherExpectation(\"own line comment\");\n var peg$e3 = peg$otherExpectation(\"comment\");\n var peg$e4 = peg$otherExpectation(\"floating comment\");\n var peg$e5 = peg$otherExpectation(\"operation\");\n var peg$e6 = peg$otherExpectation(\"=\");\n var peg$f0 = function(v) {\n return v;\n };\n var peg$f1 = function(ops) {\n return { type: \"path_spec\", content: ops };\n };\n var peg$f2 = function(c1, op, comment) {\n return { op, comment };\n };\n var peg$f3 = function(c1, ops, c2, body) {\n const comments = [c1, ...ops.map((x) => x.comment), c2].filter(\n (x) => x\n );\n const attribute = ops.map((x) => x.op.content.content).join(\" \");\n return {\n type: \"animation\",\n comments,\n attribute,\n content: body.content\n };\n };\n var peg$f4 = function(start, b) {\n return { ...b, start, type: \"foreach\" };\n };\n var peg$f5 = function(c1, variables, options2, c2, c3, list, c4, command) {\n const comments = [c1, c2, c3, c4].filter((x) => x);\n return {\n type: \"foreach_body\",\n variables,\n options: options2 && options2.content,\n list,\n command,\n comments\n };\n };\n var peg$f6 = function(c1, options2, c2, body) {\n const comments = [c1, c2].filter((x) => x);\n return {\n type: \"svg_operation\",\n options: options2 && options2.content,\n content: body,\n comments\n };\n };\n var peg$f7 = function(c1, c2, coord, c3, c4, x) {\n return { coord: x, comment: c4 };\n };\n var peg$f8 = function(c1, c2, coord, c3, a, c5) {\n const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x);\n return {\n type: \"curve_to\",\n controls: a ? [coord, a.coord] : [coord],\n comments\n };\n };\n var peg$f9 = function() {\n return { type: \"line_to\", command: \"|-\" };\n };\n var peg$f10 = function() {\n return { type: \"line_to\", command: \"-|\" };\n };\n var peg$f11 = function() {\n return { type: \"line_to\", command: \"--\" };\n };\n var peg$f12 = function(prefix, content) {\n return { type: \"coordinate\", content, prefix };\n };\n var peg$f13 = function(content) {\n return { type: \"square_brace_group\", content };\n };\n var peg$f14 = function(v) {\n return { type: \"unknown\", content: v };\n };\n var peg$f15 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f16 = function(tok) {\n return tok;\n };\n var peg$f17 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f18 = function(tok) {\n return tok;\n };\n var peg$f19 = function(tok) {\n return options.isComment(tok);\n };\n var peg$f20 = function(tok) {\n return tok;\n };\n var peg$f21 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f22 = function(tok) {\n return tok;\n };\n var peg$f23 = function(c) {\n return c;\n };\n var peg$f24 = function(tok) {\n return options.isOperation(tok);\n };\n var peg$f25 = function(tok) {\n return { type: \"operation\", content: tok };\n };\n var peg$f26 = function(tok) {\n return options.isChar(tok, \"=\");\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$f28 = function(tok) {\n return options.isChar(tok, \"[\");\n };\n var peg$f29 = function(tok) {\n return tok;\n };\n var peg$f30 = function(tok) {\n return options.isChar(tok, \"]\");\n };\n var peg$f31 = function(tok) {\n return tok;\n };\n var peg$f32 = function(tok) {\n return options.isChar(tok, \"(\");\n };\n var peg$f33 = function(tok) {\n return tok;\n };\n var peg$f34 = function(tok) {\n return options.isChar(tok, \")\");\n };\n var peg$f35 = function(tok) {\n return tok;\n };\n var peg$f36 = function(tok) {\n return options.isChar(tok, \"+\");\n };\n var peg$f37 = function(tok) {\n return tok;\n };\n var peg$f38 = function(tok) {\n return options.isChar(tok, \"-\");\n };\n var peg$f39 = function(tok) {\n return tok;\n };\n var peg$f40 = function(tok) {\n return options.isChar(tok, \"|\");\n };\n var peg$f41 = function(tok) {\n return tok;\n };\n var peg$f42 = function(tok) {\n return options.isChar(tok, \".\");\n };\n var peg$f43 = function(tok) {\n return tok;\n };\n var peg$f44 = function(tok) {\n return options.isChar(tok, \"controls\");\n };\n var peg$f45 = function(tok) {\n return tok;\n };\n var peg$f46 = function(tok) {\n return options.isChar(tok, \"and\");\n };\n var peg$f47 = function(tok) {\n return tok;\n };\n var peg$f48 = function(tok) {\n return options.isChar(tok, \"svg\");\n };\n var peg$f49 = function(tok) {\n return tok;\n };\n var peg$f50 = function(tok) {\n return options.isGroup(tok);\n };\n var peg$f51 = function(tok) {\n return tok;\n };\n var peg$f52 = function(tok) {\n return options.isAnyMacro(tok);\n };\n var peg$f53 = function(tok) {\n return tok;\n };\n var peg$f54 = function(tok) {\n return options.isChar(tok, \"foreach\");\n };\n var peg$f55 = function(tok) {\n return tok;\n };\n var peg$f56 = function(tok) {\n return options.isMacro(tok, \"foreach\");\n };\n var peg$f57 = function(tok) {\n return tok;\n };\n var peg$f58 = function(tok) {\n return options.isChar(tok, \"in\");\n };\n var peg$f59 = function(tok) {\n return tok;\n };\n var peg$f60 = function(tok) {\n return options.isChar(tok, \":\");\n };\n var peg$f61 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsepath_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseanimation() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parsecolon();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseequals();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_comment_();\n s6 = peg$parsegroup();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseforeach_keyword();\n if (s1 === peg$FAILED) {\n s1 = peg$parseforeach_macro();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseforeach_body();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_body() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n s0 = peg$currPos;\n s1 = peg$parse_comment_();\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsein_keyword();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$parsegroup();\n if (s7 === peg$FAILED) {\n s7 = peg$parsemacro();\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_comment_();\n s9 = peg$parseforeach();\n if (s9 === peg$FAILED) {\n s9 = peg$parsegroup();\n if (s9 === peg$FAILED) {\n s9 = peg$parsemacro();\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesvg() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsesvg_keyword();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecurve_to() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n s0 = peg$currPos;\n s1 = peg$parsedotdot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsecontrols_keyword();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_comment_();\n s5 = peg$parsecoordinate();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$currPos;\n s8 = peg$parseand_keyword();\n if (s8 !== peg$FAILED) {\n s9 = peg$parse_comment_();\n s10 = peg$parsecoordinate();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f7(s2, s4, s5, s6, s9, s10);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = peg$parse_comment_();\n s9 = peg$parsedotdot();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2, s4, s5, s6, s7, s8);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseline_to() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsepipe();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepipe();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n return s0;\n }\n function peg$parsecoordinate() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parseplus();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseplus();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$parseopen_paren();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s3 = input.substring(s3, peg$currPos);\n s4 = peg$parseclose_paren();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesquare_brace_group() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parseopen_square_brace();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parseclose_square_brace();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedotdot() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsedot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedot();\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseunknown() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f14(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n return s0;\n }\n function peg$parsecomment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parse_comment_() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsecomment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n return s0;\n }\n function peg$parseoperation() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parseopen_square_brace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_square_brace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseopen_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseplus() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f36(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f37(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseminus() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f38(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f39(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepipe() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f40(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f41(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedot() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f42(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f43(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecontrols_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f44(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f45(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseand_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f46(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f47(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesvg_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f48(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f49(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f50(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f51(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f52(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f53(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f54(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f55(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_macro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f56(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f57(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsein_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f58(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f59(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolon() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f60(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f61(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) => node.type === \"string\" && node.content === char,\n isOperation: (node) => node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node) => node.type === \"whitespace\" || node.type === \"parbreak\",\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n isGroup: (node) => node.type === \"group\",\n isMacro: (node, name) => node.type === \"macro\" && node.content === name,\n isAnyMacro: (node) => node.type === \"macro\"\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// This file needs to be here because typescript does not know how to use babel's transpiler\n// to directly load Pegjs grammars.\n// @ts-nocheck\nimport _LatexPegParser from \"../grammars/latex.pegjs\";\nimport _AlignEnvironmentPegParser from \"../grammars/align-environment.pegjs\";\nimport _ArgSpecPegParser from \"../grammars/xparse-argspec.pegjs\";\nimport _PgfkeysPegParser from \"../grammars/pgfkeys.pegjs\";\nimport _MacroSubstitutionPegParser from \"../grammars/macro-substitutions.pegjs\";\nimport _LigaturesPegParser from \"../grammars/ligatures.pegjs\";\nimport _XColorPegParser from \"../grammars/xcolor-expressions.pegjs\";\nimport _TabularPegParser from \"../grammars/tabular-spec.pegjs\";\nimport _SystemePegParser from \"../grammars/systeme-environment.pegjs\";\nimport _GluePegParser from \"../grammars/tex-glue.pegjs\";\nimport _TikzPegParser from \"../grammars/tikz.pegjs\";\n\ntype PegParser = {\n parse: (input: string | unknown[], options?: unknown) => any;\n SyntaxError: (\n message: string,\n expected: string,\n found: unknown,\n location: unknown\n ) => unknown;\n};\n\nconst LatexPegParser = _LatexPegParser as PegParser;\nconst AlignEnvironmentPegParser = _AlignEnvironmentPegParser as PegParser;\nconst ArgSpecPegParser = _ArgSpecPegParser as PegParser;\nconst PgfkeysPegParser = _PgfkeysPegParser as PegParser;\nconst MacroSubstitutionPegParser = _MacroSubstitutionPegParser as PegParser;\nconst LigaturesPegParser = _LigaturesPegParser as PegParser;\nconst XColorPegParser = _XColorPegParser as PegParser;\nconst TabularPegParser = _TabularPegParser as PegParser;\nconst SystemePegParser = _SystemePegParser as PegParser;\nconst GluePegParser = _GluePegParser as PegParser;\nconst TikzPegParser = _TikzPegParser as PegParser;\n\nexport {\n LatexPegParser,\n AlignEnvironmentPegParser,\n ArgSpecPegParser,\n PgfkeysPegParser,\n MacroSubstitutionPegParser,\n LigaturesPegParser,\n XColorPegParser,\n TabularPegParser,\n SystemePegParser,\n GluePegParser,\n TikzPegParser,\n};\n"],"names":["match"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-pegjs/index.d.ts b/node_modules/@unified-latex/unified-latex-util-pegjs/index.d.ts new file mode 100644 index 0000000..80bfef7 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pegjs/index.d.ts @@ -0,0 +1,47 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +export declare const AlignEnvironmentPegParser: PegParser; + +export declare const ArgSpecPegParser: PegParser; + +/** + * Pegjs operates on strings. However, strings and arrays are very similar! + * This function adds `charAt`, `charCodeAt`, and `substring` methods to + * `array` so that `array` can then be fed to a Pegjs generated parser. + * + * @param {[object]} array + * @returns {[object]} + */ +export declare function decorateArrayForPegjs(array: any[]): StringlikeArray; + +export declare const GluePegParser: PegParser; + +export declare const LatexPegParser: PegParser; + +export declare const LigaturesPegParser: PegParser; + +export declare const MacroSubstitutionPegParser: PegParser; + +declare type PegParser = { + parse: (input: string | unknown[], options?: unknown) => any; + SyntaxError: (message: string, expected: string, found: unknown, location: unknown) => unknown; +}; + +export declare const PgfkeysPegParser: PegParser; + +/** + * Splits all multi-character strings into strings that are all single characters. + */ +export declare function splitStringsIntoSingleChars(nodes: Ast.Node[]): Ast.Node[]; + +declare type StringlikeArray = any[] & string; + +export declare const SystemePegParser: PegParser; + +export declare const TabularPegParser: PegParser; + +export declare const TikzPegParser: PegParser; + +export declare const XColorPegParser: PegParser; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-pegjs/index.js b/node_modules/@unified-latex/unified-latex-util-pegjs/index.js new file mode 100644 index 0000000..e1f625d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pegjs/index.js @@ -0,0 +1,16700 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +function decorateArrayForPegjs(array) { + array.charAt = function(i) { + return this[i]; + }; + array.charCodeAt = () => 0; + array.substring = function(i, j) { + return this.slice(i, j); + }; + array.replace = function(a, b) { + const ret = JSON.stringify(this); + return ret.replace(a, b); + }; + return array; +} +function splitStringsIntoSingleChars(nodes) { + return nodes.flatMap( + (node) => match.anyString(node) ? Array.from(node.content).map((c) => ({ + type: "string", + content: c + })) : node + ); +} +const _LatexPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath }; + var peg$startRuleFunction = peg$parsedocument; + var peg$c0 = "%"; + var peg$c1 = "."; + var peg$c2 = "verb*"; + var peg$c3 = "verb"; + var peg$c4 = "["; + var peg$c5 = "]"; + var peg$c6 = "lstinline"; + var peg$c7 = "mintinline"; + var peg$c8 = "mint"; + var peg$c9 = "minted"; + var peg$c10 = "verbatim*"; + var peg$c11 = "verbatim"; + var peg$c12 = "filecontents*"; + var peg$c13 = "filecontents"; + var peg$c14 = "comment"; + var peg$c15 = "lstlisting"; + var peg$c16 = "("; + var peg$c17 = ")"; + var peg$c18 = "begin"; + var peg$c19 = "end"; + var peg$c20 = "equation*"; + var peg$c21 = "equation"; + var peg$c22 = "align*"; + var peg$c23 = "align"; + var peg$c24 = "alignat*"; + var peg$c25 = "alignat"; + var peg$c26 = "gather*"; + var peg$c27 = "gather"; + var peg$c28 = "multline*"; + var peg$c29 = "multline"; + var peg$c30 = "flalign*"; + var peg$c31 = "flalign"; + var peg$c32 = "split"; + var peg$c33 = "math"; + var peg$c34 = "displaymath"; + var peg$c35 = "\\"; + var peg$c36 = "{"; + var peg$c37 = "}"; + var peg$c38 = "$"; + var peg$c39 = "&"; + var peg$c40 = "\r"; + var peg$c41 = "\n"; + var peg$c42 = "\r\n"; + var peg$c43 = "#"; + var peg$c44 = "^"; + var peg$c45 = "_"; + var peg$c46 = "\0"; + var peg$r0 = /^[^ \t\n\r]/; + var peg$r1 = /^[ \t]/; + var peg$r2 = /^[a-zA-Z]/; + var peg$r3 = /^[0-9]/; + var peg$r4 = /^[.,;:\-*\/()!?=+<>[\]`'"~]/; + var peg$e0 = peg$otherExpectation("document"); + var peg$e1 = peg$otherExpectation("math"); + var peg$e2 = peg$otherExpectation("token"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("parbreak"); + var peg$e5 = peg$otherExpectation("math token"); + var peg$e6 = peg$otherExpectation("nonchar token"); + var peg$e7 = peg$literalExpectation("%", false); + var peg$e8 = peg$otherExpectation("whitespace"); + var peg$e9 = peg$otherExpectation("number"); + var peg$e10 = peg$literalExpectation(".", false); + var peg$e11 = peg$otherExpectation("special macro"); + var peg$e12 = peg$literalExpectation("verb*", false); + var peg$e13 = peg$literalExpectation("verb", false); + var peg$e14 = peg$literalExpectation("[", false); + var peg$e15 = peg$literalExpectation("]", false); + var peg$e16 = peg$classExpectation([" ", " ", "\n", "\r"], true, false); + var peg$e17 = peg$otherExpectation("verbatim listings"); + var peg$e18 = peg$literalExpectation("lstinline", false); + var peg$e19 = peg$otherExpectation("verbatim minted"); + var peg$e20 = peg$literalExpectation("mintinline", false); + var peg$e21 = peg$literalExpectation("mint", false); + var peg$e22 = peg$otherExpectation("verbatim minted environment"); + var peg$e23 = peg$literalExpectation("minted", false); + var peg$e24 = peg$otherExpectation("verbatim environment"); + var peg$e25 = peg$literalExpectation("verbatim*", false); + var peg$e26 = peg$literalExpectation("verbatim", false); + var peg$e27 = peg$literalExpectation("filecontents*", false); + var peg$e28 = peg$literalExpectation("filecontents", false); + var peg$e29 = peg$literalExpectation("comment", false); + var peg$e30 = peg$literalExpectation("lstlisting", false); + var peg$e31 = peg$otherExpectation("macro"); + var peg$e32 = peg$otherExpectation("group"); + var peg$e33 = peg$otherExpectation("environment"); + var peg$e34 = peg$otherExpectation("math environment"); + var peg$e36 = peg$literalExpectation("(", false); + var peg$e37 = peg$literalExpectation(")", false); + var peg$e38 = peg$literalExpectation("begin", false); + var peg$e39 = peg$literalExpectation("end", false); + var peg$e40 = peg$literalExpectation("equation*", false); + var peg$e41 = peg$literalExpectation("equation", false); + var peg$e42 = peg$literalExpectation("align*", false); + var peg$e43 = peg$literalExpectation("align", false); + var peg$e44 = peg$literalExpectation("alignat*", false); + var peg$e45 = peg$literalExpectation("alignat", false); + var peg$e46 = peg$literalExpectation("gather*", false); + var peg$e47 = peg$literalExpectation("gather", false); + var peg$e48 = peg$literalExpectation("multline*", false); + var peg$e49 = peg$literalExpectation("multline", false); + var peg$e50 = peg$literalExpectation("flalign*", false); + var peg$e51 = peg$literalExpectation("flalign", false); + var peg$e52 = peg$literalExpectation("split", false); + var peg$e53 = peg$literalExpectation("math", false); + var peg$e54 = peg$literalExpectation("displaymath", false); + var peg$e55 = peg$otherExpectation("escape"); + var peg$e56 = peg$literalExpectation("\\", false); + var peg$e57 = peg$literalExpectation("{", false); + var peg$e58 = peg$literalExpectation("}", false); + var peg$e59 = peg$literalExpectation("$", false); + var peg$e60 = peg$literalExpectation("&", false); + var peg$e61 = peg$otherExpectation("newline"); + var peg$e62 = peg$literalExpectation("\r", false); + var peg$e63 = peg$literalExpectation("\n", false); + var peg$e64 = peg$literalExpectation("\r\n", false); + var peg$e65 = peg$literalExpectation("#", false); + var peg$e66 = peg$literalExpectation("^", false); + var peg$e67 = peg$literalExpectation("_", false); + var peg$e68 = peg$literalExpectation("\0", false); + var peg$e69 = peg$classExpectation([" ", " "], false, false); + var peg$e70 = peg$otherExpectation("letter"); + var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false); + var peg$e72 = peg$otherExpectation("digit"); + var peg$e73 = peg$classExpectation([["0", "9"]], false, false); + var peg$e74 = peg$otherExpectation("punctuation"); + var peg$e75 = peg$classExpectation([".", ",", ";", ":", "-", "*", "/", "(", ")", "!", "?", "=", "+", "<", ">", "[", "]", "`", "'", '"', "~"], false, false); + var peg$e76 = peg$otherExpectation("full comment"); + var peg$e77 = peg$otherExpectation("comment"); + var peg$f0 = function(content) { + return createNode("root", { content: content.flatMap((x) => x) }); + }; + var peg$f1 = function(t) { + return t; + }; + var peg$f2 = function(eq) { + return createNode("inlinemath", { content: eq.flatMap((x) => x) }); + }; + var peg$f3 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f4 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f5 = function() { + return createNode("parbreak"); + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(x) { + return x; + }; + var peg$f8 = function() { + return createNode("macro", { content: "^", escapeToken: "" }); + }; + var peg$f9 = function() { + return createNode("macro", { content: "_", escapeToken: "" }); + }; + var peg$f10 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f11 = function() { + return createNode("whitespace"); + }; + var peg$f12 = function(a, b) { + return a.join("") + "." + b.join(""); + }; + var peg$f13 = function(b) { + return "." + b.join(""); + }; + var peg$f14 = function(a) { + return a.join("") + "."; + }; + var peg$f15 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f16 = function(env, e, end) { + return end == e; + }; + var peg$f17 = function(env, e, x) { + return x; + }; + var peg$f18 = function(env, e, x, end) { + return end == e; + }; + var peg$f19 = function(env, e, x) { + return createNode("verb", { + env, + escape: e, + content: x.join("") + }); + }; + var peg$f20 = function(x) { + return x; + }; + var peg$f21 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f22 = function(x) { + return x; + }; + var peg$f23 = function(x) { + return createNode("inlinemath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f24 = function(x) { + return x; + }; + var peg$f25 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f26 = function(end) { + return end.type === "string" && end.content === "]"; + }; + var peg$f27 = function(x) { + return x; + }; + var peg$f28 = function(o) { + return [ + createNode("string", { content: "[" }), + ...o, + createNode("string", { content: "]" }) + ]; + }; + var peg$f29 = function(x) { + return x; + }; + var peg$f30 = function(v) { + return createNode("group", { + content: createNode("string", { content: v.join("") }) + }); + }; + var peg$f31 = function(d, end) { + return end == d; + }; + var peg$f32 = function(d, x) { + return x; + }; + var peg$f33 = function(d, v, end) { + return end == d; + }; + var peg$f34 = function(d, v) { + return [ + createNode("string", { content: d }), + createNode("string", { content: v.join("") }), + createNode("string", { content: d }) + ]; + }; + var peg$f35 = function(macro, option, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + ...[].concat(verbatim) + ]; + }; + var peg$f36 = function(macro, option, language, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + language, + ...[].concat(verbatim) + ]; + }; + var peg$f37 = function(env, option, language, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f38 = function(env, option, language, body) { + const content = [ + ...option || [], + language, + { type: "string", content: body } + ]; + return createNode("environment", { + env, + content + }); + }; + var peg$f39 = function(env, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f40 = function(env, x) { + return x; + }; + var peg$f41 = function(env, body) { + return createNode("verbatim", { + env, + content: body + }); + }; + var peg$f42 = function(n) { + return n.join(""); + }; + var peg$f43 = function(n) { + return n; + }; + var peg$f44 = function(m) { + return createNode("macro", { content: m }); + }; + var peg$f45 = function(c) { + return c; + }; + var peg$f46 = function(x) { + return createNode("group", { content: x.flatMap((x2) => x2) }); + }; + var peg$f47 = function(g) { + return text().slice(1, -1); + }; + var peg$f48 = function(env, env_comment, end_env) { + return compare_env(env, end_env); + }; + var peg$f49 = function(env, env_comment, x) { + return x; + }; + var peg$f50 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("environment", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f51 = function(env, env_comment, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f52 = function(env, env_comment, x) { + return x; + }; + var peg$f53 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("mathenv", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f56 = function(e) { + return createNode("string", { content: e }); + }; + var peg$f57 = function() { + return createNode("string", { content: "\\" }); + }; + var peg$f58 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f59 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f60 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f61 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f62 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f63 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f64 = function(s) { + return createNode("string", { content: s }); + }; + var peg$f65 = function() { + return " "; + }; + var peg$f66 = function(p) { + return createNode("string", { content: p }); + }; + var peg$f67 = function(leading_sp, comment) { + return createNode("comment", { + ...comment, + sameline: false, + leadingWhitespace: leading_sp.length > 0 + }); + }; + var peg$f68 = function(spaces, x) { + return createNode("comment", { + ...x, + sameline: true, + leadingWhitespace: spaces.length > 0 + }); + }; + var peg$f69 = function(c) { + return c; + }; + var peg$f70 = function(c) { + return { content: c.join(""), suffixParbreak: true }; + }; + var peg$f71 = function(c) { + return c; + }; + var peg$f72 = function(c) { + return { content: c.join("") }; + }; + var peg$f73 = function() { + var loc = location(); + return loc.start.column === 1; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$resultsCache = {}; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsedocument() { + var s0, s1, s2; + var key = peg$currPos * 52 + 0; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + peg$savedPos = s0; + s1 = peg$f0(s1); + s0 = s1; + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath() { + var s0, s1; + var key = peg$currPos * 52 + 1; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = []; + s1 = peg$parsemath_token(); + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsemath_token(); + } + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 2; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsegroup(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_shift(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parseparbreak(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsenumber(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f3(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f4(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 3; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_token() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 4; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsealignment_tab(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesuperscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f8(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesubscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenonchar_token() { + var s0; + var key = peg$currPos * 52 + 5; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parseescape(); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parsenl(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsesp(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$parseEOF(); + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 6; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsenl(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsecomment_start(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsenl(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = []; + s2 = peg$parsesp(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + } else { + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f11(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 7; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parsenum(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parsenum(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f12(s2, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsenum(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenum(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f13(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f14(s2); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f15(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsespecial_macro() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + var key = peg$currPos * 52 + 8; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c2) { + s2 = peg$c2; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c3) { + s2 = peg$c3; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f18(s2, s3, s4, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f19(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_listings(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_minted(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_minted_environment(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_environment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_display_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_display_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_inline_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_inline_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = peg$parsemath_shift(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s4 = peg$parsemath_shift(); + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_shift(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemath_environment(); + if (s0 === peg$FAILED) { + s0 = peg$parseenvironment(); + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesquare_bracket_argument() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 9; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_group() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 10; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_delimited_by_char() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 11; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (peg$r0.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$f33(s1, s2, s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f34(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_listings() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 12; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c6) { + s2 = peg$c6; + peg$currPos += 9; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseverbatim_group(); + if (s4 === peg$FAILED) { + s4 = peg$parseverbatim_delimited_by_char(); + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f35(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_minted() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 13; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c7) { + s2 = peg$c7; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c8) { + s2 = peg$c8; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s5 = peg$parseverbatim_group(); + if (s5 === peg$FAILED) { + s5 = peg$parseverbatim_delimited_by_char(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f36(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_minted_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14; + var key = peg$currPos * 52 + 14; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c9) { + s3 = peg$c9; + peg$currPos += 6; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsesquare_bracket_argument(); + if (s5 === peg$FAILED) { + s5 = null; + } + s6 = peg$parsegroup(); + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + s8 = []; + s9 = peg$currPos; + s10 = peg$currPos; + peg$silentFails++; + s11 = peg$currPos; + s12 = peg$parseend_env(); + if (s12 !== peg$FAILED) { + s13 = peg$parsegroup(); + if (s13 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s14 = peg$f37(s3, s5, s6, s13); + if (s14) { + s14 = void 0; + } else { + s14 = peg$FAILED; + } + if (s14 !== peg$FAILED) { + s12 = [s12, s13, s14]; + s11 = s12; + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + peg$silentFails--; + if (s11 === peg$FAILED) { + s10 = void 0; + } else { + peg$currPos = s10; + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + if (input.length > peg$currPos) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s11 !== peg$FAILED) { + s10 = [s10, s11]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$currPos; + s10 = peg$currPos; + peg$silentFails++; + s11 = peg$currPos; + s12 = peg$parseend_env(); + if (s12 !== peg$FAILED) { + s13 = peg$parsegroup(); + if (s13 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s14 = peg$f37(s3, s5, s6, s13); + if (s14) { + s14 = void 0; + } else { + s14 = peg$FAILED; + } + if (s14 !== peg$FAILED) { + s12 = [s12, s13, s14]; + s11 = s12; + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + } else { + peg$currPos = s11; + s11 = peg$FAILED; + } + peg$silentFails--; + if (s11 === peg$FAILED) { + s10 = void 0; + } else { + peg$currPos = s10; + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + if (input.length > peg$currPos) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s11 !== peg$FAILED) { + s10 = [s10, s11]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } + s7 = input.substring(s7, peg$currPos); + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsebegin_group(); + if (s9 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c9) { + s10 = peg$c9; + peg$currPos += 6; + } else { + s10 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s10 !== peg$FAILED) { + s11 = peg$parseend_group(); + if (s11 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f38(s3, s5, s6, s7); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + var key = peg$currPos * 52 + 15; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parseverbatim_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f39(s3, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f40(s3, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f39(s3, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + if (input.length > peg$currPos) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f40(s3, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s5 = input.substring(s5, peg$currPos); + s6 = peg$parseend_env(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebegin_group(); + if (s7 !== peg$FAILED) { + s8 = peg$parseverbatim_env_name(); + if (s8 !== peg$FAILED) { + s9 = peg$parseend_group(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f41(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseverbatim_env_name() { + var s0; + var key = peg$currPos * 52 + 16; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + if (input.substr(peg$currPos, 9) === peg$c10) { + s0 = peg$c10; + peg$currPos += 9; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c11) { + s0 = peg$c11; + peg$currPos += 8; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 13) === peg$c12) { + s0 = peg$c12; + peg$currPos += 13; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 12) === peg$c13) { + s0 = peg$c13; + peg$currPos += 12; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c14) { + s0 = peg$c14; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c15) { + s0 = peg$c15; + peg$currPos += 10; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + } + } + } + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemacro() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 17; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsechar(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsechar(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f42(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f43(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f44(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsegroup() { + var s0, s1, s2, s3, s4, s5; + var key = peg$currPos * 52 + 18; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f45(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f45(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f46(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsegroup_contents_as_string() { + var s0, s1; + var key = peg$currPos * 52 + 19; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parsegroup(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f47(); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseenvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + var key = peg$currPos * 52 + 20; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup_contents_as_string(); + if (s2 !== peg$FAILED) { + s3 = peg$parsesameline_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f48(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f49(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f48(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f49(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$parseend_env(); + if (s5 !== peg$FAILED) { + s6 = peg$parsegroup_contents_as_string(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f50(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + var key = peg$currPos * 52 + 21; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsesameline_comment(); + if (s5 === peg$FAILED) { + s5 = null; + } + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f51(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f52(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f51(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f52(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s7 = peg$parseend_env(); + if (s7 !== peg$FAILED) { + s8 = peg$parsebegin_group(); + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_env_name(); + if (s9 !== peg$FAILED) { + s10 = peg$parseend_group(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f53(s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_display_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 23; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 91) { + s2 = peg$c4; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_display_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 24; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s2 = peg$c5; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_inline_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 25; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_inline_math() { + var s0, s1, s2; + var key = peg$currPos * 52 + 26; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s2 = peg$c17; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_env() { + var s0, s1, s2; + var key = peg$currPos * 52 + 27; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c18) { + s2 = peg$c18; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e38); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_env() { + var s0, s1, s2; + var key = peg$currPos * 52 + 28; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c19) { + s2 = peg$c19; + peg$currPos += 3; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e39); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_env_name() { + var s0, s1; + var key = peg$currPos * 52 + 29; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.substr(peg$currPos, 9) === peg$c20) { + s1 = peg$c20; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e40); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c21) { + s1 = peg$c21; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e41); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c22) { + s1 = peg$c22; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e42); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c23) { + s1 = peg$c23; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e43); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c24) { + s1 = peg$c24; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e44); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c25) { + s1 = peg$c25; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e45); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c26) { + s1 = peg$c26; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e46); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c27) { + s1 = peg$c27; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e47); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c28) { + s1 = peg$c28; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e48); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c29) { + s1 = peg$c29; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e49); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c30) { + s1 = peg$c30; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e50); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c31) { + s1 = peg$c31; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e51); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c32) { + s1 = peg$c32; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e52); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c33) { + s1 = peg$c33; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e53); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 11) === peg$c34) { + s1 = peg$c34; + peg$currPos += 11; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e54); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f56(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseescape() { + var s0, s1; + var key = peg$currPos * 52 + 30; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e56); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f57(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e55); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsebegin_group() { + var s0, s1; + var key = peg$currPos * 52 + 31; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c36; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e57); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f58(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseend_group() { + var s0, s1; + var key = peg$currPos * 52 + 32; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 125) { + s1 = peg$c37; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e58); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f59(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemath_shift() { + var s0, s1; + var key = peg$currPos * 52 + 33; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 36) { + s1 = peg$c38; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e59); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f60(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsealignment_tab() { + var s0, s1; + var key = peg$currPos * 52 + 34; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 38) { + s1 = peg$c39; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e60); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f61(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenl() { + var s0, s1, s2; + var key = peg$currPos * 52 + 35; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 13) { + s2 = peg$c40; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c41; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e63); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c40; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c42) { + s0 = peg$c42; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e64); + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e61); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsemacro_parameter() { + var s0, s1; + var key = peg$currPos * 52 + 36; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 35) { + s1 = peg$c43; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e65); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f62(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesuperscript() { + var s0, s1; + var key = peg$currPos * 52 + 37; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 94) { + s1 = peg$c44; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e66); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f63(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesubscript() { + var s0, s1; + var key = peg$currPos * 52 + 38; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s1 = peg$c45; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e67); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f64(s1); + } + s0 = s1; + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseignore() { + var s0; + var key = peg$currPos * 52 + 39; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + if (input.charCodeAt(peg$currPos) === 0) { + s0 = peg$c46; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e68); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesp() { + var s0, s1, s2; + var key = peg$currPos * 52 + 40; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f65(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsechar() { + var s0; + var key = peg$currPos * 52 + 41; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + if (peg$r2.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e71); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e70); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsenum() { + var s0; + var key = peg$currPos * 52 + 42; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + if (peg$r3.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e73); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e72); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsepunctuation() { + var s0, s1; + var key = peg$currPos * 52 + 43; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + if (peg$r4.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e75); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f66(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e74); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsecomment_start() { + var s0; + var key = peg$currPos * 52 + 44; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsefull_comment() { + var s0; + var key = peg$currPos * 52 + 45; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$parseownline_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsesameline_comment(); + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e76); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseownline_comment() { + var s0, s1, s2, s3; + var key = peg$currPos * 52 + 46; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseleading_sp(); + if (s2 !== peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f67(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsesameline_comment() { + var s0, s1, s2; + var key = peg$currPos * 52 + 47; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = []; + s2 = peg$parsesp(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + s2 = peg$parsecomment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f68(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + var key = peg$currPos * 52 + 48; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f69(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f69(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseparbreak(); + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f70(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f71(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f71(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + s4 = peg$parsenl(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = peg$parsenl(); + if (s3 === peg$FAILED) { + s3 = peg$parseEOF(); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f72(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e77); + } + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseleading_sp() { + var s0, s1, s2, s3, s4; + var key = peg$currPos * 52 + 49; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsestart_of_line(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parsestart_of_line() { + var s0; + var key = peg$currPos * 52 + 50; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + peg$savedPos = peg$currPos; + s0 = peg$f73(); + if (s0) { + s0 = void 0; + } else { + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function peg$parseEOF() { + var s0, s1; + var key = peg$currPos * 52 + 51; + var cached = peg$resultsCache[key]; + if (cached) { + peg$currPos = cached.nextPos; + return cached.result; + } + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 }; + return s0; + } + function toString(e) { + if (typeof e === "string") { + return e; + } + if (typeof e.content === "string") { + return e.content; + } + if (e && e.type === "whitespace") { + return " "; + } + return e; + } + function compare_env(g1, g2) { + const g1Name = typeof g1 === "string" ? g1 : g1.content.map(toString).join(""); + const g2Name = typeof g2 === "string" ? g2 : g2.content.map(toString).join(""); + return g1Name === g2Name; + } + function createNode(type, extra = {}) { + return { type, ...extra, position: location() }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _AlignEnvironmentPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(x) { + return { cells: [], colSeps: [], ...x }; + }; + var peg$f2 = function(rowItems, rowSep, trailingComment) { + return { ...rowItems, rowSep, trailingComment }; + }; + var peg$f3 = function(rowItems, trailingComment) { + return { ...rowItems, rowSep: null, trailingComment }; + }; + var peg$f4 = function(x) { + return x; + }; + var peg$f5 = function(x) { + return { + cells: [], + colSeps: [], + rowSep: null, + trailingComment: x + }; + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(colSep, cell) { + return { colSep, cell }; + }; + var peg$f8 = function(colSep) { + return { colSep }; + }; + var peg$f9 = function(a, b) { + return processRow(a, b); + }; + var peg$f10 = function(b) { + return processRow(null, b); + }; + var peg$f11 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f12 = function(tok) { + return tok; + }; + var peg$f13 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f14 = function(tok) { + return tok; + }; + var peg$f15 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f16 = function(tok) { + return tok; + }; + var peg$f17 = function(tok) { + return options.isRowSep(tok); + }; + var peg$f18 = function(tok) { + return tok; + }; + var peg$f19 = function(tok) { + return options.isColSep(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f0(); + } + s0 = s1; + } + return s0; + } + function peg$parserow_with_end() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + s2 = peg$f1(s2); + s1 = s2; + s2 = peg$parserow_sep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_without_end() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parserow_items(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f5(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parserow_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsecol_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parseseparated_cell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsecell(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s1 = peg$f8(s1); + } + s0 = s1; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsecell(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_cell(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_cell(); + } + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_cell(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_cell(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f11(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f12(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f13(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f15(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f16(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f17(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f18(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecol_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processRow(leadCell, otherCells) { + const cells = [leadCell || []]; + const seps = []; + for (const x of otherCells) { + cells.push(x.cell || []); + seps.push(x.colSep); + } + return { cells, colSeps: seps }; + } + if (!options.isWhitespace) { + try { + Object.assign( + options, + createMatchers(["\\", "hline", "cr"], ["&"]) + ); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _ArgSpecPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list }; + var peg$startRuleFunction = peg$parseargs_spec_list; + var peg$c1 = "v"; + var peg$c2 = "b"; + var peg$c3 = "!"; + var peg$c4 = "D"; + var peg$c5 = "d"; + var peg$c6 = "s"; + var peg$c7 = "O"; + var peg$c8 = "o"; + var peg$c9 = "e"; + var peg$c10 = "E"; + var peg$c11 = "t"; + var peg$c12 = "R"; + var peg$c13 = "r"; + var peg$c14 = "u"; + var peg$c15 = "m"; + var peg$c16 = "{"; + var peg$c17 = "}"; + var peg$c18 = " "; + var peg$c19 = "\n"; + var peg$c20 = "\r"; + var peg$c21 = "\\"; + var peg$r0 = /^[{ ]/; + var peg$r1 = /^[a-zA-Z]/; + var peg$r2 = /^[{}]/; + var peg$e0 = peg$literalExpectation("+", false); + var peg$e1 = peg$literalExpectation("v", false); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$literalExpectation("b", false); + var peg$e4 = peg$literalExpectation("!", false); + var peg$e5 = peg$literalExpectation("D", false); + var peg$e6 = peg$literalExpectation("d", false); + var peg$e7 = peg$literalExpectation("s", false); + var peg$e8 = peg$literalExpectation("O", false); + var peg$e9 = peg$literalExpectation("o", false); + var peg$e10 = peg$literalExpectation("e", false); + var peg$e11 = peg$literalExpectation("E", false); + var peg$e12 = peg$literalExpectation("t", false); + var peg$e13 = peg$literalExpectation("R", false); + var peg$e14 = peg$literalExpectation("r", false); + var peg$e15 = peg$literalExpectation("u", false); + var peg$e16 = peg$classExpectation(["{", " "], false, false); + var peg$e17 = peg$literalExpectation("m", false); + var peg$e18 = peg$literalExpectation("{", false); + var peg$e19 = peg$literalExpectation("}", false); + var peg$e20 = peg$literalExpectation(" ", false); + var peg$e21 = peg$literalExpectation("\n", false); + var peg$e22 = peg$literalExpectation("\r", false); + var peg$e23 = peg$literalExpectation("\\", false); + var peg$e24 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false); + var peg$e25 = peg$classExpectation(["{", "}"], false, false); + var peg$f0 = function(x) { + return x; + }; + var peg$f1 = function(spec) { + return spec; + }; + var peg$f2 = function(spec) { + return spec; + }; + var peg$f3 = function(openBrace) { + return createNode("verbatim", { openBrace, closeBrace: openBrace }); + }; + var peg$f4 = function() { + return createNode("body"); + }; + var peg$f5 = function(leading_bang, spec) { + return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec; + }; + var peg$f6 = function(braceSpec, defaultArg) { + return createNode("optional", { ...braceSpec, defaultArg }); + }; + var peg$f7 = function(braceSpec) { + return createNode("optional", braceSpec); + }; + var peg$f8 = function() { + return createNode("optionalStar"); + }; + var peg$f9 = function(g) { + return createNode("optional", { defaultArg: g }); + }; + var peg$f10 = function() { + return createNode("optional"); + }; + var peg$f11 = function(args) { + return createNode("embellishment", { + embellishmentTokens: args + }); + }; + var peg$f12 = function(args, g) { + return createNode("embellishment", { + embellishmentTokens: args, + defaultArg: g + }); + }; + var peg$f13 = function(tok) { + return createNode("optionalToken", { token: tok }); + }; + var peg$f14 = function(braceSpec, defaultArg) { + return createNode("mandatory", { ...braceSpec, defaultArg }); + }; + var peg$f15 = function(braceSpec) { + return createNode("mandatory", braceSpec); + }; + var peg$f16 = function(stopTokens) { + return createNode("until", { stopTokens }); + }; + var peg$f17 = function(x) { + return [x]; + }; + var peg$f18 = function(g) { + return g.content; + }; + var peg$f19 = function() { + return createNode("mandatory"); + }; + var peg$f20 = function(openBrace, closeBrace) { + return { openBrace, closeBrace }; + }; + var peg$f21 = function(g) { + return g.content.map(groupToStr).join(""); + }; + var peg$f22 = function(t) { + return [t]; + }; + var peg$f23 = function(args) { + return args.filter((a) => !a.match(/^\s*$/)); + }; + var peg$f24 = function(content) { + return { type: "group", content }; + }; + var peg$f25 = function() { + return ""; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseargs_spec_list() { + var s0, s1, s2, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + s2 = peg$parsewhitespace(); + s0 = peg$f1(s1); + return s0; + } + function peg$parsearg_spec() { + var s0, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + peg$currPos++; + } else { + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + s2 = peg$parseoptional(); + if (s2 === peg$FAILED) { + s2 = peg$parsemandatory(); + if (s2 === peg$FAILED) { + s2 = peg$parseverbatim(); + if (s2 === peg$FAILED) { + s2 = peg$parserequired(); + if (s2 === peg$FAILED) { + s2 = peg$parsebody(); + if (s2 === peg$FAILED) { + s2 = peg$parseuntil(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 118) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebody() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 98) { + s1 = peg$c2; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(); + } + s0 = s1; + return s0; + } + function peg$parseoptional() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c3; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseoptional_star(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_standard(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_delimited(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_embellishment(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_token(); + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseoptional_delimited() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 68) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsearg(); + if (s3 !== peg$FAILED) { + s0 = peg$f6(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 100) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_star() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 115) { + s1 = peg$c6; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f8(); + } + s0 = s1; + return s0; + } + function peg$parseoptional_standard() { + var s0, s1, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 79) { + s1 = peg$c7; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s1 !== peg$FAILED) { + peg$parsewhitespace(); + s3 = peg$parsearg(); + if (s3 !== peg$FAILED) { + s0 = peg$f9(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 111) { + s1 = peg$c8; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + } + return s0; + } + function peg$parseoptional_embellishment() { + var s0, s1, s3, s5; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 101) { + s1 = peg$c9; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s1 !== peg$FAILED) { + peg$parsewhitespace(); + s3 = peg$parseargs(); + if (s3 !== peg$FAILED) { + s0 = peg$f11(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 69) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + peg$parsewhitespace(); + s3 = peg$parseargs(); + if (s3 !== peg$FAILED) { + peg$parsewhitespace(); + s5 = peg$parseargs(); + if (s5 !== peg$FAILED) { + s0 = peg$f12(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_token() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 116) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserequired() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 82) { + s1 = peg$c12; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsearg(); + if (s3 !== peg$FAILED) { + s0 = peg$f14(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 114) { + s1 = peg$c13; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseuntil() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 117) { + s1 = peg$c14; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseuntil_stop_token(); + if (s2 !== peg$FAILED) { + s0 = peg$f16(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseuntil_stop_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebraced_group(); + if (s1 !== peg$FAILED) { + s1 = peg$f18(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsemandatory() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 109) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f19(); + } + s0 = s1; + return s0; + } + function peg$parsebrace_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parsemacro(); + if (s4 === peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemacro(); + if (s5 === peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = null; + } + s2 = input.substring(s2, peg$currPos); + s0 = peg$f20(s1, s2); + return s0; + } + function peg$parsearg() { + var s0, s1; + s0 = peg$parsetoken(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebraced_group(); + if (s1 !== peg$FAILED) { + s1 = peg$f21(s1); + } + s0 = s1; + } + return s0; + } + function peg$parseargs() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsetoken(); + if (s1 !== peg$FAILED) { + s1 = peg$f22(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsearg(); + if (s3 === peg$FAILED) { + s3 = peg$parsewhitespace_token(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsearg(); + if (s3 === peg$FAILED) { + s3 = peg$parsewhitespace_token(); + } + } + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c17; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f23(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parsebraced_group() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 === peg$FAILED) { + s7 = peg$parsewhitespace_token(); + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 === peg$FAILED) { + s7 = peg$parsewhitespace_token(); + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + } + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c17; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f24(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace_token(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace_token(); + } + s1 = peg$f25(); + s0 = s1; + return s0; + } + function peg$parsewhitespace_token() { + var s0; + if (input.charCodeAt(peg$currPos) === 32) { + s0 = peg$c18; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + } + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s2 = peg$c21; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$r1.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s2 = peg$c21; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (peg$r1.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3; + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (peg$r2.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s3 !== peg$FAILED) { + s0 = s3; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + const DEFAULT_OPTIONS = { + optional: { openBrace: "[", closeBrace: "]" }, + mandatory: { openBrace: "{", closeBrace: "}" } + }; + function createNode(type, options2) { + const computedOptions = DEFAULT_OPTIONS[type] || {}; + return { type, ...computedOptions, ...options2 }; + } + function groupToStr(node) { + if (typeof node !== "object" || !node) { + return node; + } + if (node.type === "group") { + return `{${node.content.map(groupToStr).join("")}}`; + } + return node; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _PgfkeysPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(rowItems, trailingComment) { + return { + itemParts: [], + ...rowItems, + trailingComment, + trailingComma: true + }; + }; + var peg$f2 = function(rowItems, trailingComment) { + return { ...rowItems, trailingComment }; + }; + var peg$f3 = function(a, b) { + return processItem(a, b); + }; + var peg$f4 = function(b) { + return processItem(null, b); + }; + var peg$f5 = function(cell) { + return { cell }; + }; + var peg$f6 = function() { + return {}; + }; + var peg$f7 = function(part) { + return part; + }; + var peg$f8 = function(x) { + return x; + }; + var peg$f9 = function(space, x) { + return { + trailingComment: x, + leadingParbreak: space.parbreak > 0 + }; + }; + var peg$f10 = function(list) { + return { + whitespace: list.filter((x) => options.isWhitespace(x)).length, + parbreak: list.filter((x) => options.isParbreak(x)).length + }; + }; + var peg$f11 = function() { + return !options.allowParenGroups; + }; + var peg$f12 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options.isParbreak(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options.isComma(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options.isEquals(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options.isChar(tok, "("); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options.isChar(tok, ")"); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_with_end() { + var s0, s2, s4, s5, s6, s7, s8; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$parsewhitespace_or_parbreaks(); + s4 = peg$parseitem_sep(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsewhitespace(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsewhitespace(); + } + s6 = peg$parsetrailing_comment(); + if (s6 === peg$FAILED) { + s6 = null; + } + s7 = []; + s8 = peg$parsewhitespace(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsewhitespace(); + } + s0 = peg$f1(s2, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_without_end() { + var s0, s2, s3; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseitem_part(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_part(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_part(); + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_part(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_part(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(s1); + } + s0 = s1; + } + return s0; + } + function peg$parseseparated_part() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseparbreak(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseparbreak(); + } + s4 = peg$parseitem_part(); + if (s4 !== peg$FAILED) { + s0 = peg$f5(s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_part() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$currPos; + s3 = []; + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsewhitespace_or_parbreaks(); + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsenon_token(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_whitespace_non_parbreak_token() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewhitespace(); + if (s3 === peg$FAILED) { + s3 = peg$parseparbreak(); + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseparen_block(); + if (s3 === peg$FAILED) { + s3 = peg$parsetoken(); + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_token() { + var s0; + s0 = peg$parseitem_sep(); + if (s0 === peg$FAILED) { + s0 = peg$parseequals(); + if (s0 === peg$FAILED) { + s0 = peg$parsetrailing_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parseown_line_comment(); + } + } + } + return s0; + } + function peg$parsewhitespace_or_parbreaks() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + } + s1 = peg$f10(s1); + s0 = s1; + return s0; + } + function peg$parseparen_block() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + s0 = peg$currPos; + s1 = peg$f11(); + if (s1) { + s1 = peg$FAILED; + } else { + s1 = void 0; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$parseopen_paren(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseclose_paren(); + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processItem(leadCell, otherCells) { + const cells = [leadCell || []]; + for (const x of otherCells) { + cells.push(x.cell || []); + } + return { itemParts: cells }; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isChar: (node, char) => node.type === "string" && node.content === char, + isComma(node) { + return node.type === "string" && node.content === ","; + }, + isEquals(node) { + return node.type === "string" && node.content === "="; + }, + isParbreak(node) { + return node.type === "parbreak"; + }, + isWhitespace(node) { + return node.type === "whitespace"; + }, + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + allowParenGroups: true + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _MacroSubstitutionPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(tok) { + return options.isHash(tok); + }; + var peg$f3 = function(tok) { + return tok; + }; + var peg$f4 = function(tok) { + return options.isNumber(tok); + }; + var peg$f5 = function(tok) { + return tok; + }; + var peg$f6 = function() { + return { type: "string", content: "#" }; + }; + var peg$f7 = function(num) { + const split = options.splitNumber(num); + return [{ type: "hash_number", number: split.number }, split.rest]; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsehash() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f4(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_hash() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsehash(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehash_number() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isHash) { + try { + Object.assign(options, { + isHash: (node) => node.type === "string" && node.content === "#", + isNumber: (node) => node.type === "string" && 0 < +node.content.charAt(0), + splitNumber: (node) => { + const number = +node.content.charAt(0); + if (node.content.length > 1) { + return { + number, + rest: { + type: "string", + content: node.content.slice(1) + } + }; + } + return { number }; + } + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _LigaturesPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f3 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f4 = function(tok1, tok2) { + const split = options.split(tok2); + return options.isRecognized([tok1, split[0]]); + }; + var peg$f5 = function(tok1, tok2) { + const split = options.split(tok2); + return [options.isRecognized([tok1, split[0]]), split[1]]; + }; + var peg$f6 = function(tok1, tok2) { + return options.isRecognized([tok1, tok2]); + }; + var peg$f7 = function(tok1, tok2) { + return options.isRecognized([tok1, tok2]); + }; + var peg$f8 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f9 = function(toks) { + return options.isRecognized(toks); + }; + var peg$f10 = function(tok) { + return options.isRecognized([tok]); + }; + var peg$f11 = function(tok) { + return options.isRecognized([tok]); + }; + var peg$f12 = function(tok) { + return options.isMacro(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options.isSplitable(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsetriple_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_ligature() { + var s0; + s0 = peg$parsedouble_macro_ligature(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_macro_ligature_extracted(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_char_ligature(); + } + } + return s0; + } + function peg$parsedouble_macro_ligature_extracted() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + s3 = peg$parsesplitable(); + if (s3 !== peg$FAILED) { + s4 = peg$f4(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f5(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_macro_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$f6(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f7(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_char_ligature() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f8(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemono_ligature() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f10(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f11(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesplitable() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isMacro: (node) => node.type === "macro", + isWhitespace: (node) => node.type === "whitespace", + isRecognized: (nodes) => { + if (nodes.length == 2 && nodes[0].content === "^" && nodes[1].content === "o") { + return { type: "string", content: "ô" }; + } + return null; + }, + isSplitable: (node) => node.type === "string" && node.content.length > 1, + split: (node) => [ + { type: "string", content: node.content.charAt(0) }, + { type: "string", content: node.content.slice(1) } + ] + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _XColorPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { start: peg$parsestart }; + var peg$startRuleFunction = peg$parsestart; + var peg$c0 = ";"; + var peg$c1 = ","; + var peg$c2 = ":"; + var peg$c3 = "/"; + var peg$c4 = ">"; + var peg$c5 = "!"; + var peg$c6 = "."; + var peg$c7 = "!!["; + var peg$c8 = "]"; + var peg$c9 = "!!"; + var peg$c10 = "+"; + var peg$c11 = "-"; + var peg$r0 = /^[a-zA-Z0-9]/; + var peg$r1 = /^[0-9]/; + var peg$r2 = /^[ \t\n\r]/; + var peg$r3 = /^[0-9a-fA-F]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation(";", false); + var peg$e2 = peg$literalExpectation(",", false); + var peg$e3 = peg$otherExpectation("model list"); + var peg$e4 = peg$literalExpectation(":", false); + var peg$e5 = peg$literalExpectation("/", false); + var peg$e6 = peg$otherExpectation("model"); + var peg$e7 = peg$otherExpectation("color spec list"); + var peg$e8 = peg$otherExpectation("color spec"); + var peg$e9 = peg$otherExpectation("color"); + var peg$e10 = peg$otherExpectation("function expression"); + var peg$e11 = peg$literalExpectation(">", false); + var peg$e12 = peg$otherExpectation("function"); + var peg$e13 = peg$otherExpectation("extended expression"); + var peg$e14 = peg$otherExpectation("core model"); + var peg$e15 = peg$otherExpectation("expr"); + var peg$e16 = peg$literalExpectation("!", false); + var peg$e17 = peg$otherExpectation("mix expr"); + var peg$e18 = peg$otherExpectation("name"); + var peg$e19 = peg$literalExpectation(".", false); + var peg$e20 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e21 = peg$otherExpectation("postfix"); + var peg$e22 = peg$literalExpectation("!![", false); + var peg$e23 = peg$literalExpectation("]", false); + var peg$e24 = peg$literalExpectation("!!", false); + var peg$e25 = peg$otherExpectation("prefix"); + var peg$e26 = peg$otherExpectation("plus"); + var peg$e27 = peg$literalExpectation("+", false); + var peg$e28 = peg$otherExpectation("minus"); + var peg$e29 = peg$literalExpectation("-", false); + var peg$e30 = peg$otherExpectation("num"); + var peg$e31 = peg$classExpectation([["0", "9"]], false, false); + var peg$e32 = peg$otherExpectation("positive float"); + var peg$e33 = peg$otherExpectation("divisor"); + var peg$e34 = peg$otherExpectation("int"); + var peg$e36 = peg$classExpectation([" ", " ", "\n", "\r"], false, false); + var peg$e37 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false); + var peg$f0 = function(m) { + return m; + }; + var peg$f1 = function(m) { + return m; + }; + var peg$f2 = function(m) { + return m; + }; + var peg$f3 = function(m) { + return m; + }; + var peg$f4 = function(m) { + return m; + }; + var peg$f5 = function(a) { + return { type: "invalid_spec", content: a }; + }; + var peg$f6 = function(f, c) { + return c; + }; + var peg$f7 = function(f, r) { + return { type: "color_set", content: [f].concat(r) }; + }; + var peg$f8 = function(n, s) { + return { type: "color_set_item", name: n, spec_list: s }; + }; + var peg$f9 = function(c, m) { + return { type: "model_list", contents: m, core_model: c }; + }; + var peg$f10 = function(m) { + return { type: "model_list", contents: m, core_model: null }; + }; + var peg$f11 = function(m, a) { + return a; + }; + var peg$f12 = function(m, r) { + return [m].concat(r); + }; + var peg$f13 = function(s, a) { + return a; + }; + var peg$f14 = function(s, r) { + return { type: "spec_list", content: [s].concat(r) }; + }; + var peg$f15 = function(c) { + return { type: "hex_spec", content: [c] }; + }; + var peg$f16 = function(c, d) { + return d; + }; + var peg$f17 = function(c, d) { + return d; + }; + var peg$f18 = function(c, r) { + return { type: "num_spec", content: r ? [c].concat(r) : [c] }; + }; + var peg$f19 = function(c, fs) { + return { type: "color", color: c, functions: fs }; + }; + var peg$f20 = function(f, n) { + return n; + }; + var peg$f21 = function(f, args) { + return { type: "function", name: f, args }; + }; + var peg$f22 = function(core, d, e, es) { + return { + type: "extended_expr", + core_model: core, + div: d, + expressions: [e].concat(es) + }; + }; + var peg$f23 = function(core, e, es) { + return { + type: "extended_expr", + core_model: core, + div: null, + expressions: [e].concat(es) + }; + }; + var peg$f24 = function(e, d) { + return { type: "weighted_expr", color: e, weight: d }; + }; + var peg$f25 = function(e) { + return e; + }; + var peg$f26 = function(p, n, e, po) { + return { + type: "expr", + prefix: p, + name: n, + mix_expr: e, + postfix: po + }; + }; + var peg$f27 = function(p, n) { + return { type: "complete_mix", mix_percent: p, name: n }; + }; + var peg$f28 = function(p) { + return { type: "partial_mix", mix_percent: p }; + }; + var peg$f29 = function(c, p) { + return c.concat(p || []); + }; + var peg$f30 = function(n) { + return { type: "postfix", num: n }; + }; + var peg$f31 = function(p) { + return { type: "postfix", plusses: p }; + }; + var peg$f32 = function(n) { + return parseInt(n, 10); + }; + var peg$f33 = function(n) { + return parseFloat(n); + }; + var peg$f34 = function(n) { + return n; + }; + var peg$f35 = function(n) { + return -n; + }; + var peg$f36 = function(m, n) { + return m ? -n : n; + }; + var peg$f37 = function(h) { + return h.toUpperCase(); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsestart() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsespec_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f2(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor_set_spec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + s1 = input.substring(s1, peg$currPos); + s1 = peg$f5(s1); + s0 = s1; + } + } + } + } + } + return s0; + } + function peg$parsecolor_set_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsecolor_set_item(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolor_set_item() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsename(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsespec_list(); + if (s3 !== peg$FAILED) { + s0 = peg$f8(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel_list() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemodel_list_tail(); + if (s3 !== peg$FAILED) { + s0 = peg$f9(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list_tail(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parsemodel_list_tail() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsemodel(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f12(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel() { + var s0; + peg$silentFails++; + s0 = peg$parsecore_model(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsespec_list() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f14(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsespec() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsehex(); + if (s3 !== peg$FAILED) { + s4 = peg$parsehex(); + if (s4 !== peg$FAILED) { + s5 = peg$parsehex(); + if (s5 !== peg$FAILED) { + s6 = peg$parsehex(); + if (s6 !== peg$FAILED) { + s7 = peg$parsehex(); + if (s7 !== peg$FAILED) { + s8 = peg$parsehex(); + if (s8 !== peg$FAILED) { + s3 = [s3, s4, s5, s6, s7, s8]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f15(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsedec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + } + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f18(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsecolor() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecolor_expr(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsefunc_expr(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsefunc_expr(); + } + s0 = peg$f19(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsecolor_expr() { + var s0; + s0 = peg$parseext_expr(); + if (s0 === peg$FAILED) { + s0 = peg$parseexpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsename(); + } + } + return s0; + } + function peg$parsefunc_expr() { + var s0, s1, s2, s3, s4, s5, s6; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 62) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsefunction(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s0 = peg$f21(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parsefunction() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseext_expr() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsediv(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c2; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseweighted_expr(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseadditional_weighted_expr(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f22(s1, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseweighted_expr(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseadditional_weighted_expr(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f23(s1, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseweighted_expr() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseexpr(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsedec(); + if (s3 !== peg$FAILED) { + s0 = peg$f24(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseadditional_weighted_expr() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s1 = peg$c0; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseweighted_expr(); + if (s2 !== peg$FAILED) { + s0 = peg$f25(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecore_model() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseexpr() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseprefix(); + s2 = peg$parsename(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemix_expr(); + s4 = peg$parsepostfix(); + if (s4 === peg$FAILED) { + s4 = null; + } + s0 = peg$f26(s1, s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsecomplete_mix() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsename(); + if (s4 !== peg$FAILED) { + s0 = peg$f27(s2, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_mix() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemix_expr() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomplete_mix(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomplete_mix(); + } + s2 = peg$parsepartial_mix(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f29(s1, s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + return s0; + } + function peg$parsename() { + var s0, s1, s2; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 46) { + s0 = peg$c6; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parsepostfix() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c7) { + s1 = peg$c7; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c8; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c9) { + s1 = peg$c9; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$parseplus(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseplus(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + return s0; + } + function peg$parseprefix() { + var s0; + peg$silentFails++; + s0 = peg$parseminus(); + if (s0 === peg$FAILED) { + s0 = null; + } + peg$silentFails--; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + return s0; + } + function peg$parsenum() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f32(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + return s0; + } + function peg$parsepct() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + s4 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c6; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + s8 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + while (s9 !== peg$FAILED) { + s8.push(s9); + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + s7 = input.substring(s7, peg$currPos); + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 === peg$FAILED) { + s5 = null; + } + s4 = input.substring(s4, peg$currPos); + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c6; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f33(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsediv() { + var s0; + peg$silentFails++; + s0 = peg$parsepct(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsedec() { + var s0, s1, s2; + s0 = peg$parsepct(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f34(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f35(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parseint() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + s0 = peg$f36(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parsesp() { + var s0, s1; + s0 = []; + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + } + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehex() { + var s0, s1; + s0 = peg$currPos; + if (peg$r3.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f37(s1); + } + s0 = s1; + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _TabularPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$otherExpectation("decl_start"); + var peg$e1 = peg$otherExpectation("decl_end"); + var peg$e2 = peg$otherExpectation("vert"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("l"); + var peg$e5 = peg$otherExpectation("r"); + var peg$e6 = peg$otherExpectation("c"); + var peg$e7 = peg$otherExpectation("p"); + var peg$e8 = peg$otherExpectation("m"); + var peg$e9 = peg$otherExpectation("b"); + var peg$e10 = peg$otherExpectation("w"); + var peg$e11 = peg$otherExpectation("W"); + var peg$e12 = peg$otherExpectation("X"); + var peg$e13 = peg$otherExpectation("!"); + var peg$e14 = peg$otherExpectation("@"); + var peg$e15 = peg$otherExpectation("<"); + var peg$e16 = peg$otherExpectation(">"); + var peg$e17 = peg$otherExpectation("group"); + var peg$e18 = peg$otherExpectation("whitespace"); + var peg$f0 = function(c) { + return c; + }; + var peg$f1 = function(cols) { + return cols; + }; + var peg$f2 = function() { + return []; + }; + var peg$f3 = function(divs1, start, a, end, divs2) { + return { + type: "column", + pre_dividers: divs1, + post_dividers: divs2, + before_start_code: start, + before_end_code: end, + alignment: a + }; + }; + var peg$f4 = function() { + return { + type: "vert_divider" + }; + }; + var peg$f5 = function(b, g) { + return { + type: "bang_divider", + content: g[0].content + }; + }; + var peg$f6 = function(g) { + return { + type: "at_divider", + content: g[0].content + }; + }; + var peg$f7 = function(div) { + return div; + }; + var peg$f8 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f9 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f10 = function() { + return { type: "alignment", alignment: "left" }; + }; + var peg$f11 = function() { + return { type: "alignment", alignment: "center" }; + }; + var peg$f12 = function() { + return { type: "alignment", alignment: "right" }; + }; + var peg$f13 = function() { + return { type: "alignment", alignment: "X" }; + }; + var peg$f14 = function() { + return "top"; + }; + var peg$f15 = function() { + return "default"; + }; + var peg$f16 = function() { + return "bottom"; + }; + var peg$f17 = function(a, g) { + return { + type: "alignment", + alignment: "parbox", + baseline: a, + size: g[0].content + }; + }; + var peg$f18 = function(g1, g2) { + return { + type: "alignment", + alignment: "parbox", + baseline: g1[0].content, + size: g2[0].content + }; + }; + var peg$f19 = function(tok) { + return options.matchChar(tok, "|"); + }; + var peg$f20 = function(tok) { + return options.matchChar(tok, "l"); + }; + var peg$f21 = function(tok) { + return options.matchChar(tok, "r"); + }; + var peg$f22 = function(tok) { + return options.matchChar(tok, "c"); + }; + var peg$f23 = function(tok) { + return options.matchChar(tok, "p"); + }; + var peg$f24 = function(tok) { + return options.matchChar(tok, "m"); + }; + var peg$f25 = function(tok) { + return options.matchChar(tok, "b"); + }; + var peg$f26 = function(tok) { + return options.matchChar(tok, "w"); + }; + var peg$f27 = function(tok) { + return options.matchChar(tok, "W"); + }; + var peg$f28 = function(tok) { + return options.matchChar(tok, "X"); + }; + var peg$f29 = function(tok) { + return options.matchChar(tok, "!"); + }; + var peg$f30 = function(tok) { + return options.matchChar(tok, "@"); + }; + var peg$f31 = function(tok) { + return options.matchChar(tok, "<"); + }; + var peg$f32 = function(tok) { + return options.matchChar(tok, ">"); + }; + var peg$f33 = function(tok) { + return options.isGroup(tok); + }; + var peg$f34 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f2(); + } + s0 = s1; + } + return s0; + } + function peg$parsecolumn() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecolumn_divider(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecolumn_divider(); + } + s2 = peg$parsedecl_start(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = peg$parsealignment(); + if (s3 !== peg$FAILED) { + s4 = peg$parsedecl_end(); + if (s4 === peg$FAILED) { + s4 = null; + } + s5 = []; + s6 = peg$parsecolumn_divider(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsecolumn_divider(); + } + s0 = peg$f3(s1, s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolumn_divider() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$currPos; + s3 = peg$parsevert(); + if (s3 !== peg$FAILED) { + s3 = peg$f4(); + } + s2 = s3; + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parsebang(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f5(s3, s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parseat(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f6(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedecl_start() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsegreater(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + return s0; + } + function peg$parsedecl_end() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseless(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parsealignment() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsel(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsec(); + if (s1 !== peg$FAILED) { + s1 = peg$f11(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parser(); + if (s1 !== peg$FAILED) { + s1 = peg$f12(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseX(); + if (s1 !== peg$FAILED) { + s1 = peg$f13(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsep(); + if (s2 !== peg$FAILED) { + s2 = peg$f14(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parsem(); + if (s2 !== peg$FAILED) { + s2 = peg$f15(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseb(); + if (s2 !== peg$FAILED) { + s2 = peg$f16(); + } + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s0 = peg$f17(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsew(); + if (s1 === peg$FAILED) { + s1 = peg$parseW(); + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f18(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + return s0; + } + function peg$parsevert() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parsel() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parser() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsec() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f23(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsem() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseb() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f25(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsew() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseW() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f27(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parseX() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parsebang() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f29(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseless() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f31(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsegreater() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f33(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isHash) { + try { + Object.assign(options, { + matchChar: (node, char) => node.type === "string" && node.content === char, + isGroup: (node) => node.type === "group", + isWhitespace: (node) => node.type === "whitespace" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _SystemePegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e1 = peg$otherExpectation("item"); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("equation"); + var peg$e4 = peg$otherExpectation("trailing comment"); + var peg$e5 = peg$otherExpectation("comment only line"); + var peg$e6 = peg$otherExpectation("non-var token"); + var peg$e7 = peg$otherExpectation("token"); + var peg$e8 = peg$otherExpectation("same line comment"); + var peg$e9 = peg$otherExpectation("own line comment"); + var peg$e10 = peg$otherExpectation(","); + var peg$e11 = peg$otherExpectation("@"); + var peg$e12 = peg$otherExpectation("variable token"); + var peg$e13 = peg$otherExpectation("+/-"); + var peg$e14 = peg$otherExpectation("="); + var peg$f0 = function(a, b) { + return a.concat(b ? b : []); + }; + var peg$f1 = function() { + return []; + }; + var peg$f3 = function(op, a, b, c) { + return { type: "item", op, variable: b, content: a.concat(b, c) }; + }; + var peg$f4 = function(op, a) { + return { type: "item", op, variable: null, content: a }; + }; + var peg$f5 = function(line, sep, comment) { + return { ...line, sep: [].concat(sep), trailingComment: comment }; + }; + var peg$f6 = function(line, comment) { + return { ...line, trailingComment: comment }; + }; + var peg$f7 = function(eq, ann) { + return { + type: "line", + equation: eq, + annotation: ann, + sep: null + }; + }; + var peg$f8 = function(at, ann) { + return at ? { type: "annotation", marker: at, content: ann } : null; + }; + var peg$f9 = function(left, eq, right) { + return { type: "equation", left, right, equals: eq }; + }; + var peg$f10 = function(x) { + return x; + }; + var peg$f11 = function(x) { + return { + type: "line", + trailingComment: x + }; + }; + var peg$f12 = function(v, s) { + return [v].concat(s ? s : []); + }; + var peg$f13 = function(t) { + return t; + }; + var peg$f14 = function(x) { + return x; + }; + var peg$f15 = function(x) { + return x; + }; + var peg$f16 = function(tok) { + return options.isSameLineComment(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options.isOwnLineComment(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options.isSep(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options.isAt(tok); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options.isVar(tok); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options.isOperation(tok); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options.isEquals(tok); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options.isSubscript(tok); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + } + s2 = peg$parseline_without_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parseEOL(); + } + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parseitem() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsevar(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parse_(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parse_(); + } + s7 = []; + s8 = peg$parsetoken(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsetoken(); + } + s8 = []; + s9 = peg$parse_(); + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parse_(); + } + s0 = peg$f3(s1, s3, s5, s7); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s0 = peg$f4(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parseline_with_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f5(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_line_with_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_without_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s2 !== peg$FAILED) { + peg$currPos = s1; + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseequation(); + s3 = peg$parseannotation(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f7(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseannotation() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseat(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsenon_sep_token(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenon_sep_token(); + } + s0 = peg$f8(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseitem(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseitem(); + } + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + } + s0 = peg$f9(s1, s2, s3); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsevar() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsevar_token(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsesubscript(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenon_var_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsevar(); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsenon_sep_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parseat(); + if (s2 === peg$FAILED) { + s2 = peg$parseoperation(); + if (s2 === peg$FAILED) { + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsevar_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s4 = peg$f28(s2); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f29(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parsesubscript() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isSep: (node) => node.type === "string" && node.content === ",", + isVar: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isOperation: (node) => node.type === "string" && node.content.match(/[+-]/), + isEquals: (node) => node.type === "string" && node.content === "=", + isAt: (node) => node.type === "string" && node.content === "@", + isSubscript: (node) => node.content === "_", + isWhitespace: (node) => node.type === "whitespace", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _GluePegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { root: peg$parseroot }; + var peg$startRuleFunction = peg$parseroot; + var peg$c0 = "plus"; + var peg$c1 = "minus"; + var peg$c2 = "pt"; + var peg$c3 = "mm"; + var peg$c4 = "cm"; + var peg$c5 = "in"; + var peg$c6 = "ex"; + var peg$c7 = "em"; + var peg$c8 = "bp"; + var peg$c9 = "pc"; + var peg$c10 = "dd"; + var peg$c11 = "cc"; + var peg$c12 = "nd"; + var peg$c13 = "nc"; + var peg$c14 = "sp"; + var peg$c15 = "filll"; + var peg$c16 = "fill"; + var peg$c17 = "fil"; + var peg$c18 = "."; + var peg$c19 = "+"; + var peg$c20 = "-"; + var peg$r0 = /^[0-9]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation("plus", false); + var peg$e2 = peg$literalExpectation("minus", false); + var peg$e3 = peg$literalExpectation("pt", false); + var peg$e4 = peg$literalExpectation("mm", false); + var peg$e5 = peg$literalExpectation("cm", false); + var peg$e6 = peg$literalExpectation("in", false); + var peg$e7 = peg$literalExpectation("ex", false); + var peg$e8 = peg$literalExpectation("em", false); + var peg$e9 = peg$literalExpectation("bp", false); + var peg$e10 = peg$literalExpectation("pc", false); + var peg$e11 = peg$literalExpectation("dd", false); + var peg$e12 = peg$literalExpectation("cc", false); + var peg$e13 = peg$literalExpectation("nd", false); + var peg$e14 = peg$literalExpectation("nc", false); + var peg$e15 = peg$literalExpectation("sp", false); + var peg$e16 = peg$literalExpectation("filll", false); + var peg$e17 = peg$literalExpectation("fill", false); + var peg$e18 = peg$literalExpectation("fil", false); + var peg$e19 = peg$otherExpectation("number"); + var peg$e20 = peg$classExpectation([["0", "9"]], false, false); + var peg$e21 = peg$literalExpectation(".", false); + var peg$e22 = peg$literalExpectation("+", false); + var peg$e23 = peg$literalExpectation("-", false); + var peg$f0 = function(b, st, sh) { + return { + type: "glue", + fixed: b, + stretchable: st, + shrinkable: sh, + position: location() + }; + }; + var peg$f1 = function(glue) { + return glue; + }; + var peg$f2 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f3 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f4 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f5 = function(n) { + return parseFloat(n); + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseroot() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsebase(); + if (s2 !== peg$FAILED) { + s3 = peg$parsestretchable(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseshrinkable(); + if (s4 === peg$FAILED) { + s4 = null; + } + peg$savedPos = s1; + s1 = peg$f0(s2, s3, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + peg$savedPos = s0; + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebase() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + s2 = peg$parseunit(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsestretchable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c0) { + s1 = peg$c0; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseshrinkable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 5) === peg$c1) { + s1 = peg$c1; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunit() { + var s0; + if (input.substr(peg$currPos, 2) === peg$c2) { + s0 = peg$c2; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c3) { + s0 = peg$c3; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c4) { + s0 = peg$c4; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c5) { + s0 = peg$c5; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c6) { + s0 = peg$c6; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c7) { + s0 = peg$c7; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c8) { + s0 = peg$c8; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c9) { + s0 = peg$c9; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c10) { + s0 = peg$c10; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c11) { + s0 = peg$c11; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c12) { + s0 = peg$c12; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c13) { + s0 = peg$c13; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c14) { + s0 = peg$c14; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return s0; + } + function peg$parserubber_unit() { + var s0; + s0 = peg$parseunit(); + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c15) { + s0 = peg$c15; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c16) { + s0 = peg$c16; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c17) { + s0 = peg$c17; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + } + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsesign(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$currPos; + s5 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c18; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s6 !== peg$FAILED) { + s7 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 === peg$FAILED) { + s4 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parsesign() { + var s0; + if (input.charCodeAt(peg$currPos) === 43) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const _TikzPegParser = ( + // Generated by Peggy 3.0.2. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s = this.location.start; + var offset_s = this.location.source && typeof this.location.source.offset === "function" ? this.location.source.offset(s) : s; + var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", offset_s.line.toString().length, " "); + var line = src[s.line - 1]; + var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = last - s.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s) { + return s.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + var peg$FAILED = {}; + var peg$source = options.grammarSource; + var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body }; + var peg$startRuleFunction = peg$parsepath_spec; + var peg$e0 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("comment"); + var peg$e4 = peg$otherExpectation("floating comment"); + var peg$e5 = peg$otherExpectation("operation"); + var peg$e6 = peg$otherExpectation("="); + var peg$f0 = function(v) { + return v; + }; + var peg$f1 = function(ops) { + return { type: "path_spec", content: ops }; + }; + var peg$f2 = function(c1, op, comment) { + return { op, comment }; + }; + var peg$f3 = function(c1, ops, c2, body) { + const comments = [c1, ...ops.map((x) => x.comment), c2].filter( + (x) => x + ); + const attribute = ops.map((x) => x.op.content.content).join(" "); + return { + type: "animation", + comments, + attribute, + content: body.content + }; + }; + var peg$f4 = function(start, b) { + return { ...b, start, type: "foreach" }; + }; + var peg$f5 = function(c1, variables, options2, c2, c3, list, c4, command) { + const comments = [c1, c2, c3, c4].filter((x) => x); + return { + type: "foreach_body", + variables, + options: options2 && options2.content, + list, + command, + comments + }; + }; + var peg$f6 = function(c1, options2, c2, body) { + const comments = [c1, c2].filter((x) => x); + return { + type: "svg_operation", + options: options2 && options2.content, + content: body, + comments + }; + }; + var peg$f7 = function(c1, c2, coord, c3, c4, x) { + return { coord: x, comment: c4 }; + }; + var peg$f8 = function(c1, c2, coord, c3, a, c5) { + const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x); + return { + type: "curve_to", + controls: a ? [coord, a.coord] : [coord], + comments + }; + }; + var peg$f9 = function() { + return { type: "line_to", command: "|-" }; + }; + var peg$f10 = function() { + return { type: "line_to", command: "-|" }; + }; + var peg$f11 = function() { + return { type: "line_to", command: "--" }; + }; + var peg$f12 = function(prefix, content) { + return { type: "coordinate", content, prefix }; + }; + var peg$f13 = function(content) { + return { type: "square_brace_group", content }; + }; + var peg$f14 = function(v) { + return { type: "unknown", content: v }; + }; + var peg$f19 = function(tok) { + return options.isComment(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$f21 = function(tok) { + return options.isWhitespace(tok); + }; + var peg$f22 = function(tok) { + return tok; + }; + var peg$f23 = function(c) { + return c; + }; + var peg$f24 = function(tok) { + return options.isOperation(tok); + }; + var peg$f25 = function(tok) { + return { type: "operation", content: tok }; + }; + var peg$f26 = function(tok) { + return options.isChar(tok, "="); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options.isChar(tok, "["); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options.isChar(tok, "]"); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options.isChar(tok, "("); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$f34 = function(tok) { + return options.isChar(tok, ")"); + }; + var peg$f35 = function(tok) { + return tok; + }; + var peg$f36 = function(tok) { + return options.isChar(tok, "+"); + }; + var peg$f37 = function(tok) { + return tok; + }; + var peg$f38 = function(tok) { + return options.isChar(tok, "-"); + }; + var peg$f39 = function(tok) { + return tok; + }; + var peg$f40 = function(tok) { + return options.isChar(tok, "|"); + }; + var peg$f41 = function(tok) { + return tok; + }; + var peg$f42 = function(tok) { + return options.isChar(tok, "."); + }; + var peg$f43 = function(tok) { + return tok; + }; + var peg$f44 = function(tok) { + return options.isChar(tok, "controls"); + }; + var peg$f45 = function(tok) { + return tok; + }; + var peg$f46 = function(tok) { + return options.isChar(tok, "and"); + }; + var peg$f47 = function(tok) { + return tok; + }; + var peg$f48 = function(tok) { + return options.isChar(tok, "svg"); + }; + var peg$f49 = function(tok) { + return tok; + }; + var peg$f50 = function(tok) { + return options.isGroup(tok); + }; + var peg$f51 = function(tok) { + return tok; + }; + var peg$f52 = function(tok) { + return options.isAnyMacro(tok); + }; + var peg$f53 = function(tok) { + return tok; + }; + var peg$f54 = function(tok) { + return options.isChar(tok, "foreach"); + }; + var peg$f55 = function(tok) { + return tok; + }; + var peg$f56 = function(tok) { + return options.isMacro(tok, "foreach"); + }; + var peg$f57 = function(tok) { + return tok; + }; + var peg$f58 = function(tok) { + return options.isChar(tok, "in"); + }; + var peg$f59 = function(tok) { + return tok; + }; + var peg$f60 = function(tok) { + return options.isChar(tok, ":"); + }; + var peg$f61 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos, offset2) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + var res = { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + return res; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsepath_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + return s0; + } + function peg$parseanimation() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parsecolon(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = []; + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseequals(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_comment_(); + s6 = peg$parsegroup(); + if (s6 !== peg$FAILED) { + s0 = peg$f3(s2, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseforeach_keyword(); + if (s1 === peg$FAILED) { + s1 = peg$parseforeach_macro(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parseforeach_body(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_body() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = peg$parse_comment_(); + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsein_keyword(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$parsegroup(); + if (s7 === peg$FAILED) { + s7 = peg$parsemacro(); + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_comment_(); + s9 = peg$parseforeach(); + if (s9 === peg$FAILED) { + s9 = peg$parsegroup(); + if (s9 === peg$FAILED) { + s9 = peg$parsemacro(); + } + } + if (s9 !== peg$FAILED) { + s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsesvg_keyword(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f6(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecurve_to() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + s0 = peg$currPos; + s1 = peg$parsedotdot(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsecontrols_keyword(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_comment_(); + s5 = peg$parsecoordinate(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$currPos; + s8 = peg$parseand_keyword(); + if (s8 !== peg$FAILED) { + s9 = peg$parse_comment_(); + s10 = peg$parsecoordinate(); + if (s10 !== peg$FAILED) { + s7 = peg$f7(s2, s4, s5, s6, s9, s10); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 === peg$FAILED) { + s7 = null; + } + s8 = peg$parse_comment_(); + s9 = peg$parsedotdot(); + if (s9 !== peg$FAILED) { + s0 = peg$f8(s2, s4, s5, s6, s7, s8); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_to() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsepipe(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parsepipe(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parsecoordinate() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parseplus(); + if (s3 !== peg$FAILED) { + s4 = peg$parseplus(); + if (s4 === peg$FAILED) { + s4 = null; + } + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$parseopen_paren(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s3 = input.substring(s3, peg$currPos); + s4 = peg$parseclose_paren(); + if (s4 !== peg$FAILED) { + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesquare_brace_group() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parseopen_square_brace(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parseclose_square_brace(); + if (s3 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedotdot() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsedot(); + if (s1 !== peg$FAILED) { + s2 = peg$parsedot(); + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunknown() { + var s0, s1; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f14(s1); + } + s0 = s1; + return s0; + } + function peg$parsecomment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f22(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parse_comment_() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsecomment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f23(s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parseopen_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f29(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f35(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f36(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f37(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f38(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f39(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepipe() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f41(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedot() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f43(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecontrols_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f44(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f45(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseand_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f46(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f47(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f48(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f49(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f50(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f51(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f52(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f53(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f54(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f55(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_macro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f56(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f57(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsein_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f58(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f59(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolon() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f60(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f61(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options.isWhitespace) { + try { + Object.assign(options, { + isChar: (node, char) => node.type === "string" && node.content === char, + isOperation: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => node.type === "whitespace" || node.type === "parbreak", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + isGroup: (node) => node.type === "group", + isMacro: (node, name) => node.type === "macro" && node.content === name, + isAnyMacro: (node) => node.type === "macro" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +const LatexPegParser = _LatexPegParser; +const AlignEnvironmentPegParser = _AlignEnvironmentPegParser; +const ArgSpecPegParser = _ArgSpecPegParser; +const PgfkeysPegParser = _PgfkeysPegParser; +const MacroSubstitutionPegParser = _MacroSubstitutionPegParser; +const LigaturesPegParser = _LigaturesPegParser; +const XColorPegParser = _XColorPegParser; +const TabularPegParser = _TabularPegParser; +const SystemePegParser = _SystemePegParser; +const GluePegParser = _GluePegParser; +const TikzPegParser = _TikzPegParser; +export { + AlignEnvironmentPegParser, + ArgSpecPegParser, + GluePegParser, + LatexPegParser, + LigaturesPegParser, + MacroSubstitutionPegParser, + PgfkeysPegParser, + SystemePegParser, + TabularPegParser, + TikzPegParser, + XColorPegParser, + decorateArrayForPegjs, + splitStringsIntoSingleChars +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-pegjs/index.js.map b/node_modules/@unified-latex/unified-latex-util-pegjs/index.js.map new file mode 100644 index 0000000..451a69f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pegjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/decorate-array-for-pegjs.ts","../libs/split-strings.ts","../grammars/latex.pegjs","../grammars/align-environment.pegjs","../grammars/xparse-argspec.pegjs","../grammars/pgfkeys.pegjs","../grammars/macro-substitutions.pegjs","../grammars/ligatures.pegjs","../grammars/xcolor-expressions.pegjs","../grammars/tabular-spec.pegjs","../grammars/systeme-environment.pegjs","../grammars/tex-glue.pegjs","../grammars/tikz.pegjs","../libs/pegjs-parsers.ts"],"sourcesContent":["type StringlikeArray = any[] & string;\n\n/**\n * Pegjs operates on strings. However, strings and arrays are very similar!\n * This function adds `charAt`, `charCodeAt`, and `substring` methods to\n * `array` so that `array` can then be fed to a Pegjs generated parser.\n *\n * @param {[object]} array\n * @returns {[object]}\n */\nexport function decorateArrayForPegjs(array: any[]): StringlikeArray {\n (array as any).charAt = function (i: number) {\n return this[i];\n };\n // We don't have a hope of imitating `charCodeAt`, so\n // make it something that won't interfere\n (array as any).charCodeAt = () => 0;\n (array as any).substring = function (i: number, j: number) {\n return this.slice(i, j);\n };\n // This function is called when reporting an error,\n // so we convert back to a string.\n (array as any).replace = function (a: string, b: string) {\n const ret = JSON.stringify(this);\n return ret.replace(a, b);\n };\n return array as StringlikeArray;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Splits all multi-character strings into strings that are all single characters.\n */\nexport function splitStringsIntoSingleChars(nodes: Ast.Node[]): Ast.Node[] {\n return nodes.flatMap((node) =>\n match.anyString(node)\n ? (Array.from(node.content).map((c) => ({\n type: \"string\",\n content: c,\n })) as Ast.Node[])\n : node\n );\n}\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath };\n var peg$startRuleFunction = peg$parsedocument;\n var peg$c0 = \"%\";\n var peg$c1 = \".\";\n var peg$c2 = \"verb*\";\n var peg$c3 = \"verb\";\n var peg$c4 = \"[\";\n var peg$c5 = \"]\";\n var peg$c6 = \"lstinline\";\n var peg$c7 = \"mintinline\";\n var peg$c8 = \"mint\";\n var peg$c9 = \"minted\";\n var peg$c10 = \"verbatim*\";\n var peg$c11 = \"verbatim\";\n var peg$c12 = \"filecontents*\";\n var peg$c13 = \"filecontents\";\n var peg$c14 = \"comment\";\n var peg$c15 = \"lstlisting\";\n var peg$c16 = \"(\";\n var peg$c17 = \")\";\n var peg$c18 = \"begin\";\n var peg$c19 = \"end\";\n var peg$c20 = \"equation*\";\n var peg$c21 = \"equation\";\n var peg$c22 = \"align*\";\n var peg$c23 = \"align\";\n var peg$c24 = \"alignat*\";\n var peg$c25 = \"alignat\";\n var peg$c26 = \"gather*\";\n var peg$c27 = \"gather\";\n var peg$c28 = \"multline*\";\n var peg$c29 = \"multline\";\n var peg$c30 = \"flalign*\";\n var peg$c31 = \"flalign\";\n var peg$c32 = \"split\";\n var peg$c33 = \"math\";\n var peg$c34 = \"displaymath\";\n var peg$c35 = \"\\\\\";\n var peg$c36 = \"{\";\n var peg$c37 = \"}\";\n var peg$c38 = \"$\";\n var peg$c39 = \"&\";\n var peg$c40 = \"\\r\";\n var peg$c41 = \"\\n\";\n var peg$c42 = \"\\r\\n\";\n var peg$c43 = \"#\";\n var peg$c44 = \"^\";\n var peg$c45 = \"_\";\n var peg$c46 = \"\\0\";\n var peg$r0 = /^[^ \\t\\n\\r]/;\n var peg$r1 = /^[ \\t]/;\n var peg$r2 = /^[a-zA-Z]/;\n var peg$r3 = /^[0-9]/;\n var peg$r4 = /^[.,;:\\-*\\/()!?=+<>[\\]`'\"~]/;\n var peg$e0 = peg$otherExpectation(\"document\");\n var peg$e1 = peg$otherExpectation(\"math\");\n var peg$e2 = peg$otherExpectation(\"token\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"parbreak\");\n var peg$e5 = peg$otherExpectation(\"math token\");\n var peg$e6 = peg$otherExpectation(\"nonchar token\");\n var peg$e7 = peg$literalExpectation(\"%\", false);\n var peg$e8 = peg$otherExpectation(\"whitespace\");\n var peg$e9 = peg$otherExpectation(\"number\");\n var peg$e10 = peg$literalExpectation(\".\", false);\n var peg$e11 = peg$otherExpectation(\"special macro\");\n var peg$e12 = peg$literalExpectation(\"verb*\", false);\n var peg$e13 = peg$literalExpectation(\"verb\", false);\n var peg$e14 = peg$literalExpectation(\"[\", false);\n var peg$e15 = peg$literalExpectation(\"]\", false);\n var peg$e16 = peg$classExpectation([\" \", \"\t\", \"\\n\", \"\\r\"], true, false);\n var peg$e17 = peg$otherExpectation(\"verbatim listings\");\n var peg$e18 = peg$literalExpectation(\"lstinline\", false);\n var peg$e19 = peg$otherExpectation(\"verbatim minted\");\n var peg$e20 = peg$literalExpectation(\"mintinline\", false);\n var peg$e21 = peg$literalExpectation(\"mint\", false);\n var peg$e22 = peg$otherExpectation(\"verbatim minted environment\");\n var peg$e23 = peg$literalExpectation(\"minted\", false);\n var peg$e24 = peg$otherExpectation(\"verbatim environment\");\n var peg$e25 = peg$literalExpectation(\"verbatim*\", false);\n var peg$e26 = peg$literalExpectation(\"verbatim\", false);\n var peg$e27 = peg$literalExpectation(\"filecontents*\", false);\n var peg$e28 = peg$literalExpectation(\"filecontents\", false);\n var peg$e29 = peg$literalExpectation(\"comment\", false);\n var peg$e30 = peg$literalExpectation(\"lstlisting\", false);\n var peg$e31 = peg$otherExpectation(\"macro\");\n var peg$e32 = peg$otherExpectation(\"group\");\n var peg$e33 = peg$otherExpectation(\"environment\");\n var peg$e34 = peg$otherExpectation(\"math environment\");\n var peg$e35 = peg$otherExpectation(\"math group\");\n var peg$e36 = peg$literalExpectation(\"(\", false);\n var peg$e37 = peg$literalExpectation(\")\", false);\n var peg$e38 = peg$literalExpectation(\"begin\", false);\n var peg$e39 = peg$literalExpectation(\"end\", false);\n var peg$e40 = peg$literalExpectation(\"equation*\", false);\n var peg$e41 = peg$literalExpectation(\"equation\", false);\n var peg$e42 = peg$literalExpectation(\"align*\", false);\n var peg$e43 = peg$literalExpectation(\"align\", false);\n var peg$e44 = peg$literalExpectation(\"alignat*\", false);\n var peg$e45 = peg$literalExpectation(\"alignat\", false);\n var peg$e46 = peg$literalExpectation(\"gather*\", false);\n var peg$e47 = peg$literalExpectation(\"gather\", false);\n var peg$e48 = peg$literalExpectation(\"multline*\", false);\n var peg$e49 = peg$literalExpectation(\"multline\", false);\n var peg$e50 = peg$literalExpectation(\"flalign*\", false);\n var peg$e51 = peg$literalExpectation(\"flalign\", false);\n var peg$e52 = peg$literalExpectation(\"split\", false);\n var peg$e53 = peg$literalExpectation(\"math\", false);\n var peg$e54 = peg$literalExpectation(\"displaymath\", false);\n var peg$e55 = peg$otherExpectation(\"escape\");\n var peg$e56 = peg$literalExpectation(\"\\\\\", false);\n var peg$e57 = peg$literalExpectation(\"{\", false);\n var peg$e58 = peg$literalExpectation(\"}\", false);\n var peg$e59 = peg$literalExpectation(\"$\", false);\n var peg$e60 = peg$literalExpectation(\"&\", false);\n var peg$e61 = peg$otherExpectation(\"newline\");\n var peg$e62 = peg$literalExpectation(\"\\r\", false);\n var peg$e63 = peg$literalExpectation(\"\\n\", false);\n var peg$e64 = peg$literalExpectation(\"\\r\\n\", false);\n var peg$e65 = peg$literalExpectation(\"#\", false);\n var peg$e66 = peg$literalExpectation(\"^\", false);\n var peg$e67 = peg$literalExpectation(\"_\", false);\n var peg$e68 = peg$literalExpectation(\"\\0\", false);\n var peg$e69 = peg$classExpectation([\" \", \"\t\"], false, false);\n var peg$e70 = peg$otherExpectation(\"letter\");\n var peg$e71 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$e72 = peg$otherExpectation(\"digit\");\n var peg$e73 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e74 = peg$otherExpectation(\"punctuation\");\n var peg$e75 = peg$classExpectation([\".\", \",\", \";\", \":\", \"-\", \"*\", \"/\", \"(\", \")\", \"!\", \"?\", \"=\", \"+\", \"<\", \">\", \"[\", \"]\", \"`\", \"'\", '\"', \"~\"], false, false);\n var peg$e76 = peg$otherExpectation(\"full comment\");\n var peg$e77 = peg$otherExpectation(\"comment\");\n var peg$f0 = function(content) {\n return createNode(\"root\", { content: content.flatMap((x) => x) });\n };\n var peg$f1 = function(t) {\n return t;\n };\n var peg$f2 = function(eq) {\n return createNode(\"inlinemath\", { content: eq.flatMap((x) => x) });\n };\n var peg$f3 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f4 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f5 = function() {\n return createNode(\"parbreak\");\n };\n var peg$f6 = function(x) {\n return x;\n };\n var peg$f7 = function(x) {\n return x;\n };\n var peg$f8 = function() {\n return createNode(\"macro\", { content: \"^\", escapeToken: \"\" });\n };\n var peg$f9 = function() {\n return createNode(\"macro\", { content: \"_\", escapeToken: \"\" });\n };\n var peg$f10 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f11 = function() {\n return createNode(\"whitespace\");\n };\n var peg$f12 = function(a, b) {\n return a.join(\"\") + \".\" + b.join(\"\");\n };\n var peg$f13 = function(b) {\n return \".\" + b.join(\"\");\n };\n var peg$f14 = function(a) {\n return a.join(\"\") + \".\";\n };\n var peg$f15 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f16 = function(env, e, end) {\n return end == e;\n };\n var peg$f17 = function(env, e, x) {\n return x;\n };\n var peg$f18 = function(env, e, x, end) {\n return end == e;\n };\n var peg$f19 = function(env, e, x) {\n return createNode(\"verb\", {\n env,\n escape: e,\n content: x.join(\"\")\n });\n };\n var peg$f20 = function(x) {\n return x;\n };\n var peg$f21 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f22 = function(x) {\n return x;\n };\n var peg$f23 = function(x) {\n return createNode(\"inlinemath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f24 = function(x) {\n return x;\n };\n var peg$f25 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f26 = function(end) {\n return end.type === \"string\" && end.content === \"]\";\n };\n var peg$f27 = function(x) {\n return x;\n };\n var peg$f28 = function(o) {\n return [\n createNode(\"string\", { content: \"[\" }),\n ...o,\n createNode(\"string\", { content: \"]\" })\n ];\n };\n var peg$f29 = function(x) {\n return x;\n };\n var peg$f30 = function(v) {\n return createNode(\"group\", {\n content: createNode(\"string\", { content: v.join(\"\") })\n });\n };\n var peg$f31 = function(d, end) {\n return end == d;\n };\n var peg$f32 = function(d, x) {\n return x;\n };\n var peg$f33 = function(d, v, end) {\n return end == d;\n };\n var peg$f34 = function(d, v) {\n return [\n createNode(\"string\", { content: d }),\n createNode(\"string\", { content: v.join(\"\") }),\n createNode(\"string\", { content: d })\n ];\n };\n var peg$f35 = function(macro, option, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...option || [],\n ...[].concat(verbatim)\n ];\n };\n var peg$f36 = function(macro, option, language, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...option || [],\n language,\n ...[].concat(verbatim)\n ];\n };\n var peg$f37 = function(env, option, language, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f38 = function(env, option, language, body) {\n const content = [\n ...option || [],\n language,\n { type: \"string\", content: body }\n ];\n return createNode(\"environment\", {\n env,\n content\n });\n };\n var peg$f39 = function(env, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f40 = function(env, x) {\n return x;\n };\n var peg$f41 = function(env, body) {\n return createNode(\"verbatim\", {\n env,\n content: body\n });\n };\n var peg$f42 = function(n) {\n return n.join(\"\");\n };\n var peg$f43 = function(n) {\n return n;\n };\n var peg$f44 = function(m) {\n return createNode(\"macro\", { content: m });\n };\n var peg$f45 = function(c) {\n return c;\n };\n var peg$f46 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f47 = function(g) {\n return text().slice(1, -1);\n };\n var peg$f48 = function(env, env_comment, end_env) {\n return compare_env(env, end_env);\n };\n var peg$f49 = function(env, env_comment, x) {\n return x;\n };\n var peg$f50 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"environment\", {\n env,\n content: env_comment ? [env_comment, ...body] : body\n });\n };\n var peg$f51 = function(env, env_comment, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f52 = function(env, env_comment, x) {\n return x;\n };\n var peg$f53 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"mathenv\", {\n env,\n content: env_comment ? [env_comment, ...body] : body\n });\n };\n var peg$f54 = function(c) {\n return c;\n };\n var peg$f55 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f56 = function(e) {\n return createNode(\"string\", { content: e });\n };\n var peg$f57 = function() {\n return createNode(\"string\", { content: \"\\\\\" });\n };\n var peg$f58 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f59 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f60 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f61 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f62 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f63 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f64 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f65 = function() {\n return \" \";\n };\n var peg$f66 = function(p) {\n return createNode(\"string\", { content: p });\n };\n var peg$f67 = function(leading_sp, comment) {\n return createNode(\"comment\", {\n ...comment,\n sameline: false,\n leadingWhitespace: leading_sp.length > 0\n });\n };\n var peg$f68 = function(spaces, x) {\n return createNode(\"comment\", {\n ...x,\n sameline: true,\n leadingWhitespace: spaces.length > 0\n });\n };\n var peg$f69 = function(c) {\n return c;\n };\n var peg$f70 = function(c) {\n return { content: c.join(\"\"), suffixParbreak: true };\n };\n var peg$f71 = function(c) {\n return c;\n };\n var peg$f72 = function(c) {\n return { content: c.join(\"\") };\n };\n var peg$f73 = function() {\n var loc = location();\n return loc.start.column === 1;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$resultsCache = {};\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsedocument() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 0;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n s0 = s1;\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath() {\n var s0, s1;\n var key = peg$currPos * 52 + 1;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = [];\n s1 = peg$parsemath_token();\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemath_token();\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 2;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsegroup();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_shift();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parseparbreak();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseparbreak() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 3;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_token() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 4;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsealignment_tab();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesuperscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f8();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesubscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenonchar_token() {\n var s0, s1;\n var key = peg$currPos * 52 + 5;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parseescape();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenl();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesp();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseEOF();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 6;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsenl();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsecomment_start();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsenl();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = [];\n s2 = peg$parsesp();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n } else {\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 7;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsenum();\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsenum();\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f12(s2, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenum();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenum();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f13(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f14(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsespecial_macro() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n var key = peg$currPos * 52 + 8;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c2) {\n s2 = peg$c2;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c3) {\n s2 = peg$c3;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = void 0;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = void 0;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f18(s2, s3, s4, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_listings();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_minted();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_minted_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_display_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_display_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_inline_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_inline_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemath_shift();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s4 = peg$parsemath_shift();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_shift();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseenvironment();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesquare_bracket_argument() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 9;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_group() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 10;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_delimited_by_char() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 11;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$f33(s1, s2, s4);\n if (s5) {\n s5 = void 0;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_listings() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 12;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c6) {\n s2 = peg$c6;\n peg$currPos += 9;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseverbatim_group();\n if (s4 === peg$FAILED) {\n s4 = peg$parseverbatim_delimited_by_char();\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_minted() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 13;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c7) {\n s2 = peg$c7;\n peg$currPos += 10;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s2 = peg$c8;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseverbatim_group();\n if (s5 === peg$FAILED) {\n s5 = peg$parseverbatim_delimited_by_char();\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_minted_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n var key = peg$currPos * 52 + 14;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c9) {\n s3 = peg$c9;\n peg$currPos += 6;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesquare_bracket_argument();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = peg$parsegroup();\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$currPos;\n s10 = peg$currPos;\n peg$silentFails++;\n s11 = peg$currPos;\n s12 = peg$parseend_env();\n if (s12 !== peg$FAILED) {\n s13 = peg$parsegroup();\n if (s13 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s14 = peg$f37(s3, s5, s6, s13);\n if (s14) {\n s14 = void 0;\n } else {\n s14 = peg$FAILED;\n }\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n peg$silentFails--;\n if (s11 === peg$FAILED) {\n s10 = void 0;\n } else {\n peg$currPos = s10;\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s11 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s11 !== peg$FAILED) {\n s10 = [s10, s11];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$currPos;\n s10 = peg$currPos;\n peg$silentFails++;\n s11 = peg$currPos;\n s12 = peg$parseend_env();\n if (s12 !== peg$FAILED) {\n s13 = peg$parsegroup();\n if (s13 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s14 = peg$f37(s3, s5, s6, s13);\n if (s14) {\n s14 = void 0;\n } else {\n s14 = peg$FAILED;\n }\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n peg$silentFails--;\n if (s11 === peg$FAILED) {\n s10 = void 0;\n } else {\n peg$currPos = s10;\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s11 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s11 !== peg$FAILED) {\n s10 = [s10, s11];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n }\n s7 = input.substring(s7, peg$currPos);\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsebegin_group();\n if (s9 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c9) {\n s10 = peg$c9;\n peg$currPos += 6;\n } else {\n s10 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s10 !== peg$FAILED) {\n s11 = peg$parseend_group();\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f38(s3, s5, s6, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n var key = peg$currPos * 52 + 15;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseverbatim_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f39(s3, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f40(s3, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f39(s3, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f40(s3, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s5 = input.substring(s5, peg$currPos);\n s6 = peg$parseend_env();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsebegin_group();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseverbatim_env_name();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseend_group();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f41(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseverbatim_env_name() {\n var s0;\n var key = peg$currPos * 52 + 16;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n if (input.substr(peg$currPos, 9) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e26);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 13;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 12;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e28);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e30);\n }\n }\n }\n }\n }\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 17;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsechar();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsechar();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f42(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f43(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f44(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 18;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f45(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f45(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f46(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e32);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsegroup_contents_as_string() {\n var s0, s1;\n var key = peg$currPos * 52 + 19;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parsegroup();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f47(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseenvironment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n var key = peg$currPos * 52 + 20;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup_contents_as_string();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesameline_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f48(s2, s3, s9);\n if (s10) {\n s10 = void 0;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f49(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f48(s2, s3, s9);\n if (s10) {\n s10 = void 0;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f49(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$parseend_env();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsegroup_contents_as_string();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f50(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e33);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n var key = peg$currPos * 52 + 21;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesameline_comment();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f51(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f52(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f51(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f52(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s7 = peg$parseend_env();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsebegin_group();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_env_name();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseend_group();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f53(s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e34);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_group() {\n var s0, s1, s2, s3, s4, s5;\n var key = peg$currPos * 52 + 22;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f54(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f54(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f55(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e35);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_display_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 23;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 91) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_display_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 24;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s2 = peg$c5;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_inline_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 25;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_inline_math() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 26;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e37);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_env() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 27;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c18) {\n s2 = peg$c18;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e38);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_env() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 28;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c19) {\n s2 = peg$c19;\n peg$currPos += 3;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e39);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_env_name() {\n var s0, s1;\n var key = peg$currPos * 52 + 29;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c20) {\n s1 = peg$c20;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e40);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e41);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e42);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c23) {\n s1 = peg$c23;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e43);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c24) {\n s1 = peg$c24;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e44);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c25) {\n s1 = peg$c25;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e45);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c26) {\n s1 = peg$c26;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e46);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e47);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e48);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c29) {\n s1 = peg$c29;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e49);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c30) {\n s1 = peg$c30;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e50);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c31) {\n s1 = peg$c31;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e51);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c32) {\n s1 = peg$c32;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e52);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c33) {\n s1 = peg$c33;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e53);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c34) {\n s1 = peg$c34;\n peg$currPos += 11;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e54);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f56(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseescape() {\n var s0, s1;\n var key = peg$currPos * 52 + 30;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e56);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f57();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e55);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsebegin_group() {\n var s0, s1;\n var key = peg$currPos * 52 + 31;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e57);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f58(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseend_group() {\n var s0, s1;\n var key = peg$currPos * 52 + 32;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s1 = peg$c37;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e58);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f59(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemath_shift() {\n var s0, s1;\n var key = peg$currPos * 52 + 33;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 36) {\n s1 = peg$c38;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e59);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f60(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsealignment_tab() {\n var s0, s1;\n var key = peg$currPos * 52 + 34;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 38) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e60);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f61(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenl() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 35;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 13) {\n s2 = peg$c40;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e62);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s2 = peg$c41;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e63);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c40;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e62);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c42) {\n s0 = peg$c42;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e64);\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e61);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsemacro_parameter() {\n var s0, s1;\n var key = peg$currPos * 52 + 36;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c43;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e65);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f62(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesuperscript() {\n var s0, s1;\n var key = peg$currPos * 52 + 37;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 94) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e66);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f63(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesubscript() {\n var s0, s1;\n var key = peg$currPos * 52 + 38;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 95) {\n s1 = peg$c45;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e67);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f64(s1);\n }\n s0 = s1;\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseignore() {\n var s0;\n var key = peg$currPos * 52 + 39;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n if (input.charCodeAt(peg$currPos) === 0) {\n s0 = peg$c46;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e68);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesp() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 40;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e69);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e69);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f65();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsechar() {\n var s0, s1;\n var key = peg$currPos * 52 + 41;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e71);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e70);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsenum() {\n var s0, s1;\n var key = peg$currPos * 52 + 42;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e73);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e72);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsepunctuation() {\n var s0, s1;\n var key = peg$currPos * 52 + 43;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e75);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f66(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e74);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsecomment_start() {\n var s0;\n var key = peg$currPos * 52 + 44;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsefull_comment() {\n var s0, s1;\n var key = peg$currPos * 52 + 45;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$parseownline_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesameline_comment();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e76);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseownline_comment() {\n var s0, s1, s2, s3;\n var key = peg$currPos * 52 + 46;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseleading_sp();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f67(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsesameline_comment() {\n var s0, s1, s2;\n var key = peg$currPos * 52 + 47;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsesp();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n s2 = peg$parsecomment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f68(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsecomment() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n var key = peg$currPos * 52 + 48;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f69(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f69(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseparbreak();\n peg$silentFails--;\n if (s4 !== peg$FAILED) {\n peg$currPos = s3;\n s3 = void 0;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f70(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f71(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f71(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n s4 = peg$parsenl();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 === peg$FAILED) {\n s3 = peg$parseEOF();\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f72(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e77);\n }\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseleading_sp() {\n var s0, s1, s2, s3, s4;\n var key = peg$currPos * 52 + 49;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsestart_of_line();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parsestart_of_line() {\n var s0;\n var key = peg$currPos * 52 + 50;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n peg$savedPos = peg$currPos;\n s0 = peg$f73();\n if (s0) {\n s0 = void 0;\n } else {\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function peg$parseEOF() {\n var s0, s1;\n var key = peg$currPos * 52 + 51;\n var cached = peg$resultsCache[key];\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$resultsCache[key] = { nextPos: peg$currPos, result: s0 };\n return s0;\n }\n function toString(e) {\n if (typeof e === \"string\") {\n return e;\n }\n if (typeof e.content === \"string\") {\n return e.content;\n }\n if (e && e.type === \"whitespace\") {\n return \" \";\n }\n return e;\n }\n function compare_env(g1, g2) {\n const g1Name = typeof g1 === \"string\" ? g1 : g1.content.map(toString).join(\"\");\n const g2Name = typeof g2 === \"string\" ? g2 : g2.content.map(toString).join(\"\");\n return g1Name === g2Name;\n }\n function createNode(type, extra = {}) {\n return { type, ...extra, position: location() };\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function() {\n return [];\n };\n var peg$f1 = function(x) {\n return { cells: [], colSeps: [], ...x };\n };\n var peg$f2 = function(rowItems, rowSep, trailingComment) {\n return { ...rowItems, rowSep, trailingComment };\n };\n var peg$f3 = function(rowItems, trailingComment) {\n return { ...rowItems, rowSep: null, trailingComment };\n };\n var peg$f4 = function(x) {\n return x;\n };\n var peg$f5 = function(x) {\n return {\n cells: [],\n colSeps: [],\n rowSep: null,\n trailingComment: x\n };\n };\n var peg$f6 = function(x) {\n return x;\n };\n var peg$f7 = function(colSep, cell) {\n return { colSep, cell };\n };\n var peg$f8 = function(colSep) {\n return { colSep };\n };\n var peg$f9 = function(a, b) {\n return processRow(a, b);\n };\n var peg$f10 = function(b) {\n return processRow(null, b);\n };\n var peg$f11 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f12 = function(tok) {\n return tok;\n };\n var peg$f13 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f14 = function(tok) {\n return tok;\n };\n var peg$f15 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f16 = function(tok) {\n return tok;\n };\n var peg$f17 = function(tok) {\n return options.isRowSep(tok);\n };\n var peg$f18 = function(tok) {\n return tok;\n };\n var peg$f19 = function(tok) {\n return options.isColSep(tok);\n };\n var peg$f20 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parserow_with_end() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s1;\n s2 = peg$f1(s2);\n s1 = s2;\n s2 = peg$parserow_sep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_without_end() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parserow_items();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parserow_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsecol_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecell() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parseseparated_cell() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsecell();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsecell();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_cell();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_cell();\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_cell();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_cell();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f11(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f13(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecol_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function processRow(leadCell, otherCells) {\n const cells = [leadCell || []];\n const seps = [];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n seps.push(x.colSep);\n }\n return { cells, colSeps: seps };\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(\n options,\n createMatchers([\"\\\\\", \"hline\", \"cr\"], [\"&\"])\n );\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list };\n var peg$startRuleFunction = peg$parseargs_spec_list;\n var peg$c0 = \"+\";\n var peg$c1 = \"v\";\n var peg$c2 = \"b\";\n var peg$c3 = \"!\";\n var peg$c4 = \"D\";\n var peg$c5 = \"d\";\n var peg$c6 = \"s\";\n var peg$c7 = \"O\";\n var peg$c8 = \"o\";\n var peg$c9 = \"e\";\n var peg$c10 = \"E\";\n var peg$c11 = \"t\";\n var peg$c12 = \"R\";\n var peg$c13 = \"r\";\n var peg$c14 = \"u\";\n var peg$c15 = \"m\";\n var peg$c16 = \"{\";\n var peg$c17 = \"}\";\n var peg$c18 = \" \";\n var peg$c19 = \"\\n\";\n var peg$c20 = \"\\r\";\n var peg$c21 = \"\\\\\";\n var peg$r0 = /^[{ ]/;\n var peg$r1 = /^[a-zA-Z]/;\n var peg$r2 = /^[{}]/;\n var peg$e0 = peg$literalExpectation(\"+\", false);\n var peg$e1 = peg$literalExpectation(\"v\", false);\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$literalExpectation(\"b\", false);\n var peg$e4 = peg$literalExpectation(\"!\", false);\n var peg$e5 = peg$literalExpectation(\"D\", false);\n var peg$e6 = peg$literalExpectation(\"d\", false);\n var peg$e7 = peg$literalExpectation(\"s\", false);\n var peg$e8 = peg$literalExpectation(\"O\", false);\n var peg$e9 = peg$literalExpectation(\"o\", false);\n var peg$e10 = peg$literalExpectation(\"e\", false);\n var peg$e11 = peg$literalExpectation(\"E\", false);\n var peg$e12 = peg$literalExpectation(\"t\", false);\n var peg$e13 = peg$literalExpectation(\"R\", false);\n var peg$e14 = peg$literalExpectation(\"r\", false);\n var peg$e15 = peg$literalExpectation(\"u\", false);\n var peg$e16 = peg$classExpectation([\"{\", \" \"], false, false);\n var peg$e17 = peg$literalExpectation(\"m\", false);\n var peg$e18 = peg$literalExpectation(\"{\", false);\n var peg$e19 = peg$literalExpectation(\"}\", false);\n var peg$e20 = peg$literalExpectation(\" \", false);\n var peg$e21 = peg$literalExpectation(\"\\n\", false);\n var peg$e22 = peg$literalExpectation(\"\\r\", false);\n var peg$e23 = peg$literalExpectation(\"\\\\\", false);\n var peg$e24 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$e25 = peg$classExpectation([\"{\", \"}\"], false, false);\n var peg$f0 = function(x) {\n return x;\n };\n var peg$f1 = function(spec) {\n return spec;\n };\n var peg$f2 = function(spec) {\n return spec;\n };\n var peg$f3 = function(openBrace) {\n return createNode(\"verbatim\", { openBrace, closeBrace: openBrace });\n };\n var peg$f4 = function() {\n return createNode(\"body\");\n };\n var peg$f5 = function(leading_bang, spec) {\n return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec;\n };\n var peg$f6 = function(braceSpec, defaultArg) {\n return createNode(\"optional\", { ...braceSpec, defaultArg });\n };\n var peg$f7 = function(braceSpec) {\n return createNode(\"optional\", braceSpec);\n };\n var peg$f8 = function() {\n return createNode(\"optionalStar\");\n };\n var peg$f9 = function(g) {\n return createNode(\"optional\", { defaultArg: g });\n };\n var peg$f10 = function() {\n return createNode(\"optional\");\n };\n var peg$f11 = function(args) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args\n });\n };\n var peg$f12 = function(args, g) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args,\n defaultArg: g\n });\n };\n var peg$f13 = function(tok) {\n return createNode(\"optionalToken\", { token: tok });\n };\n var peg$f14 = function(braceSpec, defaultArg) {\n return createNode(\"mandatory\", { ...braceSpec, defaultArg });\n };\n var peg$f15 = function(braceSpec) {\n return createNode(\"mandatory\", braceSpec);\n };\n var peg$f16 = function(stopTokens) {\n return createNode(\"until\", { stopTokens });\n };\n var peg$f17 = function(x) {\n return [x];\n };\n var peg$f18 = function(g) {\n return g.content;\n };\n var peg$f19 = function() {\n return createNode(\"mandatory\");\n };\n var peg$f20 = function(openBrace, closeBrace) {\n return { openBrace, closeBrace };\n };\n var peg$f21 = function(g) {\n return g.content.map(groupToStr).join(\"\");\n };\n var peg$f22 = function(t) {\n return [t];\n };\n var peg$f23 = function(args) {\n return args.filter((a) => !a.match(/^\\s*$/));\n };\n var peg$f24 = function(content) {\n return { type: \"group\", content };\n };\n var peg$f25 = function() {\n return \"\";\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parseargs_spec_list() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n s2 = peg$parsewhitespace();\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n return s0;\n }\n function peg$parsearg_spec() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemandatory();\n if (s2 === peg$FAILED) {\n s2 = peg$parseverbatim();\n if (s2 === peg$FAILED) {\n s2 = peg$parserequired();\n if (s2 === peg$FAILED) {\n s2 = peg$parsebody();\n if (s2 === peg$FAILED) {\n s2 = peg$parseuntil();\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseverbatim() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 118) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebody() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 98) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseoptional() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional_star();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_standard();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_delimited();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_embellishment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_token();\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseoptional_delimited() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 68) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsearg();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 100) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseoptional_star() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 115) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseoptional_standard() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 79) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsewhitespace();\n s3 = peg$parsearg();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 111) {\n s1 = peg$c8;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseoptional_embellishment() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s1 = peg$c9;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsewhitespace();\n s3 = peg$parseargs();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 69) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsewhitespace();\n s3 = peg$parseargs();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsewhitespace();\n s5 = peg$parseargs();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseoptional_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 116) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserequired() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 82) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsearg();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 114) {\n s1 = peg$c13;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseuntil() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseuntil_stop_token();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseuntil_stop_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebraced_group();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f18(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsemandatory() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 109) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n return s0;\n }\n function peg$parsebrace_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = void 0;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsemacro();\n if (s4 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemacro();\n if (s5 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s2 = input.substring(s2, peg$currPos);\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n return s0;\n }\n function peg$parsearg() {\n var s0, s1;\n s0 = peg$parsetoken();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebraced_group();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f21(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseargs() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsetoken();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f22(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsearg();\n if (s3 === peg$FAILED) {\n s3 = peg$parsewhitespace_token();\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsearg();\n if (s3 === peg$FAILED) {\n s3 = peg$parsewhitespace_token();\n }\n }\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c17;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parsebraced_group() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 === peg$FAILED) {\n s7 = peg$parsewhitespace_token();\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 === peg$FAILED) {\n s7 = peg$parsewhitespace_token();\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n }\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c17;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace_token();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace_token();\n }\n peg$savedPos = s0;\n s1 = peg$f25();\n s0 = s1;\n return s0;\n }\n function peg$parsewhitespace_token() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 32) {\n s0 = peg$c18;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n }\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c21;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s2 = peg$c21;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n peg$silentFails++;\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = void 0;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3;\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s3 !== peg$FAILED) {\n s0 = s3;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n const DEFAULT_OPTIONS = {\n optional: { openBrace: \"[\", closeBrace: \"]\" },\n mandatory: { openBrace: \"{\", closeBrace: \"}\" }\n };\n function createNode(type, options2) {\n const computedOptions = DEFAULT_OPTIONS[type] || {};\n return { type, ...computedOptions, ...options2 };\n }\n function groupToStr(node) {\n if (typeof node !== \"object\" || !node) {\n return node;\n }\n if (node.type === \"group\") {\n return `{${node.content.map(groupToStr).join(\"\")}}`;\n }\n return node;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function() {\n return [];\n };\n var peg$f1 = function(rowItems, trailingComment) {\n return {\n itemParts: [],\n ...rowItems,\n trailingComment,\n trailingComma: true\n };\n };\n var peg$f2 = function(rowItems, trailingComment) {\n return { ...rowItems, trailingComment };\n };\n var peg$f3 = function(a, b) {\n return processItem(a, b);\n };\n var peg$f4 = function(b) {\n return processItem(null, b);\n };\n var peg$f5 = function(cell) {\n return { cell };\n };\n var peg$f6 = function() {\n return {};\n };\n var peg$f7 = function(part) {\n return part;\n };\n var peg$f8 = function(x) {\n return x;\n };\n var peg$f9 = function(space, x) {\n return {\n trailingComment: x,\n leadingParbreak: space.parbreak > 0\n };\n };\n var peg$f10 = function(list) {\n return {\n whitespace: list.filter((x) => options.isWhitespace(x)).length,\n parbreak: list.filter((x) => options.isParbreak(x)).length\n };\n };\n var peg$f11 = function() {\n return !options.allowParenGroups;\n };\n var peg$f12 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f13 = function(tok) {\n return tok;\n };\n var peg$f14 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f15 = function(tok) {\n return tok;\n };\n var peg$f16 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$f18 = function(tok) {\n return options.isParbreak(tok);\n };\n var peg$f19 = function(tok) {\n return tok;\n };\n var peg$f20 = function(tok) {\n return options.isComma(tok);\n };\n var peg$f21 = function(tok) {\n return tok;\n };\n var peg$f22 = function(tok) {\n return options.isEquals(tok);\n };\n var peg$f23 = function(tok) {\n return tok;\n };\n var peg$f24 = function(tok) {\n return options.isChar(tok, \"(\");\n };\n var peg$f25 = function(tok) {\n return tok;\n };\n var peg$f26 = function(tok) {\n return options.isChar(tok, \")\");\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseitem_with_end() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsewhitespace_or_parbreaks();\n s4 = peg$parseitem_sep();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsewhitespace();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsewhitespace();\n }\n s6 = peg$parsetrailing_comment();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewhitespace();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s2, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseitem_without_end() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseitem_part();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_part();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_part();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_part();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_part();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseseparated_part() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseparbreak();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseparbreak();\n }\n s4 = peg$parseitem_part();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseitem_part() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = void 0;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = void 0;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsenon_token();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parsenon_whitespace_non_parbreak_token() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsewhitespace();\n if (s3 === peg$FAILED) {\n s3 = peg$parseparbreak();\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseparen_block();\n if (s3 === peg$FAILED) {\n s3 = peg$parsetoken();\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parsenon_token() {\n var s0;\n s0 = peg$parseitem_sep();\n if (s0 === peg$FAILED) {\n s0 = peg$parseequals();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetrailing_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseown_line_comment();\n }\n }\n }\n return s0;\n }\n function peg$parsewhitespace_or_parbreaks() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n }\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n s0 = s1;\n return s0;\n }\n function peg$parseparen_block() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$f11();\n if (s1) {\n s1 = peg$FAILED;\n } else {\n s1 = void 0;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseopen_paren();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n s6 = peg$parseclose_paren();\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseparbreak() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseitem_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseopen_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function processItem(leadCell, otherCells) {\n const cells = [leadCell || []];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n }\n return { itemParts: cells };\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) => node.type === \"string\" && node.content === char,\n isComma(node) {\n return node.type === \"string\" && node.content === \",\";\n },\n isEquals(node) {\n return node.type === \"string\" && node.content === \"=\";\n },\n isParbreak(node) {\n return node.type === \"parbreak\";\n },\n isWhitespace(node) {\n return node.type === \"whitespace\";\n },\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n allowParenGroups: true\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function(e) {\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(tok) {\n return options.isHash(tok);\n };\n var peg$f3 = function(tok) {\n return tok;\n };\n var peg$f4 = function(tok) {\n return options.isNumber(tok);\n };\n var peg$f5 = function(tok) {\n return tok;\n };\n var peg$f6 = function() {\n return { type: \"string\", content: \"#\" };\n };\n var peg$f7 = function(num) {\n const split = options.splitNumber(num);\n return [{ type: \"hash_number\", number: split.number }, split.rest];\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsehash() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f4(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_hash() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehash();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsehash_number() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isHash) {\n try {\n Object.assign(options, {\n isHash: (node) => node.type === \"string\" && node.content === \"#\",\n isNumber: (node) => node.type === \"string\" && 0 < +node.content.charAt(0),\n splitNumber: (node) => {\n const number = +node.content.charAt(0);\n if (node.content.length > 1) {\n return {\n number,\n rest: {\n type: \"string\",\n content: node.content.slice(1)\n }\n };\n }\n return { number };\n }\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function(e) {\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f3 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f4 = function(tok1, tok2) {\n const split = options.split(tok2);\n return options.isRecognized([tok1, split[0]]);\n };\n var peg$f5 = function(tok1, tok2) {\n const split = options.split(tok2);\n return [options.isRecognized([tok1, split[0]]), split[1]];\n };\n var peg$f6 = function(tok1, tok2) {\n return options.isRecognized([tok1, tok2]);\n };\n var peg$f7 = function(tok1, tok2) {\n return options.isRecognized([tok1, tok2]);\n };\n var peg$f8 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f9 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f10 = function(tok) {\n return options.isRecognized([tok]);\n };\n var peg$f11 = function(tok) {\n return options.isRecognized([tok]);\n };\n var peg$f12 = function(tok) {\n return options.isMacro(tok);\n };\n var peg$f13 = function(tok) {\n return tok;\n };\n var peg$f14 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f15 = function(tok) {\n return tok;\n };\n var peg$f16 = function(tok) {\n return options.isSplitable(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsetriple_ligature() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_ligature() {\n var s0;\n s0 = peg$parsedouble_macro_ligature();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_macro_ligature_extracted();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_char_ligature();\n }\n }\n return s0;\n }\n function peg$parsedouble_macro_ligature_extracted() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n s3 = peg$parsesplitable();\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f4(s1, s3);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_macro_ligature() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f6(s1, s3);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_char_ligature() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f8(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemono_ligature() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f10(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesplitable() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isMacro: (node) => node.type === \"macro\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isRecognized: (nodes) => {\n if (nodes.length == 2 && nodes[0].content === \"^\" && nodes[1].content === \"o\") {\n return { type: \"string\", content: \"\\xF4\" };\n }\n return null;\n },\n isSplitable: (node) => node.type === \"string\" && node.content.length > 1,\n split: (node) => [\n { type: \"string\", content: node.content.charAt(0) },\n { type: \"string\", content: node.content.slice(1) }\n ]\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { start: peg$parsestart };\n var peg$startRuleFunction = peg$parsestart;\n var peg$c0 = \";\";\n var peg$c1 = \",\";\n var peg$c2 = \":\";\n var peg$c3 = \"/\";\n var peg$c4 = \">\";\n var peg$c5 = \"!\";\n var peg$c6 = \".\";\n var peg$c7 = \"!![\";\n var peg$c8 = \"]\";\n var peg$c9 = \"!!\";\n var peg$c10 = \"+\";\n var peg$c11 = \"-\";\n var peg$r0 = /^[a-zA-Z0-9]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[ \\t\\n\\r]/;\n var peg$r3 = /^[0-9a-fA-F]/;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\";\", false);\n var peg$e2 = peg$literalExpectation(\",\", false);\n var peg$e3 = peg$otherExpectation(\"model list\");\n var peg$e4 = peg$literalExpectation(\":\", false);\n var peg$e5 = peg$literalExpectation(\"/\", false);\n var peg$e6 = peg$otherExpectation(\"model\");\n var peg$e7 = peg$otherExpectation(\"color spec list\");\n var peg$e8 = peg$otherExpectation(\"color spec\");\n var peg$e9 = peg$otherExpectation(\"color\");\n var peg$e10 = peg$otherExpectation(\"function expression\");\n var peg$e11 = peg$literalExpectation(\">\", false);\n var peg$e12 = peg$otherExpectation(\"function\");\n var peg$e13 = peg$otherExpectation(\"extended expression\");\n var peg$e14 = peg$otherExpectation(\"core model\");\n var peg$e15 = peg$otherExpectation(\"expr\");\n var peg$e16 = peg$literalExpectation(\"!\", false);\n var peg$e17 = peg$otherExpectation(\"mix expr\");\n var peg$e18 = peg$otherExpectation(\"name\");\n var peg$e19 = peg$literalExpectation(\".\", false);\n var peg$e20 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"]], false, false);\n var peg$e21 = peg$otherExpectation(\"postfix\");\n var peg$e22 = peg$literalExpectation(\"!![\", false);\n var peg$e23 = peg$literalExpectation(\"]\", false);\n var peg$e24 = peg$literalExpectation(\"!!\", false);\n var peg$e25 = peg$otherExpectation(\"prefix\");\n var peg$e26 = peg$otherExpectation(\"plus\");\n var peg$e27 = peg$literalExpectation(\"+\", false);\n var peg$e28 = peg$otherExpectation(\"minus\");\n var peg$e29 = peg$literalExpectation(\"-\", false);\n var peg$e30 = peg$otherExpectation(\"num\");\n var peg$e31 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e32 = peg$otherExpectation(\"positive float\");\n var peg$e33 = peg$otherExpectation(\"divisor\");\n var peg$e34 = peg$otherExpectation(\"int\");\n var peg$e35 = peg$otherExpectation(\"whitespace\");\n var peg$e36 = peg$classExpectation([\" \", \"\t\", \"\\n\", \"\\r\"], false, false);\n var peg$e37 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"], [\"A\", \"F\"]], false, false);\n var peg$f0 = function(m) {\n return m;\n };\n var peg$f1 = function(m) {\n return m;\n };\n var peg$f2 = function(m) {\n return m;\n };\n var peg$f3 = function(m) {\n return m;\n };\n var peg$f4 = function(m) {\n return m;\n };\n var peg$f5 = function(a) {\n return { type: \"invalid_spec\", content: a };\n };\n var peg$f6 = function(f, c) {\n return c;\n };\n var peg$f7 = function(f, r) {\n return { type: \"color_set\", content: [f].concat(r) };\n };\n var peg$f8 = function(n, s) {\n return { type: \"color_set_item\", name: n, spec_list: s };\n };\n var peg$f9 = function(c, m) {\n return { type: \"model_list\", contents: m, core_model: c };\n };\n var peg$f10 = function(m) {\n return { type: \"model_list\", contents: m, core_model: null };\n };\n var peg$f11 = function(m, a) {\n return a;\n };\n var peg$f12 = function(m, r) {\n return [m].concat(r);\n };\n var peg$f13 = function(s, a) {\n return a;\n };\n var peg$f14 = function(s, r) {\n return { type: \"spec_list\", content: [s].concat(r) };\n };\n var peg$f15 = function(c) {\n return { type: \"hex_spec\", content: [c] };\n };\n var peg$f16 = function(c, d) {\n return d;\n };\n var peg$f17 = function(c, d) {\n return d;\n };\n var peg$f18 = function(c, r) {\n return { type: \"num_spec\", content: r ? [c].concat(r) : [c] };\n };\n var peg$f19 = function(c, fs) {\n return { type: \"color\", color: c, functions: fs };\n };\n var peg$f20 = function(f, n) {\n return n;\n };\n var peg$f21 = function(f, args) {\n return { type: \"function\", name: f, args };\n };\n var peg$f22 = function(core, d, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: d,\n expressions: [e].concat(es)\n };\n };\n var peg$f23 = function(core, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: null,\n expressions: [e].concat(es)\n };\n };\n var peg$f24 = function(e, d) {\n return { type: \"weighted_expr\", color: e, weight: d };\n };\n var peg$f25 = function(e) {\n return e;\n };\n var peg$f26 = function(p, n, e, po) {\n return {\n type: \"expr\",\n prefix: p,\n name: n,\n mix_expr: e,\n postfix: po\n };\n };\n var peg$f27 = function(p, n) {\n return { type: \"complete_mix\", mix_percent: p, name: n };\n };\n var peg$f28 = function(p) {\n return { type: \"partial_mix\", mix_percent: p };\n };\n var peg$f29 = function(c, p) {\n return c.concat(p || []);\n };\n var peg$f30 = function(n) {\n return { type: \"postfix\", num: n };\n };\n var peg$f31 = function(p) {\n return { type: \"postfix\", plusses: p };\n };\n var peg$f32 = function(n) {\n return parseInt(n, 10);\n };\n var peg$f33 = function(n) {\n return parseFloat(n);\n };\n var peg$f34 = function(n) {\n return n;\n };\n var peg$f35 = function(n) {\n return -n;\n };\n var peg$f36 = function(m, n) {\n return m ? -n : n;\n };\n var peg$f37 = function(h) {\n return h.toUpperCase();\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsestart() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsespec_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_spec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n s1 = input.substring(s1, peg$currPos);\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n s0 = s1;\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsecolor_set_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_item();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolor_set_item() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsename();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsespec_list();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemodel_list() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemodel_list_tail();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list_tail();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n return s0;\n }\n function peg$parsemodel_list_tail() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsemodel();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemodel() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsecore_model();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsespec_list() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsespec() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsehex();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehex();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehex();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsehex();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsehex();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsehex();\n if (s8 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6, s7, s8];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parsecolor() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecolor_expr();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsefunc_expr();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsefunc_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f19(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parsecolor_expr() {\n var s0;\n s0 = peg$parseext_expr();\n if (s0 === peg$FAILED) {\n s0 = peg$parseexpr();\n if (s0 === peg$FAILED) {\n s0 = peg$parsename();\n }\n }\n return s0;\n }\n function peg$parsefunc_expr() {\n var s0, s1, s2, s3, s4, s5, s6;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 62) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsefunction();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f21(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parsefunction() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parseext_expr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsediv();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c2;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseweighted_expr();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parseadditional_weighted_expr();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f22(s1, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseweighted_expr();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseadditional_weighted_expr();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s1, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseweighted_expr() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseexpr();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsedec();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseadditional_weighted_expr() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseweighted_expr();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecore_model() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parseexpr() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseprefix();\n s2 = peg$parsename();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemix_expr();\n s4 = peg$parsepostfix();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f26(s1, s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n return s0;\n }\n function peg$parsecomplete_mix() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 33) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsename();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s2, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepartial_mix() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemix_expr() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomplete_mix();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomplete_mix();\n }\n s2 = peg$parsepartial_mix();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f29(s1, s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n return s0;\n }\n function peg$parsename() {\n var s0, s1, s2;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 46) {\n s0 = peg$c6;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n return s0;\n }\n function peg$parsepostfix() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parseplus();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseplus();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n return s0;\n }\n function peg$parseprefix() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parseminus();\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n return s0;\n }\n function peg$parseplus() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e26);\n }\n }\n return s0;\n }\n function peg$parseminus() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e28);\n }\n }\n return s0;\n }\n function peg$parsenum() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f32(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e30);\n }\n }\n return s0;\n }\n function peg$parsepct() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c6;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n s7 = input.substring(s7, peg$currPos);\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s4 = input.substring(s4, peg$currPos);\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c6;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = input.substring(s4, peg$currPos);\n } else {\n s4 = s5;\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f33(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e32);\n }\n }\n return s0;\n }\n function peg$parsediv() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsepct();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e33);\n }\n }\n return s0;\n }\n function peg$parsedec() {\n var s0, s1, s2;\n s0 = peg$parsepct();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n return s0;\n }\n function peg$parseint() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e34);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1;\n peg$silentFails++;\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e35);\n }\n return s0;\n }\n function peg$parsesp() {\n var s0, s1;\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsehex() {\n var s0, s1;\n s0 = peg$currPos;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e37);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f37(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$otherExpectation(\"decl_start\");\n var peg$e1 = peg$otherExpectation(\"decl_end\");\n var peg$e2 = peg$otherExpectation(\"vert\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"l\");\n var peg$e5 = peg$otherExpectation(\"r\");\n var peg$e6 = peg$otherExpectation(\"c\");\n var peg$e7 = peg$otherExpectation(\"p\");\n var peg$e8 = peg$otherExpectation(\"m\");\n var peg$e9 = peg$otherExpectation(\"b\");\n var peg$e10 = peg$otherExpectation(\"w\");\n var peg$e11 = peg$otherExpectation(\"W\");\n var peg$e12 = peg$otherExpectation(\"X\");\n var peg$e13 = peg$otherExpectation(\"!\");\n var peg$e14 = peg$otherExpectation(\"@\");\n var peg$e15 = peg$otherExpectation(\"<\");\n var peg$e16 = peg$otherExpectation(\">\");\n var peg$e17 = peg$otherExpectation(\"group\");\n var peg$e18 = peg$otherExpectation(\"whitespace\");\n var peg$f0 = function(c) {\n return c;\n };\n var peg$f1 = function(cols) {\n return cols;\n };\n var peg$f2 = function() {\n return [];\n };\n var peg$f3 = function(divs1, start, a, end, divs2) {\n return {\n type: \"column\",\n pre_dividers: divs1,\n post_dividers: divs2,\n before_start_code: start,\n before_end_code: end,\n alignment: a\n };\n };\n var peg$f4 = function() {\n return {\n type: \"vert_divider\"\n };\n };\n var peg$f5 = function(b, g) {\n return {\n type: \"bang_divider\",\n content: g[0].content\n };\n };\n var peg$f6 = function(g) {\n return {\n type: \"at_divider\",\n content: g[0].content\n };\n };\n var peg$f7 = function(div) {\n return div;\n };\n var peg$f8 = function(g) {\n return { type: \"decl_code\", code: g[0].content };\n };\n var peg$f9 = function(g) {\n return { type: \"decl_code\", code: g[0].content };\n };\n var peg$f10 = function() {\n return { type: \"alignment\", alignment: \"left\" };\n };\n var peg$f11 = function() {\n return { type: \"alignment\", alignment: \"center\" };\n };\n var peg$f12 = function() {\n return { type: \"alignment\", alignment: \"right\" };\n };\n var peg$f13 = function() {\n return { type: \"alignment\", alignment: \"X\" };\n };\n var peg$f14 = function() {\n return \"top\";\n };\n var peg$f15 = function() {\n return \"default\";\n };\n var peg$f16 = function() {\n return \"bottom\";\n };\n var peg$f17 = function(a, g) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: a,\n size: g[0].content\n };\n };\n var peg$f18 = function(g1, g2) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: g1[0].content,\n size: g2[0].content\n };\n };\n var peg$f19 = function(tok) {\n return options.matchChar(tok, \"|\");\n };\n var peg$f20 = function(tok) {\n return options.matchChar(tok, \"l\");\n };\n var peg$f21 = function(tok) {\n return options.matchChar(tok, \"r\");\n };\n var peg$f22 = function(tok) {\n return options.matchChar(tok, \"c\");\n };\n var peg$f23 = function(tok) {\n return options.matchChar(tok, \"p\");\n };\n var peg$f24 = function(tok) {\n return options.matchChar(tok, \"m\");\n };\n var peg$f25 = function(tok) {\n return options.matchChar(tok, \"b\");\n };\n var peg$f26 = function(tok) {\n return options.matchChar(tok, \"w\");\n };\n var peg$f27 = function(tok) {\n return options.matchChar(tok, \"W\");\n };\n var peg$f28 = function(tok) {\n return options.matchChar(tok, \"X\");\n };\n var peg$f29 = function(tok) {\n return options.matchChar(tok, \"!\");\n };\n var peg$f30 = function(tok) {\n return options.matchChar(tok, \"@\");\n };\n var peg$f31 = function(tok) {\n return options.matchChar(tok, \"<\");\n };\n var peg$f32 = function(tok) {\n return options.matchChar(tok, \">\");\n };\n var peg$f33 = function(tok) {\n return options.isGroup(tok);\n };\n var peg$f34 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f2();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsecolumn() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecolumn_divider();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecolumn_divider();\n }\n s2 = peg$parsedecl_start();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsealignment();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsedecl_end();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parsecolumn_divider();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsecolumn_divider();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolumn_divider() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$currPos;\n s3 = peg$parsevert();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$f4();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsebang();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f5(s3, s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseat();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f6(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedecl_start() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsegreater();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n return s0;\n }\n function peg$parsedecl_end() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseless();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parsealignment() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsel();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsec();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parser();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f12();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseX();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f13();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsep();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f14();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parsem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f15();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseb();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f16();\n }\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsew();\n if (s1 === peg$FAILED) {\n s1 = peg$parseW();\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsevert() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n return s0;\n }\n function peg$parsel() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n return s0;\n }\n function peg$parser() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parsec() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsep() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f23(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsem() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parseb() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f25(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parsew() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parseW() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f27(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n return s0;\n }\n function peg$parseX() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parsebang() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f29(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseat() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parseless() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f31(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n return s0;\n }\n function peg$parsegreater() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f33(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isHash) {\n try {\n Object.assign(options, {\n matchChar: (node, char) => node.type === \"string\" && node.content === char,\n isGroup: (node) => node.type === \"group\",\n isWhitespace: (node) => node.type === \"whitespace\"\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$otherExpectation(\"partial item\");\n var peg$e1 = peg$otherExpectation(\"item\");\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$otherExpectation(\"equation\");\n var peg$e4 = peg$otherExpectation(\"trailing comment\");\n var peg$e5 = peg$otherExpectation(\"comment only line\");\n var peg$e6 = peg$otherExpectation(\"non-var token\");\n var peg$e7 = peg$otherExpectation(\"token\");\n var peg$e8 = peg$otherExpectation(\"same line comment\");\n var peg$e9 = peg$otherExpectation(\"own line comment\");\n var peg$e10 = peg$otherExpectation(\",\");\n var peg$e11 = peg$otherExpectation(\"@\");\n var peg$e12 = peg$otherExpectation(\"variable token\");\n var peg$e13 = peg$otherExpectation(\"+/-\");\n var peg$e14 = peg$otherExpectation(\"=\");\n var peg$f0 = function(a, b) {\n return a.concat(b ? b : []);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(a, b, c) {\n return a.concat(b, c);\n };\n var peg$f3 = function(op, a, b, c) {\n return { type: \"item\", op, variable: b, content: a.concat(b, c) };\n };\n var peg$f4 = function(op, a) {\n return { type: \"item\", op, variable: null, content: a };\n };\n var peg$f5 = function(line, sep, comment) {\n return { ...line, sep: [].concat(sep), trailingComment: comment };\n };\n var peg$f6 = function(line, comment) {\n return { ...line, trailingComment: comment };\n };\n var peg$f7 = function(eq, ann) {\n return {\n type: \"line\",\n equation: eq,\n annotation: ann,\n sep: null\n };\n };\n var peg$f8 = function(at, ann) {\n return at ? { type: \"annotation\", marker: at, content: ann } : null;\n };\n var peg$f9 = function(left, eq, right) {\n return { type: \"equation\", left, right, equals: eq };\n };\n var peg$f10 = function(x) {\n return x;\n };\n var peg$f11 = function(x) {\n return {\n type: \"line\",\n trailingComment: x\n };\n };\n var peg$f12 = function(v, s) {\n return [v].concat(s ? s : []);\n };\n var peg$f13 = function(t) {\n return t;\n };\n var peg$f14 = function(x) {\n return x;\n };\n var peg$f15 = function(x) {\n return x;\n };\n var peg$f16 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$f18 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f19 = function(tok) {\n return tok;\n };\n var peg$f20 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f21 = function(tok) {\n return tok;\n };\n var peg$f22 = function(tok) {\n return options.isSep(tok);\n };\n var peg$f23 = function(tok) {\n return tok;\n };\n var peg$f24 = function(tok) {\n return options.isAt(tok);\n };\n var peg$f25 = function(tok) {\n return tok;\n };\n var peg$f26 = function(tok) {\n return options.isVar(tok);\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$f28 = function(tok) {\n return options.isOperation(tok);\n };\n var peg$f29 = function(tok) {\n return tok;\n };\n var peg$f30 = function(tok) {\n return options.isEquals(tok);\n };\n var peg$f31 = function(tok) {\n return tok;\n };\n var peg$f32 = function(tok) {\n return options.isSubscript(tok);\n };\n var peg$f33 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n }\n s2 = peg$parseline_without_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseEOL();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsepartial_item() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = [];\n s3 = peg$parsenon_var_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_var_token();\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parsevar();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n s6 = [];\n s7 = peg$parsetoken();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsetoken();\n }\n s7 = [];\n s8 = peg$parse_();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n return s0;\n }\n function peg$parseitem() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsevar();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parse_();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parse_();\n }\n s7 = [];\n s8 = peg$parsetoken();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsetoken();\n }\n s8 = [];\n s9 = peg$parse_();\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s5, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f4(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parseline_with_sep() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepartial_line_with_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseline_without_sep() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$silentFails--;\n if (s2 !== peg$FAILED) {\n peg$currPos = s1;\n s1 = void 0;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequation();\n s3 = peg$parseannotation();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseannotation() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseat();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsenon_sep_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_sep_token();\n }\n peg$savedPos = s0;\n s0 = peg$f8(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseequation() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseitem();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseitem();\n }\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2, s3);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parsevar() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsevar_token();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsesubscript();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsenon_var_token() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsevar();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsenon_sep_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseat();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoperation();\n if (s2 === peg$FAILED) {\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesep() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parseat() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n return s0;\n }\n function peg$parsevar_token() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parseoperation() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = peg$currPos;\n s4 = peg$f28(s2);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parsesubscript() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isSep: (node) => node.type === \"string\" && node.content === \",\",\n isVar: (node) => node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isOperation: (node) => node.type === \"string\" && node.content.match(/[+-]/),\n isEquals: (node) => node.type === \"string\" && node.content === \"=\",\n isAt: (node) => node.type === \"string\" && node.content === \"@\",\n isSubscript: (node) => node.content === \"_\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { root: peg$parseroot };\n var peg$startRuleFunction = peg$parseroot;\n var peg$c0 = \"plus\";\n var peg$c1 = \"minus\";\n var peg$c2 = \"pt\";\n var peg$c3 = \"mm\";\n var peg$c4 = \"cm\";\n var peg$c5 = \"in\";\n var peg$c6 = \"ex\";\n var peg$c7 = \"em\";\n var peg$c8 = \"bp\";\n var peg$c9 = \"pc\";\n var peg$c10 = \"dd\";\n var peg$c11 = \"cc\";\n var peg$c12 = \"nd\";\n var peg$c13 = \"nc\";\n var peg$c14 = \"sp\";\n var peg$c15 = \"filll\";\n var peg$c16 = \"fill\";\n var peg$c17 = \"fil\";\n var peg$c18 = \".\";\n var peg$c19 = \"+\";\n var peg$c20 = \"-\";\n var peg$r0 = /^[0-9]/;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\"plus\", false);\n var peg$e2 = peg$literalExpectation(\"minus\", false);\n var peg$e3 = peg$literalExpectation(\"pt\", false);\n var peg$e4 = peg$literalExpectation(\"mm\", false);\n var peg$e5 = peg$literalExpectation(\"cm\", false);\n var peg$e6 = peg$literalExpectation(\"in\", false);\n var peg$e7 = peg$literalExpectation(\"ex\", false);\n var peg$e8 = peg$literalExpectation(\"em\", false);\n var peg$e9 = peg$literalExpectation(\"bp\", false);\n var peg$e10 = peg$literalExpectation(\"pc\", false);\n var peg$e11 = peg$literalExpectation(\"dd\", false);\n var peg$e12 = peg$literalExpectation(\"cc\", false);\n var peg$e13 = peg$literalExpectation(\"nd\", false);\n var peg$e14 = peg$literalExpectation(\"nc\", false);\n var peg$e15 = peg$literalExpectation(\"sp\", false);\n var peg$e16 = peg$literalExpectation(\"filll\", false);\n var peg$e17 = peg$literalExpectation(\"fill\", false);\n var peg$e18 = peg$literalExpectation(\"fil\", false);\n var peg$e19 = peg$otherExpectation(\"number\");\n var peg$e20 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e21 = peg$literalExpectation(\".\", false);\n var peg$e22 = peg$literalExpectation(\"+\", false);\n var peg$e23 = peg$literalExpectation(\"-\", false);\n var peg$f0 = function(b, st, sh) {\n return {\n type: \"glue\",\n fixed: b,\n stretchable: st,\n shrinkable: sh,\n position: location()\n };\n };\n var peg$f1 = function(glue) {\n return glue;\n };\n var peg$f2 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f3 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f4 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f5 = function(n) {\n return parseFloat(n);\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parseroot() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsebase();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsestretchable();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseshrinkable();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s1;\n s1 = peg$f0(s2, s3, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebase() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseunit();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsestretchable() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseshrinkable() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c1) {\n s1 = peg$c1;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseunit() {\n var s0;\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s0 = peg$c2;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c3) {\n s0 = peg$c3;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s0 = peg$c4;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c5) {\n s0 = peg$c5;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s0 = peg$c6;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s0 = peg$c7;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s0 = peg$c8;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s0 = peg$c9;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parserubber_unit() {\n var s0;\n s0 = peg$parseunit();\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c16) {\n s0 = peg$c16;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c17) {\n s0 = peg$c17;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsesign();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$currPos;\n s5 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c18;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n return s0;\n }\n function peg$parsesign() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 43) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","export default (\n // Generated by Peggy 3.0.2.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var offset_s = this.location.source && typeof this.location.source.offset === \"function\" ? this.location.source.offset(s) : s;\n var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", offset_s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + offset_s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body };\n var peg$startRuleFunction = peg$parsepath_spec;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$otherExpectation(\"same line comment\");\n var peg$e2 = peg$otherExpectation(\"own line comment\");\n var peg$e3 = peg$otherExpectation(\"comment\");\n var peg$e4 = peg$otherExpectation(\"floating comment\");\n var peg$e5 = peg$otherExpectation(\"operation\");\n var peg$e6 = peg$otherExpectation(\"=\");\n var peg$f0 = function(v) {\n return v;\n };\n var peg$f1 = function(ops) {\n return { type: \"path_spec\", content: ops };\n };\n var peg$f2 = function(c1, op, comment) {\n return { op, comment };\n };\n var peg$f3 = function(c1, ops, c2, body) {\n const comments = [c1, ...ops.map((x) => x.comment), c2].filter(\n (x) => x\n );\n const attribute = ops.map((x) => x.op.content.content).join(\" \");\n return {\n type: \"animation\",\n comments,\n attribute,\n content: body.content\n };\n };\n var peg$f4 = function(start, b) {\n return { ...b, start, type: \"foreach\" };\n };\n var peg$f5 = function(c1, variables, options2, c2, c3, list, c4, command) {\n const comments = [c1, c2, c3, c4].filter((x) => x);\n return {\n type: \"foreach_body\",\n variables,\n options: options2 && options2.content,\n list,\n command,\n comments\n };\n };\n var peg$f6 = function(c1, options2, c2, body) {\n const comments = [c1, c2].filter((x) => x);\n return {\n type: \"svg_operation\",\n options: options2 && options2.content,\n content: body,\n comments\n };\n };\n var peg$f7 = function(c1, c2, coord, c3, c4, x) {\n return { coord: x, comment: c4 };\n };\n var peg$f8 = function(c1, c2, coord, c3, a, c5) {\n const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x);\n return {\n type: \"curve_to\",\n controls: a ? [coord, a.coord] : [coord],\n comments\n };\n };\n var peg$f9 = function() {\n return { type: \"line_to\", command: \"|-\" };\n };\n var peg$f10 = function() {\n return { type: \"line_to\", command: \"-|\" };\n };\n var peg$f11 = function() {\n return { type: \"line_to\", command: \"--\" };\n };\n var peg$f12 = function(prefix, content) {\n return { type: \"coordinate\", content, prefix };\n };\n var peg$f13 = function(content) {\n return { type: \"square_brace_group\", content };\n };\n var peg$f14 = function(v) {\n return { type: \"unknown\", content: v };\n };\n var peg$f15 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f16 = function(tok) {\n return tok;\n };\n var peg$f17 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f18 = function(tok) {\n return tok;\n };\n var peg$f19 = function(tok) {\n return options.isComment(tok);\n };\n var peg$f20 = function(tok) {\n return tok;\n };\n var peg$f21 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f22 = function(tok) {\n return tok;\n };\n var peg$f23 = function(c) {\n return c;\n };\n var peg$f24 = function(tok) {\n return options.isOperation(tok);\n };\n var peg$f25 = function(tok) {\n return { type: \"operation\", content: tok };\n };\n var peg$f26 = function(tok) {\n return options.isChar(tok, \"=\");\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$f28 = function(tok) {\n return options.isChar(tok, \"[\");\n };\n var peg$f29 = function(tok) {\n return tok;\n };\n var peg$f30 = function(tok) {\n return options.isChar(tok, \"]\");\n };\n var peg$f31 = function(tok) {\n return tok;\n };\n var peg$f32 = function(tok) {\n return options.isChar(tok, \"(\");\n };\n var peg$f33 = function(tok) {\n return tok;\n };\n var peg$f34 = function(tok) {\n return options.isChar(tok, \")\");\n };\n var peg$f35 = function(tok) {\n return tok;\n };\n var peg$f36 = function(tok) {\n return options.isChar(tok, \"+\");\n };\n var peg$f37 = function(tok) {\n return tok;\n };\n var peg$f38 = function(tok) {\n return options.isChar(tok, \"-\");\n };\n var peg$f39 = function(tok) {\n return tok;\n };\n var peg$f40 = function(tok) {\n return options.isChar(tok, \"|\");\n };\n var peg$f41 = function(tok) {\n return tok;\n };\n var peg$f42 = function(tok) {\n return options.isChar(tok, \".\");\n };\n var peg$f43 = function(tok) {\n return tok;\n };\n var peg$f44 = function(tok) {\n return options.isChar(tok, \"controls\");\n };\n var peg$f45 = function(tok) {\n return tok;\n };\n var peg$f46 = function(tok) {\n return options.isChar(tok, \"and\");\n };\n var peg$f47 = function(tok) {\n return tok;\n };\n var peg$f48 = function(tok) {\n return options.isChar(tok, \"svg\");\n };\n var peg$f49 = function(tok) {\n return tok;\n };\n var peg$f50 = function(tok) {\n return options.isGroup(tok);\n };\n var peg$f51 = function(tok) {\n return tok;\n };\n var peg$f52 = function(tok) {\n return options.isAnyMacro(tok);\n };\n var peg$f53 = function(tok) {\n return tok;\n };\n var peg$f54 = function(tok) {\n return options.isChar(tok, \"foreach\");\n };\n var peg$f55 = function(tok) {\n return tok;\n };\n var peg$f56 = function(tok) {\n return options.isMacro(tok, \"foreach\");\n };\n var peg$f57 = function(tok) {\n return tok;\n };\n var peg$f58 = function(tok) {\n return options.isChar(tok, \"in\");\n };\n var peg$f59 = function(tok) {\n return tok;\n };\n var peg$f60 = function(tok) {\n return options.isChar(tok, \":\");\n };\n var peg$f61 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos, offset2) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n var res = {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n if (offset2 && peg$source && typeof peg$source.offset === \"function\") {\n res.start = peg$source.offset(res.start);\n res.end = peg$source.offset(res.end);\n }\n return res;\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsepath_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseanimation() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parsecolon();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseequals();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_comment_();\n s6 = peg$parsegroup();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseforeach_keyword();\n if (s1 === peg$FAILED) {\n s1 = peg$parseforeach_macro();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseforeach_body();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_body() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n s0 = peg$currPos;\n s1 = peg$parse_comment_();\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsein_keyword();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$parsegroup();\n if (s7 === peg$FAILED) {\n s7 = peg$parsemacro();\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_comment_();\n s9 = peg$parseforeach();\n if (s9 === peg$FAILED) {\n s9 = peg$parsegroup();\n if (s9 === peg$FAILED) {\n s9 = peg$parsemacro();\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesvg() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsesvg_keyword();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecurve_to() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n s0 = peg$currPos;\n s1 = peg$parsedotdot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsecontrols_keyword();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_comment_();\n s5 = peg$parsecoordinate();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$currPos;\n s8 = peg$parseand_keyword();\n if (s8 !== peg$FAILED) {\n s9 = peg$parse_comment_();\n s10 = peg$parsecoordinate();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f7(s2, s4, s5, s6, s9, s10);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = peg$parse_comment_();\n s9 = peg$parsedotdot();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2, s4, s5, s6, s7, s8);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseline_to() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsepipe();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepipe();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n return s0;\n }\n function peg$parsecoordinate() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parseplus();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseplus();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$parseopen_paren();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s3 = input.substring(s3, peg$currPos);\n s4 = peg$parseclose_paren();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesquare_brace_group() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parseopen_square_brace();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parseclose_square_brace();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedotdot() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsedot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedot();\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseunknown() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f14(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n return s0;\n }\n function peg$parsecomment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parse_comment_() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsecomment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n return s0;\n }\n function peg$parseoperation() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parseopen_square_brace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_square_brace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseopen_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseplus() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f36(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f37(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseminus() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f38(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f39(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepipe() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f40(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f41(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedot() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f42(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f43(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecontrols_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f44(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f45(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseand_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f46(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f47(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesvg_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f48(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f49(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f50(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f51(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f52(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f53(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f54(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f55(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_macro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f56(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f57(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsein_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f58(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f59(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolon() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f60(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f61(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) => node.type === \"string\" && node.content === char,\n isOperation: (node) => node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node) => node.type === \"whitespace\" || node.type === \"parbreak\",\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n isGroup: (node) => node.type === \"group\",\n isMacro: (node, name) => node.type === \"macro\" && node.content === name,\n isAnyMacro: (node) => node.type === \"macro\"\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\n// This file needs to be here because typescript does not know how to use babel's transpiler\n// to directly load Pegjs grammars.\n// @ts-nocheck\nimport _LatexPegParser from \"../grammars/latex.pegjs\";\nimport _AlignEnvironmentPegParser from \"../grammars/align-environment.pegjs\";\nimport _ArgSpecPegParser from \"../grammars/xparse-argspec.pegjs\";\nimport _PgfkeysPegParser from \"../grammars/pgfkeys.pegjs\";\nimport _MacroSubstitutionPegParser from \"../grammars/macro-substitutions.pegjs\";\nimport _LigaturesPegParser from \"../grammars/ligatures.pegjs\";\nimport _XColorPegParser from \"../grammars/xcolor-expressions.pegjs\";\nimport _TabularPegParser from \"../grammars/tabular-spec.pegjs\";\nimport _SystemePegParser from \"../grammars/systeme-environment.pegjs\";\nimport _GluePegParser from \"../grammars/tex-glue.pegjs\";\nimport _TikzPegParser from \"../grammars/tikz.pegjs\";\n\ntype PegParser = {\n parse: (input: string | unknown[], options?: unknown) => any;\n SyntaxError: (\n message: string,\n expected: string,\n found: unknown,\n location: unknown\n ) => unknown;\n};\n\nconst LatexPegParser = _LatexPegParser as PegParser;\nconst AlignEnvironmentPegParser = _AlignEnvironmentPegParser as PegParser;\nconst ArgSpecPegParser = _ArgSpecPegParser as PegParser;\nconst PgfkeysPegParser = _PgfkeysPegParser as PegParser;\nconst MacroSubstitutionPegParser = _MacroSubstitutionPegParser as PegParser;\nconst LigaturesPegParser = _LigaturesPegParser as PegParser;\nconst XColorPegParser = _XColorPegParser as PegParser;\nconst TabularPegParser = _TabularPegParser as PegParser;\nconst SystemePegParser = _SystemePegParser as PegParser;\nconst GluePegParser = _GluePegParser as PegParser;\nconst TikzPegParser = _TikzPegParser as PegParser;\n\nexport {\n LatexPegParser,\n AlignEnvironmentPegParser,\n ArgSpecPegParser,\n PgfkeysPegParser,\n MacroSubstitutionPegParser,\n LigaturesPegParser,\n XColorPegParser,\n TabularPegParser,\n SystemePegParser,\n GluePegParser,\n TikzPegParser,\n};\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-pegjs/package.json b/node_modules/@unified-latex/unified-latex-util-pegjs/package.json new file mode 100644 index 0000000..9da23c2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pegjs/package.json @@ -0,0 +1,52 @@ +{ + "name": "@unified-latex/unified-latex-util-pegjs", + "version": "1.8.1", + "description": "PEGjs grammars and tools for constructing unified-latex ASTs", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-pgfkeys/README.md b/node_modules/@unified-latex/unified-latex-util-pgfkeys/README.md new file mode 100644 index 0000000..6b90de2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pgfkeys/README.md @@ -0,0 +1,88 @@ + + + + +# 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; +}; +``` diff --git a/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs new file mode 100644 index 0000000..f156cad --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilPegjs = require("@unified-latex/unified-latex-util-pegjs"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +function createMatchers() { + return { + isChar: (node, char) => unifiedLatexUtilMatch.match.string(node, char), + isComma: (node) => unifiedLatexUtilMatch.match.string(node, ","), + isEquals: (node) => unifiedLatexUtilMatch.match.string(node, "="), + isWhitespace: (node) => unifiedLatexUtilMatch.match.whitespace(node), + isParbreak: (node) => unifiedLatexUtilMatch.match.parbreak(node), + isSameLineComment: (node) => unifiedLatexUtilMatch.match.comment(node) && node.sameline, + isOwnLineComment: (node) => unifiedLatexUtilMatch.match.comment(node) && !node.sameline + }; +} +function parsePgfkeys(ast, options) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + const { allowParenGroups = false } = options || {}; + ast = unifiedLatexUtilPegjs.decorateArrayForPegjs([...ast]); + return unifiedLatexUtilPegjs.PgfkeysPegParser.parse(ast, { + ...createMatchers(), + allowParenGroups + }); +} +function pgfkeysArgToObject(arg) { + function parseFront(nodes) { + return unifiedLatexUtilPrintRaw.printRaw(nodes); + } + function parseBack(nodes) { + if (!nodes) { + return []; + } + if (nodes.length === 1 && unifiedLatexUtilMatch.match.group(nodes[0])) { + return nodes[0].content; + } + return nodes; + } + let nodeList; + if (unifiedLatexUtilMatch.match.argument(arg)) { + nodeList = arg.content; + } else { + nodeList = arg; + } + const parsedArgs = parsePgfkeys(nodeList); + return Object.fromEntries( + parsedArgs.filter((part) => part.itemParts).map((part) => [ + parseFront(part.itemParts[0]), + parseBack(part.itemParts[1]) + ]) + ); +} +exports.createMatchers = createMatchers; +exports.parsePgfkeys = parsePgfkeys; +exports.pgfkeysArgToObject = pgfkeysArgToObject; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs.map new file mode 100644 index 0000000..a036671 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/pgfkeys-parser.ts","../libs/pgfkeys-to-object.ts"],"sourcesContent":["import { PgfkeysPegParser } 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 { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\n\n// The types returned by the grammar\n\nexport type Item = {\n itemParts?: Ast.Node[][];\n trailingComment: Ast.Comment | null;\n trailingComma?: boolean;\n leadingParbreak?: boolean;\n};\n\nexport function createMatchers() {\n return {\n isChar: (node: Ast.Node, char: string) => match.string(node, char),\n isComma: (node: Ast.Node) => match.string(node, \",\"),\n isEquals: (node: Ast.Node) => match.string(node, \"=\"),\n isWhitespace: (node: Ast.Node) => match.whitespace(node),\n isParbreak: (node: Ast.Node) => match.parbreak(node),\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the arguments of a Pgfkeys macro. The `ast`\n * is expected to be a comma separated list of `Item`s.\n * Each item can have 0 or more item parts, which are separated\n * by \"=\". If `itemPart` is undefined,\n *\n * If `options.allowParenGroups === true`, then commas that occur inside groups of parenthesis\n * will not be parsed as separators. This is useful for parsing tikz `\\foreach` loops.\n */\nexport function parsePgfkeys(\n ast: Ast.Node[],\n options?: { allowParenGroups: boolean }\n): Item[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\n const { allowParenGroups = false } = options || {};\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 PgfkeysPegParser.parse(ast, {\n ...createMatchers(),\n allowParenGroups,\n }) as Item[];\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parsePgfkeys } from \"./pgfkeys-parser\";\n\n/**\n * Parse `arg` as pgfkeys and return a JavaScript object with the results.\n * The keys will be normalized to strings and the values will be arrays of nodes.\n */\nexport function pgfkeysArgToObject(\n arg: Ast.Argument | Ast.Node[]\n): Record {\n function parseFront(nodes: Ast.Node[]): string {\n return printRaw(nodes);\n }\n function parseBack(nodes: Ast.Node[] | undefined): Ast.Node[] {\n if (!nodes) {\n return [];\n }\n // If the only element is a group, we unwrap it\n if (nodes.length === 1 && match.group(nodes[0])) {\n return nodes[0].content;\n }\n return nodes;\n }\n\n let nodeList: Ast.Node[];\n if (match.argument(arg)) {\n nodeList = arg.content;\n } else {\n nodeList = arg;\n }\n const parsedArgs = parsePgfkeys(nodeList);\n return Object.fromEntries(\n parsedArgs\n .filter((part) => part.itemParts)\n .map((part) => [\n parseFront(part.itemParts![0]),\n parseBack(part.itemParts![1]),\n ])\n );\n}\n"],"names":["match","decorateArrayForPegjs","PgfkeysPegParser","printRaw"],"mappings":";;;;;AAcO,SAAS,iBAAiB;AACtB,SAAA;AAAA,IACH,QAAQ,CAAC,MAAgB,SAAiBA,sBAAM,MAAA,OAAO,MAAM,IAAI;AAAA,IACjE,SAAS,CAAC,SAAmBA,sBAAAA,MAAM,OAAO,MAAM,GAAG;AAAA,IACnD,UAAU,CAAC,SAAmBA,sBAAAA,MAAM,OAAO,MAAM,GAAG;AAAA,IACpD,cAAc,CAAC,SAAmBA,4BAAM,WAAW,IAAI;AAAA,IACvD,YAAY,CAAC,SAAmBA,4BAAM,SAAS,IAAI;AAAA,IACnD,mBAAmB,CAAC,SAChBA,4BAAM,QAAQ,IAAI,KAAK,KAAK;AAAA,IAChC,kBAAkB,CAAC,SACfA,sBAAA,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK;AAAA,EAAA;AAEzC;AAWgB,SAAA,aACZ,KACA,SACM;AACN,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACf,UAAA,IAAI,MAAM,iCAAiC;AAAA,EACrD;AACA,QAAM,EAAE,mBAAmB,UAAU,WAAW,CAAA;AAGhD,QAAMC,sBAAsB,sBAAA,CAAC,GAAG,GAAG,CAAC;AAG7B,SAAAC,sBAAA,iBAAiB,MAAM,KAAK;AAAA,IAC/B,GAAG,eAAe;AAAA,IAClB;AAAA,EAAA,CACH;AACL;AC7CO,SAAS,mBACZ,KAC0B;AAC1B,WAAS,WAAW,OAA2B;AAC3C,WAAOC,yBAAAA,SAAS,KAAK;AAAA,EACzB;AACA,WAAS,UAAU,OAA2C;AAC1D,QAAI,CAAC,OAAO;AACR,aAAO;IACX;AAEI,QAAA,MAAM,WAAW,KAAKH,sBAAAA,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG;AACtC,aAAA,MAAM,CAAC,EAAE;AAAA,IACpB;AACO,WAAA;AAAA,EACX;AAEI,MAAA;AACA,MAAAA,sBAAA,MAAM,SAAS,GAAG,GAAG;AACrB,eAAW,IAAI;AAAA,EAAA,OACZ;AACQ,eAAA;AAAA,EACf;AACM,QAAA,aAAa,aAAa,QAAQ;AACxC,SAAO,OAAO;AAAA,IACV,WACK,OAAO,CAAC,SAAS,KAAK,SAAS,EAC/B,IAAI,CAAC,SAAS;AAAA,MACX,WAAW,KAAK,UAAW,CAAC,CAAC;AAAA,MAC7B,UAAU,KAAK,UAAW,CAAC,CAAC;AAAA,IAAA,CAC/B;AAAA,EAAA;AAEb;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.d.ts b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.d.ts new file mode 100644 index 0000000..3f1f286 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.d.ts @@ -0,0 +1,39 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +export declare 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) => boolean | undefined; + isOwnLineComment: (node: Ast.Node) => boolean; +}; + +export declare type Item = { + itemParts?: Ast.Node[][]; + trailingComment: Ast.Comment | null; + trailingComma?: boolean; + leadingParbreak?: boolean; +}; + +/** + * 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. + */ +export declare function parsePgfkeys(ast: Ast.Node[], options?: { + allowParenGroups: boolean; +}): Item[]; + +/** + * 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. + */ +export declare function pgfkeysArgToObject(arg: Ast.Argument | Ast.Node[]): Record; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js new file mode 100644 index 0000000..3f8e3c5 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js @@ -0,0 +1,58 @@ +import { decorateArrayForPegjs, PgfkeysPegParser } from "@unified-latex/unified-latex-util-pegjs"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { printRaw } from "@unified-latex/unified-latex-util-print-raw"; +function createMatchers() { + return { + isChar: (node, char) => match.string(node, char), + isComma: (node) => match.string(node, ","), + isEquals: (node) => match.string(node, "="), + isWhitespace: (node) => match.whitespace(node), + isParbreak: (node) => match.parbreak(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parsePgfkeys(ast, options) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + const { allowParenGroups = false } = options || {}; + ast = decorateArrayForPegjs([...ast]); + return PgfkeysPegParser.parse(ast, { + ...createMatchers(), + allowParenGroups + }); +} +function pgfkeysArgToObject(arg) { + function parseFront(nodes) { + return printRaw(nodes); + } + function parseBack(nodes) { + if (!nodes) { + return []; + } + if (nodes.length === 1 && match.group(nodes[0])) { + return nodes[0].content; + } + return nodes; + } + let nodeList; + if (match.argument(arg)) { + nodeList = arg.content; + } else { + nodeList = arg; + } + const parsedArgs = parsePgfkeys(nodeList); + return Object.fromEntries( + parsedArgs.filter((part) => part.itemParts).map((part) => [ + parseFront(part.itemParts[0]), + parseBack(part.itemParts[1]) + ]) + ); +} +export { + createMatchers, + parsePgfkeys, + pgfkeysArgToObject +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js.map b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js.map new file mode 100644 index 0000000..c5887c6 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/pgfkeys-parser.ts","../libs/pgfkeys-to-object.ts"],"sourcesContent":["import { PgfkeysPegParser } 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 { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\n\n// The types returned by the grammar\n\nexport type Item = {\n itemParts?: Ast.Node[][];\n trailingComment: Ast.Comment | null;\n trailingComma?: boolean;\n leadingParbreak?: boolean;\n};\n\nexport function createMatchers() {\n return {\n isChar: (node: Ast.Node, char: string) => match.string(node, char),\n isComma: (node: Ast.Node) => match.string(node, \",\"),\n isEquals: (node: Ast.Node) => match.string(node, \"=\"),\n isWhitespace: (node: Ast.Node) => match.whitespace(node),\n isParbreak: (node: Ast.Node) => match.parbreak(node),\n isSameLineComment: (node: Ast.Node) =>\n match.comment(node) && node.sameline,\n isOwnLineComment: (node: Ast.Node) =>\n match.comment(node) && !node.sameline,\n };\n}\n\n/**\n * Parse the arguments of a Pgfkeys macro. The `ast`\n * is expected to be a comma separated list of `Item`s.\n * Each item can have 0 or more item parts, which are separated\n * by \"=\". If `itemPart` is undefined,\n *\n * If `options.allowParenGroups === true`, then commas that occur inside groups of parenthesis\n * will not be parsed as separators. This is useful for parsing tikz `\\foreach` loops.\n */\nexport function parsePgfkeys(\n ast: Ast.Node[],\n options?: { allowParenGroups: boolean }\n): Item[] {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\n const { allowParenGroups = false } = options || {};\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 PgfkeysPegParser.parse(ast, {\n ...createMatchers(),\n allowParenGroups,\n }) as Item[];\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parsePgfkeys } from \"./pgfkeys-parser\";\n\n/**\n * Parse `arg` as pgfkeys and return a JavaScript object with the results.\n * The keys will be normalized to strings and the values will be arrays of nodes.\n */\nexport function pgfkeysArgToObject(\n arg: Ast.Argument | Ast.Node[]\n): Record {\n function parseFront(nodes: Ast.Node[]): string {\n return printRaw(nodes);\n }\n function parseBack(nodes: Ast.Node[] | undefined): Ast.Node[] {\n if (!nodes) {\n return [];\n }\n // If the only element is a group, we unwrap it\n if (nodes.length === 1 && match.group(nodes[0])) {\n return nodes[0].content;\n }\n return nodes;\n }\n\n let nodeList: Ast.Node[];\n if (match.argument(arg)) {\n nodeList = arg.content;\n } else {\n nodeList = arg;\n }\n const parsedArgs = parsePgfkeys(nodeList);\n return Object.fromEntries(\n parsedArgs\n .filter((part) => part.itemParts)\n .map((part) => [\n parseFront(part.itemParts![0]),\n parseBack(part.itemParts![1]),\n ])\n );\n}\n"],"names":[],"mappings":";;;AAcO,SAAS,iBAAiB;AACtB,SAAA;AAAA,IACH,QAAQ,CAAC,MAAgB,SAAiB,MAAM,OAAO,MAAM,IAAI;AAAA,IACjE,SAAS,CAAC,SAAmB,MAAM,OAAO,MAAM,GAAG;AAAA,IACnD,UAAU,CAAC,SAAmB,MAAM,OAAO,MAAM,GAAG;AAAA,IACpD,cAAc,CAAC,SAAmB,MAAM,WAAW,IAAI;AAAA,IACvD,YAAY,CAAC,SAAmB,MAAM,SAAS,IAAI;AAAA,IACnD,mBAAmB,CAAC,SAChB,MAAM,QAAQ,IAAI,KAAK,KAAK;AAAA,IAChC,kBAAkB,CAAC,SACf,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK;AAAA,EAAA;AAEzC;AAWgB,SAAA,aACZ,KACA,SACM;AACN,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACf,UAAA,IAAI,MAAM,iCAAiC;AAAA,EACrD;AACA,QAAM,EAAE,mBAAmB,UAAU,WAAW,CAAA;AAGhD,QAAM,sBAAsB,CAAC,GAAG,GAAG,CAAC;AAG7B,SAAA,iBAAiB,MAAM,KAAK;AAAA,IAC/B,GAAG,eAAe;AAAA,IAClB;AAAA,EAAA,CACH;AACL;AC7CO,SAAS,mBACZ,KAC0B;AAC1B,WAAS,WAAW,OAA2B;AAC3C,WAAO,SAAS,KAAK;AAAA,EACzB;AACA,WAAS,UAAU,OAA2C;AAC1D,QAAI,CAAC,OAAO;AACR,aAAO;IACX;AAEI,QAAA,MAAM,WAAW,KAAK,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG;AACtC,aAAA,MAAM,CAAC,EAAE;AAAA,IACpB;AACO,WAAA;AAAA,EACX;AAEI,MAAA;AACA,MAAA,MAAM,SAAS,GAAG,GAAG;AACrB,eAAW,IAAI;AAAA,EAAA,OACZ;AACQ,eAAA;AAAA,EACf;AACM,QAAA,aAAa,aAAa,QAAQ;AACxC,SAAO,OAAO;AAAA,IACV,WACK,OAAO,CAAC,SAAS,KAAK,SAAS,EAC/B,IAAI,CAAC,SAAS;AAAA,MACX,WAAW,KAAK,UAAW,CAAC,CAAC;AAAA,MAC7B,UAAU,KAAK,UAAW,CAAC,CAAC;AAAA,IAAA,CAC/B;AAAA,EAAA;AAEb;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-pgfkeys/package.json b/node_modules/@unified-latex/unified-latex-util-pgfkeys/package.json new file mode 100644 index 0000000..0e64358 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-pgfkeys/package.json @@ -0,0 +1,54 @@ +{ + "name": "@unified-latex/unified-latex-util-pgfkeys", + "version": "1.8.1", + "description": "Functions for manipulating pgfkeys-like arguments in a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-print-raw/README.md b/node_modules/@unified-latex/unified-latex-util-print-raw/README.md new file mode 100644 index 0000000..24d106f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-print-raw/README.md @@ -0,0 +1,48 @@ + + + + +# unified-latex-util-print-raw + +## What is this? + +Functions to print a `unified-latex` Abstract Syntax Tree (AST) to a string. + +## When should I use this? + +If you want to directly print an `Ast.Ast` to a string without any pretty printing or formatting. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-print-raw +``` + +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 + +## `printRaw(node, options)` + +Renders the AST to a string without any pretty printing. + +```typescript +function printRaw( + node: Printable | Printable[], + options: { asArray: false } +): string; +``` + +**Parameters** + +| Param | Type | Description | +| :------ | :------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| node | `Printable \| Printable[]` | | +| options | `{ asArray: false; }` | * Setting `asArray` to `true` will return an array of strings and the symbol `linebreak`, so that printing can be customized. | + +# Constants + +| Name | Type | +| :---------- | :------- | +| `linebreak` | `Symbol` | diff --git a/node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs b/node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs new file mode 100644 index 0000000..c8ed3a6 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs @@ -0,0 +1,91 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const linebreak = Symbol("linebreak"); +const ESCAPE = "\\"; +function _printRaw(node) { + if (typeof node === "string") { + return [node]; + } + if (Array.isArray(node)) { + return [].concat( + ...node.map((n) => _printRaw(n)) + ); + } + let argsString, escape; + switch (node.type) { + case "root": + return _printRaw(node.content); + case "argument": + return [node.openMark, ..._printRaw(node.content), node.closeMark]; + case "comment": + let suffix = node.suffixParbreak ? "" : linebreak; + let leadingWhitespace = ""; + if (node.sameline && node.leadingWhitespace) { + leadingWhitespace = " "; + } + if (node.sameline) { + return [ + leadingWhitespace, + "%", + ..._printRaw(node.content), + suffix + ]; + } + return [linebreak, "%", ..._printRaw(node.content), suffix]; + case "environment": + case "mathenv": + case "verbatim": + let env = _printRaw(node.env); + let envStart = [ESCAPE + "begin{", ...env, "}"]; + let envEnd = [ESCAPE + "end{", ...env, "}"]; + argsString = node.args == null ? [] : _printRaw(node.args); + return [ + ...envStart, + ...argsString, + ..._printRaw(node.content), + ...envEnd + ]; + case "displaymath": + return [ESCAPE + "[", ..._printRaw(node.content), ESCAPE + "]"]; + case "group": + return ["{", ..._printRaw(node.content), "}"]; + case "inlinemath": + return ["$", ..._printRaw(node.content), "$"]; + case "macro": + argsString = node.args == null ? [] : _printRaw(node.args); + escape = node.escapeToken == null ? ESCAPE : node.escapeToken; + return [escape, ..._printRaw(node.content), ...argsString]; + case "parbreak": + return [linebreak, linebreak]; + case "string": + return [node.content]; + case "verb": + return [ + ESCAPE, + node.env, + node.escape, + ..._printRaw(node.content), + node.escape + ]; + case "whitespace": + return [" "]; + default: + console.warn( + "Cannot find render for node ", + node, + `(of type ${typeof node})` + ); + return ["" + node]; + } +} +function printRaw(node, options) { + const asArray = options != null ? options.asArray : false; + const printedTokens = _printRaw(node); + if (asArray) { + return printedTokens; + } + return printedTokens.map((x) => x === linebreak ? "\n" : x).join(""); +} +exports.linebreak = linebreak; +exports.printRaw = printRaw; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs.map new file mode 100644 index 0000000..3c8acc2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-print-raw/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/print-raw.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\n\ntype Printable = Ast.Node | Ast.Argument | string;\ntype PrintToken = string | typeof linebreak;\n\nexport const linebreak = Symbol(\"linebreak\");\nconst ESCAPE = \"\\\\\";\n\n/**\n * Renders the AST to an array inserting `linebreak` where needed;\n * This array may be nested.\n *\n * @param {*} node\n */\nfunction _printRaw(node: Printable | Printable[]): PrintToken[] {\n if (typeof node === \"string\") {\n return [node];\n }\n if (Array.isArray(node)) {\n return ([] as PrintToken[]).concat(\n ...node.map((n: Printable) => _printRaw(n))\n );\n }\n // tmp variables\n let argsString, escape;\n switch (node.type) {\n case \"root\":\n return _printRaw(node.content);\n case \"argument\":\n return [node.openMark, ..._printRaw(node.content), node.closeMark];\n case \"comment\":\n let suffix = node.suffixParbreak ? \"\" : linebreak;\n // A comment is responsible for printing its own leading whitespace\n let leadingWhitespace = \"\";\n if (node.sameline && node.leadingWhitespace) {\n leadingWhitespace = \" \";\n }\n if (node.sameline) {\n return [\n leadingWhitespace,\n \"%\",\n ..._printRaw(node.content),\n suffix,\n ];\n }\n return [linebreak, \"%\", ..._printRaw(node.content), suffix];\n case \"environment\":\n case \"mathenv\":\n case \"verbatim\":\n let env = _printRaw(node.env);\n let envStart: PrintToken[] = [ESCAPE + \"begin{\", ...env, \"}\"];\n let envEnd: PrintToken[] = [ESCAPE + \"end{\", ...env, \"}\"];\n argsString =\n (node as any).args == null ? [] : _printRaw((node as any).args);\n return [\n ...envStart,\n ...argsString,\n ..._printRaw(node.content),\n ...envEnd,\n ];\n case \"displaymath\":\n return [ESCAPE + \"[\", ..._printRaw(node.content), ESCAPE + \"]\"];\n case \"group\":\n return [\"{\", ..._printRaw(node.content), \"}\"];\n case \"inlinemath\":\n return [\"$\", ..._printRaw(node.content), \"$\"];\n case \"macro\":\n argsString = node.args == null ? [] : _printRaw(node.args);\n escape = node.escapeToken == null ? ESCAPE : node.escapeToken;\n return [escape, ..._printRaw(node.content), ...argsString];\n case \"parbreak\":\n return [linebreak, linebreak];\n case \"string\":\n return [node.content];\n case \"verb\":\n return [\n ESCAPE,\n node.env,\n node.escape,\n ..._printRaw(node.content),\n node.escape,\n ];\n case \"whitespace\":\n return [\" \"];\n\n default:\n console.warn(\n \"Cannot find render for node \",\n node,\n `(of type ${typeof node})`\n );\n return [\"\" + node];\n }\n}\n\n/**\n * Renders the AST to a string without any pretty printing.\n *\n * @param {*} node\n * @param {*} options - Setting `asArray` to `true` will return an array of strings and the symbol `linebreak`, so that printing can be customized.\n */\nexport function printRaw(\n node: Printable | Printable[],\n options?: { asArray: false }\n): string;\nexport function printRaw(\n node: Printable | Printable[],\n options: { asArray: true }\n): PrintToken[];\nexport function printRaw(node: Printable | Printable[], options?: object): any {\n const asArray = options != null ? (options as any).asArray : false;\n const printedTokens = _printRaw(node);\n if (asArray) {\n return printedTokens;\n }\n return printedTokens.map((x) => (x === linebreak ? \"\\n\" : x)).join(\"\");\n}\n"],"names":[],"mappings":";;AAKa,MAAA,YAAY,OAAO,WAAW;AAC3C,MAAM,SAAS;AAQf,SAAS,UAAU,MAA6C;AACxD,MAAA,OAAO,SAAS,UAAU;AAC1B,WAAO,CAAC,IAAI;AAAA,EAChB;AACI,MAAA,MAAM,QAAQ,IAAI,GAAG;AACrB,WAAQ,CAAoB,EAAA;AAAA,MACxB,GAAG,KAAK,IAAI,CAAC,MAAiB,UAAU,CAAC,CAAC;AAAA,IAAA;AAAA,EAElD;AAEA,MAAI,YAAY;AAChB,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACM,aAAA,UAAU,KAAK,OAAO;AAAA,IACjC,KAAK;AACM,aAAA,CAAC,KAAK,UAAU,GAAG,UAAU,KAAK,OAAO,GAAG,KAAK,SAAS;AAAA,IACrE,KAAK;AACG,UAAA,SAAS,KAAK,iBAAiB,KAAK;AAExC,UAAI,oBAAoB;AACpB,UAAA,KAAK,YAAY,KAAK,mBAAmB;AACrB,4BAAA;AAAA,MACxB;AACA,UAAI,KAAK,UAAU;AACR,eAAA;AAAA,UACH;AAAA,UACA;AAAA,UACA,GAAG,UAAU,KAAK,OAAO;AAAA,UACzB;AAAA,QAAA;AAAA,MAER;AACO,aAAA,CAAC,WAAW,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,MAAM;AAAA,IAC9D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACG,UAAA,MAAM,UAAU,KAAK,GAAG;AAC5B,UAAI,WAAyB,CAAC,SAAS,UAAU,GAAG,KAAK,GAAG;AAC5D,UAAI,SAAuB,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAG;AACxD,mBACK,KAAa,QAAQ,OAAO,CAAK,IAAA,UAAW,KAAa,IAAI;AAC3D,aAAA;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG,UAAU,KAAK,OAAO;AAAA,QACzB,GAAG;AAAA,MAAA;AAAA,IAEX,KAAK;AACM,aAAA,CAAC,SAAS,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,SAAS,GAAG;AAAA,IAClE,KAAK;AACD,aAAO,CAAC,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,GAAG;AAAA,IAChD,KAAK;AACD,aAAO,CAAC,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,GAAG;AAAA,IAChD,KAAK;AACD,mBAAa,KAAK,QAAQ,OAAO,CAAK,IAAA,UAAU,KAAK,IAAI;AACzD,eAAS,KAAK,eAAe,OAAO,SAAS,KAAK;AAC3C,aAAA,CAAC,QAAQ,GAAG,UAAU,KAAK,OAAO,GAAG,GAAG,UAAU;AAAA,IAC7D,KAAK;AACM,aAAA,CAAC,WAAW,SAAS;AAAA,IAChC,KAAK;AACM,aAAA,CAAC,KAAK,OAAO;AAAA,IACxB,KAAK;AACM,aAAA;AAAA,QACH;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,GAAG,UAAU,KAAK,OAAO;AAAA,QACzB,KAAK;AAAA,MAAA;AAAA,IAEb,KAAK;AACD,aAAO,CAAC,GAAG;AAAA,IAEf;AACY,cAAA;AAAA,QACJ;AAAA,QACA;AAAA,QACA,YAAY,OAAO,IAAI;AAAA,MAAA;AAEpB,aAAA,CAAC,KAAK,IAAI;AAAA,EACzB;AACJ;AAgBgB,SAAA,SAAS,MAA+B,SAAuB;AAC3E,QAAM,UAAU,WAAW,OAAQ,QAAgB,UAAU;AACvD,QAAA,gBAAgB,UAAU,IAAI;AACpC,MAAI,SAAS;AACF,WAAA;AAAA,EACX;AACO,SAAA,cAAc,IAAI,CAAC,MAAO,MAAM,YAAY,OAAO,CAAE,EAAE,KAAK,EAAE;AACzE;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-print-raw/index.d.ts b/node_modules/@unified-latex/unified-latex-util-print-raw/index.d.ts new file mode 100644 index 0000000..df46044 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-print-raw/index.d.ts @@ -0,0 +1,23 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +export declare const linebreak: unique symbol; + +declare type Printable = Ast.Node | Ast.Argument | string; + +/** + * Renders the AST to a string without any pretty printing. + * + * @param {*} node + * @param {*} options - Setting `asArray` to `true` will return an array of strings and the symbol `linebreak`, so that printing can be customized. + */ +export declare function printRaw(node: Printable | Printable[], options?: { + asArray: false; +}): string; + +export declare function printRaw(node: Printable | Printable[], options: { + asArray: true; +}): PrintToken[]; + +declare type PrintToken = string | typeof linebreak; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-print-raw/index.js b/node_modules/@unified-latex/unified-latex-util-print-raw/index.js new file mode 100644 index 0000000..a6dafb0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-print-raw/index.js @@ -0,0 +1,91 @@ +const linebreak = Symbol("linebreak"); +const ESCAPE = "\\"; +function _printRaw(node) { + if (typeof node === "string") { + return [node]; + } + if (Array.isArray(node)) { + return [].concat( + ...node.map((n) => _printRaw(n)) + ); + } + let argsString, escape; + switch (node.type) { + case "root": + return _printRaw(node.content); + case "argument": + return [node.openMark, ..._printRaw(node.content), node.closeMark]; + case "comment": + let suffix = node.suffixParbreak ? "" : linebreak; + let leadingWhitespace = ""; + if (node.sameline && node.leadingWhitespace) { + leadingWhitespace = " "; + } + if (node.sameline) { + return [ + leadingWhitespace, + "%", + ..._printRaw(node.content), + suffix + ]; + } + return [linebreak, "%", ..._printRaw(node.content), suffix]; + case "environment": + case "mathenv": + case "verbatim": + let env = _printRaw(node.env); + let envStart = [ESCAPE + "begin{", ...env, "}"]; + let envEnd = [ESCAPE + "end{", ...env, "}"]; + argsString = node.args == null ? [] : _printRaw(node.args); + return [ + ...envStart, + ...argsString, + ..._printRaw(node.content), + ...envEnd + ]; + case "displaymath": + return [ESCAPE + "[", ..._printRaw(node.content), ESCAPE + "]"]; + case "group": + return ["{", ..._printRaw(node.content), "}"]; + case "inlinemath": + return ["$", ..._printRaw(node.content), "$"]; + case "macro": + argsString = node.args == null ? [] : _printRaw(node.args); + escape = node.escapeToken == null ? ESCAPE : node.escapeToken; + return [escape, ..._printRaw(node.content), ...argsString]; + case "parbreak": + return [linebreak, linebreak]; + case "string": + return [node.content]; + case "verb": + return [ + ESCAPE, + node.env, + node.escape, + ..._printRaw(node.content), + node.escape + ]; + case "whitespace": + return [" "]; + default: + console.warn( + "Cannot find render for node ", + node, + `(of type ${typeof node})` + ); + return ["" + node]; + } +} +function printRaw(node, options) { + const asArray = options != null ? options.asArray : false; + const printedTokens = _printRaw(node); + if (asArray) { + return printedTokens; + } + return printedTokens.map((x) => x === linebreak ? "\n" : x).join(""); +} +export { + linebreak, + printRaw +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-print-raw/index.js.map b/node_modules/@unified-latex/unified-latex-util-print-raw/index.js.map new file mode 100644 index 0000000..c85e6dd --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-print-raw/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/print-raw.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\n\ntype Printable = Ast.Node | Ast.Argument | string;\ntype PrintToken = string | typeof linebreak;\n\nexport const linebreak = Symbol(\"linebreak\");\nconst ESCAPE = \"\\\\\";\n\n/**\n * Renders the AST to an array inserting `linebreak` where needed;\n * This array may be nested.\n *\n * @param {*} node\n */\nfunction _printRaw(node: Printable | Printable[]): PrintToken[] {\n if (typeof node === \"string\") {\n return [node];\n }\n if (Array.isArray(node)) {\n return ([] as PrintToken[]).concat(\n ...node.map((n: Printable) => _printRaw(n))\n );\n }\n // tmp variables\n let argsString, escape;\n switch (node.type) {\n case \"root\":\n return _printRaw(node.content);\n case \"argument\":\n return [node.openMark, ..._printRaw(node.content), node.closeMark];\n case \"comment\":\n let suffix = node.suffixParbreak ? \"\" : linebreak;\n // A comment is responsible for printing its own leading whitespace\n let leadingWhitespace = \"\";\n if (node.sameline && node.leadingWhitespace) {\n leadingWhitespace = \" \";\n }\n if (node.sameline) {\n return [\n leadingWhitespace,\n \"%\",\n ..._printRaw(node.content),\n suffix,\n ];\n }\n return [linebreak, \"%\", ..._printRaw(node.content), suffix];\n case \"environment\":\n case \"mathenv\":\n case \"verbatim\":\n let env = _printRaw(node.env);\n let envStart: PrintToken[] = [ESCAPE + \"begin{\", ...env, \"}\"];\n let envEnd: PrintToken[] = [ESCAPE + \"end{\", ...env, \"}\"];\n argsString =\n (node as any).args == null ? [] : _printRaw((node as any).args);\n return [\n ...envStart,\n ...argsString,\n ..._printRaw(node.content),\n ...envEnd,\n ];\n case \"displaymath\":\n return [ESCAPE + \"[\", ..._printRaw(node.content), ESCAPE + \"]\"];\n case \"group\":\n return [\"{\", ..._printRaw(node.content), \"}\"];\n case \"inlinemath\":\n return [\"$\", ..._printRaw(node.content), \"$\"];\n case \"macro\":\n argsString = node.args == null ? [] : _printRaw(node.args);\n escape = node.escapeToken == null ? ESCAPE : node.escapeToken;\n return [escape, ..._printRaw(node.content), ...argsString];\n case \"parbreak\":\n return [linebreak, linebreak];\n case \"string\":\n return [node.content];\n case \"verb\":\n return [\n ESCAPE,\n node.env,\n node.escape,\n ..._printRaw(node.content),\n node.escape,\n ];\n case \"whitespace\":\n return [\" \"];\n\n default:\n console.warn(\n \"Cannot find render for node \",\n node,\n `(of type ${typeof node})`\n );\n return [\"\" + node];\n }\n}\n\n/**\n * Renders the AST to a string without any pretty printing.\n *\n * @param {*} node\n * @param {*} options - Setting `asArray` to `true` will return an array of strings and the symbol `linebreak`, so that printing can be customized.\n */\nexport function printRaw(\n node: Printable | Printable[],\n options?: { asArray: false }\n): string;\nexport function printRaw(\n node: Printable | Printable[],\n options: { asArray: true }\n): PrintToken[];\nexport function printRaw(node: Printable | Printable[], options?: object): any {\n const asArray = options != null ? (options as any).asArray : false;\n const printedTokens = _printRaw(node);\n if (asArray) {\n return printedTokens;\n }\n return printedTokens.map((x) => (x === linebreak ? \"\\n\" : x)).join(\"\");\n}\n"],"names":[],"mappings":"AAKa,MAAA,YAAY,OAAO,WAAW;AAC3C,MAAM,SAAS;AAQf,SAAS,UAAU,MAA6C;AACxD,MAAA,OAAO,SAAS,UAAU;AAC1B,WAAO,CAAC,IAAI;AAAA,EAChB;AACI,MAAA,MAAM,QAAQ,IAAI,GAAG;AACrB,WAAQ,CAAoB,EAAA;AAAA,MACxB,GAAG,KAAK,IAAI,CAAC,MAAiB,UAAU,CAAC,CAAC;AAAA,IAAA;AAAA,EAElD;AAEA,MAAI,YAAY;AAChB,UAAQ,KAAK,MAAM;AAAA,IACf,KAAK;AACM,aAAA,UAAU,KAAK,OAAO;AAAA,IACjC,KAAK;AACM,aAAA,CAAC,KAAK,UAAU,GAAG,UAAU,KAAK,OAAO,GAAG,KAAK,SAAS;AAAA,IACrE,KAAK;AACG,UAAA,SAAS,KAAK,iBAAiB,KAAK;AAExC,UAAI,oBAAoB;AACpB,UAAA,KAAK,YAAY,KAAK,mBAAmB;AACrB,4BAAA;AAAA,MACxB;AACA,UAAI,KAAK,UAAU;AACR,eAAA;AAAA,UACH;AAAA,UACA;AAAA,UACA,GAAG,UAAU,KAAK,OAAO;AAAA,UACzB;AAAA,QAAA;AAAA,MAER;AACO,aAAA,CAAC,WAAW,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,MAAM;AAAA,IAC9D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACG,UAAA,MAAM,UAAU,KAAK,GAAG;AAC5B,UAAI,WAAyB,CAAC,SAAS,UAAU,GAAG,KAAK,GAAG;AAC5D,UAAI,SAAuB,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAG;AACxD,mBACK,KAAa,QAAQ,OAAO,CAAK,IAAA,UAAW,KAAa,IAAI;AAC3D,aAAA;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG,UAAU,KAAK,OAAO;AAAA,QACzB,GAAG;AAAA,MAAA;AAAA,IAEX,KAAK;AACM,aAAA,CAAC,SAAS,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,SAAS,GAAG;AAAA,IAClE,KAAK;AACD,aAAO,CAAC,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,GAAG;AAAA,IAChD,KAAK;AACD,aAAO,CAAC,KAAK,GAAG,UAAU,KAAK,OAAO,GAAG,GAAG;AAAA,IAChD,KAAK;AACD,mBAAa,KAAK,QAAQ,OAAO,CAAK,IAAA,UAAU,KAAK,IAAI;AACzD,eAAS,KAAK,eAAe,OAAO,SAAS,KAAK;AAC3C,aAAA,CAAC,QAAQ,GAAG,UAAU,KAAK,OAAO,GAAG,GAAG,UAAU;AAAA,IAC7D,KAAK;AACM,aAAA,CAAC,WAAW,SAAS;AAAA,IAChC,KAAK;AACM,aAAA,CAAC,KAAK,OAAO;AAAA,IACxB,KAAK;AACM,aAAA;AAAA,QACH;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,GAAG,UAAU,KAAK,OAAO;AAAA,QACzB,KAAK;AAAA,MAAA;AAAA,IAEb,KAAK;AACD,aAAO,CAAC,GAAG;AAAA,IAEf;AACY,cAAA;AAAA,QACJ;AAAA,QACA;AAAA,QACA,YAAY,OAAO,IAAI;AAAA,MAAA;AAEpB,aAAA,CAAC,KAAK,IAAI;AAAA,EACzB;AACJ;AAgBgB,SAAA,SAAS,MAA+B,SAAuB;AAC3E,QAAM,UAAU,WAAW,OAAQ,QAAgB,UAAU;AACvD,QAAA,gBAAgB,UAAU,IAAI;AACpC,MAAI,SAAS;AACF,WAAA;AAAA,EACX;AACO,SAAA,cAAc,IAAI,CAAC,MAAO,MAAM,YAAY,OAAO,CAAE,EAAE,KAAK,EAAE;AACzE;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-print-raw/package.json b/node_modules/@unified-latex/unified-latex-util-print-raw/package.json new file mode 100644 index 0000000..5ea2715 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-print-raw/package.json @@ -0,0 +1,51 @@ +{ + "name": "@unified-latex/unified-latex-util-print-raw", + "version": "1.8.0", + "description": "Print a unified-latex AST with no fancy formatting", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-render-info/README.md b/node_modules/@unified-latex/unified-latex-util-render-info/README.md new file mode 100644 index 0000000..3e702cb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-render-info/README.md @@ -0,0 +1,63 @@ + + + + +# unified-latex-util-render-info + +## What is this? + +Functions to help modify the `_renderInfo` of a `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you want to compare the structure of an AST without position information or extra information +that is kept for pretty-printing, these functions can be used to remove/modify the `_renderInfo` +of an `Ast.Node`. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-render-info +``` + +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 + +## `trimRenderInfo(ast)` + +Removes any `_renderInfo` and `position` tags present in the AST. This +operation is *destructive*. + +```typescript +function trimRenderInfo(ast: Ast.Ast): T; +``` + +**Parameters** + +| Param | Type | +| :---- | :-------- | +| ast | `Ast.Ast` | + +## `updateRenderInfo(node, renderInfo)` + +Updates the `._renderInfo` property on a node to include +whatever has been supplied to `renderInfo`. If `renderInfo` +is null, no update is performed. + +*This operation mutates `node`* + +```typescript +function updateRenderInfo( + node: Ast.Node | Ast.Argument, + renderInfo: {} +): Ast.Node | Ast.Argument; +``` + +**Parameters** + +| Param | Type | +| :--------- | :------------------------- | +| node | `Ast.Node \| Ast.Argument` | +| renderInfo | `{}` | diff --git a/node_modules/@unified-latex/unified-latex-util-render-info/index.cjs b/node_modules/@unified-latex/unified-latex-util-render-info/index.cjs new file mode 100644 index 0000000..eee7751 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-render-info/index.cjs @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +function updateRenderInfo(node, renderInfo) { + if (renderInfo != null) { + node._renderInfo = { ...node._renderInfo || {}, ...renderInfo }; + } + return node; +} +function trimRenderInfo(ast) { + unifiedLatexUtilVisit.visit(ast, (node) => { + delete node._renderInfo; + delete node.position; + }); + return ast; +} +exports.trimRenderInfo = trimRenderInfo; +exports.updateRenderInfo = updateRenderInfo; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-render-info/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-render-info/index.cjs.map new file mode 100644 index 0000000..fa5bc67 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-render-info/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../index.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Updates the `._renderInfo` property on a node to include\n * whatever has been supplied to `renderInfo`. If `renderInfo`\n * is null, no update is performed.\n *\n * *This operation mutates `node`*\n */\nexport function updateRenderInfo(\n node: Ast.Node | Ast.Argument,\n renderInfo: object | null | undefined\n) {\n if (renderInfo != null) {\n node._renderInfo = { ...(node._renderInfo || {}), ...renderInfo };\n }\n return node;\n}\n\n/**\n * Removes any `_renderInfo` and `position` tags present in the AST. This\n * operation is _destructive_.\n */\nexport function trimRenderInfo(ast: T) {\n visit(ast, (node) => {\n delete node._renderInfo;\n delete node.position;\n });\n return ast;\n}\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 help modify the `_renderInfo` of a `unified-latex` Abstract Syntax Tree (AST).\n *\n * ## When should I use this?\n *\n * If you want to compare the structure of an AST without position information or extra information\n * that is kept for pretty-printing, these functions can be used to remove/modify the `_renderInfo`\n * of an `Ast.Node`.\n */\n"],"names":["visit"],"mappings":";;;AAUgB,SAAA,iBACZ,MACA,YACF;AACE,MAAI,cAAc,MAAM;AACf,SAAA,cAAc,EAAE,GAAI,KAAK,eAAe,CAAA,GAAK,GAAG,WAAW;AAAA,EAAA;AAE7D,SAAA;AACX;AAMO,SAAS,eAAkC,KAAQ;AAChDA,8BAAA,KAAK,CAAC,SAAS;AACjB,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EAAA,CACf;AACM,SAAA;AACX;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-render-info/index.d.ts b/node_modules/@unified-latex/unified-latex-util-render-info/index.d.ts new file mode 100644 index 0000000..e917195 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-render-info/index.d.ts @@ -0,0 +1,18 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +/** + * Removes any `_renderInfo` and `position` tags present in the AST. This + * operation is _destructive_. + */ +export declare function trimRenderInfo(ast: T): T; + +/** + * Updates the `._renderInfo` property on a node to include + * whatever has been supplied to `renderInfo`. If `renderInfo` + * is null, no update is performed. + * + * *This operation mutates `node`* + */ +export declare function updateRenderInfo(node: Ast.Node | Ast.Argument, renderInfo: object | null | undefined): Ast.Node | Ast.Argument; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-render-info/index.js b/node_modules/@unified-latex/unified-latex-util-render-info/index.js new file mode 100644 index 0000000..fb9463e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-render-info/index.js @@ -0,0 +1,19 @@ +import { visit } from "@unified-latex/unified-latex-util-visit"; +function updateRenderInfo(node, renderInfo) { + if (renderInfo != null) { + node._renderInfo = { ...node._renderInfo || {}, ...renderInfo }; + } + return node; +} +function trimRenderInfo(ast) { + visit(ast, (node) => { + delete node._renderInfo; + delete node.position; + }); + return ast; +} +export { + trimRenderInfo, + updateRenderInfo +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-render-info/index.js.map b/node_modules/@unified-latex/unified-latex-util-render-info/index.js.map new file mode 100644 index 0000000..4adb167 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-render-info/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../index.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Updates the `._renderInfo` property on a node to include\n * whatever has been supplied to `renderInfo`. If `renderInfo`\n * is null, no update is performed.\n *\n * *This operation mutates `node`*\n */\nexport function updateRenderInfo(\n node: Ast.Node | Ast.Argument,\n renderInfo: object | null | undefined\n) {\n if (renderInfo != null) {\n node._renderInfo = { ...(node._renderInfo || {}), ...renderInfo };\n }\n return node;\n}\n\n/**\n * Removes any `_renderInfo` and `position` tags present in the AST. This\n * operation is _destructive_.\n */\nexport function trimRenderInfo(ast: T) {\n visit(ast, (node) => {\n delete node._renderInfo;\n delete node.position;\n });\n return ast;\n}\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 help modify the `_renderInfo` of a `unified-latex` Abstract Syntax Tree (AST).\n *\n * ## When should I use this?\n *\n * If you want to compare the structure of an AST without position information or extra information\n * that is kept for pretty-printing, these functions can be used to remove/modify the `_renderInfo`\n * of an `Ast.Node`.\n */\n"],"names":[],"mappings":";AAUgB,SAAA,iBACZ,MACA,YACF;AACE,MAAI,cAAc,MAAM;AACf,SAAA,cAAc,EAAE,GAAI,KAAK,eAAe,CAAA,GAAK,GAAG,WAAW;AAAA,EAAA;AAE7D,SAAA;AACX;AAMO,SAAS,eAAkC,KAAQ;AAChD,QAAA,KAAK,CAAC,SAAS;AACjB,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EAAA,CACf;AACM,SAAA;AACX;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-render-info/package.json b/node_modules/@unified-latex/unified-latex-util-render-info/package.json new file mode 100644 index 0000000..9b9191d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-render-info/package.json @@ -0,0 +1,52 @@ +{ + "name": "@unified-latex/unified-latex-util-render-info", + "version": "1.8.2", + "description": "Functions for modifying a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-replace/README.md b/node_modules/@unified-latex/unified-latex-util-replace/README.md new file mode 100644 index 0000000..617affc --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-replace/README.md @@ -0,0 +1,278 @@ + + + + +# unified-latex-util-replace + +## What is this? + +Functions to help modify a `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you want to recursively replace particular AST nodes. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-replace +``` + +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. + +# Plugins + +## `unifiedLatexReplaceStreamingCommands` + +Unified plugin to replace all found streaming commands with their argument-style equivalents. +This only applies to sections of the tree with no math ancestor. + +### Usage + +`unified().use(unifiedLatexReplaceStreamingCommands[, options])` + +#### options + +```typescript +PluginOptions +``` + +### Type + +`Plugin` + +```typescript +function unifiedLatexReplaceStreamingCommands( + options: PluginOptions +): (tree: Ast.Root) => void; +``` + +where + +```typescript +type PluginOptions = { + replacers: Record< + string, + (content: Ast.Node[], streamingCommand: Ast.Macro) => Ast.Node | Ast.Node[] + >; +}; +``` + +# Functions + +## `firstSignificantNode(nodes, parbreaksAreInsignificant)` + +Returns the first non-whitespace/non-comment node in `nodes`. If there is no such +node, `null` is returned. + +```typescript +function firstSignificantNode( + nodes: Ast.Node[], + parbreaksAreInsignificant: Boolean +): Ast.Node; +``` + +**Parameters** + +| Param | Type | +| :------------------------ | :----------- | +| nodes | `Ast.Node[]` | +| parbreaksAreInsignificant | `Boolean` | + +## `firstSignificantNodeIndex(nodes, parbreaksAreInsignificant)` + +Returns the index of the first non-whitespace/non-comment node in `nodes`. If there is no such +node, `null` is returned. + +```typescript +function firstSignificantNodeIndex( + nodes: Ast.Node[], + parbreaksAreInsignificant: Boolean +): number; +``` + +**Parameters** + +| Param | Type | +| :------------------------ | :----------- | +| nodes | `Ast.Node[]` | +| parbreaksAreInsignificant | `Boolean` | + +## `lastSignificantNode(nodes, parbreaksAreInsignificant)` + +Returns the last non-whitespace/non-comment node in `nodes`. If there is no such +node, `null` is returned. + +```typescript +function lastSignificantNode( + nodes: Ast.Node[], + parbreaksAreInsignificant: Boolean +): Ast.Node; +``` + +**Parameters** + +| Param | Type | +| :------------------------ | :----------- | +| nodes | `Ast.Node[]` | +| parbreaksAreInsignificant | `Boolean` | + +## `lastSignificantNodeIndex(nodes, parbreaksAreInsignificant)` + +Returns the index of the last non-whitespace/non-comment node in `nodes`. If there is no such +node, `null` is returned. + +```typescript +function lastSignificantNodeIndex( + nodes: Ast.Node[], + parbreaksAreInsignificant: Boolean +): number; +``` + +**Parameters** + +| Param | Type | +| :------------------------ | :----------- | +| nodes | `Ast.Node[]` | +| parbreaksAreInsignificant | `Boolean` | + +## `replaceNode(ast, visitor)` + +Recursively replace nodes in `ast`. The `visitor` function is called on each node. If +`visitor` returns a node or an array of nodes, those nodes replace the node passed to `visitor`. +If `null` is returned, the node is deleted. If `undefined` is returned, no replacement happens. + +```typescript +function replaceNode( + ast: Ast.Ast, + visitor: ( + node: Ast.Node | Ast.Argument, + info: VisitInfo + ) => + | Ast.Node + | Ast.Argument + | (Ast.Node | Ast.Argument)[] + | null + | undefined + | void +): void; +``` + +**Parameters** + +| Param | Type | +| :------ | :-------------------------------- | +| ast | `Ast.Ast` | +| visitor | Omitted | + +## `replaceNodeDuringVisit(replacement, info)` + +Replaces the current node with `replacement`. It is assumed that the current +node is in an array that is a child of a parent element. If this is not the case, +the function will error. + +```typescript +function replaceNodeDuringVisit( + replacement: Ast.Node | Ast.Argument | (Ast.Node | Ast.Argument)[], + info: VisitInfo +): void; +``` + +**Parameters** + +| Param | Type | +| :---------- | :-------------------------------- | +| replacement | Omitted | +| info | `VisitInfo` | + +where + +```typescript +type VisitInfo = { + /** + * If the element was accessed via an attribute, the attribute key is specified. + */ + readonly key: string | undefined; + /** + * If the element was accessed in an array, the index is specified. + */ + readonly index: number | undefined; + /** + * A list of ancestor nodes, `[parent, grandparent, great-grandparent, ...]` + */ + readonly parents: (Ast.Node | Ast.Argument)[]; + /** + * If the element was accessed in an array, the array that it is part of. + */ + readonly containingArray: (Ast.Node | Ast.Argument)[] | undefined; + /** + * The LaTeX context of the current match. + */ + readonly context: VisitorContext; +}; +``` + +## `replaceStreamingCommand(ast, isStreamingCommand, replacer, options)` + +Given a group or a node array, look for streaming commands (e.g., `\bfseries`) and replace them +with the specified macro. The "arguments" of the streaming command are passed to `replacer` and the return +value of `replacer` is inserted into the stream. + +By default, this command will split at parbreaks (since commands like `\textbf{...} do not accept parbreaks in their +contents) and call `replacer\` multiple times, once per paragraph. + +Commands are also split at environments and at any macros listed in `macrosThatBreakPars`. + +```typescript +function replaceStreamingCommand( + ast: Ast.Group | Ast.Node[], + isStreamingCommand: (node: any) => node is Ast.Macro, + replacer: ( + content: Ast.Node[], + streamingCommand: Ast.Macro + ) => Ast.Node | Ast.Node[], + options: { + macrosThatBreakPars?: string[]; + environmentsThatDontBreakPars?: string[]; + } +): Ast.Node[]; +``` + +**Parameters** + +| Param | Type | +| :----------------- | :-------------------------------- | +| ast | `Ast.Group \| Ast.Node[]` | +| isStreamingCommand | Omitted | +| replacer | Omitted | +| options | Omitted | + +## `replaceStreamingCommandInGroup(group, isStreamingCommand, replacer, options)` + +Process streaming commands in a group. If needed, "escape" the group. +For example, `{\bfseries xx}` -> `\textbf{xx}`, but `{foo \bfseries xx}` -> `{foo \textbf{xx}}`. + +```typescript +function replaceStreamingCommandInGroup( + group: Ast.Group, + isStreamingCommand: (node: any) => node is Ast.Macro, + replacer: ( + content: Ast.Node[], + streamingCommand: Ast.Macro + ) => Ast.Node | Ast.Node[], + options: { + macrosThatBreakPars?: string[]; + environmentsThatDontBreakPars?: string[]; + } +): Ast.Node[]; +``` + +**Parameters** + +| Param | Type | +| :----------------- | :-------------------------------- | +| group | `Ast.Group` | +| isStreamingCommand | Omitted | +| replacer | Omitted | +| options | Omitted | diff --git a/node_modules/@unified-latex/unified-latex-util-replace/index.cjs b/node_modules/@unified-latex/unified-latex-util-replace/index.cjs new file mode 100644 index 0000000..23782c9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-replace/index.cjs @@ -0,0 +1,390 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilTrim = require("@unified-latex/unified-latex-util-trim"); +const unifiedLatexUtilSplit = require("@unified-latex/unified-latex-util-split"); +function replaceNode(ast, visitor) { + unifiedLatexUtilVisit.visit(ast, { + leave: (node, info) => { + let replacement = visitor(node, info); + if (typeof replacement === "undefined" || replacement === node) { + return; + } + if (!info.containingArray || info.index == null) { + throw new Error( + "Trying to replace node, but cannot find containing array" + ); + } + if (replacement === null || Array.isArray(replacement) && replacement.length === 0) { + info.containingArray.splice(info.index, 1); + return info.index; + } + if (!Array.isArray(replacement)) { + replacement = [replacement]; + } + info.containingArray.splice(info.index, 1, ...replacement); + return info.index + replacement.length; + } + }); +} +function firstSignificantNode(nodes, parbreaksAreInsignificant) { + const index = firstSignificantNodeIndex(nodes, parbreaksAreInsignificant); + if (index == null) { + return null; + } + return nodes[index]; +} +function lastSignificantNode(nodes, parbreaksAreInsignificant) { + const index = lastSignificantNodeIndex(nodes, parbreaksAreInsignificant); + if (index == null) { + return null; + } + return nodes[index]; +} +function lastSignificantNodeIndex(nodes, parbreaksAreInsignificant) { + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (unifiedLatexUtilMatch.match.whitespace(node) || unifiedLatexUtilMatch.match.comment(node) || parbreaksAreInsignificant && unifiedLatexUtilMatch.match.parbreak(node)) { + continue; + } + return i; + } + return void 0; +} +function firstSignificantNodeIndex(nodes, parbreaksAreInsignificant) { + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (unifiedLatexUtilMatch.match.whitespace(node) || unifiedLatexUtilMatch.match.comment(node) || parbreaksAreInsignificant && unifiedLatexUtilMatch.match.parbreak(node)) { + continue; + } + return i; + } + return void 0; +} +function isSpaceLike(node) { + return unifiedLatexUtilMatch.match.whitespace(node) || unifiedLatexUtilMatch.match.comment(node) && Boolean(node.leadingWhitespace); +} +function joinWithoutExcessWhitespace(head, tail) { + if (tail.length === 0) { + return; + } + if (head.length === 0) { + head.push(...tail); + return; + } + const headEnd = head[head.length - 1]; + const tailStart = tail[0]; + if (unifiedLatexUtilMatch.match.whitespace(headEnd) && unifiedLatexUtilMatch.match.whitespace(tailStart)) { + head.push(...tail.slice(1)); + return; + } + if (!isSpaceLike(headEnd) || !isSpaceLike(tailStart)) { + if (unifiedLatexUtilMatch.match.whitespace(headEnd) && unifiedLatexUtilMatch.match.comment(tailStart)) { + const comment2 = { + type: "comment", + content: tailStart.content, + sameline: true, + leadingWhitespace: true + }; + tail = tail.slice(1); + unifiedLatexUtilTrim.trimStart(tail); + head.pop(); + head.push(comment2, ...tail); + return; + } + head.push(...tail); + return; + } + if (unifiedLatexUtilMatch.match.comment(headEnd) && unifiedLatexUtilMatch.match.comment(tailStart)) { + if (tailStart.leadingWhitespace || tailStart.sameline) { + head.push( + { type: "comment", content: tailStart.content }, + ...tail.slice(1) + ); + return; + } + head.push(...tail); + return; + } + let comment = unifiedLatexUtilMatch.match.comment(headEnd) ? headEnd : tailStart; + if (!unifiedLatexUtilMatch.match.comment(comment)) { + throw new Error( + `Expected a comment but found ${JSON.stringify(comment)}` + ); + } + if (!comment.leadingWhitespace || !comment.sameline) { + comment = { + type: "comment", + content: comment.content, + leadingWhitespace: true, + sameline: true + }; + } + head.pop(); + head.push(comment, ...tail.slice(1)); +} +function wrapSignificantContent(content, wrapper) { + let hoistUntil = 0; + let hoistAfter = content.length; + for (let i = 0; i < content.length; i++) { + if (unifiedLatexUtilMatch.match.whitespace(content[i]) || unifiedLatexUtilMatch.match.comment(content[i])) { + hoistUntil = i + 1; + continue; + } + break; + } + for (let j = content.length - 1; j >= 0; j--) { + if (unifiedLatexUtilMatch.match.whitespace(content[j]) || unifiedLatexUtilMatch.match.comment(content[j])) { + hoistAfter = j; + continue; + } + break; + } + if (hoistUntil === 0 && hoistAfter === content.length) { + return ensureArray(wrapper(content)); + } + const frontMatter = content.slice(0, hoistUntil); + const middle = content.slice(hoistUntil, hoistAfter); + const backMatter = content.slice(hoistAfter, content.length); + return frontMatter.concat(wrapper(middle), backMatter); +} +function ensureArray(x) { + if (!Array.isArray(x)) { + return [x]; + } + return x; +} +function replaceStreamingCommandInArray(nodes, isStreamingCommand, replacer) { + while (nodes.length > 0 && isStreamingCommand(nodes[nodes.length - 1])) { + nodes.pop(); + unifiedLatexUtilTrim.trimEnd(nodes); + } + const foundStreamingCommands = []; + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (isStreamingCommand(node)) { + const wrapper = (content) => replacer(content, node); + let tail = nodes.slice(i + 1); + unifiedLatexUtilTrim.trimStart(tail); + tail = wrapSignificantContent(tail, wrapper); + foundStreamingCommands.push(node); + nodes.splice(i); + joinWithoutExcessWhitespace(nodes, tail); + } + } + return { foundStreamingCommands }; +} +function replaceStreamingCommandInGroup(group, isStreamingCommand, replacer, options) { + const content = group.content; + let popFromGroup = isStreamingCommand(firstSignificantNode(content)); + let innerProcessed = replaceStreamingCommand( + content, + isStreamingCommand, + replacer, + options + ); + if (innerProcessed.length === 0) { + return []; + } + if (popFromGroup) { + return innerProcessed; + } else { + return [{ type: "group", content: innerProcessed }]; + } +} +function replaceStreamingCommand(ast, isStreamingCommand, replacer, options) { + if (typeof isStreamingCommand !== "function") { + throw new Error( + `'isStreamingCommand' must be a function, not '${typeof isStreamingCommand}'` + ); + } + const { + macrosThatBreakPars = [ + "part", + "chapter", + "section", + "subsection", + "subsubsection", + "vspace", + "smallskip", + "medskip", + "bigskip", + "hfill" + ], + environmentsThatDontBreakPars = [] + } = options || {}; + let processedContent = []; + if (unifiedLatexUtilMatch.match.group(ast)) { + processedContent = replaceStreamingCommandInGroup( + ast, + isStreamingCommand, + replacer + ); + } + if (Array.isArray(ast)) { + const nodes = ast; + let scanIndex = nodes.length; + let sliceIndex = scanIndex; + while (scanIndex > 0 && (isStreamingCommand(nodes[scanIndex - 1]) || unifiedLatexUtilMatch.match.whitespace(nodes[scanIndex - 1]))) { + scanIndex--; + if (isStreamingCommand(nodes[scanIndex])) { + sliceIndex = scanIndex; + } + } + if (sliceIndex !== nodes.length) { + nodes.splice(sliceIndex); + } + const macroThatBreaks = unifiedLatexUtilMatch.match.createMacroMatcher(macrosThatBreakPars); + const envThatDoesntBreak = unifiedLatexUtilMatch.match.createEnvironmentMatcher( + environmentsThatDontBreakPars + ); + const isPar = (node) => unifiedLatexUtilMatch.match.parbreak(node) || unifiedLatexUtilMatch.match.macro(node, "par") || macroThatBreaks(node) || unifiedLatexUtilMatch.match.environment(node) && !envThatDoesntBreak(node) || node.type === "displaymath"; + const splitByPar = unifiedLatexUtilSplit.splitOnCondition(nodes, isPar); + splitByPar.separators = splitByPar.separators.map( + (sep) => unifiedLatexUtilMatch.match.macro(sep, "par") ? { type: "parbreak" } : sep + ); + const replacers = []; + let segments = splitByPar.segments.map((segment) => { + if (segment.length === 0) { + return segment; + } + function applyAccumulatedReplacers(nodes2) { + if (replacers.length === 0) { + return nodes2; + } + return wrapSignificantContent( + nodes2, + composeReplacers(replacers) + ); + } + const { foundStreamingCommands } = replaceStreamingCommandInArray( + segment, + isStreamingCommand, + replacer + ); + const ret = applyAccumulatedReplacers(segment); + foundStreamingCommands.forEach((macro) => { + replacers.push((nodes2) => { + const ret2 = replacer(nodes2, macro); + if (!Array.isArray(ret2)) { + return [ret2]; + } + return ret2; + }); + }); + return ret; + }); + if (segments.length > 1) { + segments.forEach((segment, i) => { + if (i === 0) { + unifiedLatexUtilTrim.trimEnd(segment); + } else if (i === segments.length - 1) { + unifiedLatexUtilTrim.trimStart(segment); + } else { + unifiedLatexUtilTrim.trim(segment); + } + }); + } + processedContent = unifiedLatexUtilSplit.unsplitOnMacro({ + segments, + macros: splitByPar.separators + }); + } + return processedContent; +} +function composeReplacers(replacers) { + if (replacers.length === 0) { + throw new Error("Cannot compose zero replacement functions"); + } + return (nodes) => { + let ret = nodes; + for (let i = 0; i < replacers.length; i++) { + const func = replacers[i]; + ret = func(ret); + } + return ret; + }; +} +function replaceNodeDuringVisit(replacement, info) { + const parent = info.parents[0]; + if (!parent) { + throw new Error(`Cannot replace node: parent not found`); + } + const container = parent[info.key]; + if (!Array.isArray(container)) { + throw new Error(`Cannot replace node: containing array not found`); + } + if (info.index == null) { + throw new Error(`Cannot replace node: node index undefined`); + } + if (!Array.isArray(replacement)) { + container[info.index] = replacement; + } else { + container.splice(info.index, 1, ...replacement); + } +} +const unifiedLatexReplaceStreamingCommands = function unifiedLatexReplaceStreamingCommands2(options) { + const { replacers = {} } = options || {}; + const isReplaceable = unifiedLatexUtilMatch.match.createMacroMatcher(replacers); + return (tree) => { + unifiedLatexUtilVisit.visit( + tree, + (group, info) => { + if (info.context.hasMathModeAncestor || !group.content.some(isReplaceable)) { + return; + } + let fixed = replaceStreamingCommand( + group, + isReplaceable, + (content, command) => { + return replacers[command.content](content, command); + } + ); + if (!info.containingArray || info.index == null) { + return; + } + const prevToken = info.containingArray[info.index - 1]; + const nextToken = info.containingArray[info.index + 1]; + if (unifiedLatexUtilMatch.match.whitespaceLike(prevToken) && unifiedLatexUtilMatch.match.whitespaceLike(fixed[0])) { + unifiedLatexUtilTrim.trimStart(fixed); + } + if (unifiedLatexUtilMatch.match.whitespaceLike(nextToken) && unifiedLatexUtilMatch.match.whitespaceLike(fixed[fixed.length - 1])) { + unifiedLatexUtilTrim.trimEnd(fixed); + } + replaceNodeDuringVisit(fixed, info); + }, + { test: unifiedLatexUtilMatch.match.group } + ); + unifiedLatexUtilVisit.visit( + tree, + (nodes, info) => { + if (info.context.hasMathModeAncestor || !nodes.some(isReplaceable)) { + return; + } + const replaced = replaceStreamingCommand( + nodes, + isReplaceable, + (content, command) => { + return replacers[command.content](content, command); + } + ); + if (replaced !== nodes) { + nodes.length = 0; + nodes.push(...replaced); + } + }, + { includeArrays: true, test: Array.isArray } + ); + }; +}; +exports.firstSignificantNode = firstSignificantNode; +exports.firstSignificantNodeIndex = firstSignificantNodeIndex; +exports.lastSignificantNode = lastSignificantNode; +exports.lastSignificantNodeIndex = lastSignificantNodeIndex; +exports.replaceNode = replaceNode; +exports.replaceNodeDuringVisit = replaceNodeDuringVisit; +exports.replaceStreamingCommand = replaceStreamingCommand; +exports.replaceStreamingCommandInGroup = replaceStreamingCommandInGroup; +exports.unifiedLatexReplaceStreamingCommands = unifiedLatexReplaceStreamingCommands; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-replace/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-replace/index.cjs.map new file mode 100644 index 0000000..b26c12d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-replace/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/replace-node.ts","../libs/utils/significant-node.ts","../libs/utils/join-without-excess-whitespace.ts","../libs/utils/wrap-significant-content.ts","../libs/utils/replace-streaming-command-in-array.ts","../libs/replace-streaming-command.ts","../libs/replace-node-during-visit.ts","../libs/unified-latex-streaming-command.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { visit, VisitInfo } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Recursively replace nodes in `ast`. The `visitor` function is called on each node. If\n * `visitor` returns a node or an array of nodes, those nodes replace the node passed to `visitor`.\n * If `null` is returned, the node is deleted. If `undefined` is returned, no replacement happens.\n */\nexport function replaceNode(\n ast: Ast.Ast,\n visitor: (\n node: Ast.Node | Ast.Argument,\n info: VisitInfo\n ) =>\n | Ast.Node\n | Ast.Argument\n | (Ast.Node | Ast.Argument)[]\n | null\n | undefined\n | void\n) {\n visit(ast, {\n leave: (node, info) => {\n let replacement = visitor(node, info);\n // Returning `undefined` or the same node means we shouldn't replace that node\n if (typeof replacement === \"undefined\" || replacement === node) {\n return;\n }\n\n if (!info.containingArray || info.index == null) {\n throw new Error(\n \"Trying to replace node, but cannot find containing array\"\n );\n }\n\n if (\n replacement === null ||\n (Array.isArray(replacement) && replacement.length === 0)\n ) {\n // A null return means that we delete the current node\n info.containingArray.splice(info.index, 1);\n return info.index;\n }\n\n if (!Array.isArray(replacement)) {\n replacement = [replacement];\n }\n\n info.containingArray.splice(info.index, 1, ...replacement);\n // We don't want to *reprocess* the nodes we just inserted into the array,\n // lest we get stuck in a recursive loop if the replacement contains the original.\n // Thus we jump to the index after our replacements.\n return info.index + replacement.length;\n },\n });\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns the first non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function firstSignificantNode(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): Ast.Node | null {\n const index = firstSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\n\n/**\n * Returns the last non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function lastSignificantNode(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): Ast.Node | null {\n const index = lastSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\n\n/**\n * Returns the index of the last non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function lastSignificantNodeIndex(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): number | undefined {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (\n match.whitespace(node) ||\n match.comment(node) ||\n (parbreaksAreInsignificant && match.parbreak(node))\n ) {\n continue;\n }\n return i;\n }\n return undefined;\n}\n\n/**\n * Returns the index of the first non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function firstSignificantNodeIndex(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): number | undefined {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (\n match.whitespace(node) ||\n match.comment(node) ||\n (parbreaksAreInsignificant && match.parbreak(node))\n ) {\n continue;\n }\n return i;\n }\n return undefined;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trimStart } from \"@unified-latex/unified-latex-util-trim\";\n\n/**\n * Is the node space-like? I.e., is it whitespace or\n * a comment with leading whitespace?\n */\nfunction isSpaceLike(node: Ast.Node): boolean {\n return (\n match.whitespace(node) ||\n (match.comment(node) && Boolean(node.leadingWhitespace))\n );\n}\n\n/**\n * Similar to `head.push(...tail)` except that whitespace at the start\n * of `tail` and the end of `head` is collapsed.\n */\nexport function joinWithoutExcessWhitespace(\n head: Ast.Node[],\n tail: Ast.Node[]\n): void {\n if (tail.length === 0) {\n return;\n }\n if (head.length === 0) {\n head.push(...tail);\n return;\n }\n const headEnd = head[head.length - 1];\n const tailStart = tail[0];\n // Whitespace we can just trim off from either end\n if (match.whitespace(headEnd) && match.whitespace(tailStart)) {\n head.push(...tail.slice(1));\n return;\n }\n // If there's no whitespace at one of the ends, no need to worry\n // unless `tailStart` is a comment, in which case it should \"eat\"\n // the whitespace\n if (!isSpaceLike(headEnd) || !isSpaceLike(tailStart)) {\n if (match.whitespace(headEnd) && match.comment(tailStart)) {\n const comment: Ast.Comment = {\n type: \"comment\",\n content: tailStart.content,\n sameline: true,\n leadingWhitespace: true,\n };\n tail = tail.slice(1);\n trimStart(tail);\n head.pop();\n head.push(comment, ...tail);\n return;\n }\n head.push(...tail);\n return;\n }\n\n // If we're here, we have a comment with leading whitespace on one side\n // and whitespace/comments on the other.\n if (match.comment(headEnd) && match.comment(tailStart)) {\n if (tailStart.leadingWhitespace || tailStart.sameline) {\n head.push(\n { type: \"comment\", content: tailStart.content },\n ...tail.slice(1)\n );\n return;\n }\n head.push(...tail);\n return;\n }\n\n // Exactly one side is a comment, so we should trim the whitespace and keep the comment,\n // but make sure the comment has leading whitespace!\n let comment = match.comment(headEnd) ? headEnd : tailStart;\n if (!match.comment(comment)) {\n throw new Error(\n `Expected a comment but found ${JSON.stringify(comment)}`\n );\n }\n\n if (!comment.leadingWhitespace || !comment.sameline) {\n comment = {\n type: \"comment\",\n content: comment.content,\n leadingWhitespace: true,\n sameline: true,\n };\n }\n\n head.pop();\n head.push(comment, ...tail.slice(1));\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Wraps `content` in the specified wrapper. This command is roughly equivalent to\n * `wrapper(content)` except that leading and trailing whitespace and comments are extracted\n * from `content` and moved to the front or back of the return array. For example,\n * `[\" \", \"foo\", \"bar\", \"% xxx\"]` -> `[\" \", wrapped([\"foo\", \"bar\"]), \"% xxx\"]`.\n *\n */\nexport function wrapSignificantContent(\n content: Ast.Node[],\n wrapper: (content: Ast.Node[]) => Ast.Node[] | Ast.Node\n): Ast.Node[] {\n let hoistUntil = 0;\n let hoistAfter = content.length;\n for (let i = 0; i < content.length; i++) {\n if (match.whitespace(content[i]) || match.comment(content[i])) {\n hoistUntil = i + 1;\n continue;\n }\n break;\n }\n for (let j = content.length - 1; j >= 0; j--) {\n if (match.whitespace(content[j]) || match.comment(content[j])) {\n hoistAfter = j;\n continue;\n }\n break;\n }\n\n if (hoistUntil === 0 && hoistAfter === content.length) {\n return ensureArray(wrapper(content));\n }\n\n const frontMatter = content.slice(0, hoistUntil);\n const middle = content.slice(hoistUntil, hoistAfter);\n const backMatter = content.slice(hoistAfter, content.length);\n\n return frontMatter.concat(wrapper(middle), backMatter);\n}\n\nfunction ensureArray(x: Ast.Node | Ast.Node[]) {\n if (!Array.isArray(x)) {\n return [x];\n }\n return x;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trimEnd, trimStart } from \"@unified-latex/unified-latex-util-trim\";\nimport { joinWithoutExcessWhitespace } from \"./join-without-excess-whitespace\";\nimport { wrapSignificantContent } from \"./wrap-significant-content\";\n\n/**\n * Replace commands identified by `isStreamingCommand` with the return value of `replacer`.\n * E.g., the array `[head, streamingCommand, ...tail]` will become `[head, replacer(tail, streamingCommand)]`.\n * This function does not split based on parbreaks/etc.. It is right-associative and returns\n * the streaming commands that were encountered.\n */\nexport function replaceStreamingCommandInArray(\n nodes: Ast.Node[],\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[]\n): { foundStreamingCommands: Ast.Node[] } {\n // Streaming commands that come at the end don't do anything,\n // so we should remove them\n while (nodes.length > 0 && isStreamingCommand(nodes[nodes.length - 1])) {\n nodes.pop();\n trimEnd(nodes);\n }\n\n const foundStreamingCommands: Ast.Node[] = [];\n\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (isStreamingCommand(node)) {\n const wrapper = (content: Ast.Node[]) => replacer(content, node);\n let tail = nodes.slice(i + 1);\n // Streaming commands are followed by whitespace, which becomes unneeded when the commands are replaced.\n trimStart(tail);\n tail = wrapSignificantContent(tail, wrapper);\n foundStreamingCommands.push(node);\n\n // Trim off what we're about to replace!\n nodes.splice(i);\n\n joinWithoutExcessWhitespace(nodes, tail);\n }\n }\n\n return { foundStreamingCommands };\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n splitOnCondition,\n unsplitOnMacro,\n} from \"@unified-latex/unified-latex-util-split\";\nimport {\n trim,\n trimEnd,\n trimStart,\n} from \"@unified-latex/unified-latex-util-trim\";\nimport { firstSignificantNode } from \"./utils/significant-node\";\nimport { replaceStreamingCommandInArray } from \"./utils/replace-streaming-command-in-array\";\nimport { wrapSignificantContent } from \"./utils/wrap-significant-content\";\n\ntype Replacer = (nodes: Ast.Node[]) => Ast.Node[];\n\n/**\n * Process streaming commands in a group. If needed, \"escape\" the group.\n * For example, `{\\bfseries xx}` -> `\\textbf{xx}`, but `{foo \\bfseries xx}` -> `{foo \\textbf{xx}}`.\n */\nexport function replaceStreamingCommandInGroup(\n group: Ast.Group,\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[],\n options?: {\n macrosThatBreakPars?: string[];\n environmentsThatDontBreakPars?: string[];\n }\n): Ast.Node[] {\n const content = group.content;\n // If the group started with a streaming command, we want to pop\n // out of the group. E.g. `{\\bfseries foo}` -> `\\textbf{foo}` and not `{\\textbf{foo}}`\n let popFromGroup = isStreamingCommand(firstSignificantNode(content));\n\n let innerProcessed = replaceStreamingCommand(\n content,\n isStreamingCommand,\n replacer,\n options\n );\n\n // If the group consisted of just streaming commands (for some reason...)\n // it should be eliminated\n if (innerProcessed.length === 0) {\n return [];\n }\n\n if (popFromGroup) {\n return innerProcessed;\n } else {\n return [{ type: \"group\", content: innerProcessed }];\n }\n}\n\n/**\n * Given a group or a node array, look for streaming commands (e.g., `\\bfseries`) and replace them\n * with the specified macro. The \"arguments\" of the streaming command are passed to `replacer` and the return\n * value of `replacer` is inserted into the stream.\n *\n * By default, this command will split at parbreaks (since commands like `\\textbf{...} do not accept parbreaks in their\n * contents) and call `replacer` multiple times, once per paragraph.\n *\n * Commands are also split at environments and at any macros listed in `macrosThatBreakPars`.\n */\nexport function replaceStreamingCommand(\n ast: Ast.Group | Ast.Node[],\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[],\n options?: {\n macrosThatBreakPars?: string[];\n environmentsThatDontBreakPars?: string[];\n }\n): Ast.Node[] {\n if (typeof isStreamingCommand !== \"function\") {\n throw new Error(\n `'isStreamingCommand' must be a function, not '${typeof isStreamingCommand}'`\n );\n }\n\n const {\n macrosThatBreakPars = [\n \"part\",\n \"chapter\",\n \"section\",\n \"subsection\",\n \"subsubsection\",\n \"vspace\",\n \"smallskip\",\n \"medskip\",\n \"bigskip\",\n \"hfill\",\n ],\n environmentsThatDontBreakPars = [],\n } = options || {};\n\n let processedContent: Ast.Node[] = [];\n if (match.group(ast)) {\n processedContent = replaceStreamingCommandInGroup(\n ast,\n isStreamingCommand,\n replacer\n );\n }\n\n if (Array.isArray(ast)) {\n // Streaming commands that come at the end of a sequence of nodes don't do anything.\n // They also will consume whitespace, so we should remove them and the whitespace.\n const nodes = ast;\n let scanIndex = nodes.length;\n let sliceIndex = scanIndex;\n while (\n scanIndex > 0 &&\n (isStreamingCommand(nodes[scanIndex - 1]) ||\n match.whitespace(nodes[scanIndex - 1]))\n ) {\n scanIndex--;\n if (isStreamingCommand(nodes[scanIndex])) {\n sliceIndex = scanIndex;\n }\n }\n if (sliceIndex !== nodes.length) {\n nodes.splice(sliceIndex);\n }\n\n const macroThatBreaks = match.createMacroMatcher(macrosThatBreakPars);\n const envThatDoesntBreak = match.createEnvironmentMatcher(\n environmentsThatDontBreakPars\n );\n // A \"par\" is anything that a streaming command shouldn't wrap and breaks the stream.\n // This includes regular pars, but also environments and special macros like \\section\n const isPar = (node: Ast.Node) =>\n match.parbreak(node) ||\n match.macro(node, \"par\") ||\n macroThatBreaks(node) ||\n (match.environment(node) && !envThatDoesntBreak(node)) ||\n node.type === \"displaymath\";\n\n // We split on both a parbreak and a literal `\\par`. But we will\n // normalize everything to be parbreaks\n const splitByPar = splitOnCondition(nodes, isPar);\n splitByPar.separators = splitByPar.separators.map((sep) =>\n match.macro(sep, \"par\") ? { type: \"parbreak\" } : sep\n );\n\n const replacers: Replacer[] = [];\n let segments = splitByPar.segments.map((segment) => {\n if (segment.length === 0) {\n return segment;\n }\n function applyAccumulatedReplacers(nodes: Ast.Node[]): Ast.Node[] {\n if (replacers.length === 0) {\n return nodes;\n }\n return wrapSignificantContent(\n nodes,\n composeReplacers(replacers)\n );\n }\n\n const { foundStreamingCommands } = replaceStreamingCommandInArray(\n segment,\n isStreamingCommand,\n replacer\n );\n\n // All streaming commands in `segment` have now been replaced. However,\n // there might be commands from the previous paragraphs that should wrap\n // the current segment!\n const ret = applyAccumulatedReplacers(segment);\n\n // Any streaming commands from this segment will carry over to the next,\n // so keep track of them.\n foundStreamingCommands.forEach((macro) => {\n replacers.push((nodes: Ast.Node[]) => {\n const ret = replacer(nodes, macro as Ast.Macro);\n if (!Array.isArray(ret)) {\n return [ret];\n }\n return ret;\n });\n });\n\n return ret;\n });\n\n // Leading/trailing whitespace was hoisted in front/back of each replacer.\n // Since we're separated by parbreaks, we can safely trim all that whitespace.\n if (segments.length > 1) {\n segments.forEach((segment, i) => {\n if (i === 0) {\n trimEnd(segment);\n } else if (i === segments.length - 1) {\n trimStart(segment);\n } else {\n trim(segment);\n }\n });\n }\n\n processedContent = unsplitOnMacro({\n segments: segments,\n macros: splitByPar.separators,\n });\n }\n\n return processedContent;\n}\n\n/**\n * Given a sequence of replacer functions `[f, g, h]` return\n * `h \\circ g \\circ f`\n *\n * @param {((nodes: Ast.Node[]) => Ast.Node)[]} replacers\n * @returns {(nodes: Ast.Node[]) => Ast.Node}\n */\nfunction composeReplacers(replacers: Replacer[]): Replacer {\n if (replacers.length === 0) {\n throw new Error(\"Cannot compose zero replacement functions\");\n }\n return (nodes: Ast.Node[]) => {\n let ret = nodes;\n for (let i = 0; i < replacers.length; i++) {\n const func = replacers[i];\n ret = func(ret);\n }\n return ret;\n };\n}\n","import { VisitInfo } from \"@unified-latex/unified-latex-util-visit\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Replaces the current node with `replacement`. It is assumed that the current\n * node is in an array that is a child of a parent element. If this is not the case,\n * the function will error.\n */\nexport function replaceNodeDuringVisit(\n replacement: Ast.Node | Ast.Argument | (Ast.Node | Ast.Argument)[],\n info: VisitInfo\n) {\n const parent = info.parents[0];\n if (!parent) {\n throw new Error(`Cannot replace node: parent not found`);\n }\n const container = parent[info.key as keyof typeof parent] as\n | (Ast.Node | Ast.Argument)[]\n | undefined;\n if (!Array.isArray(container)) {\n throw new Error(`Cannot replace node: containing array not found`);\n }\n if (info.index == null) {\n throw new Error(`Cannot replace node: node index undefined`);\n }\n if (!Array.isArray(replacement)) {\n container[info.index] = replacement;\n } else {\n container.splice(info.index, 1, ...replacement);\n }\n}\n","import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trimEnd, trimStart } from \"@unified-latex/unified-latex-util-trim\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { replaceStreamingCommand } from \"./replace-streaming-command\";\nimport { replaceNodeDuringVisit } from \"./replace-node-during-visit\";\n\ntype PluginOptions = {\n replacers: Record<\n string,\n (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[]\n >;\n};\n\n/**\n * Unified plugin to replace all found streaming commands with their argument-style equivalents.\n * This only applies to sections of the tree with no math ancestor.\n *\n * @param options.replacer A record of macro names and replacer functions. A replacer function accepts content and the original streaming command and is expected to return the argument-style command. It may be called multiple times per streaming command.\n */\nexport const unifiedLatexReplaceStreamingCommands: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexReplaceStreamingCommands(options) {\n const { replacers = {} } = options || {};\n const isReplaceable = match.createMacroMatcher(replacers);\n return (tree) => {\n // We traverse all groups before we replace nodes in other contexts\n visit(\n tree,\n (group, info) => {\n if (\n info.context.hasMathModeAncestor ||\n !group.content.some(isReplaceable)\n ) {\n return;\n }\n\n let fixed = replaceStreamingCommand(\n group,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n\n // We cannot replace the node unless we can access the containing array.\n if (!info.containingArray || info.index == null) {\n return;\n }\n\n // `fixed` may consist of only whitespace. If this is the case,\n // surrounding whitespace must trimmed before\n // inserting the group's contents.\n const prevToken = info.containingArray[info.index - 1];\n const nextToken = info.containingArray[info.index + 1];\n if (\n match.whitespaceLike(prevToken) &&\n match.whitespaceLike(fixed[0])\n ) {\n trimStart(fixed);\n }\n if (\n match.whitespaceLike(nextToken) &&\n match.whitespaceLike(fixed[fixed.length - 1])\n ) {\n trimEnd(fixed);\n }\n replaceNodeDuringVisit(fixed, info);\n },\n { test: match.group }\n );\n\n visit(\n tree,\n (nodes, info) => {\n if (\n info.context.hasMathModeAncestor ||\n !nodes.some(isReplaceable)\n ) {\n return;\n }\n\n const replaced = replaceStreamingCommand(\n nodes,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n\n // If we get back a different array than we input, the replacement did\n // not happen in-place. In this case we need to manipulate `nodes`.\n if (replaced !== nodes) {\n nodes.length = 0;\n nodes.push(...replaced);\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\n"],"names":["visit","match","comment","trimStart","trimEnd","splitOnCondition","nodes","ret","trim","unsplitOnMacro","unifiedLatexReplaceStreamingCommands"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-replace/index.d.ts b/node_modules/@unified-latex/unified-latex-util-replace/index.d.ts new file mode 100644 index 0000000..a68c4f3 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-replace/index.d.ts @@ -0,0 +1,79 @@ +import * as Ast from '@unified-latex/unified-latex-types'; +import { Plugin as Plugin_2 } from 'unified'; +import { VisitInfo } from '@unified-latex/unified-latex-util-visit'; + +/** + * Returns the first non-whitespace/non-comment node in `nodes`. If there is no such + * node, `null` is returned. + */ +export declare function firstSignificantNode(nodes: Ast.Node[], parbreaksAreInsignificant?: boolean): Ast.Node | null; + +/** + * Returns the index of the first non-whitespace/non-comment node in `nodes`. If there is no such + * node, `null` is returned. + */ +export declare function firstSignificantNodeIndex(nodes: Ast.Node[], parbreaksAreInsignificant?: boolean): number | undefined; + +/** + * Returns the last non-whitespace/non-comment node in `nodes`. If there is no such + * node, `null` is returned. + */ +export declare function lastSignificantNode(nodes: Ast.Node[], parbreaksAreInsignificant?: boolean): Ast.Node | null; + +/** + * Returns the index of the last non-whitespace/non-comment node in `nodes`. If there is no such + * node, `null` is returned. + */ +export declare function lastSignificantNodeIndex(nodes: Ast.Node[], parbreaksAreInsignificant?: boolean): number | undefined; + +declare type PluginOptions = { + replacers: Record Ast.Node | Ast.Node[]>; +}; + +/** + * Recursively replace nodes in `ast`. The `visitor` function is called on each node. If + * `visitor` returns a node or an array of nodes, those nodes replace the node passed to `visitor`. + * If `null` is returned, the node is deleted. If `undefined` is returned, no replacement happens. + */ +export declare function replaceNode(ast: Ast.Ast, visitor: (node: Ast.Node | Ast.Argument, info: VisitInfo) => Ast.Node | Ast.Argument | (Ast.Node | Ast.Argument)[] | null | undefined | void): void; + +/** + * Replaces the current node with `replacement`. It is assumed that the current + * node is in an array that is a child of a parent element. If this is not the case, + * the function will error. + */ +export declare function replaceNodeDuringVisit(replacement: Ast.Node | Ast.Argument | (Ast.Node | Ast.Argument)[], info: VisitInfo): void; + +/** + * Given a group or a node array, look for streaming commands (e.g., `\bfseries`) and replace them + * with the specified macro. The "arguments" of the streaming command are passed to `replacer` and the return + * value of `replacer` is inserted into the stream. + * + * By default, this command will split at parbreaks (since commands like `\textbf{...} do not accept parbreaks in their + * contents) and call `replacer` multiple times, once per paragraph. + * + * Commands are also split at environments and at any macros listed in `macrosThatBreakPars`. + */ +export declare function replaceStreamingCommand(ast: Ast.Group | Ast.Node[], isStreamingCommand: (node: any) => node is Ast.Macro, replacer: (content: Ast.Node[], streamingCommand: Ast.Macro) => Ast.Node | Ast.Node[], options?: { + macrosThatBreakPars?: string[]; + environmentsThatDontBreakPars?: string[]; +}): Ast.Node[]; + +/** + * Process streaming commands in a group. If needed, "escape" the group. + * For example, `{\bfseries xx}` -> `\textbf{xx}`, but `{foo \bfseries xx}` -> `{foo \textbf{xx}}`. + */ +export declare function replaceStreamingCommandInGroup(group: Ast.Group, isStreamingCommand: (node: any) => node is Ast.Macro, replacer: (content: Ast.Node[], streamingCommand: Ast.Macro) => Ast.Node | Ast.Node[], options?: { + macrosThatBreakPars?: string[]; + environmentsThatDontBreakPars?: string[]; +}): Ast.Node[]; + +/** + * Unified plugin to replace all found streaming commands with their argument-style equivalents. + * This only applies to sections of the tree with no math ancestor. + * + * @param options.replacer A record of macro names and replacer functions. A replacer function accepts content and the original streaming command and is expected to return the argument-style command. It may be called multiple times per streaming command. + */ +export declare const unifiedLatexReplaceStreamingCommands: Plugin_2; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-replace/index.js b/node_modules/@unified-latex/unified-latex-util-replace/index.js new file mode 100644 index 0000000..f4e3b30 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-replace/index.js @@ -0,0 +1,390 @@ +import { visit } from "@unified-latex/unified-latex-util-visit"; +import { match } from "@unified-latex/unified-latex-util-match"; +import { trimStart, trimEnd, trim } from "@unified-latex/unified-latex-util-trim"; +import { splitOnCondition, unsplitOnMacro } from "@unified-latex/unified-latex-util-split"; +function replaceNode(ast, visitor) { + visit(ast, { + leave: (node, info) => { + let replacement = visitor(node, info); + if (typeof replacement === "undefined" || replacement === node) { + return; + } + if (!info.containingArray || info.index == null) { + throw new Error( + "Trying to replace node, but cannot find containing array" + ); + } + if (replacement === null || Array.isArray(replacement) && replacement.length === 0) { + info.containingArray.splice(info.index, 1); + return info.index; + } + if (!Array.isArray(replacement)) { + replacement = [replacement]; + } + info.containingArray.splice(info.index, 1, ...replacement); + return info.index + replacement.length; + } + }); +} +function firstSignificantNode(nodes, parbreaksAreInsignificant) { + const index = firstSignificantNodeIndex(nodes, parbreaksAreInsignificant); + if (index == null) { + return null; + } + return nodes[index]; +} +function lastSignificantNode(nodes, parbreaksAreInsignificant) { + const index = lastSignificantNodeIndex(nodes, parbreaksAreInsignificant); + if (index == null) { + return null; + } + return nodes[index]; +} +function lastSignificantNodeIndex(nodes, parbreaksAreInsignificant) { + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (match.whitespace(node) || match.comment(node) || parbreaksAreInsignificant && match.parbreak(node)) { + continue; + } + return i; + } + return void 0; +} +function firstSignificantNodeIndex(nodes, parbreaksAreInsignificant) { + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (match.whitespace(node) || match.comment(node) || parbreaksAreInsignificant && match.parbreak(node)) { + continue; + } + return i; + } + return void 0; +} +function isSpaceLike(node) { + return match.whitespace(node) || match.comment(node) && Boolean(node.leadingWhitespace); +} +function joinWithoutExcessWhitespace(head, tail) { + if (tail.length === 0) { + return; + } + if (head.length === 0) { + head.push(...tail); + return; + } + const headEnd = head[head.length - 1]; + const tailStart = tail[0]; + if (match.whitespace(headEnd) && match.whitespace(tailStart)) { + head.push(...tail.slice(1)); + return; + } + if (!isSpaceLike(headEnd) || !isSpaceLike(tailStart)) { + if (match.whitespace(headEnd) && match.comment(tailStart)) { + const comment2 = { + type: "comment", + content: tailStart.content, + sameline: true, + leadingWhitespace: true + }; + tail = tail.slice(1); + trimStart(tail); + head.pop(); + head.push(comment2, ...tail); + return; + } + head.push(...tail); + return; + } + if (match.comment(headEnd) && match.comment(tailStart)) { + if (tailStart.leadingWhitespace || tailStart.sameline) { + head.push( + { type: "comment", content: tailStart.content }, + ...tail.slice(1) + ); + return; + } + head.push(...tail); + return; + } + let comment = match.comment(headEnd) ? headEnd : tailStart; + if (!match.comment(comment)) { + throw new Error( + `Expected a comment but found ${JSON.stringify(comment)}` + ); + } + if (!comment.leadingWhitespace || !comment.sameline) { + comment = { + type: "comment", + content: comment.content, + leadingWhitespace: true, + sameline: true + }; + } + head.pop(); + head.push(comment, ...tail.slice(1)); +} +function wrapSignificantContent(content, wrapper) { + let hoistUntil = 0; + let hoistAfter = content.length; + for (let i = 0; i < content.length; i++) { + if (match.whitespace(content[i]) || match.comment(content[i])) { + hoistUntil = i + 1; + continue; + } + break; + } + for (let j = content.length - 1; j >= 0; j--) { + if (match.whitespace(content[j]) || match.comment(content[j])) { + hoistAfter = j; + continue; + } + break; + } + if (hoistUntil === 0 && hoistAfter === content.length) { + return ensureArray(wrapper(content)); + } + const frontMatter = content.slice(0, hoistUntil); + const middle = content.slice(hoistUntil, hoistAfter); + const backMatter = content.slice(hoistAfter, content.length); + return frontMatter.concat(wrapper(middle), backMatter); +} +function ensureArray(x) { + if (!Array.isArray(x)) { + return [x]; + } + return x; +} +function replaceStreamingCommandInArray(nodes, isStreamingCommand, replacer) { + while (nodes.length > 0 && isStreamingCommand(nodes[nodes.length - 1])) { + nodes.pop(); + trimEnd(nodes); + } + const foundStreamingCommands = []; + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (isStreamingCommand(node)) { + const wrapper = (content) => replacer(content, node); + let tail = nodes.slice(i + 1); + trimStart(tail); + tail = wrapSignificantContent(tail, wrapper); + foundStreamingCommands.push(node); + nodes.splice(i); + joinWithoutExcessWhitespace(nodes, tail); + } + } + return { foundStreamingCommands }; +} +function replaceStreamingCommandInGroup(group, isStreamingCommand, replacer, options) { + const content = group.content; + let popFromGroup = isStreamingCommand(firstSignificantNode(content)); + let innerProcessed = replaceStreamingCommand( + content, + isStreamingCommand, + replacer, + options + ); + if (innerProcessed.length === 0) { + return []; + } + if (popFromGroup) { + return innerProcessed; + } else { + return [{ type: "group", content: innerProcessed }]; + } +} +function replaceStreamingCommand(ast, isStreamingCommand, replacer, options) { + if (typeof isStreamingCommand !== "function") { + throw new Error( + `'isStreamingCommand' must be a function, not '${typeof isStreamingCommand}'` + ); + } + const { + macrosThatBreakPars = [ + "part", + "chapter", + "section", + "subsection", + "subsubsection", + "vspace", + "smallskip", + "medskip", + "bigskip", + "hfill" + ], + environmentsThatDontBreakPars = [] + } = options || {}; + let processedContent = []; + if (match.group(ast)) { + processedContent = replaceStreamingCommandInGroup( + ast, + isStreamingCommand, + replacer + ); + } + if (Array.isArray(ast)) { + const nodes = ast; + let scanIndex = nodes.length; + let sliceIndex = scanIndex; + while (scanIndex > 0 && (isStreamingCommand(nodes[scanIndex - 1]) || match.whitespace(nodes[scanIndex - 1]))) { + scanIndex--; + if (isStreamingCommand(nodes[scanIndex])) { + sliceIndex = scanIndex; + } + } + if (sliceIndex !== nodes.length) { + nodes.splice(sliceIndex); + } + const macroThatBreaks = match.createMacroMatcher(macrosThatBreakPars); + const envThatDoesntBreak = match.createEnvironmentMatcher( + environmentsThatDontBreakPars + ); + const isPar = (node) => match.parbreak(node) || match.macro(node, "par") || macroThatBreaks(node) || match.environment(node) && !envThatDoesntBreak(node) || node.type === "displaymath"; + const splitByPar = splitOnCondition(nodes, isPar); + splitByPar.separators = splitByPar.separators.map( + (sep) => match.macro(sep, "par") ? { type: "parbreak" } : sep + ); + const replacers = []; + let segments = splitByPar.segments.map((segment) => { + if (segment.length === 0) { + return segment; + } + function applyAccumulatedReplacers(nodes2) { + if (replacers.length === 0) { + return nodes2; + } + return wrapSignificantContent( + nodes2, + composeReplacers(replacers) + ); + } + const { foundStreamingCommands } = replaceStreamingCommandInArray( + segment, + isStreamingCommand, + replacer + ); + const ret = applyAccumulatedReplacers(segment); + foundStreamingCommands.forEach((macro) => { + replacers.push((nodes2) => { + const ret2 = replacer(nodes2, macro); + if (!Array.isArray(ret2)) { + return [ret2]; + } + return ret2; + }); + }); + return ret; + }); + if (segments.length > 1) { + segments.forEach((segment, i) => { + if (i === 0) { + trimEnd(segment); + } else if (i === segments.length - 1) { + trimStart(segment); + } else { + trim(segment); + } + }); + } + processedContent = unsplitOnMacro({ + segments, + macros: splitByPar.separators + }); + } + return processedContent; +} +function composeReplacers(replacers) { + if (replacers.length === 0) { + throw new Error("Cannot compose zero replacement functions"); + } + return (nodes) => { + let ret = nodes; + for (let i = 0; i < replacers.length; i++) { + const func = replacers[i]; + ret = func(ret); + } + return ret; + }; +} +function replaceNodeDuringVisit(replacement, info) { + const parent = info.parents[0]; + if (!parent) { + throw new Error(`Cannot replace node: parent not found`); + } + const container = parent[info.key]; + if (!Array.isArray(container)) { + throw new Error(`Cannot replace node: containing array not found`); + } + if (info.index == null) { + throw new Error(`Cannot replace node: node index undefined`); + } + if (!Array.isArray(replacement)) { + container[info.index] = replacement; + } else { + container.splice(info.index, 1, ...replacement); + } +} +const unifiedLatexReplaceStreamingCommands = function unifiedLatexReplaceStreamingCommands2(options) { + const { replacers = {} } = options || {}; + const isReplaceable = match.createMacroMatcher(replacers); + return (tree) => { + visit( + tree, + (group, info) => { + if (info.context.hasMathModeAncestor || !group.content.some(isReplaceable)) { + return; + } + let fixed = replaceStreamingCommand( + group, + isReplaceable, + (content, command) => { + return replacers[command.content](content, command); + } + ); + if (!info.containingArray || info.index == null) { + return; + } + const prevToken = info.containingArray[info.index - 1]; + const nextToken = info.containingArray[info.index + 1]; + if (match.whitespaceLike(prevToken) && match.whitespaceLike(fixed[0])) { + trimStart(fixed); + } + if (match.whitespaceLike(nextToken) && match.whitespaceLike(fixed[fixed.length - 1])) { + trimEnd(fixed); + } + replaceNodeDuringVisit(fixed, info); + }, + { test: match.group } + ); + visit( + tree, + (nodes, info) => { + if (info.context.hasMathModeAncestor || !nodes.some(isReplaceable)) { + return; + } + const replaced = replaceStreamingCommand( + nodes, + isReplaceable, + (content, command) => { + return replacers[command.content](content, command); + } + ); + if (replaced !== nodes) { + nodes.length = 0; + nodes.push(...replaced); + } + }, + { includeArrays: true, test: Array.isArray } + ); + }; +}; +export { + firstSignificantNode, + firstSignificantNodeIndex, + lastSignificantNode, + lastSignificantNodeIndex, + replaceNode, + replaceNodeDuringVisit, + replaceStreamingCommand, + replaceStreamingCommandInGroup, + unifiedLatexReplaceStreamingCommands +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-replace/index.js.map b/node_modules/@unified-latex/unified-latex-util-replace/index.js.map new file mode 100644 index 0000000..938a5e0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-replace/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/replace-node.ts","../libs/utils/significant-node.ts","../libs/utils/join-without-excess-whitespace.ts","../libs/utils/wrap-significant-content.ts","../libs/utils/replace-streaming-command-in-array.ts","../libs/replace-streaming-command.ts","../libs/replace-node-during-visit.ts","../libs/unified-latex-streaming-command.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { visit, VisitInfo } from \"@unified-latex/unified-latex-util-visit\";\n\n/**\n * Recursively replace nodes in `ast`. The `visitor` function is called on each node. If\n * `visitor` returns a node or an array of nodes, those nodes replace the node passed to `visitor`.\n * If `null` is returned, the node is deleted. If `undefined` is returned, no replacement happens.\n */\nexport function replaceNode(\n ast: Ast.Ast,\n visitor: (\n node: Ast.Node | Ast.Argument,\n info: VisitInfo\n ) =>\n | Ast.Node\n | Ast.Argument\n | (Ast.Node | Ast.Argument)[]\n | null\n | undefined\n | void\n) {\n visit(ast, {\n leave: (node, info) => {\n let replacement = visitor(node, info);\n // Returning `undefined` or the same node means we shouldn't replace that node\n if (typeof replacement === \"undefined\" || replacement === node) {\n return;\n }\n\n if (!info.containingArray || info.index == null) {\n throw new Error(\n \"Trying to replace node, but cannot find containing array\"\n );\n }\n\n if (\n replacement === null ||\n (Array.isArray(replacement) && replacement.length === 0)\n ) {\n // A null return means that we delete the current node\n info.containingArray.splice(info.index, 1);\n return info.index;\n }\n\n if (!Array.isArray(replacement)) {\n replacement = [replacement];\n }\n\n info.containingArray.splice(info.index, 1, ...replacement);\n // We don't want to *reprocess* the nodes we just inserted into the array,\n // lest we get stuck in a recursive loop if the replacement contains the original.\n // Thus we jump to the index after our replacements.\n return info.index + replacement.length;\n },\n });\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns the first non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function firstSignificantNode(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): Ast.Node | null {\n const index = firstSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\n\n/**\n * Returns the last non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function lastSignificantNode(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): Ast.Node | null {\n const index = lastSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\n\n/**\n * Returns the index of the last non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function lastSignificantNodeIndex(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): number | undefined {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (\n match.whitespace(node) ||\n match.comment(node) ||\n (parbreaksAreInsignificant && match.parbreak(node))\n ) {\n continue;\n }\n return i;\n }\n return undefined;\n}\n\n/**\n * Returns the index of the first non-whitespace/non-comment node in `nodes`. If there is no such\n * node, `null` is returned.\n */\nexport function firstSignificantNodeIndex(\n nodes: Ast.Node[],\n parbreaksAreInsignificant?: boolean\n): number | undefined {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (\n match.whitespace(node) ||\n match.comment(node) ||\n (parbreaksAreInsignificant && match.parbreak(node))\n ) {\n continue;\n }\n return i;\n }\n return undefined;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trimStart } from \"@unified-latex/unified-latex-util-trim\";\n\n/**\n * Is the node space-like? I.e., is it whitespace or\n * a comment with leading whitespace?\n */\nfunction isSpaceLike(node: Ast.Node): boolean {\n return (\n match.whitespace(node) ||\n (match.comment(node) && Boolean(node.leadingWhitespace))\n );\n}\n\n/**\n * Similar to `head.push(...tail)` except that whitespace at the start\n * of `tail` and the end of `head` is collapsed.\n */\nexport function joinWithoutExcessWhitespace(\n head: Ast.Node[],\n tail: Ast.Node[]\n): void {\n if (tail.length === 0) {\n return;\n }\n if (head.length === 0) {\n head.push(...tail);\n return;\n }\n const headEnd = head[head.length - 1];\n const tailStart = tail[0];\n // Whitespace we can just trim off from either end\n if (match.whitespace(headEnd) && match.whitespace(tailStart)) {\n head.push(...tail.slice(1));\n return;\n }\n // If there's no whitespace at one of the ends, no need to worry\n // unless `tailStart` is a comment, in which case it should \"eat\"\n // the whitespace\n if (!isSpaceLike(headEnd) || !isSpaceLike(tailStart)) {\n if (match.whitespace(headEnd) && match.comment(tailStart)) {\n const comment: Ast.Comment = {\n type: \"comment\",\n content: tailStart.content,\n sameline: true,\n leadingWhitespace: true,\n };\n tail = tail.slice(1);\n trimStart(tail);\n head.pop();\n head.push(comment, ...tail);\n return;\n }\n head.push(...tail);\n return;\n }\n\n // If we're here, we have a comment with leading whitespace on one side\n // and whitespace/comments on the other.\n if (match.comment(headEnd) && match.comment(tailStart)) {\n if (tailStart.leadingWhitespace || tailStart.sameline) {\n head.push(\n { type: \"comment\", content: tailStart.content },\n ...tail.slice(1)\n );\n return;\n }\n head.push(...tail);\n return;\n }\n\n // Exactly one side is a comment, so we should trim the whitespace and keep the comment,\n // but make sure the comment has leading whitespace!\n let comment = match.comment(headEnd) ? headEnd : tailStart;\n if (!match.comment(comment)) {\n throw new Error(\n `Expected a comment but found ${JSON.stringify(comment)}`\n );\n }\n\n if (!comment.leadingWhitespace || !comment.sameline) {\n comment = {\n type: \"comment\",\n content: comment.content,\n leadingWhitespace: true,\n sameline: true,\n };\n }\n\n head.pop();\n head.push(comment, ...tail.slice(1));\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Wraps `content` in the specified wrapper. This command is roughly equivalent to\n * `wrapper(content)` except that leading and trailing whitespace and comments are extracted\n * from `content` and moved to the front or back of the return array. For example,\n * `[\" \", \"foo\", \"bar\", \"% xxx\"]` -> `[\" \", wrapped([\"foo\", \"bar\"]), \"% xxx\"]`.\n *\n */\nexport function wrapSignificantContent(\n content: Ast.Node[],\n wrapper: (content: Ast.Node[]) => Ast.Node[] | Ast.Node\n): Ast.Node[] {\n let hoistUntil = 0;\n let hoistAfter = content.length;\n for (let i = 0; i < content.length; i++) {\n if (match.whitespace(content[i]) || match.comment(content[i])) {\n hoistUntil = i + 1;\n continue;\n }\n break;\n }\n for (let j = content.length - 1; j >= 0; j--) {\n if (match.whitespace(content[j]) || match.comment(content[j])) {\n hoistAfter = j;\n continue;\n }\n break;\n }\n\n if (hoistUntil === 0 && hoistAfter === content.length) {\n return ensureArray(wrapper(content));\n }\n\n const frontMatter = content.slice(0, hoistUntil);\n const middle = content.slice(hoistUntil, hoistAfter);\n const backMatter = content.slice(hoistAfter, content.length);\n\n return frontMatter.concat(wrapper(middle), backMatter);\n}\n\nfunction ensureArray(x: Ast.Node | Ast.Node[]) {\n if (!Array.isArray(x)) {\n return [x];\n }\n return x;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trimEnd, trimStart } from \"@unified-latex/unified-latex-util-trim\";\nimport { joinWithoutExcessWhitespace } from \"./join-without-excess-whitespace\";\nimport { wrapSignificantContent } from \"./wrap-significant-content\";\n\n/**\n * Replace commands identified by `isStreamingCommand` with the return value of `replacer`.\n * E.g., the array `[head, streamingCommand, ...tail]` will become `[head, replacer(tail, streamingCommand)]`.\n * This function does not split based on parbreaks/etc.. It is right-associative and returns\n * the streaming commands that were encountered.\n */\nexport function replaceStreamingCommandInArray(\n nodes: Ast.Node[],\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[]\n): { foundStreamingCommands: Ast.Node[] } {\n // Streaming commands that come at the end don't do anything,\n // so we should remove them\n while (nodes.length > 0 && isStreamingCommand(nodes[nodes.length - 1])) {\n nodes.pop();\n trimEnd(nodes);\n }\n\n const foundStreamingCommands: Ast.Node[] = [];\n\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (isStreamingCommand(node)) {\n const wrapper = (content: Ast.Node[]) => replacer(content, node);\n let tail = nodes.slice(i + 1);\n // Streaming commands are followed by whitespace, which becomes unneeded when the commands are replaced.\n trimStart(tail);\n tail = wrapSignificantContent(tail, wrapper);\n foundStreamingCommands.push(node);\n\n // Trim off what we're about to replace!\n nodes.splice(i);\n\n joinWithoutExcessWhitespace(nodes, tail);\n }\n }\n\n return { foundStreamingCommands };\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n splitOnCondition,\n unsplitOnMacro,\n} from \"@unified-latex/unified-latex-util-split\";\nimport {\n trim,\n trimEnd,\n trimStart,\n} from \"@unified-latex/unified-latex-util-trim\";\nimport { firstSignificantNode } from \"./utils/significant-node\";\nimport { replaceStreamingCommandInArray } from \"./utils/replace-streaming-command-in-array\";\nimport { wrapSignificantContent } from \"./utils/wrap-significant-content\";\n\ntype Replacer = (nodes: Ast.Node[]) => Ast.Node[];\n\n/**\n * Process streaming commands in a group. If needed, \"escape\" the group.\n * For example, `{\\bfseries xx}` -> `\\textbf{xx}`, but `{foo \\bfseries xx}` -> `{foo \\textbf{xx}}`.\n */\nexport function replaceStreamingCommandInGroup(\n group: Ast.Group,\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[],\n options?: {\n macrosThatBreakPars?: string[];\n environmentsThatDontBreakPars?: string[];\n }\n): Ast.Node[] {\n const content = group.content;\n // If the group started with a streaming command, we want to pop\n // out of the group. E.g. `{\\bfseries foo}` -> `\\textbf{foo}` and not `{\\textbf{foo}}`\n let popFromGroup = isStreamingCommand(firstSignificantNode(content));\n\n let innerProcessed = replaceStreamingCommand(\n content,\n isStreamingCommand,\n replacer,\n options\n );\n\n // If the group consisted of just streaming commands (for some reason...)\n // it should be eliminated\n if (innerProcessed.length === 0) {\n return [];\n }\n\n if (popFromGroup) {\n return innerProcessed;\n } else {\n return [{ type: \"group\", content: innerProcessed }];\n }\n}\n\n/**\n * Given a group or a node array, look for streaming commands (e.g., `\\bfseries`) and replace them\n * with the specified macro. The \"arguments\" of the streaming command are passed to `replacer` and the return\n * value of `replacer` is inserted into the stream.\n *\n * By default, this command will split at parbreaks (since commands like `\\textbf{...} do not accept parbreaks in their\n * contents) and call `replacer` multiple times, once per paragraph.\n *\n * Commands are also split at environments and at any macros listed in `macrosThatBreakPars`.\n */\nexport function replaceStreamingCommand(\n ast: Ast.Group | Ast.Node[],\n isStreamingCommand: (node: any) => node is Ast.Macro,\n replacer: (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[],\n options?: {\n macrosThatBreakPars?: string[];\n environmentsThatDontBreakPars?: string[];\n }\n): Ast.Node[] {\n if (typeof isStreamingCommand !== \"function\") {\n throw new Error(\n `'isStreamingCommand' must be a function, not '${typeof isStreamingCommand}'`\n );\n }\n\n const {\n macrosThatBreakPars = [\n \"part\",\n \"chapter\",\n \"section\",\n \"subsection\",\n \"subsubsection\",\n \"vspace\",\n \"smallskip\",\n \"medskip\",\n \"bigskip\",\n \"hfill\",\n ],\n environmentsThatDontBreakPars = [],\n } = options || {};\n\n let processedContent: Ast.Node[] = [];\n if (match.group(ast)) {\n processedContent = replaceStreamingCommandInGroup(\n ast,\n isStreamingCommand,\n replacer\n );\n }\n\n if (Array.isArray(ast)) {\n // Streaming commands that come at the end of a sequence of nodes don't do anything.\n // They also will consume whitespace, so we should remove them and the whitespace.\n const nodes = ast;\n let scanIndex = nodes.length;\n let sliceIndex = scanIndex;\n while (\n scanIndex > 0 &&\n (isStreamingCommand(nodes[scanIndex - 1]) ||\n match.whitespace(nodes[scanIndex - 1]))\n ) {\n scanIndex--;\n if (isStreamingCommand(nodes[scanIndex])) {\n sliceIndex = scanIndex;\n }\n }\n if (sliceIndex !== nodes.length) {\n nodes.splice(sliceIndex);\n }\n\n const macroThatBreaks = match.createMacroMatcher(macrosThatBreakPars);\n const envThatDoesntBreak = match.createEnvironmentMatcher(\n environmentsThatDontBreakPars\n );\n // A \"par\" is anything that a streaming command shouldn't wrap and breaks the stream.\n // This includes regular pars, but also environments and special macros like \\section\n const isPar = (node: Ast.Node) =>\n match.parbreak(node) ||\n match.macro(node, \"par\") ||\n macroThatBreaks(node) ||\n (match.environment(node) && !envThatDoesntBreak(node)) ||\n node.type === \"displaymath\";\n\n // We split on both a parbreak and a literal `\\par`. But we will\n // normalize everything to be parbreaks\n const splitByPar = splitOnCondition(nodes, isPar);\n splitByPar.separators = splitByPar.separators.map((sep) =>\n match.macro(sep, \"par\") ? { type: \"parbreak\" } : sep\n );\n\n const replacers: Replacer[] = [];\n let segments = splitByPar.segments.map((segment) => {\n if (segment.length === 0) {\n return segment;\n }\n function applyAccumulatedReplacers(nodes: Ast.Node[]): Ast.Node[] {\n if (replacers.length === 0) {\n return nodes;\n }\n return wrapSignificantContent(\n nodes,\n composeReplacers(replacers)\n );\n }\n\n const { foundStreamingCommands } = replaceStreamingCommandInArray(\n segment,\n isStreamingCommand,\n replacer\n );\n\n // All streaming commands in `segment` have now been replaced. However,\n // there might be commands from the previous paragraphs that should wrap\n // the current segment!\n const ret = applyAccumulatedReplacers(segment);\n\n // Any streaming commands from this segment will carry over to the next,\n // so keep track of them.\n foundStreamingCommands.forEach((macro) => {\n replacers.push((nodes: Ast.Node[]) => {\n const ret = replacer(nodes, macro as Ast.Macro);\n if (!Array.isArray(ret)) {\n return [ret];\n }\n return ret;\n });\n });\n\n return ret;\n });\n\n // Leading/trailing whitespace was hoisted in front/back of each replacer.\n // Since we're separated by parbreaks, we can safely trim all that whitespace.\n if (segments.length > 1) {\n segments.forEach((segment, i) => {\n if (i === 0) {\n trimEnd(segment);\n } else if (i === segments.length - 1) {\n trimStart(segment);\n } else {\n trim(segment);\n }\n });\n }\n\n processedContent = unsplitOnMacro({\n segments: segments,\n macros: splitByPar.separators,\n });\n }\n\n return processedContent;\n}\n\n/**\n * Given a sequence of replacer functions `[f, g, h]` return\n * `h \\circ g \\circ f`\n *\n * @param {((nodes: Ast.Node[]) => Ast.Node)[]} replacers\n * @returns {(nodes: Ast.Node[]) => Ast.Node}\n */\nfunction composeReplacers(replacers: Replacer[]): Replacer {\n if (replacers.length === 0) {\n throw new Error(\"Cannot compose zero replacement functions\");\n }\n return (nodes: Ast.Node[]) => {\n let ret = nodes;\n for (let i = 0; i < replacers.length; i++) {\n const func = replacers[i];\n ret = func(ret);\n }\n return ret;\n };\n}\n","import { VisitInfo } from \"@unified-latex/unified-latex-util-visit\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Replaces the current node with `replacement`. It is assumed that the current\n * node is in an array that is a child of a parent element. If this is not the case,\n * the function will error.\n */\nexport function replaceNodeDuringVisit(\n replacement: Ast.Node | Ast.Argument | (Ast.Node | Ast.Argument)[],\n info: VisitInfo\n) {\n const parent = info.parents[0];\n if (!parent) {\n throw new Error(`Cannot replace node: parent not found`);\n }\n const container = parent[info.key as keyof typeof parent] as\n | (Ast.Node | Ast.Argument)[]\n | undefined;\n if (!Array.isArray(container)) {\n throw new Error(`Cannot replace node: containing array not found`);\n }\n if (info.index == null) {\n throw new Error(`Cannot replace node: node index undefined`);\n }\n if (!Array.isArray(replacement)) {\n container[info.index] = replacement;\n } else {\n container.splice(info.index, 1, ...replacement);\n }\n}\n","import { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { trimEnd, trimStart } from \"@unified-latex/unified-latex-util-trim\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { replaceStreamingCommand } from \"./replace-streaming-command\";\nimport { replaceNodeDuringVisit } from \"./replace-node-during-visit\";\n\ntype PluginOptions = {\n replacers: Record<\n string,\n (\n content: Ast.Node[],\n streamingCommand: Ast.Macro\n ) => Ast.Node | Ast.Node[]\n >;\n};\n\n/**\n * Unified plugin to replace all found streaming commands with their argument-style equivalents.\n * This only applies to sections of the tree with no math ancestor.\n *\n * @param options.replacer A record of macro names and replacer functions. A replacer function accepts content and the original streaming command and is expected to return the argument-style command. It may be called multiple times per streaming command.\n */\nexport const unifiedLatexReplaceStreamingCommands: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexReplaceStreamingCommands(options) {\n const { replacers = {} } = options || {};\n const isReplaceable = match.createMacroMatcher(replacers);\n return (tree) => {\n // We traverse all groups before we replace nodes in other contexts\n visit(\n tree,\n (group, info) => {\n if (\n info.context.hasMathModeAncestor ||\n !group.content.some(isReplaceable)\n ) {\n return;\n }\n\n let fixed = replaceStreamingCommand(\n group,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n\n // We cannot replace the node unless we can access the containing array.\n if (!info.containingArray || info.index == null) {\n return;\n }\n\n // `fixed` may consist of only whitespace. If this is the case,\n // surrounding whitespace must trimmed before\n // inserting the group's contents.\n const prevToken = info.containingArray[info.index - 1];\n const nextToken = info.containingArray[info.index + 1];\n if (\n match.whitespaceLike(prevToken) &&\n match.whitespaceLike(fixed[0])\n ) {\n trimStart(fixed);\n }\n if (\n match.whitespaceLike(nextToken) &&\n match.whitespaceLike(fixed[fixed.length - 1])\n ) {\n trimEnd(fixed);\n }\n replaceNodeDuringVisit(fixed, info);\n },\n { test: match.group }\n );\n\n visit(\n tree,\n (nodes, info) => {\n if (\n info.context.hasMathModeAncestor ||\n !nodes.some(isReplaceable)\n ) {\n return;\n }\n\n const replaced = replaceStreamingCommand(\n nodes,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n\n // If we get back a different array than we input, the replacement did\n // not happen in-place. In this case we need to manipulate `nodes`.\n if (replaced !== nodes) {\n nodes.length = 0;\n nodes.push(...replaced);\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\n"],"names":["comment","nodes","ret","unifiedLatexReplaceStreamingCommands"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-replace/package.json b/node_modules/@unified-latex/unified-latex-util-replace/package.json new file mode 100644 index 0000000..9b4963e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-replace/package.json @@ -0,0 +1,56 @@ +{ + "name": "@unified-latex/unified-latex-util-replace", + "version": "1.8.2", + "description": "Functions for modifying a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-split": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-scan/README.md b/node_modules/@unified-latex/unified-latex-util-scan/README.md new file mode 100644 index 0000000..6d5f18e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-scan/README.md @@ -0,0 +1,67 @@ + + + + +# unified-latex-util-scan + +## What is this? + +Functions to analyze `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you want to look for particular AST nodes in an array; useful when making plugins. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-scan +``` + +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 + +## `prefixMatch(nodes, prefixes, options)` + +Efficiently search for a large number of strings using a prefix-tree. +The longest match is returned. + +```typescript +function prefixMatch(nodes: Ast.Node[], prefixes: string | string[] | { dump(spacer?: number): string; tree(): any; addWord(word: string): ReturnType; removeWord(word: string): ReturnType; ... 7 more ...; getSubAnagrams(word: string): string[]; }, options: { startIndex?: number; matchSubstrings?: boolean; assumeOneCharStrings?: boolean; }): { match: string; endNodeIndex: number; endNodePartialMatch: string | null; } +``` + +**Parameters** + +| Param | Type | +| :------- | :-------------------------------- | +| nodes | `Ast.Node[]` | +| prefixes | Omitted | +| options | Omitted | + +## `scan(nodes, token, options)` + +Scan `nodes` looking for the first occurrence of `token`. +If `options.onlySkipWhitespaceAndComments==true`, then the scan +will only skip whitespace/comment nodes. + +```typescript +function scan( + nodes: (Ast.Node | Ast.Argument)[], + token: string | Ast.Node | Ast.Argument, + options: { + startIndex?: number; + onlySkipWhitespaceAndComments?: boolean; + allowSubstringMatches?: boolean; + } +): number; +``` + +**Parameters** + +| Param | Type | +| :------ | :-------------------------------- | +| nodes | `(Ast.Node \| Ast.Argument)[]` | +| token | Omitted | +| options | Omitted | diff --git a/node_modules/@unified-latex/unified-latex-util-scan/index.cjs b/node_modules/@unified-latex/unified-latex-util-scan/index.cjs new file mode 100644 index 0000000..6b49907 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-scan/index.cjs @@ -0,0 +1,123 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilPrintRaw = require("@unified-latex/unified-latex-util-print-raw"); +const Trie = require("trie-prefix-tree"); +function scan(nodes, token, options) { + const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } = options || {}; + if (typeof token === "string") { + token = { type: "string", content: token }; + } + for (let i = startIndex || 0; i < nodes.length; i++) { + const node = nodes[i]; + if (node.type === token.type) { + switch (node.type) { + case "comment": + case "displaymath": + case "inlinemath": + case "root": + case "parbreak": + case "whitespace": + case "verb": + case "verbatim": + case "group": + return i; + case "macro": + if (node.content === token.content) { + return i; + } + break; + case "environment": + case "mathenv": + if (unifiedLatexUtilPrintRaw.printRaw(node.env) === unifiedLatexUtilPrintRaw.printRaw(token.env)) { + return i; + } + break; + case "string": + if (node.content === token.content) { + return i; + } + if (allowSubstringMatches && node.content.indexOf(token.content) >= 0) { + return i; + } + break; + } + } + if (onlySkipWhitespaceAndComments && !unifiedLatexUtilMatch.match.whitespace(node) && !unifiedLatexUtilMatch.match.comment(node)) { + return null; + } + } + return null; +} +function prefixMatch(nodes, prefixes, options) { + const { + startIndex = 0, + matchSubstrings = false, + assumeOneCharStrings = false + } = options || {}; + if (typeof prefixes === "string") { + prefixes = [prefixes]; + } + if (Array.isArray(prefixes)) { + prefixes = Trie(prefixes); + } + const prefixTree = prefixes; + const history = { + lastPrefix: "", + lastWord: "", + index: startIndex, + partialMatch: "" + }; + function tryToMatchNextChar(char, index) { + let ret = false; + if (prefixTree.isPrefix(history.lastPrefix + char)) { + history.lastPrefix += char; + history.index = index; + ret = true; + } + if (prefixTree.hasWord(history.lastPrefix)) { + history.lastWord = history.lastPrefix; + } + return ret; + } + for (let i = 0; startIndex + i < nodes.length; i++) { + const node = nodes[startIndex + i]; + if (!unifiedLatexUtilMatch.match.string(node)) { + break; + } + if (assumeOneCharStrings && node.content.length !== 1) { + break; + } + if (matchSubstrings) { + let fullMatch = true; + history.partialMatch = ""; + for (let j = 0; j < node.content.length; j++) { + const char = node.content[j]; + if (tryToMatchNextChar(char, startIndex + i)) { + history.partialMatch += char; + } else { + fullMatch = false; + break; + } + } + if (fullMatch) { + history.partialMatch = ""; + } else { + break; + } + } else { + if (!tryToMatchNextChar(node.content, startIndex + i)) { + break; + } + } + } + return history.lastWord ? { + match: history.lastWord, + endNodeIndex: history.index, + endNodePartialMatch: history.partialMatch ? history.partialMatch : null + } : null; +} +exports.Trie = Trie; +exports.prefixMatch = prefixMatch; +exports.scan = scan; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-scan/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-scan/index.cjs.map new file mode 100644 index 0000000..d6e37e2 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-scan/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/scan.ts","../libs/prefix-match.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Scan `nodes` looking for the first occurrence of `token`.\n * If `options.onlySkipWhitespaceAndComments==true`, then the scan\n * will only skip whitespace/comment nodes.\n */\nexport function scan(\n nodes: (Ast.Node | Ast.Argument)[],\n token: string | Ast.Node | Ast.Argument,\n options?: {\n /**\n * Index to start scanning.\n */\n startIndex?: number;\n /**\n * If `true`, whitespace and comments will be skilled but any other\n * node that doesn't match `token` will cause the scan to terminate.\n */\n onlySkipWhitespaceAndComments?: boolean;\n /**\n * If `true`, will look inside `Ast.String` nodes to see if the string contents\n * contain `token`.\n */\n allowSubstringMatches?: boolean;\n }\n): number | null {\n const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } =\n options || {};\n if (typeof token === \"string\") {\n token = { type: \"string\", content: token } as Ast.String;\n }\n\n for (let i = startIndex || 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.type === token.type) {\n switch (node.type) {\n case \"comment\":\n case \"displaymath\":\n case \"inlinemath\":\n case \"root\":\n case \"parbreak\":\n case \"whitespace\":\n case \"verb\":\n case \"verbatim\":\n case \"group\":\n return i;\n case \"macro\":\n if (node.content === (token as Ast.Macro).content) {\n return i;\n }\n break;\n case \"environment\":\n case \"mathenv\":\n if (\n printRaw(node.env) ===\n printRaw((token as Ast.Environment).env)\n ) {\n return i;\n }\n break;\n case \"string\":\n if (node.content === (token as Ast.String).content) {\n return i;\n }\n if (\n allowSubstringMatches &&\n node.content.indexOf((token as Ast.String).content) >= 0\n ) {\n return i;\n }\n break;\n }\n }\n if (\n onlySkipWhitespaceAndComments &&\n !match.whitespace(node) &&\n !match.comment(node)\n ) {\n return null;\n }\n }\n\n return null;\n}\n","import Trie from \"trie-prefix-tree\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nexport { Trie };\n\n/**\n * Efficiently search for a large number of strings using a prefix-tree.\n * The longest match is returned.\n *\n * @param options.startIndex the index to start scanning at. Defaults to 0.\n * @param options.matchSubstrings whether to allow matching only part of a substring.\n * @param options.assumeOneCharStrings assume that all strings are one character long (for example, like they are in math mode)\n */\nexport function prefixMatch(\n nodes: Ast.Node[],\n prefixes: string | string[] | ReturnType,\n options?: {\n startIndex?: number;\n matchSubstrings?: boolean;\n assumeOneCharStrings?: boolean;\n }\n): {\n match: string;\n endNodeIndex: number;\n endNodePartialMatch: string | null;\n} | null {\n const {\n startIndex = 0,\n matchSubstrings = false,\n assumeOneCharStrings = false,\n } = options || {};\n\n if (typeof prefixes === \"string\") {\n prefixes = [prefixes];\n }\n if (Array.isArray(prefixes)) {\n prefixes = Trie(prefixes);\n }\n const prefixTree = prefixes;\n\n const history = {\n lastPrefix: \"\",\n lastWord: \"\",\n index: startIndex,\n partialMatch: \"\",\n };\n\n /**\n * Try to match the next character. If it matches,\n * record it properly in the `history` object.\n */\n function tryToMatchNextChar(char: string, index: number): boolean {\n let ret = false;\n if (prefixTree.isPrefix(history.lastPrefix + char)) {\n history.lastPrefix += char;\n history.index = index;\n ret = true;\n }\n if (prefixTree.hasWord(history.lastPrefix)) {\n history.lastWord = history.lastPrefix;\n }\n return ret;\n }\n\n // Loop through the nodes looking for the longest prefix match\n for (let i = 0; startIndex + i < nodes.length; i++) {\n const node = nodes[startIndex + i];\n if (!match.string(node)) {\n break;\n }\n if (assumeOneCharStrings && node.content.length !== 1) {\n break;\n }\n if (matchSubstrings) {\n // We need to test letter-by-letter for substring matches\n let fullMatch = true;\n history.partialMatch = \"\";\n for (let j = 0; j < node.content.length; j++) {\n const char = node.content[j];\n if (tryToMatchNextChar(char, startIndex + i)) {\n history.partialMatch += char;\n } else {\n fullMatch = false;\n break;\n }\n }\n if (fullMatch) {\n history.partialMatch = \"\";\n } else {\n break;\n }\n } else {\n if (!tryToMatchNextChar(node.content, startIndex + i)) {\n break;\n }\n }\n }\n\n return history.lastWord\n ? {\n match: history.lastWord,\n endNodeIndex: history.index,\n endNodePartialMatch: history.partialMatch\n ? history.partialMatch\n : null,\n }\n : null;\n}\n"],"names":["printRaw","match"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-scan/index.d.ts b/node_modules/@unified-latex/unified-latex-util-scan/index.d.ts new file mode 100644 index 0000000..6298247 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-scan/index.d.ts @@ -0,0 +1,46 @@ +import * as Ast from '@unified-latex/unified-latex-types'; +import { default as Trie } from 'trie-prefix-tree'; + +/** + * Efficiently search for a large number of strings using a prefix-tree. + * The longest match is returned. + * + * @param options.startIndex the index to start scanning at. Defaults to 0. + * @param options.matchSubstrings whether to allow matching only part of a substring. + * @param options.assumeOneCharStrings assume that all strings are one character long (for example, like they are in math mode) + */ +export declare function prefixMatch(nodes: Ast.Node[], prefixes: string | string[] | ReturnType, options?: { + startIndex?: number; + matchSubstrings?: boolean; + assumeOneCharStrings?: boolean; +}): { + match: string; + endNodeIndex: number; + endNodePartialMatch: string | null; +} | null; + +/** + * Scan `nodes` looking for the first occurrence of `token`. + * If `options.onlySkipWhitespaceAndComments==true`, then the scan + * will only skip whitespace/comment nodes. + */ +export declare function scan(nodes: (Ast.Node | Ast.Argument)[], token: string | Ast.Node | Ast.Argument, options?: { + /** + * Index to start scanning. + */ + startIndex?: number; + /** + * If `true`, whitespace and comments will be skilled but any other + * node that doesn't match `token` will cause the scan to terminate. + */ + onlySkipWhitespaceAndComments?: boolean; + /** + * If `true`, will look inside `Ast.String` nodes to see if the string contents + * contain `token`. + */ + allowSubstringMatches?: boolean; +}): number | null; + +export { Trie } + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-scan/index.js b/node_modules/@unified-latex/unified-latex-util-scan/index.js new file mode 100644 index 0000000..381ed5a --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-scan/index.js @@ -0,0 +1,124 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +import { printRaw } from "@unified-latex/unified-latex-util-print-raw"; +import Trie from "trie-prefix-tree"; +import { default as default2 } from "trie-prefix-tree"; +function scan(nodes, token, options) { + const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } = options || {}; + if (typeof token === "string") { + token = { type: "string", content: token }; + } + for (let i = startIndex || 0; i < nodes.length; i++) { + const node = nodes[i]; + if (node.type === token.type) { + switch (node.type) { + case "comment": + case "displaymath": + case "inlinemath": + case "root": + case "parbreak": + case "whitespace": + case "verb": + case "verbatim": + case "group": + return i; + case "macro": + if (node.content === token.content) { + return i; + } + break; + case "environment": + case "mathenv": + if (printRaw(node.env) === printRaw(token.env)) { + return i; + } + break; + case "string": + if (node.content === token.content) { + return i; + } + if (allowSubstringMatches && node.content.indexOf(token.content) >= 0) { + return i; + } + break; + } + } + if (onlySkipWhitespaceAndComments && !match.whitespace(node) && !match.comment(node)) { + return null; + } + } + return null; +} +function prefixMatch(nodes, prefixes, options) { + const { + startIndex = 0, + matchSubstrings = false, + assumeOneCharStrings = false + } = options || {}; + if (typeof prefixes === "string") { + prefixes = [prefixes]; + } + if (Array.isArray(prefixes)) { + prefixes = Trie(prefixes); + } + const prefixTree = prefixes; + const history = { + lastPrefix: "", + lastWord: "", + index: startIndex, + partialMatch: "" + }; + function tryToMatchNextChar(char, index) { + let ret = false; + if (prefixTree.isPrefix(history.lastPrefix + char)) { + history.lastPrefix += char; + history.index = index; + ret = true; + } + if (prefixTree.hasWord(history.lastPrefix)) { + history.lastWord = history.lastPrefix; + } + return ret; + } + for (let i = 0; startIndex + i < nodes.length; i++) { + const node = nodes[startIndex + i]; + if (!match.string(node)) { + break; + } + if (assumeOneCharStrings && node.content.length !== 1) { + break; + } + if (matchSubstrings) { + let fullMatch = true; + history.partialMatch = ""; + for (let j = 0; j < node.content.length; j++) { + const char = node.content[j]; + if (tryToMatchNextChar(char, startIndex + i)) { + history.partialMatch += char; + } else { + fullMatch = false; + break; + } + } + if (fullMatch) { + history.partialMatch = ""; + } else { + break; + } + } else { + if (!tryToMatchNextChar(node.content, startIndex + i)) { + break; + } + } + } + return history.lastWord ? { + match: history.lastWord, + endNodeIndex: history.index, + endNodePartialMatch: history.partialMatch ? history.partialMatch : null + } : null; +} +export { + default2 as Trie, + prefixMatch, + scan +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-scan/index.js.map b/node_modules/@unified-latex/unified-latex-util-scan/index.js.map new file mode 100644 index 0000000..93b2d32 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-scan/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/scan.ts","../libs/prefix-match.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n/**\n * Scan `nodes` looking for the first occurrence of `token`.\n * If `options.onlySkipWhitespaceAndComments==true`, then the scan\n * will only skip whitespace/comment nodes.\n */\nexport function scan(\n nodes: (Ast.Node | Ast.Argument)[],\n token: string | Ast.Node | Ast.Argument,\n options?: {\n /**\n * Index to start scanning.\n */\n startIndex?: number;\n /**\n * If `true`, whitespace and comments will be skilled but any other\n * node that doesn't match `token` will cause the scan to terminate.\n */\n onlySkipWhitespaceAndComments?: boolean;\n /**\n * If `true`, will look inside `Ast.String` nodes to see if the string contents\n * contain `token`.\n */\n allowSubstringMatches?: boolean;\n }\n): number | null {\n const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } =\n options || {};\n if (typeof token === \"string\") {\n token = { type: \"string\", content: token } as Ast.String;\n }\n\n for (let i = startIndex || 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.type === token.type) {\n switch (node.type) {\n case \"comment\":\n case \"displaymath\":\n case \"inlinemath\":\n case \"root\":\n case \"parbreak\":\n case \"whitespace\":\n case \"verb\":\n case \"verbatim\":\n case \"group\":\n return i;\n case \"macro\":\n if (node.content === (token as Ast.Macro).content) {\n return i;\n }\n break;\n case \"environment\":\n case \"mathenv\":\n if (\n printRaw(node.env) ===\n printRaw((token as Ast.Environment).env)\n ) {\n return i;\n }\n break;\n case \"string\":\n if (node.content === (token as Ast.String).content) {\n return i;\n }\n if (\n allowSubstringMatches &&\n node.content.indexOf((token as Ast.String).content) >= 0\n ) {\n return i;\n }\n break;\n }\n }\n if (\n onlySkipWhitespaceAndComments &&\n !match.whitespace(node) &&\n !match.comment(node)\n ) {\n return null;\n }\n }\n\n return null;\n}\n","import Trie from \"trie-prefix-tree\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\nexport { Trie };\n\n/**\n * Efficiently search for a large number of strings using a prefix-tree.\n * The longest match is returned.\n *\n * @param options.startIndex the index to start scanning at. Defaults to 0.\n * @param options.matchSubstrings whether to allow matching only part of a substring.\n * @param options.assumeOneCharStrings assume that all strings are one character long (for example, like they are in math mode)\n */\nexport function prefixMatch(\n nodes: Ast.Node[],\n prefixes: string | string[] | ReturnType,\n options?: {\n startIndex?: number;\n matchSubstrings?: boolean;\n assumeOneCharStrings?: boolean;\n }\n): {\n match: string;\n endNodeIndex: number;\n endNodePartialMatch: string | null;\n} | null {\n const {\n startIndex = 0,\n matchSubstrings = false,\n assumeOneCharStrings = false,\n } = options || {};\n\n if (typeof prefixes === \"string\") {\n prefixes = [prefixes];\n }\n if (Array.isArray(prefixes)) {\n prefixes = Trie(prefixes);\n }\n const prefixTree = prefixes;\n\n const history = {\n lastPrefix: \"\",\n lastWord: \"\",\n index: startIndex,\n partialMatch: \"\",\n };\n\n /**\n * Try to match the next character. If it matches,\n * record it properly in the `history` object.\n */\n function tryToMatchNextChar(char: string, index: number): boolean {\n let ret = false;\n if (prefixTree.isPrefix(history.lastPrefix + char)) {\n history.lastPrefix += char;\n history.index = index;\n ret = true;\n }\n if (prefixTree.hasWord(history.lastPrefix)) {\n history.lastWord = history.lastPrefix;\n }\n return ret;\n }\n\n // Loop through the nodes looking for the longest prefix match\n for (let i = 0; startIndex + i < nodes.length; i++) {\n const node = nodes[startIndex + i];\n if (!match.string(node)) {\n break;\n }\n if (assumeOneCharStrings && node.content.length !== 1) {\n break;\n }\n if (matchSubstrings) {\n // We need to test letter-by-letter for substring matches\n let fullMatch = true;\n history.partialMatch = \"\";\n for (let j = 0; j < node.content.length; j++) {\n const char = node.content[j];\n if (tryToMatchNextChar(char, startIndex + i)) {\n history.partialMatch += char;\n } else {\n fullMatch = false;\n break;\n }\n }\n if (fullMatch) {\n history.partialMatch = \"\";\n } else {\n break;\n }\n } else {\n if (!tryToMatchNextChar(node.content, startIndex + i)) {\n break;\n }\n }\n }\n\n return history.lastWord\n ? {\n match: history.lastWord,\n endNodeIndex: history.index,\n endNodePartialMatch: history.partialMatch\n ? history.partialMatch\n : null,\n }\n : null;\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-scan/package.json b/node_modules/@unified-latex/unified-latex-util-scan/package.json new file mode 100644 index 0000000..efdcacb --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-scan/package.json @@ -0,0 +1,54 @@ +{ + "name": "@unified-latex/unified-latex-util-scan", + "version": "1.8.0", + "description": "Functions for modifying a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "trie-prefix-tree": "^1.5.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-split/README.md b/node_modules/@unified-latex/unified-latex-util-split/README.md new file mode 100644 index 0000000..fb6cb43 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-split/README.md @@ -0,0 +1,106 @@ + + + + +# unified-latex-util-split + +## What is this? + +Functions to manipulate `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you want break apart or join an array of nodes based on a condition. For example, +this is used to split on `&` characters in the `align` environment. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-split +``` + +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 + +## `arrayJoin(array, sep)` + +Joins an array of arrays with the item `sep` + +```typescript +function arrayJoin(array: T[][], sep: T | T[]): T[]; +``` + +**Parameters** + +| Param | Type | +| :---- | :--------- | +| array | `T[][]` | +| sep | `T \| T[]` | + +## `splitOnCondition(nodes, splitFunc, options)` + +Split a list of nodes based on whether `splitFunc` returns `true`. +If `onlySplitOnFirstOccurrence` is set to true in the `options` object, then +there will be at most two segments returned. + +```typescript +function splitOnCondition( + nodes: Ast.Node[], + splitFunc: (node: Ast.Node) => boolean, + options: { onlySplitOnFirstOccurrence?: boolean } +): { segments: Ast.Node[][]; separators: Ast.Node[] }; +``` + +**Parameters** + +| Param | Type | +| :-------- | :-------------------------------- | +| nodes | `Ast.Node[]` | +| splitFunc | `(node: Ast.Node) => boolean` | +| options | Omitted | + +## `splitOnMacro(ast, macroName)` + +Split an array of AST nodes based on a macro. An object `{segments: [], macros: []}` +is returned. The original array is reconstructed as +`segments[0] + macros[0] + segments[1] + ...`. + +```typescript +function splitOnMacro( + ast: Ast.Node[], + macroName: string | string[] +): { segments: Ast.Node[][]; macros: Ast.Macro[] }; +``` + +**Parameters** + +| Param | Type | +| :-------- | :------------------- | +| ast | `Ast.Node[]` | +| macroName | `string \| string[]` | + +`unsplitOnMacro({ + segments, + macros, +})` +--- + +Does the reverse of `splitOnMacro` + +```typescript +function unsplitOnMacro({ + segments, + macros, +}: { + segments: Ast.Node[][]; + macros: Ast.Node[] | Ast.Node[][]; +}): Ast.Node[]; +``` + +**Parameters** + +| Param | Type | +| :---------------------------------------- | :-------------------------------- | +| { segments, macros, } | Omitted | diff --git a/node_modules/@unified-latex/unified-latex-util-split/index.cjs b/node_modules/@unified-latex/unified-latex-util-split/index.cjs new file mode 100644 index 0000000..c5abace --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-split/index.cjs @@ -0,0 +1,77 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +function splitOnCondition(nodes, splitFunc = () => false, options) { + if (!Array.isArray(nodes)) { + throw new Error(`Can only split an Array, not ${nodes}`); + } + const { onlySplitOnFirstOccurrence = false } = options || {}; + const splitIndices = []; + for (let i = 0; i < nodes.length; i++) { + if (splitFunc(nodes[i])) { + splitIndices.push(i); + if (onlySplitOnFirstOccurrence) { + break; + } + } + } + if (splitIndices.length === 0) { + return { segments: [nodes], separators: [] }; + } + let separators = splitIndices.map((i) => nodes[i]); + let segments = splitIndices.map((splitEnd, i) => { + const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1; + return nodes.slice(splitStart, splitEnd); + }); + segments.push( + nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length) + ); + return { segments, separators }; +} +function splitOnMacro(ast, macroName) { + if (typeof macroName === "string") { + macroName = [macroName]; + } + if (!Array.isArray(macroName)) { + throw new Error("Type coercion failed"); + } + const isSeparator = unifiedLatexUtilMatch.match.createMacroMatcher(macroName); + const { segments, separators } = splitOnCondition(ast, isSeparator); + return { segments, macros: separators }; +} +function unsplitOnMacro({ + segments, + macros +}) { + if (segments.length === 0) { + console.warn("Trying to join zero segments"); + return []; + } + if (segments.length !== macros.length + 1) { + console.warn( + "Mismatch between lengths of macros and segments when trying to unsplit" + ); + } + let ret = segments[0]; + for (let i = 0; i < macros.length; i++) { + ret = ret.concat(macros[i]).concat(segments[i + 1]); + } + return ret; +} +function arrayJoin(array, sep) { + return array.flatMap((item, i) => { + if (i === 0) { + return item; + } + if (Array.isArray(sep)) { + return [...sep, ...item]; + } else { + return [sep, ...item]; + } + }); +} +exports.arrayJoin = arrayJoin; +exports.splitOnCondition = splitOnCondition; +exports.splitOnMacro = splitOnMacro; +exports.unsplitOnMacro = unsplitOnMacro; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-split/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-split/index.cjs.map new file mode 100644 index 0000000..52dff81 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-split/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/split-on-condition.ts","../libs/split-on-macro.ts","../libs/unsplit-on-macro.ts","../libs/array-join.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Split a list of nodes based on whether `splitFunc` returns `true`.\n * If `onlySplitOnFirstOccurrence` is set to true in the `options` object, then\n * there will be at most two segments returned.\n */\nexport function splitOnCondition(\n nodes: Ast.Node[],\n splitFunc: (node: Ast.Node) => boolean = () => false,\n options?: { onlySplitOnFirstOccurrence?: boolean }\n): { segments: Ast.Node[][]; separators: Ast.Node[] } {\n if (!Array.isArray(nodes)) {\n throw new Error(`Can only split an Array, not ${nodes}`);\n }\n\n const { onlySplitOnFirstOccurrence = false } = options || {};\n\n const splitIndices: number[] = [];\n for (let i = 0; i < nodes.length; i++) {\n if (splitFunc(nodes[i])) {\n splitIndices.push(i);\n if (onlySplitOnFirstOccurrence) {\n break;\n }\n }\n }\n\n // Short circuit if there is no splitting to be done\n if (splitIndices.length === 0) {\n return { segments: [nodes], separators: [] };\n }\n\n let separators = splitIndices.map((i) => nodes[i]);\n let segments = splitIndices.map((splitEnd, i) => {\n const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1;\n return nodes.slice(splitStart, splitEnd);\n });\n segments.push(\n nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length)\n );\n\n return { segments, separators };\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { splitOnCondition } from \"./split-on-condition\";\n\n/**\n * Split an array of AST nodes based on a macro. An object `{segments: [], macros: []}`\n * is returned. The original array is reconstructed as\n * `segments[0] + macros[0] + segments[1] + ...`.\n *\n * @param {[object]} ast\n * @param {(string|[string])} macroName\n * @returns {{segments: [object], macros: [object]}}\n */\nexport function splitOnMacro(\n ast: Ast.Node[],\n macroName: string | string[]\n): { segments: Ast.Node[][]; macros: Ast.Macro[] } {\n if (typeof macroName === \"string\") {\n macroName = [macroName];\n }\n if (!Array.isArray(macroName)) {\n throw new Error(\"Type coercion failed\");\n }\n const isSeparator = match.createMacroMatcher(macroName);\n const { segments, separators } = splitOnCondition(ast, isSeparator);\n return { segments, macros: separators as Ast.Macro[] };\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Does the reverse of `splitOnMacro`\n */\nexport function unsplitOnMacro({\n segments,\n macros,\n}: {\n segments: Ast.Node[][];\n macros: Ast.Node[] | Ast.Node[][];\n}) {\n if (segments.length === 0) {\n console.warn(\"Trying to join zero segments\");\n return [];\n }\n if (segments.length !== macros.length + 1) {\n console.warn(\n \"Mismatch between lengths of macros and segments when trying to unsplit\"\n );\n }\n\n let ret = segments[0];\n for (let i = 0; i < macros.length; i++) {\n // Even though the type of macros[i] is node and not array,\n // Array.concat still works\n ret = ret.concat(macros[i]).concat(segments[i + 1]);\n }\n\n return ret;\n}\n","/**\n * Joins an array of arrays with the item `sep`\n */\nexport function arrayJoin(array: T[][], sep: T | T[]): T[] {\n return array.flatMap((item, i) => {\n if (i === 0) {\n return item;\n }\n if (Array.isArray(sep)) {\n return [...sep, ...item];\n } else {\n return [sep, ...item];\n }\n });\n}\n"],"names":["match"],"mappings":";;;AAOO,SAAS,iBACZ,OACA,YAAyC,MAAM,OAC/C,SACkD;AAClD,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,UAAM,IAAI,MAAM,gCAAgC,KAAK,EAAE;AAAA,EAC3D;AAEA,QAAM,EAAE,6BAA6B,UAAU,WAAW,CAAA;AAE1D,QAAM,eAAyB,CAAA;AAC/B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,QAAI,UAAU,MAAM,CAAC,CAAC,GAAG;AACrB,mBAAa,KAAK,CAAC;AACnB,UAAI,4BAA4B;AAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAGI,MAAA,aAAa,WAAW,GAAG;AAC3B,WAAO,EAAE,UAAU,CAAC,KAAK,GAAG,YAAY,CAAG,EAAA;AAAA,EAC/C;AAEA,MAAI,aAAa,aAAa,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;AACjD,MAAI,WAAW,aAAa,IAAI,CAAC,UAAU,MAAM;AAC7C,UAAM,aAAa,MAAM,IAAI,IAAI,aAAa,IAAI,CAAC,IAAI;AAChD,WAAA,MAAM,MAAM,YAAY,QAAQ;AAAA,EAAA,CAC1C;AACQ,WAAA;AAAA,IACL,MAAM,MAAM,aAAa,aAAa,SAAS,CAAC,IAAI,GAAG,MAAM,MAAM;AAAA,EAAA;AAGhE,SAAA,EAAE,UAAU;AACvB;AC9BgB,SAAA,aACZ,KACA,WAC+C;AAC3C,MAAA,OAAO,cAAc,UAAU;AAC/B,gBAAY,CAAC,SAAS;AAAA,EAC1B;AACA,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AACrB,UAAA,IAAI,MAAM,sBAAsB;AAAA,EAC1C;AACM,QAAA,cAAcA,sBAAAA,MAAM,mBAAmB,SAAS;AACtD,QAAM,EAAE,UAAU,WAAA,IAAe,iBAAiB,KAAK,WAAW;AAC3D,SAAA,EAAE,UAAU,QAAQ;AAC/B;ACrBO,SAAS,eAAe;AAAA,EAC3B;AAAA,EACA;AACJ,GAGG;AACK,MAAA,SAAS,WAAW,GAAG;AACvB,YAAQ,KAAK,8BAA8B;AAC3C,WAAO;EACX;AACA,MAAI,SAAS,WAAW,OAAO,SAAS,GAAG;AAC/B,YAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAER;AAEI,MAAA,MAAM,SAAS,CAAC;AACpB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAG9B,UAAA,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,OAAO,SAAS,IAAI,CAAC,CAAC;AAAA,EACtD;AAEO,SAAA;AACX;AC3BgB,SAAA,UAAa,OAAc,KAAmB;AAC1D,SAAO,MAAM,QAAQ,CAAC,MAAM,MAAM;AAC9B,QAAI,MAAM,GAAG;AACF,aAAA;AAAA,IACX;AACI,QAAA,MAAM,QAAQ,GAAG,GAAG;AACpB,aAAO,CAAC,GAAG,KAAK,GAAG,IAAI;AAAA,IAAA,OACpB;AACI,aAAA,CAAC,KAAK,GAAG,IAAI;AAAA,IACxB;AAAA,EAAA,CACH;AACL;;;;;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-split/index.d.ts b/node_modules/@unified-latex/unified-latex-util-split/index.d.ts new file mode 100644 index 0000000..be26411 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-split/index.d.ts @@ -0,0 +1,42 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +/** + * Joins an array of arrays with the item `sep` + */ +export declare function arrayJoin(array: T[][], sep: T | T[]): T[]; + +/** + * Split a list of nodes based on whether `splitFunc` returns `true`. + * If `onlySplitOnFirstOccurrence` is set to true in the `options` object, then + * there will be at most two segments returned. + */ +export declare function splitOnCondition(nodes: Ast.Node[], splitFunc?: (node: Ast.Node) => boolean, options?: { + onlySplitOnFirstOccurrence?: boolean; +}): { + segments: Ast.Node[][]; + separators: Ast.Node[]; +}; + +/** + * Split an array of AST nodes based on a macro. An object `{segments: [], macros: []}` + * is returned. The original array is reconstructed as + * `segments[0] + macros[0] + segments[1] + ...`. + * + * @param {[object]} ast + * @param {(string|[string])} macroName + * @returns {{segments: [object], macros: [object]}} + */ +export declare function splitOnMacro(ast: Ast.Node[], macroName: string | string[]): { + segments: Ast.Node[][]; + macros: Ast.Macro[]; +}; + +/** + * Does the reverse of `splitOnMacro` + */ +export declare function unsplitOnMacro({ segments, macros, }: { + segments: Ast.Node[][]; + macros: Ast.Node[] | Ast.Node[][]; +}): Ast.Node[]; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-split/index.js b/node_modules/@unified-latex/unified-latex-util-split/index.js new file mode 100644 index 0000000..cd61dc9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-split/index.js @@ -0,0 +1,77 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +function splitOnCondition(nodes, splitFunc = () => false, options) { + if (!Array.isArray(nodes)) { + throw new Error(`Can only split an Array, not ${nodes}`); + } + const { onlySplitOnFirstOccurrence = false } = options || {}; + const splitIndices = []; + for (let i = 0; i < nodes.length; i++) { + if (splitFunc(nodes[i])) { + splitIndices.push(i); + if (onlySplitOnFirstOccurrence) { + break; + } + } + } + if (splitIndices.length === 0) { + return { segments: [nodes], separators: [] }; + } + let separators = splitIndices.map((i) => nodes[i]); + let segments = splitIndices.map((splitEnd, i) => { + const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1; + return nodes.slice(splitStart, splitEnd); + }); + segments.push( + nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length) + ); + return { segments, separators }; +} +function splitOnMacro(ast, macroName) { + if (typeof macroName === "string") { + macroName = [macroName]; + } + if (!Array.isArray(macroName)) { + throw new Error("Type coercion failed"); + } + const isSeparator = match.createMacroMatcher(macroName); + const { segments, separators } = splitOnCondition(ast, isSeparator); + return { segments, macros: separators }; +} +function unsplitOnMacro({ + segments, + macros +}) { + if (segments.length === 0) { + console.warn("Trying to join zero segments"); + return []; + } + if (segments.length !== macros.length + 1) { + console.warn( + "Mismatch between lengths of macros and segments when trying to unsplit" + ); + } + let ret = segments[0]; + for (let i = 0; i < macros.length; i++) { + ret = ret.concat(macros[i]).concat(segments[i + 1]); + } + return ret; +} +function arrayJoin(array, sep) { + return array.flatMap((item, i) => { + if (i === 0) { + return item; + } + if (Array.isArray(sep)) { + return [...sep, ...item]; + } else { + return [sep, ...item]; + } + }); +} +export { + arrayJoin, + splitOnCondition, + splitOnMacro, + unsplitOnMacro +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-split/index.js.map b/node_modules/@unified-latex/unified-latex-util-split/index.js.map new file mode 100644 index 0000000..bf36d25 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-split/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/split-on-condition.ts","../libs/split-on-macro.ts","../libs/unsplit-on-macro.ts","../libs/array-join.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Split a list of nodes based on whether `splitFunc` returns `true`.\n * If `onlySplitOnFirstOccurrence` is set to true in the `options` object, then\n * there will be at most two segments returned.\n */\nexport function splitOnCondition(\n nodes: Ast.Node[],\n splitFunc: (node: Ast.Node) => boolean = () => false,\n options?: { onlySplitOnFirstOccurrence?: boolean }\n): { segments: Ast.Node[][]; separators: Ast.Node[] } {\n if (!Array.isArray(nodes)) {\n throw new Error(`Can only split an Array, not ${nodes}`);\n }\n\n const { onlySplitOnFirstOccurrence = false } = options || {};\n\n const splitIndices: number[] = [];\n for (let i = 0; i < nodes.length; i++) {\n if (splitFunc(nodes[i])) {\n splitIndices.push(i);\n if (onlySplitOnFirstOccurrence) {\n break;\n }\n }\n }\n\n // Short circuit if there is no splitting to be done\n if (splitIndices.length === 0) {\n return { segments: [nodes], separators: [] };\n }\n\n let separators = splitIndices.map((i) => nodes[i]);\n let segments = splitIndices.map((splitEnd, i) => {\n const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1;\n return nodes.slice(splitStart, splitEnd);\n });\n segments.push(\n nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length)\n );\n\n return { segments, separators };\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { splitOnCondition } from \"./split-on-condition\";\n\n/**\n * Split an array of AST nodes based on a macro. An object `{segments: [], macros: []}`\n * is returned. The original array is reconstructed as\n * `segments[0] + macros[0] + segments[1] + ...`.\n *\n * @param {[object]} ast\n * @param {(string|[string])} macroName\n * @returns {{segments: [object], macros: [object]}}\n */\nexport function splitOnMacro(\n ast: Ast.Node[],\n macroName: string | string[]\n): { segments: Ast.Node[][]; macros: Ast.Macro[] } {\n if (typeof macroName === \"string\") {\n macroName = [macroName];\n }\n if (!Array.isArray(macroName)) {\n throw new Error(\"Type coercion failed\");\n }\n const isSeparator = match.createMacroMatcher(macroName);\n const { segments, separators } = splitOnCondition(ast, isSeparator);\n return { segments, macros: separators as Ast.Macro[] };\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\n\n/**\n * Does the reverse of `splitOnMacro`\n */\nexport function unsplitOnMacro({\n segments,\n macros,\n}: {\n segments: Ast.Node[][];\n macros: Ast.Node[] | Ast.Node[][];\n}) {\n if (segments.length === 0) {\n console.warn(\"Trying to join zero segments\");\n return [];\n }\n if (segments.length !== macros.length + 1) {\n console.warn(\n \"Mismatch between lengths of macros and segments when trying to unsplit\"\n );\n }\n\n let ret = segments[0];\n for (let i = 0; i < macros.length; i++) {\n // Even though the type of macros[i] is node and not array,\n // Array.concat still works\n ret = ret.concat(macros[i]).concat(segments[i + 1]);\n }\n\n return ret;\n}\n","/**\n * Joins an array of arrays with the item `sep`\n */\nexport function arrayJoin(array: T[][], sep: T | T[]): T[] {\n return array.flatMap((item, i) => {\n if (i === 0) {\n return item;\n }\n if (Array.isArray(sep)) {\n return [...sep, ...item];\n } else {\n return [sep, ...item];\n }\n });\n}\n"],"names":[],"mappings":";AAOO,SAAS,iBACZ,OACA,YAAyC,MAAM,OAC/C,SACkD;AAClD,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,UAAM,IAAI,MAAM,gCAAgC,KAAK,EAAE;AAAA,EAC3D;AAEA,QAAM,EAAE,6BAA6B,UAAU,WAAW,CAAA;AAE1D,QAAM,eAAyB,CAAA;AAC/B,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,QAAI,UAAU,MAAM,CAAC,CAAC,GAAG;AACrB,mBAAa,KAAK,CAAC;AACnB,UAAI,4BAA4B;AAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAGI,MAAA,aAAa,WAAW,GAAG;AAC3B,WAAO,EAAE,UAAU,CAAC,KAAK,GAAG,YAAY,CAAG,EAAA;AAAA,EAC/C;AAEA,MAAI,aAAa,aAAa,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;AACjD,MAAI,WAAW,aAAa,IAAI,CAAC,UAAU,MAAM;AAC7C,UAAM,aAAa,MAAM,IAAI,IAAI,aAAa,IAAI,CAAC,IAAI;AAChD,WAAA,MAAM,MAAM,YAAY,QAAQ;AAAA,EAAA,CAC1C;AACQ,WAAA;AAAA,IACL,MAAM,MAAM,aAAa,aAAa,SAAS,CAAC,IAAI,GAAG,MAAM,MAAM;AAAA,EAAA;AAGhE,SAAA,EAAE,UAAU;AACvB;AC9BgB,SAAA,aACZ,KACA,WAC+C;AAC3C,MAAA,OAAO,cAAc,UAAU;AAC/B,gBAAY,CAAC,SAAS;AAAA,EAC1B;AACA,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AACrB,UAAA,IAAI,MAAM,sBAAsB;AAAA,EAC1C;AACM,QAAA,cAAc,MAAM,mBAAmB,SAAS;AACtD,QAAM,EAAE,UAAU,WAAA,IAAe,iBAAiB,KAAK,WAAW;AAC3D,SAAA,EAAE,UAAU,QAAQ;AAC/B;ACrBO,SAAS,eAAe;AAAA,EAC3B;AAAA,EACA;AACJ,GAGG;AACK,MAAA,SAAS,WAAW,GAAG;AACvB,YAAQ,KAAK,8BAA8B;AAC3C,WAAO;EACX;AACA,MAAI,SAAS,WAAW,OAAO,SAAS,GAAG;AAC/B,YAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAER;AAEI,MAAA,MAAM,SAAS,CAAC;AACpB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAG9B,UAAA,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,OAAO,SAAS,IAAI,CAAC,CAAC;AAAA,EACtD;AAEO,SAAA;AACX;AC3BgB,SAAA,UAAa,OAAc,KAAmB;AAC1D,SAAO,MAAM,QAAQ,CAAC,MAAM,MAAM;AAC9B,QAAI,MAAM,GAAG;AACF,aAAA;AAAA,IACX;AACI,QAAA,MAAM,QAAQ,GAAG,GAAG;AACpB,aAAO,CAAC,GAAG,KAAK,GAAG,IAAI;AAAA,IAAA,OACpB;AACI,aAAA,CAAC,KAAK,GAAG,IAAI;AAAA,IACxB;AAAA,EAAA,CACH;AACL;"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-split/package.json b/node_modules/@unified-latex/unified-latex-util-split/package.json new file mode 100644 index 0000000..e9c2650 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-split/package.json @@ -0,0 +1,52 @@ +{ + "name": "@unified-latex/unified-latex-util-split", + "version": "1.8.0", + "description": "Functions for modifying a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-trim/README.md b/node_modules/@unified-latex/unified-latex-util-trim/README.md new file mode 100644 index 0000000..b139357 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-trim/README.md @@ -0,0 +1,126 @@ + + + + +# unified-latex-util-trim + +## What is this? + +Functions to help modify a `unified-latex` Abstract Syntax Tree (AST). + +## When should I use this? + +If you want to remove whitespace from the ends of an array of nodes. + +Note that whitespace can come from a `Ast.Whitespace` node or from an +`Ast.Comment` node that has leading whitespace. These functions take care +to deal with both situations. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-trim +``` + +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. + +# Plugins + +## `unifiedLatexTrimEnvironmentContents` + +Unified plugin to trim the whitespace from the start/end of any environments, including +math environments. + +### Usage + +`unified().use(unifiedLatexTrimEnvironmentContents)` + +### Type + +`Plugin` + +```typescript +function unifiedLatexTrimEnvironmentContents(): (tree: Ast.Root) => void; +``` + +## `unifiedLatexTrimRoot` + +Unified plugin to trim the whitespace from the start/end of the root element. + +### Usage + +`unified().use(unifiedLatexTrimRoot)` + +### Type + +`Plugin` + +```typescript +function unifiedLatexTrimRoot(): (tree: Ast.Root) => void; +``` + +# Functions + +## `hasWhitespaceEquivalent(nodes)` + +Returns whether the array has whitespace at the start/end. Comments with `leadingWhitespace === true` +are counted as whitespace. Other comments are ignored. + +```typescript +function hasWhitespaceEquivalent(nodes: Ast.Node[]): { + start: boolean; + end: boolean; +}; +``` + +**Parameters** + +| Param | Type | +| :---- | :----------- | +| nodes | `Ast.Node[]` | + +## `trim(nodes)` + +Trims whitespace and parbreaks from the start and end +of an array. The number of trimmed nodes is returned. +Special care is taken to preserve comments, though any whitespace +before the first comment(s) or after the last comment(s) is trimmed. + +```typescript +function trim(nodes: Ast.Node[]): { trimmedStart: number; trimmedEnd: number }; +``` + +**Parameters** + +| Param | Type | +| :---- | :----------- | +| nodes | `Ast.Node[]` | + +## `trimEnd(nodes)` + +Trim whitespace and parbreaks from the right of an array. + +```typescript +function trimEnd(nodes: Ast.Node[]): { trimmedEnd: number }; +``` + +**Parameters** + +| Param | Type | +| :---- | :----------- | +| nodes | `Ast.Node[]` | + +## `trimStart(nodes)` + +Trim whitespace and parbreaks from the left of an array. + +```typescript +function trimStart(nodes: Ast.Node[]): { trimmedStart: number }; +``` + +**Parameters** + +| Param | Type | +| :---- | :----------- | +| nodes | `Ast.Node[]` | diff --git a/node_modules/@unified-latex/unified-latex-util-trim/index.cjs b/node_modules/@unified-latex/unified-latex-util-trim/index.cjs new file mode 100644 index 0000000..056f418 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-trim/index.cjs @@ -0,0 +1,130 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +const unifiedLatexUtilVisit = require("@unified-latex/unified-latex-util-visit"); +function trim(nodes) { + if (!Array.isArray(nodes)) { + console.warn("Trying to trim a non-array ast", nodes); + return nodes; + } + const { trimmedStart } = trimStart(nodes); + const { trimmedEnd } = trimEnd(nodes); + return { trimmedStart, trimmedEnd }; +} +function trimStart(nodes) { + const { start } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(0, start); + for (const leadingToken of nodes) { + if (!unifiedLatexUtilMatch.match.comment(leadingToken)) { + break; + } + if (leadingToken.leadingWhitespace || leadingToken.sameline) { + leadingToken.leadingWhitespace = false; + } + if (start > 0 && leadingToken.sameline) { + leadingToken.sameline = false; + } + } + return { trimmedStart: start }; +} +function trimEnd(nodes) { + const { end } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(nodes.length - end, end); + for (let i = nodes.length - 1; i >= 0; i--) { + const trailingToken = nodes[i]; + if (!unifiedLatexUtilMatch.match.comment(trailingToken)) { + break; + } + delete trailingToken.suffixParbreak; + if (unifiedLatexUtilMatch.match.comment(trailingToken) && trailingToken.leadingWhitespace && !trailingToken.sameline) { + trailingToken.leadingWhitespace = false; + } + } + return { trimmedEnd: end }; +} +function amountOfLeadingAndTrailingWhitespace(ast) { + let start = 0; + let end = 0; + for (const node of ast) { + if (unifiedLatexUtilMatch.match.whitespace(node) || unifiedLatexUtilMatch.match.parbreak(node)) { + start++; + } else { + break; + } + } + if (start === ast.length) { + return { start, end: 0 }; + } + for (let i = ast.length - 1; i >= 0; i--) { + const node = ast[i]; + if (unifiedLatexUtilMatch.match.whitespace(node) || unifiedLatexUtilMatch.match.parbreak(node)) { + end++; + } else { + break; + } + } + return { start, end }; +} +const unifiedLatexTrimEnvironmentContents = function unifiedLatexTrimEnvironmentContents2() { + return (tree) => { + unifiedLatexUtilVisit.visit(tree, (node) => { + if (!(unifiedLatexUtilMatch.match.math(node) || unifiedLatexUtilMatch.match.anyEnvironment(node))) { + return; + } + let firstNode = node.content[0]; + if (unifiedLatexUtilMatch.match.comment(firstNode) && firstNode.sameline) { + firstNode.suffixParbreak = false; + trimEnd(node.content); + const { trimmedStart } = trimStart(node.content.slice(1)); + node.content.splice(1, trimmedStart); + } else { + trim(node.content); + } + }); + }; +}; +const unifiedLatexTrimRoot = function unifiedLatexTrimRoot2() { + return (tree) => { + trim(tree.content); + }; +}; +function hasWhitespaceEquivalent(nodes) { + let start = false; + let end = false; + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (unifiedLatexUtilMatch.match.comment(node)) { + if (node.leadingWhitespace) { + start = true; + break; + } + continue; + } + if (unifiedLatexUtilMatch.match.whitespace(node)) { + start = true; + } + break; + } + for (let j = nodes.length - 1; j >= 0; j--) { + const node = nodes[j]; + if (unifiedLatexUtilMatch.match.comment(node)) { + if (node.leadingWhitespace) { + end = true; + break; + } + continue; + } + if (unifiedLatexUtilMatch.match.whitespace(node)) { + end = true; + } + break; + } + return { start, end }; +} +exports.hasWhitespaceEquivalent = hasWhitespaceEquivalent; +exports.trim = trim; +exports.trimEnd = trimEnd; +exports.trimStart = trimStart; +exports.unifiedLatexTrimEnvironmentContents = unifiedLatexTrimEnvironmentContents; +exports.unifiedLatexTrimRoot = unifiedLatexTrimRoot; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-trim/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-trim/index.cjs.map new file mode 100644 index 0000000..b89d87b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-trim/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/trim.ts","../libs/unified-latex-trim-environment-contents.ts","../libs/unified-latex-trim-root.ts","../libs/has-whitespace-equivalent.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Trims whitespace and parbreaks from the start and end\n * of an array. The number of trimmed nodes is returned.\n * Special care is taken to preserve comments, though any whitespace\n * before the first comment(s) or after the last comment(s) is trimmed.\n */\nexport function trim(nodes: Ast.Node[]): {\n trimmedStart: number;\n trimmedEnd: number;\n} {\n if (!Array.isArray(nodes)) {\n console.warn(\"Trying to trim a non-array ast\", nodes);\n return nodes;\n }\n\n const { trimmedStart } = trimStart(nodes);\n const { trimmedEnd } = trimEnd(nodes);\n\n return { trimmedStart, trimmedEnd };\n}\n\n/**\n * Trim whitespace and parbreaks from the left of an array.\n */\nexport function trimStart(nodes: Ast.Node[]): { trimmedStart: number } {\n const { start } = amountOfLeadingAndTrailingWhitespace(nodes);\n\n nodes.splice(0, start);\n\n // If there are comments at the start, they might have leading whitespace.\n // This leading whitespace should be trimmed\n for (const leadingToken of nodes) {\n if (!match.comment(leadingToken)) {\n break;\n }\n if (leadingToken.leadingWhitespace || leadingToken.sameline) {\n leadingToken.leadingWhitespace = false;\n }\n // Special care must be taken. If the comment was on the same line as a\n // parskip, it will no longer be on the same line after the trimming.\n // Thus, we must modify the comment.\n if (start > 0 && leadingToken.sameline) {\n leadingToken.sameline = false;\n }\n }\n\n return { trimmedStart: start };\n}\n\n/**\n * Trim whitespace and parbreaks from the right of an array.\n */\nexport function trimEnd(nodes: Ast.Node[]): { trimmedEnd: number } {\n const { end } = amountOfLeadingAndTrailingWhitespace(nodes);\n\n nodes.splice(nodes.length - end, end);\n\n // Trim off any spaces belonging to trailing comments\n for (let i = nodes.length - 1; i >= 0; i--) {\n const trailingToken = nodes[i];\n if (!match.comment(trailingToken)) {\n break;\n }\n\n // Any parbreaks have been trimmed, so there is no suffix parbreak here!\n delete trailingToken.suffixParbreak;\n\n // We don't trim spaces before trailing same-line comments. This is a stylistic choice\n // so that\n // `foo %xxx` does not become `foo%xxx`.\n // The latter is strictly \"correct\" for a trim function, but it is prettier to format\n // code preserving the space before the sameline comment\n if (\n match.comment(trailingToken) &&\n trailingToken.leadingWhitespace &&\n !trailingToken.sameline\n ) {\n trailingToken.leadingWhitespace = false;\n }\n }\n\n return { trimmedEnd: end };\n}\n\n/**\n * Returns the number of whitespace/parbreak nodes at the start and end of an array.\n */\nfunction amountOfLeadingAndTrailingWhitespace(ast: Ast.Node[]): {\n start: number;\n end: number;\n} {\n let start = 0;\n let end = 0;\n for (const node of ast) {\n if (match.whitespace(node) || match.parbreak(node)) {\n start++;\n } else {\n break;\n }\n }\n\n if (start === ast.length) {\n return { start, end: 0 };\n }\n\n // Find the padding on the right\n for (let i = ast.length - 1; i >= 0; i--) {\n const node = ast[i];\n if (match.whitespace(node) || match.parbreak(node)) {\n end++;\n } else {\n break;\n }\n }\n\n return { start, end };\n}\n","import type { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { trim, trimEnd, trimStart } from \"./trim\";\n\ntype PluginOptions = void;\n\n/**\n * Unified plugin to trim the whitespace from the start/end of any environments, including\n * math environments.\n */\nexport const unifiedLatexTrimEnvironmentContents: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexTrimEnvironmentContents() {\n return (tree) => {\n visit(tree, (node) => {\n if (!(match.math(node) || match.anyEnvironment(node))) {\n return;\n }\n\n // If the first thing in the environment is a sameline comment,\n // we actually want to start trimming *after* it.\n let firstNode = node.content[0];\n if (match.comment(firstNode) && firstNode.sameline) {\n firstNode.suffixParbreak = false;\n trimEnd(node.content);\n\n // We play a nasty trick here. This call to `trimStart`\n // will actually modify `node.content` if `node.content.slice(1)` starts\n // with a comment that has leading whitespace (it will remove that whitespace).\n // However, it won't remove any elements from `node.content`; we need\n // to do that ourselves.\n const { trimmedStart } = trimStart(node.content.slice(1));\n node.content.splice(1, trimmedStart);\n } else {\n trim(node.content);\n }\n });\n };\n};\n","import type { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"./trim\";\n\ntype PluginOptions = void;\n\n/**\n * Unified plugin to trim the whitespace from the start/end of the root element.\n */\nexport const unifiedLatexTrimRoot: Plugin =\n function unifiedLatexTrimRoot() {\n return (tree) => {\n trim(tree.content);\n };\n };\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns whether the array has whitespace at the start/end. Comments with `leadingWhitespace === true`\n * are counted as whitespace. Other comments are ignored.\n */\nexport function hasWhitespaceEquivalent(nodes: Ast.Node[]): {\n start: boolean;\n end: boolean;\n} {\n let start = false;\n let end = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.comment(node)) {\n // A comment with leading whitespace will render with leading whitespace,\n // so if we encounter one, we should consider ourselves to have leading whitespace.\n if (node.leadingWhitespace) {\n start = true;\n break;\n }\n continue;\n }\n if (match.whitespace(node)) {\n start = true;\n }\n break;\n }\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j];\n if (match.comment(node)) {\n if (node.leadingWhitespace) {\n end = true;\n break;\n }\n continue;\n }\n if (match.whitespace(node)) {\n end = true;\n }\n break;\n }\n return { start, end };\n}\n"],"names":["match","unifiedLatexTrimEnvironmentContents","visit","unifiedLatexTrimRoot"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-trim/index.d.ts b/node_modules/@unified-latex/unified-latex-util-trim/index.d.ts new file mode 100644 index 0000000..2e6aa3f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-trim/index.d.ts @@ -0,0 +1,53 @@ +import * as Ast from '@unified-latex/unified-latex-types'; +import { Plugin as Plugin_2 } from 'unified'; + +/** + * Returns whether the array has whitespace at the start/end. Comments with `leadingWhitespace === true` + * are counted as whitespace. Other comments are ignored. + */ +export declare function hasWhitespaceEquivalent(nodes: Ast.Node[]): { + start: boolean; + end: boolean; +}; + +declare type PluginOptions = void; + +declare type PluginOptions_2 = void; + +/** + * Trims whitespace and parbreaks from the start and end + * of an array. The number of trimmed nodes is returned. + * Special care is taken to preserve comments, though any whitespace + * before the first comment(s) or after the last comment(s) is trimmed. + */ +export declare function trim(nodes: Ast.Node[]): { + trimmedStart: number; + trimmedEnd: number; +}; + +/** + * Trim whitespace and parbreaks from the right of an array. + */ +export declare function trimEnd(nodes: Ast.Node[]): { + trimmedEnd: number; +}; + +/** + * Trim whitespace and parbreaks from the left of an array. + */ +export declare function trimStart(nodes: Ast.Node[]): { + trimmedStart: number; +}; + +/** + * Unified plugin to trim the whitespace from the start/end of any environments, including + * math environments. + */ +export declare const unifiedLatexTrimEnvironmentContents: Plugin_2; + +/** + * Unified plugin to trim the whitespace from the start/end of the root element. + */ +export declare const unifiedLatexTrimRoot: Plugin_2; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-trim/index.js b/node_modules/@unified-latex/unified-latex-util-trim/index.js new file mode 100644 index 0000000..c1807fe --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-trim/index.js @@ -0,0 +1,130 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +import { visit } from "@unified-latex/unified-latex-util-visit"; +function trim(nodes) { + if (!Array.isArray(nodes)) { + console.warn("Trying to trim a non-array ast", nodes); + return nodes; + } + const { trimmedStart } = trimStart(nodes); + const { trimmedEnd } = trimEnd(nodes); + return { trimmedStart, trimmedEnd }; +} +function trimStart(nodes) { + const { start } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(0, start); + for (const leadingToken of nodes) { + if (!match.comment(leadingToken)) { + break; + } + if (leadingToken.leadingWhitespace || leadingToken.sameline) { + leadingToken.leadingWhitespace = false; + } + if (start > 0 && leadingToken.sameline) { + leadingToken.sameline = false; + } + } + return { trimmedStart: start }; +} +function trimEnd(nodes) { + const { end } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(nodes.length - end, end); + for (let i = nodes.length - 1; i >= 0; i--) { + const trailingToken = nodes[i]; + if (!match.comment(trailingToken)) { + break; + } + delete trailingToken.suffixParbreak; + if (match.comment(trailingToken) && trailingToken.leadingWhitespace && !trailingToken.sameline) { + trailingToken.leadingWhitespace = false; + } + } + return { trimmedEnd: end }; +} +function amountOfLeadingAndTrailingWhitespace(ast) { + let start = 0; + let end = 0; + for (const node of ast) { + if (match.whitespace(node) || match.parbreak(node)) { + start++; + } else { + break; + } + } + if (start === ast.length) { + return { start, end: 0 }; + } + for (let i = ast.length - 1; i >= 0; i--) { + const node = ast[i]; + if (match.whitespace(node) || match.parbreak(node)) { + end++; + } else { + break; + } + } + return { start, end }; +} +const unifiedLatexTrimEnvironmentContents = function unifiedLatexTrimEnvironmentContents2() { + return (tree) => { + visit(tree, (node) => { + if (!(match.math(node) || match.anyEnvironment(node))) { + return; + } + let firstNode = node.content[0]; + if (match.comment(firstNode) && firstNode.sameline) { + firstNode.suffixParbreak = false; + trimEnd(node.content); + const { trimmedStart } = trimStart(node.content.slice(1)); + node.content.splice(1, trimmedStart); + } else { + trim(node.content); + } + }); + }; +}; +const unifiedLatexTrimRoot = function unifiedLatexTrimRoot2() { + return (tree) => { + trim(tree.content); + }; +}; +function hasWhitespaceEquivalent(nodes) { + let start = false; + let end = false; + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (match.comment(node)) { + if (node.leadingWhitespace) { + start = true; + break; + } + continue; + } + if (match.whitespace(node)) { + start = true; + } + break; + } + for (let j = nodes.length - 1; j >= 0; j--) { + const node = nodes[j]; + if (match.comment(node)) { + if (node.leadingWhitespace) { + end = true; + break; + } + continue; + } + if (match.whitespace(node)) { + end = true; + } + break; + } + return { start, end }; +} +export { + hasWhitespaceEquivalent, + trim, + trimEnd, + trimStart, + unifiedLatexTrimEnvironmentContents, + unifiedLatexTrimRoot +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-trim/index.js.map b/node_modules/@unified-latex/unified-latex-util-trim/index.js.map new file mode 100644 index 0000000..3e2ed4b --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-trim/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/trim.ts","../libs/unified-latex-trim-environment-contents.ts","../libs/unified-latex-trim-root.ts","../libs/has-whitespace-equivalent.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Trims whitespace and parbreaks from the start and end\n * of an array. The number of trimmed nodes is returned.\n * Special care is taken to preserve comments, though any whitespace\n * before the first comment(s) or after the last comment(s) is trimmed.\n */\nexport function trim(nodes: Ast.Node[]): {\n trimmedStart: number;\n trimmedEnd: number;\n} {\n if (!Array.isArray(nodes)) {\n console.warn(\"Trying to trim a non-array ast\", nodes);\n return nodes;\n }\n\n const { trimmedStart } = trimStart(nodes);\n const { trimmedEnd } = trimEnd(nodes);\n\n return { trimmedStart, trimmedEnd };\n}\n\n/**\n * Trim whitespace and parbreaks from the left of an array.\n */\nexport function trimStart(nodes: Ast.Node[]): { trimmedStart: number } {\n const { start } = amountOfLeadingAndTrailingWhitespace(nodes);\n\n nodes.splice(0, start);\n\n // If there are comments at the start, they might have leading whitespace.\n // This leading whitespace should be trimmed\n for (const leadingToken of nodes) {\n if (!match.comment(leadingToken)) {\n break;\n }\n if (leadingToken.leadingWhitespace || leadingToken.sameline) {\n leadingToken.leadingWhitespace = false;\n }\n // Special care must be taken. If the comment was on the same line as a\n // parskip, it will no longer be on the same line after the trimming.\n // Thus, we must modify the comment.\n if (start > 0 && leadingToken.sameline) {\n leadingToken.sameline = false;\n }\n }\n\n return { trimmedStart: start };\n}\n\n/**\n * Trim whitespace and parbreaks from the right of an array.\n */\nexport function trimEnd(nodes: Ast.Node[]): { trimmedEnd: number } {\n const { end } = amountOfLeadingAndTrailingWhitespace(nodes);\n\n nodes.splice(nodes.length - end, end);\n\n // Trim off any spaces belonging to trailing comments\n for (let i = nodes.length - 1; i >= 0; i--) {\n const trailingToken = nodes[i];\n if (!match.comment(trailingToken)) {\n break;\n }\n\n // Any parbreaks have been trimmed, so there is no suffix parbreak here!\n delete trailingToken.suffixParbreak;\n\n // We don't trim spaces before trailing same-line comments. This is a stylistic choice\n // so that\n // `foo %xxx` does not become `foo%xxx`.\n // The latter is strictly \"correct\" for a trim function, but it is prettier to format\n // code preserving the space before the sameline comment\n if (\n match.comment(trailingToken) &&\n trailingToken.leadingWhitespace &&\n !trailingToken.sameline\n ) {\n trailingToken.leadingWhitespace = false;\n }\n }\n\n return { trimmedEnd: end };\n}\n\n/**\n * Returns the number of whitespace/parbreak nodes at the start and end of an array.\n */\nfunction amountOfLeadingAndTrailingWhitespace(ast: Ast.Node[]): {\n start: number;\n end: number;\n} {\n let start = 0;\n let end = 0;\n for (const node of ast) {\n if (match.whitespace(node) || match.parbreak(node)) {\n start++;\n } else {\n break;\n }\n }\n\n if (start === ast.length) {\n return { start, end: 0 };\n }\n\n // Find the padding on the right\n for (let i = ast.length - 1; i >= 0; i--) {\n const node = ast[i];\n if (match.whitespace(node) || match.parbreak(node)) {\n end++;\n } else {\n break;\n }\n }\n\n return { start, end };\n}\n","import type { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { trim, trimEnd, trimStart } from \"./trim\";\n\ntype PluginOptions = void;\n\n/**\n * Unified plugin to trim the whitespace from the start/end of any environments, including\n * math environments.\n */\nexport const unifiedLatexTrimEnvironmentContents: Plugin<\n PluginOptions[],\n Ast.Root,\n Ast.Root\n> = function unifiedLatexTrimEnvironmentContents() {\n return (tree) => {\n visit(tree, (node) => {\n if (!(match.math(node) || match.anyEnvironment(node))) {\n return;\n }\n\n // If the first thing in the environment is a sameline comment,\n // we actually want to start trimming *after* it.\n let firstNode = node.content[0];\n if (match.comment(firstNode) && firstNode.sameline) {\n firstNode.suffixParbreak = false;\n trimEnd(node.content);\n\n // We play a nasty trick here. This call to `trimStart`\n // will actually modify `node.content` if `node.content.slice(1)` starts\n // with a comment that has leading whitespace (it will remove that whitespace).\n // However, it won't remove any elements from `node.content`; we need\n // to do that ourselves.\n const { trimmedStart } = trimStart(node.content.slice(1));\n node.content.splice(1, trimmedStart);\n } else {\n trim(node.content);\n }\n });\n };\n};\n","import type { Plugin } from \"unified\";\nimport * as Ast from \"@unified-latex/unified-latex-types\";\nimport { trim } from \"./trim\";\n\ntype PluginOptions = void;\n\n/**\n * Unified plugin to trim the whitespace from the start/end of the root element.\n */\nexport const unifiedLatexTrimRoot: Plugin =\n function unifiedLatexTrimRoot() {\n return (tree) => {\n trim(tree.content);\n };\n };\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * Returns whether the array has whitespace at the start/end. Comments with `leadingWhitespace === true`\n * are counted as whitespace. Other comments are ignored.\n */\nexport function hasWhitespaceEquivalent(nodes: Ast.Node[]): {\n start: boolean;\n end: boolean;\n} {\n let start = false;\n let end = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.comment(node)) {\n // A comment with leading whitespace will render with leading whitespace,\n // so if we encounter one, we should consider ourselves to have leading whitespace.\n if (node.leadingWhitespace) {\n start = true;\n break;\n }\n continue;\n }\n if (match.whitespace(node)) {\n start = true;\n }\n break;\n }\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j];\n if (match.comment(node)) {\n if (node.leadingWhitespace) {\n end = true;\n break;\n }\n continue;\n }\n if (match.whitespace(node)) {\n end = true;\n }\n break;\n }\n return { start, end };\n}\n"],"names":["unifiedLatexTrimEnvironmentContents","unifiedLatexTrimRoot"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-trim/package.json b/node_modules/@unified-latex/unified-latex-util-trim/package.json new file mode 100644 index 0000000..e29c8d9 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-trim/package.json @@ -0,0 +1,54 @@ +{ + "name": "@unified-latex/unified-latex-util-trim", + "version": "1.8.2", + "description": "Functions for modifying a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-visit/README.md b/node_modules/@unified-latex/unified-latex-util-visit/README.md new file mode 100644 index 0000000..0fa493d --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-visit/README.md @@ -0,0 +1,122 @@ + + + + +# unified-latex-util-visit + +## What is this? + +Functions to traverse a `unified-latex` Abstract Syntax Tree (AST). `visit` is +very similar to [estree-util-visit](https://github.com/syntax-tree/estree-util-visit). + +## When should I use this? + +If you want to recursively replace particular AST nodes. + +## Install + +```bash +npm install @unified-latex/unified-latex-util-visit +``` + +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 + +## `visit(tree, visitor, options)` + +Visit children of tree which pass a test + +```typescript +function visit( + tree: Ast.Ast, + visitor: + | Visitor, Opts>> + | Visitors< + NarrowArraysBasedOnOptions, Opts> + >, + options: VisitOptions +): void; +``` + +**Parameters** + +| Param | Type | Description | +| :------ | :-------------------------------- | ----------------------------- | +| tree | `Ast.Ast` | Abstract syntax tree to walk | +| visitor | Omitted | Function to run for each node | +| options | `VisitOptions` | *see below* | + +where + +```typescript +type VisitOptions = { + startingContext?: VisitorContext; + /** + * Type guard for types that are passed to the `visitor` function. + */ + test?: (node: Ast.Ast, info: VisitInfo) => boolean; + /** + * Whether arrays will be sent to the `visitor` function. If falsy, + * only nodes will be past to `visitor`. + */ + includeArrays?: boolean; +}; +``` + +# Constants + +| Name | Type | Description | +| :--------- | :------- | :----------------------------------- | +| `CONTINUE` | `Symbol` | Continue traversing as normal | +| `EXIT` | `Symbol` | Stop traversing immediately | +| `SKIP` | `Symbol` | Do not traverse this node’s children | + +# Types + +## `VisitInfo` + +```typescript +export type VisitInfo = { + /** + * If the element was accessed via an attribute, the attribute key is specified. + */ + readonly key: string | undefined; + /** + * If the element was accessed in an array, the index is specified. + */ + readonly index: number | undefined; + /** + * A list of ancestor nodes, `[parent, grandparent, great-grandparent, ...]` + */ + readonly parents: (Ast.Node | Ast.Argument)[]; + /** + * If the element was accessed in an array, the array that it is part of. + */ + readonly containingArray: (Ast.Node | Ast.Argument)[] | undefined; + /** + * The LaTeX context of the current match. + */ + readonly context: VisitorContext; +}; +``` + +## `VisitorContext` + +```typescript +export type VisitorContext = { + /** + * Whether the node is being processed in math mode. + * + * This happens when the node is a director or indirect child + * of a math environment (e.g. `$abc$`), but not when an environment + * re-establishes text mode (e.g. `$\text{abc}$`) + */ + inMathMode?: boolean; + /** + * Whether the node has any ancestor that is processed in math mode. + */ + hasMathModeAncestor?: boolean; +}; +``` diff --git a/node_modules/@unified-latex/unified-latex-util-visit/index.cjs b/node_modules/@unified-latex/unified-latex-util-visit/index.cjs new file mode 100644 index 0000000..2f6ce5f --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-visit/index.cjs @@ -0,0 +1,168 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const unifiedLatexUtilMatch = require("@unified-latex/unified-latex-util-match"); +function listMathChildren(node) { + const NULL_RETURN = { enter: [], leave: [] }; + if (Array.isArray(node)) { + return NULL_RETURN; + } + if (unifiedLatexUtilMatch.match.math(node)) { + return { enter: ["content"], leave: [] }; + } + const renderInfo = node._renderInfo || {}; + if (renderInfo.inMathMode == null) { + return NULL_RETURN; + } + if (unifiedLatexUtilMatch.match.macro(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["args"], leave: [] }; + } else if (renderInfo.inMathMode === false) { + return { enter: [], leave: ["args"] }; + } + } + if (unifiedLatexUtilMatch.match.environment(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["content"], leave: [] }; + } else { + return { enter: [], leave: ["content"] }; + } + } + return NULL_RETURN; +} +const CONTINUE = Symbol("continue"); +const SKIP = Symbol("skip"); +const EXIT = Symbol("exit"); +const DEFAULT_CONTEXT = { + inMathMode: false, + hasMathModeAncestor: false +}; +function visit(tree, visitor, options) { + const { + startingContext = DEFAULT_CONTEXT, + test = () => true, + includeArrays = false + } = options || {}; + let enter; + let leave; + if (typeof visitor === "function") { + enter = visitor; + } else if (visitor && typeof visitor === "object") { + enter = visitor.enter; + leave = visitor.leave; + } + walk(tree, { + key: void 0, + index: void 0, + parents: [], + containingArray: void 0, + context: { ...startingContext } + }); + function walk(node, { key, index, parents, context, containingArray }) { + const nodePassesTest = includeArrays ? test(node, { key, index, parents, context, containingArray }) : !Array.isArray(node) && test(node, { key, index, parents, context, containingArray }); + const result = enter && nodePassesTest ? toResult( + enter(node, { + key, + index, + parents, + context, + containingArray + }) + ) : [CONTINUE]; + if (result[0] === EXIT) { + return result; + } + if (result[0] === SKIP) { + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index, + parents, + context, + containingArray + }) + ) : result; + } + if (Array.isArray(node)) { + for (let index2 = 0; index2 > -1 && index2 < node.length; index2++) { + const item = node[index2]; + const result2 = walk(item, { + key, + index: index2, + parents, + context, + containingArray: node + }); + if (result2[0] === EXIT) { + return result2; + } + if (typeof result2[1] === "number") { + index2 = result2[1] - 1; + } + } + } else { + let childProps = ["content", "args"]; + switch (node.type) { + case "macro": + childProps = ["args"]; + break; + case "comment": + case "string": + case "verb": + case "verbatim": + childProps = []; + break; + } + const mathModeProps = listMathChildren(node); + for (const key2 of childProps) { + const value = node[key2]; + const grandparents = [node].concat(parents); + if (value == null) { + continue; + } + const newContext = { ...context }; + if (mathModeProps.enter.includes(key2)) { + newContext.inMathMode = true; + newContext.hasMathModeAncestor = true; + } else if (mathModeProps.leave.includes(key2)) { + newContext.inMathMode = false; + } + const result2 = walk(value, { + key: key2, + index: void 0, + parents: grandparents, + context: newContext, + containingArray: void 0 + }); + if (result2[0] === EXIT) { + return result2; + } + } + } + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index, + parents, + context, + containingArray + }) + ) : result; + } +} +function toResult(value) { + if (value == null) { + return [CONTINUE]; + } + if (Array.isArray(value)) { + return value; + } + if (typeof value === "number") { + return [CONTINUE, value]; + } + return [value]; +} +exports.CONTINUE = CONTINUE; +exports.EXIT = EXIT; +exports.SKIP = SKIP; +exports.visit = visit; +//# sourceMappingURL=index.cjs.map diff --git a/node_modules/@unified-latex/unified-latex-util-visit/index.cjs.map b/node_modules/@unified-latex/unified-latex-util-visit/index.cjs.map new file mode 100644 index 0000000..5561e6c --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-visit/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.cjs","sources":["../libs/list-math-children.ts","../libs/visit.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * List all props of the current node that should be processed\n * in math mode or not in math mode. If math mode is not specified in the node's render\n * info, empty lists are returned.\n *\n * For example `\\text{foo}` will report that `args` should *not* be processed in math mode,\n * since it's contents should always be processed in text mode.\n */\nexport function listMathChildren(node: Ast.Ast): {\n enter: string[];\n leave: string[];\n} {\n const NULL_RETURN = { enter: [], leave: [] };\n if (Array.isArray(node)) {\n return NULL_RETURN;\n }\n if (match.math(node)) {\n // When we enter a math environment, our content is always\n // considered math mode\n return { enter: [\"content\"], leave: [] };\n }\n\n const renderInfo: { inMathMode?: boolean } = node._renderInfo || {};\n if (renderInfo.inMathMode == null) {\n return NULL_RETURN;\n }\n if (match.macro(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"args\"], leave: [] };\n } else if (renderInfo.inMathMode === false) {\n return { enter: [], leave: [\"args\"] };\n }\n }\n if (match.environment(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"content\"], leave: [] };\n } else {\n return { enter: [], leave: [\"content\"] };\n }\n }\n return NULL_RETURN;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { listMathChildren } from \"./list-math-children\";\n\nexport type VisitorContext = {\n /**\n * Whether the node is being processed in math mode.\n *\n * This happens when the node is a director or indirect child\n * of a math environment (e.g. `$abc$`), but not when an environment\n * re-establishes text mode (e.g. `$\\text{abc}$`)\n */\n inMathMode?: boolean;\n /**\n * Whether the node has any ancestor that is processed in math mode.\n */\n hasMathModeAncestor?: boolean;\n};\n\ntype GetGuard = T extends (x: any, ...y: any[]) => x is infer R ? R : never;\n/**\n * Gets the type that a type-guard function is guarding. If\n * the guard type cannot be determined, the input type is returned.\n */\ntype GuardTypeOf boolean> =\n GetGuard extends never\n ? T extends (x: infer A) => any\n ? A\n : never\n : GetGuard;\n\n/**\n * Extracts the guard type from the `test` function provided in a\n * `VisitOptions` argument.\n */\ntype GuardFromOptions<\n Opts extends VisitOptions,\n PossibleTypes = Ast.Ast\n> = Opts extends {\n test: infer R;\n}\n ? R extends (x: any, ...y: any[]) => boolean\n ? // A guard like `typeof Array.isArray` will return `any[]` as the type.\n // This type cannot be narrowed, so instead we use it to pick from\n // the set of all possible types.\n Extract>\n : PossibleTypes\n : PossibleTypes;\n\n/**\n * Narrow the type `T` based on the `VisitOptions` supplied. If `{includeArrays: false}`\n * is specified in the `VisitOptions`, then arrays are excluded from `T`.\n */\ntype NarrowArraysBasedOnOptions = Opts extends {\n includeArrays: infer A;\n}\n ? A extends true\n ? T\n : Exclude\n : Exclude;\n\n/**\n * Get the type of the parameter to the `Visitor` function based on the\n * `VisitOptions` that are supplied.\n */\ntype VisitorTypeFromOptions =\n NarrowArraysBasedOnOptions, Opts>;\n\n/**\n * Continue traversing as normal\n */\nexport const CONTINUE = Symbol(\"continue\");\n/**\n * Do not traverse this node’s children\n */\nexport const SKIP = Symbol(\"skip\");\n/**\n * Stop traversing immediately\n */\nexport const EXIT = Symbol(\"exit\");\n\ntype Action = typeof CONTINUE | typeof SKIP | typeof EXIT;\ntype Index = number;\ntype ActionTuple = [Action] | [typeof SKIP, Index] | [typeof CONTINUE, Index];\n\n/**\n * A visitor takes a `node`, `key`, `index`, and ...\n *\n * @param key - The key of the parent that we were accessed through.\n */\ntype Visitor = (\n node: T,\n info: VisitInfo\n) => null | undefined | Action | Index | ActionTuple | void;\ntype Visitors = { enter?: Visitor; leave?: Visitor };\n\ntype VisitOptions = {\n startingContext?: VisitorContext;\n /**\n * Type guard for types that are passed to the `visitor` function.\n */\n test?: (node: Ast.Ast, info: VisitInfo) => boolean;\n /**\n * Whether arrays will be sent to the `visitor` function. If falsy,\n * only nodes will be past to `visitor`.\n */\n includeArrays?: boolean;\n};\n\nconst DEFAULT_CONTEXT: VisitorContext = {\n inMathMode: false,\n hasMathModeAncestor: false,\n};\n\nexport type VisitInfo = {\n /**\n * If the element was accessed via an attribute, the attribute key is specified.\n */\n readonly key: string | undefined;\n /**\n * If the element was accessed in an array, the index is specified.\n */\n readonly index: number | undefined;\n /**\n * A list of ancestor nodes, `[parent, grandparent, great-grandparent, ...]`\n */\n readonly parents: (Ast.Node | Ast.Argument)[];\n /**\n * If the element was accessed in an array, the array that it is part of.\n */\n readonly containingArray: (Ast.Node | Ast.Argument)[] | undefined;\n /**\n * The LaTeX context of the current match.\n */\n readonly context: VisitorContext;\n};\n\n/**\n * Visit children of tree which pass a test\n *\n * @param {Node} tree Abstract syntax tree to walk\n * @param {Visitor|Visitors} [visitor] Function to run for each node\n */\nexport function visit(\n tree: Ast.Ast,\n visitor:\n | Visitor>\n | Visitors>,\n options?: Opts\n) {\n const {\n startingContext = DEFAULT_CONTEXT,\n test = () => true,\n includeArrays = false,\n } = options || {};\n let enter: Visitor> | undefined;\n let leave: Visitor> | undefined;\n\n if (typeof visitor === \"function\") {\n enter = visitor;\n } else if (visitor && typeof visitor === \"object\") {\n enter = visitor.enter;\n leave = visitor.leave;\n }\n\n walk(tree, {\n key: undefined,\n index: undefined,\n parents: [],\n containingArray: undefined,\n context: { ...startingContext },\n });\n\n /**\n * @param {Node} node\n * @param {string?} key\n * @param {number?} index\n * @param {Array.} parents\n */\n function walk(\n node: Ast.Ast,\n { key, index, parents, context, containingArray }: VisitInfo\n ): ActionTuple {\n const nodePassesTest = includeArrays\n ? test(node, { key, index, parents, context, containingArray })\n : !Array.isArray(node) &&\n test(node, { key, index, parents, context, containingArray });\n\n const result: ActionTuple =\n enter && nodePassesTest\n ? toResult(\n enter(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : [CONTINUE];\n\n if (result[0] === EXIT) {\n return result;\n }\n\n if (result[0] === SKIP) {\n return leave && nodePassesTest\n ? toResult(\n leave(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : result;\n }\n\n if (Array.isArray(node)) {\n // The `value` array might be modified in place as we traverse it, so\n // we use a traditional for loop.\n for (let index = 0; index > -1 && index < node.length; index++) {\n const item = node[index];\n const result = walk(item, {\n key,\n index,\n parents,\n context,\n containingArray: node,\n });\n if (result[0] === EXIT) {\n return result;\n }\n if (typeof result[1] === \"number\") {\n // The for loop will increment i every pass. However,\n // if an index was returned, that's where we want to start next time.\n index = result[1] - 1;\n }\n }\n } else {\n // We don't want to recursively apply to the `content`\n // of all types (e.g., comments and macros), so specify\n // a blacklist.\n let childProps: (\"content\" | \"args\")[] = [\"content\", \"args\"];\n switch (node.type) {\n case \"macro\":\n childProps = [\"args\"];\n break;\n case \"comment\":\n case \"string\":\n case \"verb\":\n case \"verbatim\":\n childProps = [];\n break;\n default:\n break;\n }\n\n const mathModeProps = listMathChildren(node);\n for (const key of childProps) {\n const value = node[key as keyof typeof node] as\n | Ast.Ast\n | undefined;\n const grandparents = [node].concat(parents);\n\n if (value == null) {\n continue;\n }\n\n // We may switch in/out of math mode as we pass to node[key]\n const newContext = { ...context };\n if (mathModeProps.enter.includes(key)) {\n newContext.inMathMode = true;\n newContext.hasMathModeAncestor = true;\n } else if (mathModeProps.leave.includes(key)) {\n newContext.inMathMode = false;\n }\n\n const result = walk(value, {\n key,\n index: undefined,\n parents: grandparents,\n context: newContext,\n containingArray: undefined,\n });\n if (result[0] === EXIT) {\n return result;\n }\n }\n }\n\n return leave && nodePassesTest\n ? toResult(\n leave(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : result;\n }\n}\n\n/**\n * Ensures a result is an `ActionTuple`s\n */\nfunction toResult(\n value: null | undefined | void | Action | Index | ActionTuple\n): ActionTuple {\n if (value == null) {\n return [CONTINUE];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === \"number\") {\n return [CONTINUE, value];\n }\n\n return [value];\n}\n"],"names":["match","index","result","key"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-visit/index.d.ts b/node_modules/@unified-latex/unified-latex-util-visit/index.d.ts new file mode 100644 index 0000000..5d6311e --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-visit/index.d.ts @@ -0,0 +1,125 @@ +import * as Ast from '@unified-latex/unified-latex-types'; + +declare type Action = typeof CONTINUE | typeof SKIP | typeof EXIT; + +declare type ActionTuple = [Action] | [typeof SKIP, Index] | [typeof CONTINUE, Index]; + +/** + * Continue traversing as normal + */ +export declare const CONTINUE: unique symbol; + +/** + * Stop traversing immediately + */ +export declare const EXIT: unique symbol; + +declare type GetGuard = T extends (x: any, ...y: any[]) => x is infer R ? R : never; + +/** + * Extracts the guard type from the `test` function provided in a + * `VisitOptions` argument. + */ +declare type GuardFromOptions = Opts extends { + test: infer R; +} ? R extends (x: any, ...y: any[]) => boolean ? Extract> : PossibleTypes : PossibleTypes; + +/** + * Gets the type that a type-guard function is guarding. If + * the guard type cannot be determined, the input type is returned. + */ +declare type GuardTypeOf boolean> = GetGuard extends never ? T extends (x: infer A) => any ? A : never : GetGuard; + +declare type Index = number; + +/** + * Narrow the type `T` based on the `VisitOptions` supplied. If `{includeArrays: false}` + * is specified in the `VisitOptions`, then arrays are excluded from `T`. + */ +declare type NarrowArraysBasedOnOptions = Opts extends { + includeArrays: infer A; +} ? A extends true ? T : Exclude : Exclude; + +/** + * Do not traverse this node’s children + */ +export declare const SKIP: unique symbol; + +/** + * Visit children of tree which pass a test + * + * @param {Node} tree Abstract syntax tree to walk + * @param {Visitor|Visitors} [visitor] Function to run for each node + */ +export declare function visit(tree: Ast.Ast, visitor: Visitor> | Visitors>, options?: Opts): void; + +export declare type VisitInfo = { + /** + * If the element was accessed via an attribute, the attribute key is specified. + */ + readonly key: string | undefined; + /** + * If the element was accessed in an array, the index is specified. + */ + readonly index: number | undefined; + /** + * A list of ancestor nodes, `[parent, grandparent, great-grandparent, ...]` + */ + readonly parents: (Ast.Node | Ast.Argument)[]; + /** + * If the element was accessed in an array, the array that it is part of. + */ + readonly containingArray: (Ast.Node | Ast.Argument)[] | undefined; + /** + * The LaTeX context of the current match. + */ + readonly context: VisitorContext; +}; + +declare type VisitOptions = { + startingContext?: VisitorContext; + /** + * Type guard for types that are passed to the `visitor` function. + */ + test?: (node: Ast.Ast, info: VisitInfo) => boolean; + /** + * Whether arrays will be sent to the `visitor` function. If falsy, + * only nodes will be past to `visitor`. + */ + includeArrays?: boolean; +}; + +/** + * A visitor takes a `node`, `key`, `index`, and ... + * + * @param key - The key of the parent that we were accessed through. + */ +declare type Visitor = (node: T, info: VisitInfo) => null | undefined | Action | Index | ActionTuple | void; + +export declare type VisitorContext = { + /** + * Whether the node is being processed in math mode. + * + * This happens when the node is a director or indirect child + * of a math environment (e.g. `$abc$`), but not when an environment + * re-establishes text mode (e.g. `$\text{abc}$`) + */ + inMathMode?: boolean; + /** + * Whether the node has any ancestor that is processed in math mode. + */ + hasMathModeAncestor?: boolean; +}; + +declare type Visitors = { + enter?: Visitor; + leave?: Visitor; +}; + +/** + * Get the type of the parameter to the `Visitor` function based on the + * `VisitOptions` that are supplied. + */ +declare type VisitorTypeFromOptions = NarrowArraysBasedOnOptions, Opts>; + +export { } diff --git a/node_modules/@unified-latex/unified-latex-util-visit/index.js b/node_modules/@unified-latex/unified-latex-util-visit/index.js new file mode 100644 index 0000000..a547af6 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-visit/index.js @@ -0,0 +1,168 @@ +import { match } from "@unified-latex/unified-latex-util-match"; +function listMathChildren(node) { + const NULL_RETURN = { enter: [], leave: [] }; + if (Array.isArray(node)) { + return NULL_RETURN; + } + if (match.math(node)) { + return { enter: ["content"], leave: [] }; + } + const renderInfo = node._renderInfo || {}; + if (renderInfo.inMathMode == null) { + return NULL_RETURN; + } + if (match.macro(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["args"], leave: [] }; + } else if (renderInfo.inMathMode === false) { + return { enter: [], leave: ["args"] }; + } + } + if (match.environment(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["content"], leave: [] }; + } else { + return { enter: [], leave: ["content"] }; + } + } + return NULL_RETURN; +} +const CONTINUE = Symbol("continue"); +const SKIP = Symbol("skip"); +const EXIT = Symbol("exit"); +const DEFAULT_CONTEXT = { + inMathMode: false, + hasMathModeAncestor: false +}; +function visit(tree, visitor, options) { + const { + startingContext = DEFAULT_CONTEXT, + test = () => true, + includeArrays = false + } = options || {}; + let enter; + let leave; + if (typeof visitor === "function") { + enter = visitor; + } else if (visitor && typeof visitor === "object") { + enter = visitor.enter; + leave = visitor.leave; + } + walk(tree, { + key: void 0, + index: void 0, + parents: [], + containingArray: void 0, + context: { ...startingContext } + }); + function walk(node, { key, index, parents, context, containingArray }) { + const nodePassesTest = includeArrays ? test(node, { key, index, parents, context, containingArray }) : !Array.isArray(node) && test(node, { key, index, parents, context, containingArray }); + const result = enter && nodePassesTest ? toResult( + enter(node, { + key, + index, + parents, + context, + containingArray + }) + ) : [CONTINUE]; + if (result[0] === EXIT) { + return result; + } + if (result[0] === SKIP) { + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index, + parents, + context, + containingArray + }) + ) : result; + } + if (Array.isArray(node)) { + for (let index2 = 0; index2 > -1 && index2 < node.length; index2++) { + const item = node[index2]; + const result2 = walk(item, { + key, + index: index2, + parents, + context, + containingArray: node + }); + if (result2[0] === EXIT) { + return result2; + } + if (typeof result2[1] === "number") { + index2 = result2[1] - 1; + } + } + } else { + let childProps = ["content", "args"]; + switch (node.type) { + case "macro": + childProps = ["args"]; + break; + case "comment": + case "string": + case "verb": + case "verbatim": + childProps = []; + break; + } + const mathModeProps = listMathChildren(node); + for (const key2 of childProps) { + const value = node[key2]; + const grandparents = [node].concat(parents); + if (value == null) { + continue; + } + const newContext = { ...context }; + if (mathModeProps.enter.includes(key2)) { + newContext.inMathMode = true; + newContext.hasMathModeAncestor = true; + } else if (mathModeProps.leave.includes(key2)) { + newContext.inMathMode = false; + } + const result2 = walk(value, { + key: key2, + index: void 0, + parents: grandparents, + context: newContext, + containingArray: void 0 + }); + if (result2[0] === EXIT) { + return result2; + } + } + } + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index, + parents, + context, + containingArray + }) + ) : result; + } +} +function toResult(value) { + if (value == null) { + return [CONTINUE]; + } + if (Array.isArray(value)) { + return value; + } + if (typeof value === "number") { + return [CONTINUE, value]; + } + return [value]; +} +export { + CONTINUE, + EXIT, + SKIP, + visit +}; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@unified-latex/unified-latex-util-visit/index.js.map b/node_modules/@unified-latex/unified-latex-util-visit/index.js.map new file mode 100644 index 0000000..b9b1352 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-visit/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../libs/list-math-children.ts","../libs/visit.ts"],"sourcesContent":["import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n/**\n * List all props of the current node that should be processed\n * in math mode or not in math mode. If math mode is not specified in the node's render\n * info, empty lists are returned.\n *\n * For example `\\text{foo}` will report that `args` should *not* be processed in math mode,\n * since it's contents should always be processed in text mode.\n */\nexport function listMathChildren(node: Ast.Ast): {\n enter: string[];\n leave: string[];\n} {\n const NULL_RETURN = { enter: [], leave: [] };\n if (Array.isArray(node)) {\n return NULL_RETURN;\n }\n if (match.math(node)) {\n // When we enter a math environment, our content is always\n // considered math mode\n return { enter: [\"content\"], leave: [] };\n }\n\n const renderInfo: { inMathMode?: boolean } = node._renderInfo || {};\n if (renderInfo.inMathMode == null) {\n return NULL_RETURN;\n }\n if (match.macro(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"args\"], leave: [] };\n } else if (renderInfo.inMathMode === false) {\n return { enter: [], leave: [\"args\"] };\n }\n }\n if (match.environment(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"content\"], leave: [] };\n } else {\n return { enter: [], leave: [\"content\"] };\n }\n }\n return NULL_RETURN;\n}\n","import * as Ast from \"@unified-latex/unified-latex-types\";\nimport { listMathChildren } from \"./list-math-children\";\n\nexport type VisitorContext = {\n /**\n * Whether the node is being processed in math mode.\n *\n * This happens when the node is a director or indirect child\n * of a math environment (e.g. `$abc$`), but not when an environment\n * re-establishes text mode (e.g. `$\\text{abc}$`)\n */\n inMathMode?: boolean;\n /**\n * Whether the node has any ancestor that is processed in math mode.\n */\n hasMathModeAncestor?: boolean;\n};\n\ntype GetGuard = T extends (x: any, ...y: any[]) => x is infer R ? R : never;\n/**\n * Gets the type that a type-guard function is guarding. If\n * the guard type cannot be determined, the input type is returned.\n */\ntype GuardTypeOf boolean> =\n GetGuard extends never\n ? T extends (x: infer A) => any\n ? A\n : never\n : GetGuard;\n\n/**\n * Extracts the guard type from the `test` function provided in a\n * `VisitOptions` argument.\n */\ntype GuardFromOptions<\n Opts extends VisitOptions,\n PossibleTypes = Ast.Ast\n> = Opts extends {\n test: infer R;\n}\n ? R extends (x: any, ...y: any[]) => boolean\n ? // A guard like `typeof Array.isArray` will return `any[]` as the type.\n // This type cannot be narrowed, so instead we use it to pick from\n // the set of all possible types.\n Extract>\n : PossibleTypes\n : PossibleTypes;\n\n/**\n * Narrow the type `T` based on the `VisitOptions` supplied. If `{includeArrays: false}`\n * is specified in the `VisitOptions`, then arrays are excluded from `T`.\n */\ntype NarrowArraysBasedOnOptions = Opts extends {\n includeArrays: infer A;\n}\n ? A extends true\n ? T\n : Exclude\n : Exclude;\n\n/**\n * Get the type of the parameter to the `Visitor` function based on the\n * `VisitOptions` that are supplied.\n */\ntype VisitorTypeFromOptions =\n NarrowArraysBasedOnOptions, Opts>;\n\n/**\n * Continue traversing as normal\n */\nexport const CONTINUE = Symbol(\"continue\");\n/**\n * Do not traverse this node’s children\n */\nexport const SKIP = Symbol(\"skip\");\n/**\n * Stop traversing immediately\n */\nexport const EXIT = Symbol(\"exit\");\n\ntype Action = typeof CONTINUE | typeof SKIP | typeof EXIT;\ntype Index = number;\ntype ActionTuple = [Action] | [typeof SKIP, Index] | [typeof CONTINUE, Index];\n\n/**\n * A visitor takes a `node`, `key`, `index`, and ...\n *\n * @param key - The key of the parent that we were accessed through.\n */\ntype Visitor = (\n node: T,\n info: VisitInfo\n) => null | undefined | Action | Index | ActionTuple | void;\ntype Visitors = { enter?: Visitor; leave?: Visitor };\n\ntype VisitOptions = {\n startingContext?: VisitorContext;\n /**\n * Type guard for types that are passed to the `visitor` function.\n */\n test?: (node: Ast.Ast, info: VisitInfo) => boolean;\n /**\n * Whether arrays will be sent to the `visitor` function. If falsy,\n * only nodes will be past to `visitor`.\n */\n includeArrays?: boolean;\n};\n\nconst DEFAULT_CONTEXT: VisitorContext = {\n inMathMode: false,\n hasMathModeAncestor: false,\n};\n\nexport type VisitInfo = {\n /**\n * If the element was accessed via an attribute, the attribute key is specified.\n */\n readonly key: string | undefined;\n /**\n * If the element was accessed in an array, the index is specified.\n */\n readonly index: number | undefined;\n /**\n * A list of ancestor nodes, `[parent, grandparent, great-grandparent, ...]`\n */\n readonly parents: (Ast.Node | Ast.Argument)[];\n /**\n * If the element was accessed in an array, the array that it is part of.\n */\n readonly containingArray: (Ast.Node | Ast.Argument)[] | undefined;\n /**\n * The LaTeX context of the current match.\n */\n readonly context: VisitorContext;\n};\n\n/**\n * Visit children of tree which pass a test\n *\n * @param {Node} tree Abstract syntax tree to walk\n * @param {Visitor|Visitors} [visitor] Function to run for each node\n */\nexport function visit(\n tree: Ast.Ast,\n visitor:\n | Visitor>\n | Visitors>,\n options?: Opts\n) {\n const {\n startingContext = DEFAULT_CONTEXT,\n test = () => true,\n includeArrays = false,\n } = options || {};\n let enter: Visitor> | undefined;\n let leave: Visitor> | undefined;\n\n if (typeof visitor === \"function\") {\n enter = visitor;\n } else if (visitor && typeof visitor === \"object\") {\n enter = visitor.enter;\n leave = visitor.leave;\n }\n\n walk(tree, {\n key: undefined,\n index: undefined,\n parents: [],\n containingArray: undefined,\n context: { ...startingContext },\n });\n\n /**\n * @param {Node} node\n * @param {string?} key\n * @param {number?} index\n * @param {Array.} parents\n */\n function walk(\n node: Ast.Ast,\n { key, index, parents, context, containingArray }: VisitInfo\n ): ActionTuple {\n const nodePassesTest = includeArrays\n ? test(node, { key, index, parents, context, containingArray })\n : !Array.isArray(node) &&\n test(node, { key, index, parents, context, containingArray });\n\n const result: ActionTuple =\n enter && nodePassesTest\n ? toResult(\n enter(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : [CONTINUE];\n\n if (result[0] === EXIT) {\n return result;\n }\n\n if (result[0] === SKIP) {\n return leave && nodePassesTest\n ? toResult(\n leave(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : result;\n }\n\n if (Array.isArray(node)) {\n // The `value` array might be modified in place as we traverse it, so\n // we use a traditional for loop.\n for (let index = 0; index > -1 && index < node.length; index++) {\n const item = node[index];\n const result = walk(item, {\n key,\n index,\n parents,\n context,\n containingArray: node,\n });\n if (result[0] === EXIT) {\n return result;\n }\n if (typeof result[1] === \"number\") {\n // The for loop will increment i every pass. However,\n // if an index was returned, that's where we want to start next time.\n index = result[1] - 1;\n }\n }\n } else {\n // We don't want to recursively apply to the `content`\n // of all types (e.g., comments and macros), so specify\n // a blacklist.\n let childProps: (\"content\" | \"args\")[] = [\"content\", \"args\"];\n switch (node.type) {\n case \"macro\":\n childProps = [\"args\"];\n break;\n case \"comment\":\n case \"string\":\n case \"verb\":\n case \"verbatim\":\n childProps = [];\n break;\n default:\n break;\n }\n\n const mathModeProps = listMathChildren(node);\n for (const key of childProps) {\n const value = node[key as keyof typeof node] as\n | Ast.Ast\n | undefined;\n const grandparents = [node].concat(parents);\n\n if (value == null) {\n continue;\n }\n\n // We may switch in/out of math mode as we pass to node[key]\n const newContext = { ...context };\n if (mathModeProps.enter.includes(key)) {\n newContext.inMathMode = true;\n newContext.hasMathModeAncestor = true;\n } else if (mathModeProps.leave.includes(key)) {\n newContext.inMathMode = false;\n }\n\n const result = walk(value, {\n key,\n index: undefined,\n parents: grandparents,\n context: newContext,\n containingArray: undefined,\n });\n if (result[0] === EXIT) {\n return result;\n }\n }\n }\n\n return leave && nodePassesTest\n ? toResult(\n leave(node as any, {\n key,\n index,\n parents,\n context,\n containingArray,\n })\n )\n : result;\n }\n}\n\n/**\n * Ensures a result is an `ActionTuple`s\n */\nfunction toResult(\n value: null | undefined | void | Action | Index | ActionTuple\n): ActionTuple {\n if (value == null) {\n return [CONTINUE];\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === \"number\") {\n return [CONTINUE, value];\n }\n\n return [value];\n}\n"],"names":["index","result","key"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@unified-latex/unified-latex-util-visit/package.json b/node_modules/@unified-latex/unified-latex-util-visit/package.json new file mode 100644 index 0000000..e7f15a0 --- /dev/null +++ b/node_modules/@unified-latex/unified-latex-util-visit/package.json @@ -0,0 +1,52 @@ +{ + "name": "@unified-latex/unified-latex-util-visit", + "version": "1.8.2", + "description": "Functions for traversing a unified-latex AST", + "main": "index.js", + "type": "module", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/unified-latex.git" + }, + "keywords": [ + "pegjs", + "latex", + "parser", + "prettier", + "unified-latex", + "unified" + ], + "author": "Jason Siefken", + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/unified-latex/issues" + }, + "homepage": "https://github.com/siefkenj/unified-latex#readme", + "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs", + "types": "./index.d.ts" + }, + "./*js": "./*js", + "./*": { + "import": "./*/index.js", + "require": "./*/index.cjs", + "types": "./*/index.d.ts" + }, + "./*/index": { + "import": "./*/index.js", + "require": "./*/index.cjs" + } + }, + "files": [ + "**/*ts", + "**/*js", + "**/*.map", + "**/*.json" + ] +} \ No newline at end of file diff --git a/node_modules/bail/index.d.ts b/node_modules/bail/index.d.ts new file mode 100644 index 0000000..88fe9aa --- /dev/null +++ b/node_modules/bail/index.d.ts @@ -0,0 +1,10 @@ +/** + * Throw a given error. + * + * @param {Error|null|undefined} [error] + * Maybe error. + * @returns {asserts error is null|undefined} + */ +export function bail( + error?: Error | null | undefined +): asserts error is null | undefined diff --git a/node_modules/bail/index.js b/node_modules/bail/index.js new file mode 100644 index 0000000..d0bc442 --- /dev/null +++ b/node_modules/bail/index.js @@ -0,0 +1,12 @@ +/** + * Throw a given error. + * + * @param {Error|null|undefined} [error] + * Maybe error. + * @returns {asserts error is null|undefined} + */ +export function bail(error) { + if (error) { + throw error + } +} diff --git a/node_modules/bail/license b/node_modules/bail/license new file mode 100644 index 0000000..32e7a3d --- /dev/null +++ b/node_modules/bail/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/bail/package.json b/node_modules/bail/package.json new file mode 100644 index 0000000..d56f6fa --- /dev/null +++ b/node_modules/bail/package.json @@ -0,0 +1,73 @@ +{ + "name": "bail", + "version": "2.0.2", + "description": "Throw a given error", + "license": "MIT", + "keywords": [ + "fail", + "bail", + "throw", + "callback", + "error" + ], + "repository": "wooorm/bail", + "bugs": "https://github.com/wooorm/bail/issues", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "index.js" + ], + "devDependencies": { + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "tsd": "^0.18.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.46.0" + }, + "scripts": { + "prepublishOnly": "npm run build && npm run format", + "build": "rimraf \"*.d.ts\" && tsc && tsd && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true + } +} diff --git a/node_modules/bail/readme.md b/node_modules/bail/readme.md new file mode 100644 index 0000000..8cd1823 --- /dev/null +++ b/node_modules/bail/readme.md @@ -0,0 +1,147 @@ +# bail + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] + +Throw if given an error. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`bail(err?)`](#bailerr) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package throws a given error. + +## When should I use this? + +Use this package if you’re building some scripts that might theoretically get +errors but frequently don’t and you keep writing `if (error) throw error` over +and over again and you’re just really done with that. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: + +```sh +npm install bail +``` + +In Deno with [Skypack][]: + +```js +import {bail} from 'https://cdn.skypack.dev/bail@2?dts' +``` + +In browsers with [Skypack][]: + +```html + +``` + +## Use + +```js +import {bail} from 'bail' + +bail() + +bail(new Error('failure')) +// Error: failure +// at repl:1:6 +// at REPLServer.defaultEval (repl.js:154:27) +// … +``` + +## API + +This package exports the following identifier: `bail`. +There is no default export. + +### `bail(err?)` + +Throw a given error (`Error?`). + +## Types + +This package is fully typed with [TypeScript][]. +There are no extra exported types. + +## Compatibility + +This package is at least compatible with all maintained versions of Node.js. +As of now, that is Node.js 12.20+, 14.14+, and 16.0+. +It also works in Deno and modern browsers. + +## Security + +This package is safe. + +## Related + +* [`noop`][noop] +* [`noop2`][noop2] +* [`noop3`][noop3] + +## Contribute + +Yes please! +See [How to Contribute to Open Source][contribute]. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/wooorm/bail/workflows/main/badge.svg + +[build]: https://github.com/wooorm/bail/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/bail.svg + +[coverage]: https://codecov.io/github/wooorm/bail + +[downloads-badge]: https://img.shields.io/npm/dm/bail.svg + +[downloads]: https://www.npmjs.com/package/bail + +[size-badge]: https://img.shields.io/bundlephobia/minzip/bail.svg + +[size]: https://bundlephobia.com/result?p=bail + +[npm]: https://docs.npmjs.com/cli/install + +[skypack]: https://www.skypack.dev + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[typescript]: https://www.typescriptlang.org + +[contribute]: https://opensource.guide/how-to-contribute/ + +[noop]: https://www.npmjs.com/package/noop + +[noop2]: https://www.npmjs.com/package/noop2 + +[noop3]: https://www.npmjs.com/package/noop3 diff --git a/node_modules/color-convert/CHANGELOG.md b/node_modules/color-convert/CHANGELOG.md new file mode 100644 index 0000000..0a7bce4 --- /dev/null +++ b/node_modules/color-convert/CHANGELOG.md @@ -0,0 +1,54 @@ +# 1.0.0 - 2016-01-07 + +- Removed: unused speed test +- Added: Automatic routing between previously unsupported conversions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `convert()` class +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: all functions to lookup dictionary +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: `ansi` to `ansi256` +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Fixed: argument grouping for functions requiring only one argument +([#27](https://github.com/Qix-/color-convert/pull/27)) + +# 0.6.0 - 2015-07-23 + +- Added: methods to handle +[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors: + - rgb2ansi16 + - rgb2ansi + - hsl2ansi16 + - hsl2ansi + - hsv2ansi16 + - hsv2ansi + - hwb2ansi16 + - hwb2ansi + - cmyk2ansi16 + - cmyk2ansi + - keyword2ansi16 + - keyword2ansi + - ansi162rgb + - ansi162hsl + - ansi162hsv + - ansi162hwb + - ansi162cmyk + - ansi162keyword + - ansi2rgb + - ansi2hsl + - ansi2hsv + - ansi2hwb + - ansi2cmyk + - ansi2keyword +([#18](https://github.com/harthur/color-convert/pull/18)) + +# 0.5.3 - 2015-06-02 + +- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]` +([#15](https://github.com/harthur/color-convert/issues/15)) + +--- + +Check out commit logs for older releases diff --git a/node_modules/color-convert/LICENSE b/node_modules/color-convert/LICENSE new file mode 100644 index 0000000..5b4c386 --- /dev/null +++ b/node_modules/color-convert/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011-2016 Heather Arthur + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/color-convert/README.md b/node_modules/color-convert/README.md new file mode 100644 index 0000000..d4b08fc --- /dev/null +++ b/node_modules/color-convert/README.md @@ -0,0 +1,68 @@ +# color-convert + +[![Build Status](https://travis-ci.org/Qix-/color-convert.svg?branch=master)](https://travis-ci.org/Qix-/color-convert) + +Color-convert is a color conversion library for JavaScript and node. +It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s (will round to closest): + +```js +var convert = require('color-convert'); + +convert.rgb.hsl(140, 200, 100); // [96, 48, 59] +convert.keyword.rgb('blue'); // [0, 0, 255] + +var rgbChannels = convert.rgb.channels; // 3 +var cmykChannels = convert.cmyk.channels; // 4 +var ansiChannels = convert.ansi16.channels; // 1 +``` + +# Install + +```console +$ npm install color-convert +``` + +# API + +Simply get the property of the _from_ and _to_ conversion that you're looking for. + +All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function. + +All 'from' functions have a hidden property called `.channels` that indicates the number of channels the function expects (not including alpha). + +```js +var convert = require('color-convert'); + +// Hex to LAB +convert.hex.lab('DEADBF'); // [ 76, 21, -2 ] +convert.hex.lab.raw('DEADBF'); // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ] + +// RGB to CMYK +convert.rgb.cmyk(167, 255, 4); // [ 35, 0, 98, 0 ] +convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ] +``` + +### Arrays +All functions that accept multiple arguments also support passing an array. + +Note that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.) + +```js +var convert = require('color-convert'); + +convert.rgb.hex(123, 45, 67); // '7B2D43' +convert.rgb.hex([123, 45, 67]); // '7B2D43' +``` + +## Routing + +Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex). + +Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js). + +# Contribute + +If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request. + +# License +Copyright © 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE). diff --git a/node_modules/color-convert/conversions.js b/node_modules/color-convert/conversions.js new file mode 100644 index 0000000..2657f26 --- /dev/null +++ b/node_modules/color-convert/conversions.js @@ -0,0 +1,839 @@ +/* MIT license */ +/* eslint-disable no-mixed-operators */ +const cssKeywords = require('color-name'); + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +const reverseKeywords = {}; +for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; +} + +const convert = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +module.exports = convert; + +// Hide .channels and .labels properties +for (const model of Object.keys(convert)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + const {channels, labels} = convert[model]; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); +} + +convert.rgb.hsl = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + const l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s; + + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = 0; + s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +function comparativeDistance(x, y) { + /* + See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + */ + return ( + ((x[0] - y[0]) ** 2) + + ((x[1] - y[1]) ** 2) + + ((x[2] - y[2]) ** 2) + ); +} + +convert.rgb.keyword = function (rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + let currentClosestDistance = Infinity; + let currentClosestKeyword; + + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + + // Compute comparative distance + const distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + + // Assume sRGB + r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); + g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); + b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); + + const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + const xyz = convert.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + const h = hsl[0] / 360; + const s = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + const t1 = 2 * l - t2; + + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + const h = hsl[0]; + let s = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s; + const lmin = Math.max(l, 0.01); + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s) / 2; + const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + const h = hsv[0] / 60; + const s = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + + const f = h - Math.floor(h); + const p = 255 * v * (1 - s); + const q = 255 * v * (1 - (s * f)); + const t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + const h = hsv[0]; + const s = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + + l = (2 - s) * v; + const lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + + // Wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + const n = wh + f * (v - wh); // Linear interpolation + + let r; + let g; + let b; + /* eslint-disable max-statements-per-line,no-multi-spaces */ + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + /* eslint-enable max-statements-per-line,no-multi-spaces */ + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // Assume sRGB + r = r > 0.0031308 + ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + + const l = (116 * y) - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + const c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + let ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // Optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + + // We use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + const ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + let color = args % 10; + + // Handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + const mult = (~~(args > 50) + 1) * 0.5; + const r = ((color & 1) * mult) * 255; + const g = (((color >> 1) & 1) * mult) * 255; + const b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // Handle greyscale + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + const integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + let colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(char => { + return char + char; + }).join(''); + } + + const integer = parseInt(colorString, 16); + const r = (integer >> 16) & 0xFF; + const g = (integer >> 8) & 0xFF; + const b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = (max - min); + let grayscale; + let hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + const s = hsl[1] / 100; + const l = hsl[2] / 100; + + const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); + + let f = 0; + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + const s = hsv[1] / 100; + const v = hsv[2] / 100; + + const c = s * v; + let f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + const pure = [0, 0, 0]; + const hi = (h % 1) * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + + /* eslint-disable max-statements-per-line */ + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + /* eslint-enable max-statements-per-line */ + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const v = c + g * (1.0 - c); + let f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + + const l = g * (1.0 - c) + 0.5 * c; + let s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hsv = convert.gray.hsl; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + const val = Math.round(gray[0] / 100 * 255) & 0xFF; + const integer = (val << 16) + (val << 8) + val; + + const string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; diff --git a/node_modules/color-convert/index.js b/node_modules/color-convert/index.js new file mode 100644 index 0000000..b648e57 --- /dev/null +++ b/node_modules/color-convert/index.js @@ -0,0 +1,81 @@ +const conversions = require('./conversions'); +const route = require('./route'); + +const convert = {}; + +const models = Object.keys(conversions); + +function wrapRaw(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + return fn(args); + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + const wrappedFn = function (...args) { + const arg0 = args[0]; + + if (arg0 === undefined || arg0 === null) { + return arg0; + } + + if (arg0.length > 1) { + args = arg0; + } + + const result = fn(args); + + // We're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // Preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(fromModel => { + convert[fromModel] = {}; + + Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + + const routes = route(fromModel); + const routeModels = Object.keys(routes); + + routeModels.forEach(toModel => { + const fn = routes[toModel]; + + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +module.exports = convert; diff --git a/node_modules/color-convert/package.json b/node_modules/color-convert/package.json new file mode 100644 index 0000000..6e48000 --- /dev/null +++ b/node_modules/color-convert/package.json @@ -0,0 +1,48 @@ +{ + "name": "color-convert", + "description": "Plain color conversion functions", + "version": "2.0.1", + "author": "Heather Arthur ", + "license": "MIT", + "repository": "Qix-/color-convert", + "scripts": { + "pretest": "xo", + "test": "node test/basic.js" + }, + "engines": { + "node": ">=7.0.0" + }, + "keywords": [ + "color", + "colour", + "convert", + "converter", + "conversion", + "rgb", + "hsl", + "hsv", + "hwb", + "cmyk", + "ansi", + "ansi16" + ], + "files": [ + "index.js", + "conversions.js", + "route.js" + ], + "xo": { + "rules": { + "default-case": 0, + "no-inline-comments": 0, + "operator-linebreak": 0 + } + }, + "devDependencies": { + "chalk": "^2.4.2", + "xo": "^0.24.0" + }, + "dependencies": { + "color-name": "~1.1.4" + } +} diff --git a/node_modules/color-convert/route.js b/node_modules/color-convert/route.js new file mode 100644 index 0000000..1a08521 --- /dev/null +++ b/node_modules/color-convert/route.js @@ -0,0 +1,97 @@ +const conversions = require('./conversions'); + +/* + This function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + const graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + const models = Object.keys(conversions); + + for (let len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; // Unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions[current]); + + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + const path = [graph[toModel].parent, toModel]; + let fn = conversions[graph[toModel].parent][toModel]; + + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +module.exports = function (fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + + const models = Object.keys(graph); + for (let len = models.length, i = 0; i < len; i++) { + const toModel = models[i]; + const node = graph[toModel]; + + if (node.parent === null) { + // No possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + diff --git a/node_modules/color-name/LICENSE b/node_modules/color-name/LICENSE new file mode 100644 index 0000000..4d9802a --- /dev/null +++ b/node_modules/color-name/LICENSE @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright (c) 2015 Dmitry Ivanov + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/color-name/README.md b/node_modules/color-name/README.md new file mode 100644 index 0000000..3611a6b --- /dev/null +++ b/node_modules/color-name/README.md @@ -0,0 +1,11 @@ +A JSON with color names and its values. Based on http://dev.w3.org/csswg/css-color/#named-colors. + +[![NPM](https://nodei.co/npm/color-name.png?mini=true)](https://nodei.co/npm/color-name/) + + +```js +var colors = require('color-name'); +colors.red //[255,0,0] +``` + + diff --git a/node_modules/color-name/index.js b/node_modules/color-name/index.js new file mode 100644 index 0000000..e42aa68 --- /dev/null +++ b/node_modules/color-name/index.js @@ -0,0 +1,152 @@ +'use strict' + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; diff --git a/node_modules/color-name/package.json b/node_modules/color-name/package.json new file mode 100644 index 0000000..7acc902 --- /dev/null +++ b/node_modules/color-name/package.json @@ -0,0 +1,28 @@ +{ + "name": "color-name", + "version": "1.1.4", + "description": "A list of color names and its values", + "main": "index.js", + "files": [ + "index.js" + ], + "scripts": { + "test": "node test.js" + }, + "repository": { + "type": "git", + "url": "git@github.com:colorjs/color-name.git" + }, + "keywords": [ + "color-name", + "color", + "color-keyword", + "keyword" + ], + "author": "DY ", + "license": "MIT", + "bugs": { + "url": "https://github.com/colorjs/color-name/issues" + }, + "homepage": "https://github.com/colorjs/color-name" +} diff --git a/node_modules/color-string/LICENSE b/node_modules/color-string/LICENSE new file mode 100644 index 0000000..a8b08d4 --- /dev/null +++ b/node_modules/color-string/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011 Heather Arthur + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/color-string/README.md b/node_modules/color-string/README.md new file mode 100644 index 0000000..e58670c --- /dev/null +++ b/node_modules/color-string/README.md @@ -0,0 +1,62 @@ +# color-string + +> library for parsing and generating CSS color strings. + +## Install + +With [npm](http://npmjs.org/): + +```console +$ npm install color-string +``` + +## Usage + +### Parsing + +```js +colorString.get('#FFF') // {model: 'rgb', value: [255, 255, 255, 1]} +colorString.get('#FFFA') // {model: 'rgb', value: [255, 255, 255, 0.67]} +colorString.get('#FFFFFFAA') // {model: 'rgb', value: [255, 255, 255, 0.67]} +colorString.get('hsl(360, 100%, 50%)') // {model: 'hsl', value: [0, 100, 50, 1]} +colorString.get('hsl(360 100% 50%)') // {model: 'hsl', value: [0, 100, 50, 1]} +colorString.get('hwb(60, 3%, 60%)') // {model: 'hwb', value: [60, 3, 60, 1]} + +colorString.get.rgb('#FFF') // [255, 255, 255, 1] +colorString.get.rgb('blue') // [0, 0, 255, 1] +colorString.get.rgb('rgba(200, 60, 60, 0.3)') // [200, 60, 60, 0.3] +colorString.get.rgb('rgba(200 60 60 / 0.3)') // [200, 60, 60, 0.3] +colorString.get.rgb('rgba(200 60 60 / 30%)') // [200, 60, 60, 0.3] +colorString.get.rgb('rgb(200, 200, 200)') // [200, 200, 200, 1] +colorString.get.rgb('rgb(200 200 200)') // [200, 200, 200, 1] + +colorString.get.hsl('hsl(360, 100%, 50%)') // [0, 100, 50, 1] +colorString.get.hsl('hsl(360 100% 50%)') // [0, 100, 50, 1] +colorString.get.hsl('hsla(360, 60%, 50%, 0.4)') // [0, 60, 50, 0.4] +colorString.get.hsl('hsl(360 60% 50% / 0.4)') // [0, 60, 50, 0.4] + +colorString.get.hwb('hwb(60, 3%, 60%)') // [60, 3, 60, 1] +colorString.get.hwb('hwb(60, 3%, 60%, 0.6)') // [60, 3, 60, 0.6] + +colorString.get.rgb('invalid color string') // null +``` + +### Generation + +```js +colorString.to.hex([255, 255, 255]) // "#FFFFFF" +colorString.to.hex([0, 0, 255, 0.4]) // "#0000FF66" +colorString.to.hex([0, 0, 255], 0.4) // "#0000FF66" +colorString.to.rgb([255, 255, 255]) // "rgb(255, 255, 255)" +colorString.to.rgb([0, 0, 255, 0.4]) // "rgba(0, 0, 255, 0.4)" +colorString.to.rgb([0, 0, 255], 0.4) // "rgba(0, 0, 255, 0.4)" +colorString.to.rgb.percent([0, 0, 255]) // "rgb(0%, 0%, 100%)" +colorString.to.keyword([255, 255, 0]) // "yellow" +colorString.to.hsl([360, 100, 100]) // "hsl(360, 100%, 100%)" +colorString.to.hwb([50, 3, 15]) // "hwb(50, 3%, 15%)" + +// all functions also support swizzling +colorString.to.rgb(0, [0, 255], 0.4) // "rgba(0, 0, 255, 0.4)" +colorString.to.rgb([0, 0], [255], 0.4) // "rgba(0, 0, 255, 0.4)" +colorString.to.rgb([0], 0, [255, 0.4]) // "rgba(0, 0, 255, 0.4)" +``` diff --git a/node_modules/color-string/index.js b/node_modules/color-string/index.js new file mode 100644 index 0000000..dd5d2b7 --- /dev/null +++ b/node_modules/color-string/index.js @@ -0,0 +1,242 @@ +/* MIT license */ +var colorNames = require('color-name'); +var swizzle = require('simple-swizzle'); +var hasOwnProperty = Object.hasOwnProperty; + +var reverseNames = Object.create(null); + +// create a list of reverse color names +for (var name in colorNames) { + if (hasOwnProperty.call(colorNames, name)) { + reverseNames[colorNames[name]] = name; + } +} + +var cs = module.exports = { + to: {}, + get: {} +}; + +cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; +}; + +cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var keyword = /^(\w+)$/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + if (match[5]) { + rgb[3] = parseFloat(match[4]) * 0.01; + } else { + rgb[3] = parseFloat(match[4]); + } + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + if (match[5]) { + rgb[3] = parseFloat(match[4]) * 0.01; + } else { + rgb[3] = parseFloat(match[4]); + } + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + if (!hasOwnProperty.call(colorNames, match[1])) { + return null; + } + + rgb = colorNames[match[1]]; + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; +}; + +cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; +}; + +cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; +}; + +cs.to.hex = function () { + var rgba = swizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); +}; + +cs.to.rgb = function () { + var rgba = swizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; +}; + +cs.to.rgb.percent = function () { + var rgba = swizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; +}; + +cs.to.hsl = function () { + var hsla = swizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; +}; + +// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax +// (hwb have alpha optional & 1 is default value) +cs.to.hwb = function () { + var hwba = swizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; +}; + +cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; + +// helpers +function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); +} + +function hexDouble(num) { + var str = Math.round(num).toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; +} diff --git a/node_modules/color-string/package.json b/node_modules/color-string/package.json new file mode 100644 index 0000000..f34ee98 --- /dev/null +++ b/node_modules/color-string/package.json @@ -0,0 +1,39 @@ +{ + "name": "color-string", + "description": "Parser and generator for CSS color strings", + "version": "1.9.1", + "author": "Heather Arthur ", + "contributors": [ + "Maxime Thirouin", + "Dyma Ywanov ", + "Josh Junon" + ], + "repository": "Qix-/color-string", + "scripts": { + "pretest": "xo", + "test": "node test/basic.js" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "xo": { + "rules": { + "no-cond-assign": 0, + "operator-linebreak": 0 + } + }, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + }, + "devDependencies": { + "xo": "^0.12.1" + }, + "keywords": [ + "color", + "colour", + "rgb", + "css" + ] +} diff --git a/node_modules/color/LICENSE b/node_modules/color/LICENSE new file mode 100644 index 0000000..68c864e --- /dev/null +++ b/node_modules/color/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2012 Heather Arthur + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/color/README.md b/node_modules/color/README.md new file mode 100644 index 0000000..674a731 --- /dev/null +++ b/node_modules/color/README.md @@ -0,0 +1,123 @@ +# color + +> JavaScript library for immutable color conversion and manipulation with support for CSS color strings. + +```js +const color = Color('#7743CE').alpha(0.5).lighten(0.5); +console.log(color.hsl().string()); // 'hsla(262, 59%, 81%, 0.5)' + +console.log(color.cmyk().round().array()); // [ 16, 25, 0, 8, 0.5 ] + +console.log(color.ansi256().object()); // { ansi256: 183, alpha: 0.5 } +``` + +## Install +```console +$ npm install color +``` + +## Usage +```js +const Color = require('color'); +``` + +### Constructors +```js +const color = Color('rgb(255, 255, 255)') +const color = Color({r: 255, g: 255, b: 255}) +const color = Color.rgb(255, 255, 255) +const color = Color.rgb([255, 255, 255]) +``` + +Set the values for individual channels with `alpha`, `red`, `green`, `blue`, `hue`, `saturationl` (hsl), `saturationv` (hsv), `lightness`, `whiteness`, `blackness`, `cyan`, `magenta`, `yellow`, `black` + +String constructors are handled by [color-string](https://www.npmjs.com/package/color-string) + +### Getters +```js +color.hsl(); +``` +Convert a color to a different space (`hsl()`, `cmyk()`, etc.). + +```js +color.object(); // {r: 255, g: 255, b: 255} +``` +Get a hash of the color value. Reflects the color's current model (see above). + +```js +color.rgb().array() // [255, 255, 255] +``` +Get an array of the values with `array()`. Reflects the color's current model (see above). + +```js +color.rgbNumber() // 16777215 (0xffffff) +``` +Get the rgb number value. + +```js +color.hex() // #ffffff +``` +Get the hex value. (**NOTE:** `.hex()` does not return alpha values; use `.hexa()` for an RGBA representation) + +```js +color.red() // 255 +``` +Get the value for an individual channel. + +### CSS Strings +```js +color.hsl().string() // 'hsl(320, 50%, 100%)' +``` + +Calling `.string()` with a number rounds the numbers to that decimal place. It defaults to 1. + +### Luminosity +```js +color.luminosity(); // 0.412 +``` +The [WCAG luminosity](http://www.w3.org/TR/WCAG20/#relativeluminancedef) of the color. 0 is black, 1 is white. + +```js +color.contrast(Color("blue")) // 12 +``` +The [WCAG contrast ratio](http://www.w3.org/TR/WCAG20/#contrast-ratiodef) to another color, from 1 (same color) to 21 (contrast b/w white and black). + +```js +color.isLight(); // true +color.isDark(); // false +``` +Get whether the color is "light" or "dark", useful for deciding text color. + +### Manipulation +```js +color.negate() // rgb(0, 100, 255) -> rgb(255, 155, 0) + +color.lighten(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 75%) +color.lighten(0.5) // hsl(100, 50%, 0) -> hsl(100, 50%, 0) +color.darken(0.5) // hsl(100, 50%, 50%) -> hsl(100, 50%, 25%) +color.darken(0.5) // hsl(100, 50%, 0) -> hsl(100, 50%, 0) + +color.lightness(50) // hsl(100, 50%, 10%) -> hsl(100, 50%, 50%) + +color.saturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 75%, 50%) +color.desaturate(0.5) // hsl(100, 50%, 50%) -> hsl(100, 25%, 50%) +color.grayscale() // #5CBF54 -> #969696 + +color.whiten(0.5) // hwb(100, 50%, 50%) -> hwb(100, 75%, 50%) +color.blacken(0.5) // hwb(100, 50%, 50%) -> hwb(100, 50%, 75%) + +color.fade(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 0.4) +color.opaquer(0.5) // rgba(10, 10, 10, 0.8) -> rgba(10, 10, 10, 1.0) + +color.rotate(180) // hsl(60, 20%, 20%) -> hsl(240, 20%, 20%) +color.rotate(-90) // hsl(60, 20%, 20%) -> hsl(330, 20%, 20%) + +color.mix(Color("yellow")) // cyan -> rgb(128, 255, 128) +color.mix(Color("yellow"), 0.3) // cyan -> rgb(77, 255, 179) + +// chaining +color.green(100).grayscale().lighten(0.6) +``` + +## Propers +The API was inspired by [color-js](https://github.com/brehaut/color-js). Manipulation functions by CSS tools like Sass, LESS, and Stylus. diff --git a/node_modules/color/index.js b/node_modules/color/index.js new file mode 100644 index 0000000..ddb0b5d --- /dev/null +++ b/node_modules/color/index.js @@ -0,0 +1,496 @@ +const colorString = require('color-string'); +const convert = require('color-convert'); + +const skippedModels = [ + // To be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // Gray conflicts with some method names, and has its own method defined. + 'gray', + + // Shouldn't really be in color-convert either... + 'hex', +]; + +const hashedModelKeys = {}; +for (const model of Object.keys(convert)) { + hashedModelKeys[[...convert[model].labels].sort().join('')] = model; +} + +const limiters = {}; + +function Color(object, model) { + if (!(this instanceof Color)) { + return new Color(object, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in convert)) { + throw new Error('Unknown model: ' + model); + } + + let i; + let channels; + + if (object == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (object instanceof Color) { + this.model = object.model; + this.color = [...object.color]; + this.valpha = object.valpha; + } else if (typeof object === 'string') { + const result = colorString.get(object); + if (result === null) { + throw new Error('Unable to parse color from string: ' + object); + } + + this.model = result.model; + channels = convert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (object.length > 0) { + this.model = model || 'rgb'; + channels = convert[this.model].channels; + const newArray = Array.prototype.slice.call(object, 0, channels); + this.color = zeroArray(newArray, channels); + this.valpha = typeof object[channels] === 'number' ? object[channels] : 1; + } else if (typeof object === 'number') { + // This is always RGB - can be converted later on. + this.model = 'rgb'; + this.color = [ + (object >> 16) & 0xFF, + (object >> 8) & 0xFF, + object & 0xFF, + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + const keys = Object.keys(object); + if ('alpha' in object) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof object.alpha === 'number' ? object.alpha : 0; + } + + const hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(object)); + } + + this.model = hashedModelKeys[hashedKeys]; + + const {labels} = convert[this.model]; + const color = []; + for (i = 0; i < labels.length; i++) { + color.push(object[labels[i]]); + } + + this.color = zeroArray(color); + } + + // Perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = convert[this.model].channels; + for (i = 0; i < channels; i++) { + const limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } +} + +Color.prototype = { + toString() { + return this.string(); + }, + + toJSON() { + return this[this.model](); + }, + + string(places) { + let self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to[self.model](args); + }, + + percentString(places) { + const self = this.rgb().round(typeof places === 'number' ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to.rgb.percent(args); + }, + + array() { + return this.valpha === 1 ? [...this.color] : [...this.color, this.valpha]; + }, + + object() { + const result = {}; + const {channels} = convert[this.model]; + const {labels} = convert[this.model]; + + for (let i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray() { + const rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject() { + const rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round(places) { + places = Math.max(places || 0, 0); + return new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model); + }, + + alpha(value) { + if (value !== undefined) { + return new Color([...this.color, Math.max(0, Math.min(1, value))], this.model); + } + + return this.valpha; + }, + + // Rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360), + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(95.047)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(108.833)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword(value) { + if (value !== undefined) { + return new Color(value); + } + + return convert[this.model].keyword(this.color); + }, + + hex(value) { + if (value !== undefined) { + return new Color(value); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + hexa(value) { + if (value !== undefined) { + return new Color(value); + } + + const rgbArray = this.rgb().round().color; + + let alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase(); + if (alphaHex.length === 1) { + alphaHex = '0' + alphaHex; + } + + return colorString.to.hex(rgbArray) + alphaHex; + }, + + rgbNumber() { + const rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity() { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + const rgb = this.rgb().color; + + const lum = []; + for (const [i, element] of rgb.entries()) { + const chan = element / 255; + lum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4; + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast(color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + const lum1 = this.luminosity(); + const lum2 = color2.luminosity(); + + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level(color2) { + // https://www.w3.org/TR/WCAG/#contrast-enhanced + const contrastRatio = this.contrast(color2); + if (contrastRatio >= 7) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + isDark() { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + const rgb = this.rgb().color; + const yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000; + return yiq < 128; + }, + + isLight() { + return !this.isDark(); + }, + + negate() { + const rgb = this.rgb(); + for (let i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + + return rgb; + }, + + lighten(ratio) { + const hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken(ratio) { + const hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten(ratio) { + const hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken(ratio) { + const hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale() { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + const rgb = this.rgb().color; + const value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(value, value, value); + }, + + fade(ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer(ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate(degrees) { + const hsl = this.hsl(); + let hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix(mixinColor, weight) { + // Ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + + const color1 = mixinColor.rgb(); + const color2 = this.rgb(); + const p = weight === undefined ? 0.5 : weight; + + const w = 2 * p - 1; + const a = color1.alpha() - color2.alpha(); + + const w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2; + const w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + }, +}; + +// Model conversion methods and static constructors +for (const model of Object.keys(convert)) { + if (skippedModels.includes(model)) { + continue; + } + + const {channels} = convert[model]; + + // Conversion methods + Color.prototype[model] = function (...args) { + if (this.model === model) { + return new Color(this); + } + + if (args.length > 0) { + return new Color(args, model); + } + + return new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model); + }; + + // 'static' construction methods + Color[model] = function (...args) { + let color = args[0]; + if (typeof color === 'number') { + color = zeroArray(args, channels); + } + + return new Color(color, model); + }; +} + +function roundTo(number, places) { + return Number(number.toFixed(places)); +} + +function roundToPlace(places) { + return function (number) { + return roundTo(number, places); + }; +} + +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + for (const m of model) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + } + + model = model[0]; + + return function (value) { + let result; + + if (value !== undefined) { + if (modifier) { + value = modifier(value); + } + + result = this[model](); + result.color[channel] = value; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; +} + +function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; +} + +function assertArray(value) { + return Array.isArray(value) ? value : [value]; +} + +function zeroArray(array, length) { + for (let i = 0; i < length; i++) { + if (typeof array[i] !== 'number') { + array[i] = 0; + } + } + + return array; +} + +module.exports = Color; diff --git a/node_modules/color/package.json b/node_modules/color/package.json new file mode 100644 index 0000000..4cdb6e3 --- /dev/null +++ b/node_modules/color/package.json @@ -0,0 +1,47 @@ +{ + "name": "color", + "version": "4.2.3", + "description": "Color conversion and manipulation with CSS string support", + "sideEffects": false, + "keywords": [ + "color", + "colour", + "css" + ], + "authors": [ + "Josh Junon ", + "Heather Arthur ", + "Maxime Thirouin" + ], + "license": "MIT", + "repository": "Qix-/color", + "xo": { + "rules": { + "no-cond-assign": 0, + "new-cap": 0, + "unicorn/prefer-module": 0, + "no-mixed-operators": 0, + "complexity": 0, + "unicorn/numeric-separators-style": 0 + } + }, + "files": [ + "LICENSE", + "index.js" + ], + "scripts": { + "pretest": "xo", + "test": "mocha" + }, + "engines": { + "node": ">=12.5.0" + }, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "devDependencies": { + "mocha": "9.0.2", + "xo": "0.42.0" + } +} diff --git a/node_modules/extend/.editorconfig b/node_modules/extend/.editorconfig new file mode 100644 index 0000000..bc228f8 --- /dev/null +++ b/node_modules/extend/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 150 + +[CHANGELOG.md] +indent_style = space +indent_size = 2 + +[*.json] +max_line_length = off + +[Makefile] +max_line_length = off diff --git a/node_modules/extend/.eslintrc b/node_modules/extend/.eslintrc new file mode 100644 index 0000000..a34cf28 --- /dev/null +++ b/node_modules/extend/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "complexity": [2, 20], + "eqeqeq": [2, "allow-null"], + "func-name-matching": [1], + "max-depth": [1, 4], + "max-statements": [2, 26], + "no-extra-parens": [1], + "no-magic-numbers": [0], + "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"], + "sort-keys": [0], + } +} diff --git a/node_modules/extend/.jscs.json b/node_modules/extend/.jscs.json new file mode 100644 index 0000000..3cce01d --- /dev/null +++ b/node_modules/extend/.jscs.json @@ -0,0 +1,175 @@ +{ + "es3": true, + + "additionalRules": [], + + "requireSemicolons": true, + + "disallowMultipleSpaces": true, + + "disallowIdentifierNames": [], + + "requireCurlyBraces": { + "allExcept": [], + "keywords": ["if", "else", "for", "while", "do", "try", "catch"] + }, + + "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], + + "disallowSpaceAfterKeywords": [], + + "disallowSpaceBeforeComma": true, + "disallowSpaceAfterComma": false, + "disallowSpaceBeforeSemicolon": true, + + "disallowNodeTypes": [ + "DebuggerStatement", + "LabeledStatement", + "SwitchCase", + "SwitchStatement", + "WithStatement" + ], + + "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] }, + + "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, + "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, + "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, + "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, + "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, + + "requireSpaceBetweenArguments": true, + + "disallowSpacesInsideParentheses": true, + + "disallowSpacesInsideArrayBrackets": true, + + "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] }, + + "disallowSpaceAfterObjectKeys": true, + + "requireCommaBeforeLineBreak": true, + + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "requireSpaceAfterPrefixUnaryOperators": [], + + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "requireSpaceBeforePostfixUnaryOperators": [], + + "disallowSpaceBeforeBinaryOperators": [], + "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], + + "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], + "disallowSpaceAfterBinaryOperators": [], + + "disallowImplicitTypeConversion": ["binary", "string"], + + "disallowKeywords": ["with", "eval"], + + "requireKeywordsOnNewLine": [], + "disallowKeywordsOnNewLine": ["else"], + + "requireLineFeedAtFileEnd": true, + + "disallowTrailingWhitespace": true, + + "disallowTrailingComma": true, + + "excludeFiles": ["node_modules/**", "vendor/**"], + + "disallowMultipleLineStrings": true, + + "requireDotNotation": { "allExcept": ["keywords"] }, + + "requireParenthesesAroundIIFE": true, + + "validateLineBreaks": "LF", + + "validateQuoteMarks": { + "escape": true, + "mark": "'" + }, + + "disallowOperatorBeforeLineBreak": [], + + "requireSpaceBeforeKeywords": [ + "do", + "for", + "if", + "else", + "switch", + "case", + "try", + "catch", + "finally", + "while", + "with", + "return" + ], + + "validateAlignedFunctionParameters": { + "lineBreakAfterOpeningBraces": true, + "lineBreakBeforeClosingBraces": true + }, + + "requirePaddingNewLinesBeforeExport": true, + + "validateNewlineAfterArrayElements": { + "maximum": 6 + }, + + "requirePaddingNewLinesAfterUseStrict": true, + + "disallowArrowFunctions": true, + + "disallowMultiLineTernary": true, + + "validateOrderInObjectKeys": false, + + "disallowIdenticalDestructuringNames": true, + + "disallowNestedTernaries": { "maxLevel": 1 }, + + "requireSpaceAfterComma": { "allExcept": ["trailing"] }, + "requireAlignedMultilineParams": false, + + "requireSpacesInGenerator": { + "afterStar": true + }, + + "disallowSpacesInGenerator": { + "beforeStar": true + }, + + "disallowVar": false, + + "requireArrayDestructuring": false, + + "requireEnhancedObjectLiterals": false, + + "requireObjectDestructuring": false, + + "requireEarlyReturn": false, + + "requireCapitalizedConstructorsNew": { + "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"] + }, + + "requireImportAlphabetized": false, + + "requireSpaceBeforeObjectValues": true, + "requireSpaceBeforeDestructuredValues": true, + + "disallowSpacesInsideTemplateStringPlaceholders": true, + + "disallowArrayDestructuringReturn": false, + + "requireNewlineBeforeSingleStatementsInIf": false, + + "disallowUnusedVariables": true, + + "requireSpacesInsideImportedObjectBraces": true, + + "requireUseStrict": true +} + diff --git a/node_modules/extend/.travis.yml b/node_modules/extend/.travis.yml new file mode 100644 index 0000000..5ccdfc4 --- /dev/null +++ b/node_modules/extend/.travis.yml @@ -0,0 +1,230 @@ +language: node_js +os: + - linux +node_js: + - "10.7" + - "9.11" + - "8.11" + - "7.10" + - "6.14" + - "5.12" + - "4.9" + - "iojs-v3.3" + - "iojs-v2.5" + - "iojs-v1.8" + - "0.12" + - "0.10" + - "0.8" +before_install: + - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac' + - 'nvm install-latest-npm' +install: + - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' +script: + - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi' + - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi' + - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi' + - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi' +sudo: false +env: + - TEST=true +matrix: + fast_finish: true + include: + - node_js: "lts/*" + env: PRETEST=true + - node_js: "lts/*" + env: POSTTEST=true + - node_js: "4" + env: COVERAGE=true + - node_js: "10.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "10.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "9.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "8.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "7.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.13" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.12" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.11" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "6.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.11" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.10" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "5.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.8" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "4.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v3.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v3.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v3.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v2.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.7" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.5" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.4" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.3" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.2" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.1" + env: TEST=true ALLOW_FAILURE=true + - node_js: "iojs-v1.0" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.11" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.9" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.6" + env: TEST=true ALLOW_FAILURE=true + - node_js: "0.4" + env: TEST=true ALLOW_FAILURE=true + allow_failures: + - os: osx + - env: TEST=true ALLOW_FAILURE=true diff --git a/node_modules/extend/CHANGELOG.md b/node_modules/extend/CHANGELOG.md new file mode 100644 index 0000000..2cf7de6 --- /dev/null +++ b/node_modules/extend/CHANGELOG.md @@ -0,0 +1,83 @@ +3.0.2 / 2018-07-19 +================== + * [Fix] Prevent merging `__proto__` property (#48) + * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` + * [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm` + +3.0.1 / 2017-04-27 +================== + * [Fix] deep extending should work with a non-object (#46) + * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config` + * [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix + * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG. + * [Docs] Add example to readme (#34) + +3.0.0 / 2015-07-01 +================== + * [Possible breaking change] Use global "strict" directive (#32) + * [Tests] `int` is an ES3 reserved word + * [Tests] Test up to `io.js` `v2.3` + * [Tests] Add `npm run eslint` + * [Dev Deps] Update `covert`, `jscs` + +2.0.1 / 2015-04-25 +================== + * Use an inline `isArray` check, for ES3 browsers. (#27) + * Some old browsers fail when an identifier is `toString` + * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds + * Add license info to package.json (#25) + * Update `tape`, `jscs` + * Adding a CHANGELOG + +2.0.0 / 2014-10-01 +================== + * Increase code coverage to 100%; run code coverage as part of tests + * Add `npm run lint`; Run linter as part of tests + * Remove nodeType and setInterval checks in isPlainObject + * Updating `tape`, `jscs`, `covert` + * General style and README cleanup + +1.3.0 / 2014-06-20 +================== + * Add component.json for browser support (#18) + * Use SVG for badges in README (#16) + * Updating `tape`, `covert` + * Updating travis-ci to work with multiple node versions + * Fix `deep === false` bug (returning target as {}) (#14) + * Fixing constructor checks in isPlainObject + * Adding additional test coverage + * Adding `npm run coverage` + * Add LICENSE (#13) + * Adding a warning about `false`, per #11 + * General style and whitespace cleanup + +1.2.1 / 2013-09-14 +================== + * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8 + * Updating `tape` + +1.2.0 / 2013-09-02 +================== + * Updating the README: add badges + * Adding a missing variable reference. + * Using `tape` instead of `buster` for tests; add more tests (#7) + * Adding node 0.10 to Travis CI (#6) + * Enabling "npm test" and cleaning up package.json (#5) + * Add Travis CI. + +1.1.3 / 2012-12-06 +================== + * Added unit tests. + * Ensure extend function is named. (Looks nicer in a stack trace.) + * README cleanup. + +1.1.1 / 2012-11-07 +================== + * README cleanup. + * Added installation instructions. + * Added a missing semicolon + +1.0.0 / 2012-04-08 +================== + * Initial commit + diff --git a/node_modules/extend/LICENSE b/node_modules/extend/LICENSE new file mode 100644 index 0000000..e16d6a5 --- /dev/null +++ b/node_modules/extend/LICENSE @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) 2014 Stefan Thomas + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/extend/README.md b/node_modules/extend/README.md new file mode 100644 index 0000000..5b8249a --- /dev/null +++ b/node_modules/extend/README.md @@ -0,0 +1,81 @@ +[![Build Status][travis-svg]][travis-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] + +# extend() for Node.js [![Version Badge][npm-version-png]][npm-url] + +`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true. + +Notes: + +* Since Node.js >= 4, + [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + now offers the same functionality natively (but without the "deep copy" option). + See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6). +* Some native implementations of `Object.assign` in both Node.js and many + browsers (since NPM modules are for the browser too) may not be fully + spec-compliant. + Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for + a compliant candidate. + +## Installation + +This package is available on [npm][npm-url] as: `extend` + +``` sh +npm install extend +``` + +## Usage + +**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)** + +*Extend one object with one or more others, returning the modified object.* + +**Example:** + +``` js +var extend = require('extend'); +extend(targetObject, object1, object2); +``` + +Keep in mind that the target object will be modified, and will be returned from extend(). + +If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s). +Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. +Warning: passing `false` as the first argument is not supported. + +### Arguments + +* `deep` *Boolean* (optional) +If set, the merge becomes recursive (i.e. deep copy). +* `target` *Object* +The object to extend. +* `object1` *Object* +The object that will be merged into the first. +* `objectN` *Object* (Optional) +More objects to merge into the first. + +## License + +`node-extend` is licensed under the [MIT License][mit-license-url]. + +## Acknowledgements + +All credit to the jQuery authors for perfecting this amazing utility. + +Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb]. + +[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg +[travis-url]: https://travis-ci.org/justmoon/node-extend +[npm-url]: https://npmjs.org/package/extend +[mit-license-url]: http://opensource.org/licenses/MIT +[github-justmoon]: https://github.com/justmoon +[github-insin]: https://github.com/insin +[github-ljharb]: https://github.com/ljharb +[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg +[deps-svg]: https://david-dm.org/justmoon/node-extend.svg +[deps-url]: https://david-dm.org/justmoon/node-extend +[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg +[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies + diff --git a/node_modules/extend/component.json b/node_modules/extend/component.json new file mode 100644 index 0000000..1500a2f --- /dev/null +++ b/node_modules/extend/component.json @@ -0,0 +1,32 @@ +{ + "name": "extend", + "author": "Stefan Thomas (http://www.justmoon.net)", + "version": "3.0.0", + "description": "Port of jQuery.extend for node.js and the browser.", + "scripts": [ + "index.js" + ], + "contributors": [ + { + "name": "Jordan Harband", + "url": "https://github.com/ljharb" + } + ], + "keywords": [ + "extend", + "clone", + "merge" + ], + "repository" : { + "type": "git", + "url": "https://github.com/justmoon/node-extend.git" + }, + "dependencies": { + }, + "devDependencies": { + "tape" : "~3.0.0", + "covert": "~0.4.0", + "jscs": "~1.6.2" + } +} + diff --git a/node_modules/extend/index.js b/node_modules/extend/index.js new file mode 100644 index 0000000..2aa3faa --- /dev/null +++ b/node_modules/extend/index.js @@ -0,0 +1,117 @@ +'use strict'; + +var hasOwn = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var defineProperty = Object.defineProperty; +var gOPD = Object.getOwnPropertyDescriptor; + +var isArray = function isArray(arr) { + if (typeof Array.isArray === 'function') { + return Array.isArray(arr); + } + + return toStr.call(arr) === '[object Array]'; +}; + +var isPlainObject = function isPlainObject(obj) { + if (!obj || toStr.call(obj) !== '[object Object]') { + return false; + } + + var hasOwnConstructor = hasOwn.call(obj, 'constructor'); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); + // Not own constructor property must be Object + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + var key; + for (key in obj) { /**/ } + + return typeof key === 'undefined' || hasOwn.call(obj, key); +}; + +// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target +var setProperty = function setProperty(target, options) { + if (defineProperty && options.name === '__proto__') { + defineProperty(target, options.name, { + enumerable: true, + configurable: true, + value: options.newValue, + writable: true + }); + } else { + target[options.name] = options.newValue; + } +}; + +// Return undefined instead of __proto__ if '__proto__' is not an own property +var getProperty = function getProperty(obj, name) { + if (name === '__proto__') { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + // In early versions of node, obj['__proto__'] is buggy when obj has + // __proto__ as an own property. Object.getOwnPropertyDescriptor() works. + return gOPD(obj, name).value; + } + } + + return obj[name]; +}; + +module.exports = function extend() { + var options, name, src, copy, copyIsArray, clone; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; + + // Handle a deep copy situation + if (typeof target === 'boolean') { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + if (target == null || (typeof target !== 'object' && typeof target !== 'function')) { + target = {}; + } + + for (; i < length; ++i) { + options = arguments[i]; + // Only deal with non-null/undefined values + if (options != null) { + // Extend the base object + for (name in options) { + src = getProperty(target, name); + copy = getProperty(options, name); + + // Prevent never-ending loop + if (target !== copy) { + // Recurse if we're merging plain objects or arrays + if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + } else { + clone = src && isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + setProperty(target, { name: name, newValue: extend(deep, clone, copy) }); + + // Don't bring in undefined values + } else if (typeof copy !== 'undefined') { + setProperty(target, { name: name, newValue: copy }); + } + } + } + } + } + + // Return the modified object + return target; +}; diff --git a/node_modules/extend/package.json b/node_modules/extend/package.json new file mode 100644 index 0000000..85279f7 --- /dev/null +++ b/node_modules/extend/package.json @@ -0,0 +1,42 @@ +{ + "name": "extend", + "author": "Stefan Thomas (http://www.justmoon.net)", + "version": "3.0.2", + "description": "Port of jQuery.extend for node.js and the browser", + "main": "index", + "scripts": { + "pretest": "npm run lint", + "test": "npm run tests-only", + "posttest": "npm run coverage-quiet", + "tests-only": "node test", + "coverage": "covert test/index.js", + "coverage-quiet": "covert test/index.js --quiet", + "lint": "npm run jscs && npm run eslint", + "jscs": "jscs *.js */*.js", + "eslint": "eslint *.js */*.js" + }, + "contributors": [ + { + "name": "Jordan Harband", + "url": "https://github.com/ljharb" + } + ], + "keywords": [ + "extend", + "clone", + "merge" + ], + "repository": { + "type": "git", + "url": "https://github.com/justmoon/node-extend.git" + }, + "dependencies": {}, + "devDependencies": { + "@ljharb/eslint-config": "^12.2.1", + "covert": "^1.1.0", + "eslint": "^4.19.1", + "jscs": "^3.0.7", + "tape": "^4.9.1" + }, + "license": "MIT" +} diff --git a/node_modules/is-arrayish/LICENSE b/node_modules/is-arrayish/LICENSE new file mode 100644 index 0000000..0a5f461 --- /dev/null +++ b/node_modules/is-arrayish/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 JD Ballard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-arrayish/README.md b/node_modules/is-arrayish/README.md new file mode 100644 index 0000000..7d36072 --- /dev/null +++ b/node_modules/is-arrayish/README.md @@ -0,0 +1,16 @@ +# node-is-arrayish [![Travis-CI.org Build Status](https://img.shields.io/travis/Qix-/node-is-arrayish.svg?style=flat-square)](https://travis-ci.org/Qix-/node-is-arrayish) [![Coveralls.io Coverage Rating](https://img.shields.io/coveralls/Qix-/node-is-arrayish.svg?style=flat-square)](https://coveralls.io/r/Qix-/node-is-arrayish) +> Determines if an object can be used like an Array + +## Example +```javascript +var isArrayish = require('is-arrayish'); + +isArrayish([]); // true +isArrayish({__proto__: []}); // true +isArrayish({}); // false +isArrayish({length:10}); // false +``` + +## License +Licensed under the [MIT License](http://opensource.org/licenses/MIT). +You can find a copy of it in [LICENSE](LICENSE). diff --git a/node_modules/is-arrayish/index.js b/node_modules/is-arrayish/index.js new file mode 100644 index 0000000..729ca40 --- /dev/null +++ b/node_modules/is-arrayish/index.js @@ -0,0 +1,9 @@ +module.exports = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); +}; diff --git a/node_modules/is-arrayish/package.json b/node_modules/is-arrayish/package.json new file mode 100644 index 0000000..8a54e33 --- /dev/null +++ b/node_modules/is-arrayish/package.json @@ -0,0 +1,45 @@ +{ + "name": "is-arrayish", + "description": "Determines if an object can be used as an array", + "version": "0.3.2", + "author": "Qix (http://github.com/qix-)", + "keywords": [ + "is", + "array", + "duck", + "type", + "arrayish", + "similar", + "proto", + "prototype", + "type" + ], + "license": "MIT", + "scripts": { + "test": "mocha --require coffeescript/register ./test/**/*.coffee", + "lint": "zeit-eslint --ext .jsx,.js .", + "lint-staged": "git diff --diff-filter=ACMRT --cached --name-only '*.js' '*.jsx' | xargs zeit-eslint" + }, + "repository": { + "type": "git", + "url": "https://github.com/qix-/node-is-arrayish.git" + }, + "devDependencies": { + "@zeit/eslint-config-node": "^0.3.0", + "@zeit/git-hooks": "^0.1.4", + "coffeescript": "^2.3.1", + "coveralls": "^3.0.1", + "eslint": "^4.19.1", + "istanbul": "^0.4.5", + "mocha": "^5.2.0", + "should": "^13.2.1" + }, + "eslintConfig": { + "extends": [ + "@zeit/eslint-config-node" + ] + }, + "git": { + "pre-commit": "lint-staged" + } +} diff --git a/node_modules/is-buffer/LICENSE b/node_modules/is-buffer/LICENSE new file mode 100644 index 0000000..0c068ce --- /dev/null +++ b/node_modules/is-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-buffer/README.md b/node_modules/is-buffer/README.md new file mode 100644 index 0000000..8c9785f --- /dev/null +++ b/node_modules/is-buffer/README.md @@ -0,0 +1,54 @@ +# is-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/is-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/is-buffer +[npm-image]: https://img.shields.io/npm/v/is-buffer.svg +[npm-url]: https://npmjs.org/package/is-buffer +[downloads-image]: https://img.shields.io/npm/dm/is-buffer.svg +[downloads-url]: https://npmjs.org/package/is-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Determine if an object is a [`Buffer`](http://nodejs.org/api/buffer.html) (including the [browserify Buffer](https://github.com/feross/buffer)) + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/is-buffer.svg +[saucelabs-url]: https://saucelabs.com/u/is-buffer + +## Why not use `Buffer.isBuffer`? + +This module lets you check if an object is a `Buffer` without using `Buffer.isBuffer` (which includes the whole [buffer](https://github.com/feross/buffer) module in [browserify](http://browserify.org/)). + +It's future-proof and works in node too! + +## install + +```bash +npm install is-buffer +``` + +## usage + +```js +var isBuffer = require('is-buffer') + +isBuffer(new Buffer(4)) // true +isBuffer(Buffer.alloc(4)) //true + +isBuffer(undefined) // false +isBuffer(null) // false +isBuffer('') // false +isBuffer(true) // false +isBuffer(false) // false +isBuffer(0) // false +isBuffer(1) // false +isBuffer(1.0) // false +isBuffer('string') // false +isBuffer({}) // false +isBuffer(function foo () {}) // false +``` + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org). diff --git a/node_modules/is-buffer/index.d.ts b/node_modules/is-buffer/index.d.ts new file mode 100644 index 0000000..7065c69 --- /dev/null +++ b/node_modules/is-buffer/index.d.ts @@ -0,0 +1,2 @@ +declare function isBuffer(obj: any): boolean +export = isBuffer diff --git a/node_modules/is-buffer/index.js b/node_modules/is-buffer/index.js new file mode 100644 index 0000000..da9bfdd --- /dev/null +++ b/node_modules/is-buffer/index.js @@ -0,0 +1,11 @@ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +module.exports = function isBuffer (obj) { + return obj != null && obj.constructor != null && + typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} diff --git a/node_modules/is-buffer/package.json b/node_modules/is-buffer/package.json new file mode 100644 index 0000000..7cd70d4 --- /dev/null +++ b/node_modules/is-buffer/package.json @@ -0,0 +1,65 @@ +{ + "name": "is-buffer", + "description": "Determine if an object is a Buffer", + "version": "2.0.5", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/is-buffer/issues" + }, + "dependencies": {}, + "devDependencies": { + "airtap": "^3.0.0", + "standard": "*", + "tape": "^5.0.1" + }, + "engines": { + "node": ">=4" + }, + "keywords": [ + "arraybuffer", + "browser", + "browser buffer", + "browserify", + "buffer", + "buffers", + "core buffer", + "dataview", + "float32array", + "float64array", + "int16array", + "int32array", + "type", + "typed array", + "uint32array" + ], + "license": "MIT", + "main": "index.js", + "repository": { + "type": "git", + "url": "git://github.com/feross/is-buffer.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "airtap -- test/*.js", + "test-browser-local": "airtap --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] +} diff --git a/node_modules/is-plain-obj/index.d.ts b/node_modules/is-plain-obj/index.d.ts new file mode 100644 index 0000000..3794c42 --- /dev/null +++ b/node_modules/is-plain-obj/index.d.ts @@ -0,0 +1,35 @@ +/** +Check if a value is a plain object. + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + +@example +``` +import isPlainObject from 'is-plain-obj'; +import {runInNewContext} from 'node:vm'; + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +// This works across realms +isPlainObject(runInNewContext('({})')); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false + +isPlainObject(Math); +//=> false +``` +*/ +export default function isPlainObject(value: unknown): value is Record; diff --git a/node_modules/is-plain-obj/index.js b/node_modules/is-plain-obj/index.js new file mode 100644 index 0000000..92555c3 --- /dev/null +++ b/node_modules/is-plain-obj/index.js @@ -0,0 +1,8 @@ +export default function isPlainObject(value) { + if (typeof value !== 'object' || value === null) { + return false; + } + + const prototype = Object.getPrototypeOf(value); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); +} diff --git a/node_modules/is-plain-obj/license b/node_modules/is-plain-obj/license new file mode 100644 index 0000000..fa7ceba --- /dev/null +++ b/node_modules/is-plain-obj/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/is-plain-obj/package.json b/node_modules/is-plain-obj/package.json new file mode 100644 index 0000000..2ee5a14 --- /dev/null +++ b/node_modules/is-plain-obj/package.json @@ -0,0 +1,41 @@ +{ + "name": "is-plain-obj", + "version": "4.1.0", + "description": "Check if a value is a plain object", + "license": "MIT", + "repository": "sindresorhus/is-plain-obj", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "type": "module", + "exports": "./index.js", + "engines": { + "node": ">=12" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "object", + "is", + "check", + "test", + "type", + "plain", + "vanilla", + "pure", + "simple" + ], + "devDependencies": { + "ava": "^3.15.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + } +} diff --git a/node_modules/is-plain-obj/readme.md b/node_modules/is-plain-obj/readme.md new file mode 100644 index 0000000..28de6fb --- /dev/null +++ b/node_modules/is-plain-obj/readme.md @@ -0,0 +1,58 @@ +# is-plain-obj + +> Check if a value is a plain object + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + +## Install + +``` +$ npm install is-plain-obj +``` + +## Usage + +```js +import isPlainObject from 'is-plain-obj'; +import {runInNewContext} from 'node:vm'; + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +// This works across realms +isPlainObject(runInNewContext('({})')); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false + +isPlainObject(Math); +//=> false +``` + +## Related + +- [is-obj](https://github.com/sindresorhus/is-obj) - Check if a value is an object +- [is](https://github.com/sindresorhus/is) - Type check values + +--- + +
    + + Get professional support for this package with a Tidelift subscription + +
    + + Tidelift helps make open source sustainable for maintainers while giving companies
    assurances about security, maintenance, and licensing for their dependencies. +
    +
    diff --git a/node_modules/prettier-plugin-latex/LICENSE b/node_modules/prettier-plugin-latex/LICENSE new file mode 100644 index 0000000..07d89d5 --- /dev/null +++ b/node_modules/prettier-plugin-latex/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2021 Jason Siefken + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/prettier-plugin-latex/README.md b/node_modules/prettier-plugin-latex/README.md new file mode 100644 index 0000000..8a4ef7f --- /dev/null +++ b/node_modules/prettier-plugin-latex/README.md @@ -0,0 +1,126 @@ +# prettier-plugin-latex + +A prettier plugin for formatting LaTeX documents. You can try it out online in the [playground](https://siefkenj.github.io/latex-parser-playground/) + +## Intro + +Prettier is an opinionated code formatter. It enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary. + +This plugin adds support for the LaTex to Prettier. While TeX itself cannot be parsed without being executed, `prettier-plugin-latex` makes the assumption that your document uses "standard" LaTeX, and parses it to the best of its ability. + +### Input + +```latex +\begin{enumerate} + \item[55,4] Hi there +\item$e^2$ is math mode! \[\begin{matrix}12&3^e\\pi&0\end{matrix}\] +\end{enumerate} +``` + +### Output + +```latex +\begin{enumerate} + \item[55,4] Hi there + + \item $e^{2}$ is math mode! + \[ + \begin{matrix} + 12 & 3^e \\ + pi & 0 + \end{matrix} + \] +\end{enumerate} +``` + +## Install + +yarn: + +```bash +yarn add --dev prettier prettier-plugin-latex +# or globally +yarn global add prettier prettier-plugin-latex +``` + +npm: + +```bash +npm install --save-dev prettier prettier-plugin-latex +# or globally +npm install --global prettier prettier-plugin-latex +``` + +## Use + +### With Node.js + +If you installed prettier as a local dependency, you can add prettier as a +script in your `package.json`, + +```json +{ + "scripts": { + "prettier": "prettier" + } +} +``` + +and then run it via + +```bash +yarn run prettier path/to/file.tex --write +# or +npm run prettier path/to/file.tex --write +``` + +If you installed globally, run + +```bash +prettier path/to/file.tex --write +``` + +**Node:** For Prettier v3, automatic plugin resolution was removed, so you must specify the directory of `prettier-plugin-latex` +manually with the `--plugin=...` command line argument. + +### In the Browser + +This package exposes a `standalone.js` that wraps prettier and exports a +`printPrettier` function that can be called as + +```js +printPrettier(YOUR_CODE, { + // example option + tabWidth: 2, +}); +``` + +## Options + +The standard Prettier options (such as `tabWidth`) can be used. + +## Development + +To make a production build, run + +``` +npm run build +``` + +To develop, run + +``` +npm run watch +``` + +You can then execute Prettier with + +``` +prettier --plugin=./dist/prettier-plugin-latex.js ... +``` + +and the LaTeX plugin will load from the current directory. + +### Code structure + +`prettier-plugin-latex` uses the [@unified-latex/unified-latex-prettier](https://github.com/siefkenj/unified-latex) library to parse the latex file and convert it to a prettier AST. This library is just a thin layer over `latex-ast-parser` diff --git a/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-9db821d0.mjs b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-9db821d0.mjs new file mode 100644 index 0000000..ffbd194 --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-9db821d0.mjs @@ -0,0 +1,24909 @@ +var __defProp = Object.defineProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var linebreak = Symbol("linebreak"); +var ESCAPE$1 = "\\"; +function _printRaw(node) { + if (typeof node === "string") { + return [node]; + } + if (Array.isArray(node)) { + return [].concat( + ...node.map((n) => _printRaw(n)) + ); + } + let argsString, escape; + switch (node.type) { + case "root": + return _printRaw(node.content); + case "argument": + return [node.openMark, ..._printRaw(node.content), node.closeMark]; + case "comment": + var suffix = node.suffixParbreak ? "" : linebreak; + var leadingWhitespace = ""; + if (node.sameline && node.leadingWhitespace) { + leadingWhitespace = " "; + } + if (node.sameline) { + return [ + leadingWhitespace, + "%", + ..._printRaw(node.content), + suffix + ]; + } + return [linebreak, "%", ..._printRaw(node.content), suffix]; + case "environment": + case "mathenv": + case "verbatim": + var env = _printRaw(node.env); + var envStart = [ESCAPE$1 + "begin{", ...env, "}"]; + var envEnd = [ESCAPE$1 + "end{", ...env, "}"]; + argsString = node.args == null ? [] : _printRaw(node.args); + return [ + ...envStart, + ...argsString, + ..._printRaw(node.content), + ...envEnd + ]; + case "displaymath": + return [ESCAPE$1 + "[", ..._printRaw(node.content), ESCAPE$1 + "]"]; + case "group": + return ["{", ..._printRaw(node.content), "}"]; + case "inlinemath": + return ["$", ..._printRaw(node.content), "$"]; + case "macro": + argsString = node.args == null ? [] : _printRaw(node.args); + escape = node.escapeToken == null ? ESCAPE$1 : node.escapeToken; + return [escape, ..._printRaw(node.content), ...argsString]; + case "parbreak": + return [linebreak, linebreak]; + case "string": + return [node.content]; + case "verb": + return [ + ESCAPE$1, + node.env, + node.escape, + ..._printRaw(node.content), + node.escape + ]; + case "whitespace": + return [" "]; + default: + console.warn( + "Cannot find render for node ", + node, + `(of type ${typeof node})` + ); + return ["" + node]; + } +} +function printRaw(node, options2) { + const asArray = options2 != null ? options2.asArray : false; + const printedTokens = _printRaw(node); + if (asArray) { + return printedTokens; + } + return printedTokens.map((x) => x === linebreak ? "\n" : x).join(""); +} +function createMacroMatcher(macros17) { + const macrosHash = Array.isArray(macros17) ? macros17.length > 0 ? typeof macros17[0] === "string" ? Object.fromEntries( + macros17.map((macro2) => { + if (typeof macro2 !== "string") { + throw new Error("Wrong branch of map function"); + } + return [macro2, {}]; + }) + ) : Object.fromEntries( + macros17.map((macro2) => { + if (typeof macro2 === "string") { + throw new Error("Wrong branch of map function"); + } + if (macro2.escapeToken != null) { + return [ + macro2.content, + { escapeToken: macro2.escapeToken } + ]; + } + return [macro2.content, {}]; + }) + ) : {} : macros17; + return function matchAgainstMacros(node) { + if (node == null || node.type !== "macro") { + return false; + } + const spec = macrosHash[node.content]; + if (!spec) { + return false; + } + if (typeof spec === "object" && "escapeToken" in spec) { + return spec.escapeToken == null || spec.escapeToken === node.escapeToken; + } + return true; + }; +} +function createEnvironmentMatcher(macros17) { + const environmentsHash = Array.isArray(macros17) ? Object.fromEntries( + macros17.map((str) => { + return [str, {}]; + }) + ) : macros17; + return function matchAgainstEnvironments(node) { + if (!match.anyEnvironment(node)) { + return false; + } + const envName = printRaw(node.env); + const spec = environmentsHash[envName]; + if (!spec) { + return false; + } + return true; + }; +} +var match = { + macro(node, macroName) { + if (node == null) { + return false; + } + return node.type === "macro" && (macroName == null || node.content === macroName); + }, + anyMacro(node) { + return match.macro(node); + }, + environment(node, envName) { + if (node == null) { + return false; + } + return (node.type === "environment" || node.type === "mathenv") && (envName == null || printRaw(node.env) === envName); + }, + anyEnvironment(node) { + return match.environment(node); + }, + comment(node) { + if (node == null) { + return false; + } + return node.type === "comment"; + }, + parbreak(node) { + if (node == null) { + return false; + } + return node.type === "parbreak"; + }, + whitespace(node) { + if (node == null) { + return false; + } + return node.type === "whitespace"; + }, + /** + * Matches whitespace or a comment with leading whitespace. + */ + whitespaceLike(node) { + if (node == null) { + return false; + } + return node.type === "whitespace" || node.type === "whitespace" && node.leadingWhitespace === true; + }, + string(node, value) { + if (node == null) { + return false; + } + return node.type === "string" && (value == null || node.content === value); + }, + anyString(node) { + return match.string(node); + }, + group(node) { + if (node == null) { + return false; + } + return node.type === "group"; + }, + argument(node) { + if (node == null) { + return false; + } + return node.type === "argument"; + }, + blankArgument(node) { + if (!match.argument(node)) { + return false; + } + return node.openMark === "" && node.closeMark === "" && node.content.length === 0; + }, + math(node) { + if (node == null) { + return false; + } + return node.type === "displaymath" || node.type === "inlinemath"; + }, + createMacroMatcher, + createEnvironmentMatcher +}; +function listMathChildren(node) { + const NULL_RETURN = { enter: [], leave: [] }; + if (Array.isArray(node)) { + return NULL_RETURN; + } + if (match.math(node)) { + return { enter: ["content"], leave: [] }; + } + const renderInfo = node._renderInfo || {}; + if (renderInfo.inMathMode == null) { + return NULL_RETURN; + } + if (match.macro(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["args"], leave: [] }; + } else if (renderInfo.inMathMode === false) { + return { enter: [], leave: ["args"] }; + } + } + if (match.environment(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["content"], leave: [] }; + } else { + return { enter: [], leave: ["content"] }; + } + } + return NULL_RETURN; +} +var CONTINUE = Symbol("continue"); +var SKIP = Symbol("skip"); +var EXIT = Symbol("exit"); +var DEFAULT_CONTEXT = { + inMathMode: false, + hasMathModeAncestor: false +}; +function visit(tree, visitor, options2) { + const { + startingContext = DEFAULT_CONTEXT, + test = () => true, + includeArrays = false + } = options2 || {}; + let enter; + let leave; + if (typeof visitor === "function") { + enter = visitor; + } else if (visitor && typeof visitor === "object") { + enter = visitor.enter; + leave = visitor.leave; + } + walk(tree, { + key: void 0, + index: void 0, + parents: [], + containingArray: void 0, + context: { ...startingContext } + }); + function walk(node, { key, index: index2, parents, context, containingArray }) { + const nodePassesTest = includeArrays ? test(node, { key, index: index2, parents, context, containingArray }) : !Array.isArray(node) && test(node, { key, index: index2, parents, context, containingArray }); + const result = enter && nodePassesTest ? toResult( + enter(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : [CONTINUE]; + if (result[0] === EXIT) { + return result; + } + if (result[0] === SKIP) { + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : result; + } + if (Array.isArray(node)) { + for (let index22 = 0; index22 > -1 && index22 < node.length; index22++) { + const item = node[index22]; + const result2 = walk(item, { + key, + index: index22, + parents, + context, + containingArray: node + }); + if (result2[0] === EXIT) { + return result2; + } + if (typeof result2[1] === "number") { + index22 = result2[1] - 1; + } + } + } else { + let childProps = ["content", "args"]; + switch (node.type) { + case "macro": + childProps = ["args"]; + break; + case "comment": + case "string": + case "verb": + case "verbatim": + childProps = []; + break; + } + const mathModeProps = listMathChildren(node); + for (const key2 of childProps) { + const value = node[key2]; + const grandparents = [node].concat(parents); + if (value == null) { + continue; + } + const newContext = { ...context }; + if (mathModeProps.enter.includes(key2)) { + newContext.inMathMode = true; + newContext.hasMathModeAncestor = true; + } else if (mathModeProps.leave.includes(key2)) { + newContext.inMathMode = false; + } + const result2 = walk(value, { + key: key2, + index: void 0, + parents: grandparents, + context: newContext, + containingArray: void 0 + }); + if (result2[0] === EXIT) { + return result2; + } + } + } + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : result; + } +} +function toResult(value) { + if (value == null) { + return [CONTINUE]; + } + if (Array.isArray(value)) { + return value; + } + if (typeof value === "number") { + return [CONTINUE, value]; + } + return [value]; +} +function trim$1(nodes) { + if (!Array.isArray(nodes)) { + console.warn("Trying to trim a non-array ast", nodes); + return nodes; + } + const { trimmedStart } = trimStart(nodes); + const { trimmedEnd } = trimEnd(nodes); + return { trimmedStart, trimmedEnd }; +} +function trimStart(nodes) { + const { start } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(0, start); + for (const leadingToken of nodes) { + if (!match.comment(leadingToken)) { + break; + } + if (leadingToken.leadingWhitespace || leadingToken.sameline) { + leadingToken.leadingWhitespace = false; + delete leadingToken.position; + } + if (start > 0 && leadingToken.sameline) { + leadingToken.sameline = false; + delete leadingToken.position; + } + } + return { trimmedStart: start }; +} +function trimEnd(nodes) { + const { end } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(nodes.length - end, end); + for (let i = nodes.length - 1; i >= 0; i--) { + const trailingToken = nodes[i]; + if (!match.comment(trailingToken)) { + break; + } + delete trailingToken.suffixParbreak; + if (match.comment(trailingToken) && trailingToken.leadingWhitespace && !trailingToken.sameline) { + trailingToken.leadingWhitespace = false; + delete trailingToken.position; + } + } + return { trimmedEnd: end }; +} +function amountOfLeadingAndTrailingWhitespace(ast) { + let start = 0; + let end = 0; + for (const node of ast) { + if (match.whitespace(node) || match.parbreak(node)) { + start++; + } else { + break; + } + } + if (start === ast.length) { + return { start, end: 0 }; + } + for (let i = ast.length - 1; i >= 0; i--) { + const node = ast[i]; + if (match.whitespace(node) || match.parbreak(node)) { + end++; + } else { + break; + } + } + return { start, end }; +} +var unifiedLatexTrimEnvironmentContents = function unifiedLatexTrimEnvironmentContents2() { + return (tree) => { + visit(tree, (node) => { + if (!(match.math(node) || match.anyEnvironment(node))) { + return; + } + let firstNode = node.content[0]; + if (match.comment(firstNode) && firstNode.sameline) { + firstNode.suffixParbreak = false; + trimEnd(node.content); + const { trimmedStart } = trimStart(node.content.slice(1)); + node.content.splice(1, trimmedStart); + } else { + trim$1(node.content); + } + }); + }; +}; +var unifiedLatexTrimRoot = function unifiedLatexTrimRoot2() { + return (tree) => { + trim$1(tree.content); + }; +}; +function decorateArrayForPegjs(array) { + array.charAt = function(i) { + return this[i]; + }; + array.charCodeAt = () => 0; + array.substring = function(i, j) { + return this.slice(i, j); + }; + array.replace = function(a, b) { + const ret = JSON.stringify(this); + return ret.replace(a, b); + }; + return array; +} +var latex_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath }; + var peg$startRuleFunction = peg$parsedocument; + var peg$c0 = "%"; + var peg$c1 = "."; + var peg$c2 = "verb*"; + var peg$c3 = "verb"; + var peg$c4 = "["; + var peg$c5 = "]"; + var peg$c6 = "lstinline"; + var peg$c7 = "mintinline"; + var peg$c8 = "mint"; + var peg$c10 = "verbatim*"; + var peg$c11 = "verbatim"; + var peg$c12 = "filecontents*"; + var peg$c13 = "filecontents"; + var peg$c14 = "comment"; + var peg$c15 = "lstlisting"; + var peg$c16 = "("; + var peg$c17 = ")"; + var peg$c18 = "begin"; + var peg$c19 = "end"; + var peg$c20 = "equation*"; + var peg$c21 = "equation"; + var peg$c22 = "align*"; + var peg$c23 = "align"; + var peg$c24 = "alignat*"; + var peg$c25 = "alignat"; + var peg$c26 = "gather*"; + var peg$c27 = "gather"; + var peg$c28 = "multline*"; + var peg$c29 = "multline"; + var peg$c30 = "flalign*"; + var peg$c31 = "flalign"; + var peg$c32 = "split"; + var peg$c33 = "math"; + var peg$c34 = "displaymath"; + var peg$c35 = "\\"; + var peg$c36 = "{"; + var peg$c37 = "}"; + var peg$c38 = "$"; + var peg$c39 = "&"; + var peg$c40 = "\r"; + var peg$c41 = "\n"; + var peg$c42 = "\r\n"; + var peg$c43 = "#"; + var peg$c44 = "^"; + var peg$c45 = "_"; + var peg$c46 = "\0"; + var peg$r0 = /^[^ \t\n\r]/; + var peg$r1 = /^[ \t]/; + var peg$r2 = /^[a-zA-Z]/; + var peg$r3 = /^[0-9]/; + var peg$r4 = /^[.,;:\-*\/()!?=+<>[\]`'"~]/; + var peg$e0 = peg$otherExpectation("document"); + var peg$e1 = peg$otherExpectation("math"); + var peg$e2 = peg$otherExpectation("token"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("parbreak"); + var peg$e5 = peg$otherExpectation("math token"); + var peg$e6 = peg$otherExpectation("nonchar token"); + var peg$e7 = peg$literalExpectation("%", false); + var peg$e8 = peg$otherExpectation("whitespace"); + var peg$e9 = peg$otherExpectation("number"); + var peg$e10 = peg$literalExpectation(".", false); + var peg$e11 = peg$otherExpectation("special macro"); + var peg$e12 = peg$literalExpectation("verb*", false); + var peg$e13 = peg$literalExpectation("verb", false); + var peg$e14 = peg$literalExpectation("[", false); + var peg$e15 = peg$literalExpectation("]", false); + var peg$e16 = peg$classExpectation([" ", " ", "\n", "\r"], true, false); + var peg$e17 = peg$otherExpectation("verbatim listings"); + var peg$e18 = peg$literalExpectation("lstinline", false); + var peg$e19 = peg$otherExpectation("verbatim minted"); + var peg$e20 = peg$literalExpectation("mintinline", false); + var peg$e21 = peg$literalExpectation("mint", false); + var peg$e24 = peg$otherExpectation("verbatim environment"); + var peg$e25 = peg$literalExpectation("verbatim*", false); + var peg$e26 = peg$literalExpectation("verbatim", false); + var peg$e27 = peg$literalExpectation("filecontents*", false); + var peg$e28 = peg$literalExpectation("filecontents", false); + var peg$e29 = peg$literalExpectation("comment", false); + var peg$e30 = peg$literalExpectation("lstlisting", false); + var peg$e31 = peg$otherExpectation("macro"); + var peg$e32 = peg$otherExpectation("group"); + var peg$e33 = peg$otherExpectation("environment"); + var peg$e34 = peg$otherExpectation("math environment"); + var peg$e36 = peg$literalExpectation("(", false); + var peg$e37 = peg$literalExpectation(")", false); + var peg$e38 = peg$literalExpectation("begin", false); + var peg$e39 = peg$literalExpectation("end", false); + var peg$e40 = peg$literalExpectation("equation*", false); + var peg$e41 = peg$literalExpectation("equation", false); + var peg$e42 = peg$literalExpectation("align*", false); + var peg$e43 = peg$literalExpectation("align", false); + var peg$e44 = peg$literalExpectation("alignat*", false); + var peg$e45 = peg$literalExpectation("alignat", false); + var peg$e46 = peg$literalExpectation("gather*", false); + var peg$e47 = peg$literalExpectation("gather", false); + var peg$e48 = peg$literalExpectation("multline*", false); + var peg$e49 = peg$literalExpectation("multline", false); + var peg$e50 = peg$literalExpectation("flalign*", false); + var peg$e51 = peg$literalExpectation("flalign", false); + var peg$e52 = peg$literalExpectation("split", false); + var peg$e53 = peg$literalExpectation("math", false); + var peg$e54 = peg$literalExpectation("displaymath", false); + var peg$e55 = peg$otherExpectation("escape"); + var peg$e56 = peg$literalExpectation("\\", false); + var peg$e57 = peg$literalExpectation("{", false); + var peg$e58 = peg$literalExpectation("}", false); + var peg$e59 = peg$literalExpectation("$", false); + var peg$e60 = peg$literalExpectation("&", false); + var peg$e61 = peg$otherExpectation("newline"); + var peg$e62 = peg$literalExpectation("\r", false); + var peg$e63 = peg$literalExpectation("\n", false); + var peg$e64 = peg$literalExpectation("\r\n", false); + var peg$e65 = peg$literalExpectation("#", false); + var peg$e66 = peg$literalExpectation("^", false); + var peg$e67 = peg$literalExpectation("_", false); + var peg$e68 = peg$literalExpectation("\0", false); + var peg$e69 = peg$classExpectation([" ", " "], false, false); + var peg$e70 = peg$otherExpectation("letter"); + var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false); + var peg$e72 = peg$otherExpectation("digit"); + var peg$e73 = peg$classExpectation([["0", "9"]], false, false); + var peg$e74 = peg$otherExpectation("punctuation"); + var peg$e75 = peg$classExpectation([".", ",", ";", ":", "-", "*", "/", "(", ")", "!", "?", "=", "+", "<", ">", "[", "]", "`", "'", '"', "~"], false, false); + var peg$e76 = peg$otherExpectation("full comment"); + var peg$e77 = peg$otherExpectation("comment"); + var peg$f0 = function(content) { + return createNode("root", { content: content.flatMap((x) => x) }); + }; + var peg$f1 = function(t) { + return t; + }; + var peg$f2 = function(eq) { + return createNode("inlinemath", { content: eq.flatMap((x) => x) }); + }; + var peg$f3 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f4 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f5 = function() { + return createNode("parbreak"); + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(x) { + return x; + }; + var peg$f8 = function() { + return createNode("macro", { content: "^", escapeToken: "" }); + }; + var peg$f9 = function() { + return createNode("macro", { content: "_", escapeToken: "" }); + }; + var peg$f10 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f11 = function() { + return createNode("whitespace"); + }; + var peg$f12 = function(a, b) { + return a.join("") + "." + b.join(""); + }; + var peg$f13 = function(b) { + return "." + b.join(""); + }; + var peg$f14 = function(a) { + return a.join("") + "."; + }; + var peg$f15 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f16 = function(env, e, end) { + return end == e; + }; + var peg$f17 = function(env, e, x) { + return x; + }; + var peg$f18 = function(env, e, x, end) { + return end == e; + }; + var peg$f19 = function(env, e, x) { + return createNode("verb", { + env, + escape: e, + content: x.join("") + }); + }; + var peg$f20 = function(x) { + return x; + }; + var peg$f21 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f22 = function(x) { + return x; + }; + var peg$f23 = function(x) { + return createNode("inlinemath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f24 = function(x) { + return x; + }; + var peg$f25 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f26 = function(end) { + return end.type === "string" && end.content === "]"; + }; + var peg$f27 = function(x) { + return x; + }; + var peg$f28 = function(o) { + return [ + createNode("string", { content: "[" }), + ...o, + createNode("string", { content: "]" }) + ]; + }; + var peg$f29 = function(x) { + return x; + }; + var peg$f30 = function(v) { + return createNode("group", { + content: createNode("string", { content: v.join("") }) + }); + }; + var peg$f31 = function(d, end) { + return end == d; + }; + var peg$f32 = function(d, x) { + return x; + }; + var peg$f33 = function(d, v, end) { + return end == d; + }; + var peg$f34 = function(d, v) { + return [ + createNode("string", { content: d }), + createNode("string", { content: v.join("") }), + createNode("string", { content: d }) + ]; + }; + var peg$f35 = function(macro, option, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + ...[].concat(verbatim) + ]; + }; + var peg$f36 = function(macro, option, language, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + language, + ...[].concat(verbatim) + ]; + }; + var peg$f40 = function(env, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f41 = function(env, x) { + return x; + }; + var peg$f42 = function(env, body) { + return createNode("verbatim", { + env, + content: body.join("") + }); + }; + var peg$f43 = function(n) { + return n.join(""); + }; + var peg$f44 = function(n) { + return n; + }; + var peg$f45 = function(m) { + return createNode("macro", { content: m }); + }; + var peg$f46 = function(c) { + return c; + }; + var peg$f47 = function(x) { + return createNode("group", { content: x.flatMap((x2) => x2) }); + }; + var peg$f48 = function(g) { + return text().slice(1, -1); + }; + var peg$f49 = function(env, env_comment, end_env) { + return compare_env(env, end_env); + }; + var peg$f50 = function(env, env_comment, x) { + return x; + }; + var peg$f51 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("environment", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f52 = function(env, env_comment, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f53 = function(env, env_comment, x) { + return x; + }; + var peg$f54 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("mathenv", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f57 = function(e) { + return createNode("string", { content: e }); + }; + var peg$f58 = function() { + return createNode("string", { content: "\\" }); + }; + var peg$f59 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f60 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f61 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f62 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f63 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f64 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f65 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f66 = function() { + return " "; + }; + var peg$f67 = function(p) { + return createNode("string", { content: p }); + }; + var peg$f68 = function(leading_sp, comment) { + return createNode("comment", { + ...comment, + sameline: false, + leadingWhitespace: leading_sp.length > 0 + }); + }; + var peg$f69 = function(spaces, x) { + return createNode("comment", { + ...x, + sameline: true, + leadingWhitespace: spaces.length > 0 + }); + }; + var peg$f70 = function(c) { + return c; + }; + var peg$f71 = function(c) { + return { content: c.join(""), suffixParbreak: true }; + }; + var peg$f72 = function(c) { + return c; + }; + var peg$f73 = function(c) { + return { content: c.join("") }; + }; + var peg$f74 = function() { + var loc = location(); + return loc.start.column === 1; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsedocument() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + peg$savedPos = s0; + s1 = peg$f0(s1); + s0 = s1; + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + return s0; + } + function peg$parsemath() { + var s0, s1; + peg$silentFails++; + s0 = []; + s1 = peg$parsemath_token(); + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsemath_token(); + } + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsegroup(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_shift(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parseparbreak(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsenumber(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f3(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f4(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsemath_token() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsealignment_tab(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesuperscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f8(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesubscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsenonchar_token() { + var s0; + peg$silentFails++; + s0 = peg$parseescape(); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parsenl(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsesp(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$parseEOF(); + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsenl(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsecomment_start(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsenl(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = []; + s2 = peg$parsesp(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + } else { + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f11(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parsenum(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parsenum(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f12(s2, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsenum(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenum(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f13(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f14(s2); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f15(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsespecial_macro() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c2) { + s2 = peg$c2; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c3) { + s2 = peg$c3; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f18(s2, s3, s4, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f19(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_listings(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_minted(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_environment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_display_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_display_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_inline_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_inline_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = peg$parsemath_shift(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s4 = peg$parsemath_shift(); + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_shift(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemath_environment(); + if (s0 === peg$FAILED) { + s0 = peg$parseenvironment(); + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsesquare_bracket_argument() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_group() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_delimited_by_char() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (peg$r0.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$f33(s1, s2, s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f34(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_listings() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c6) { + s2 = peg$c6; + peg$currPos += 9; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseverbatim_group(); + if (s4 === peg$FAILED) { + s4 = peg$parseverbatim_delimited_by_char(); + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f35(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parseverbatim_minted() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c7) { + s2 = peg$c7; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c8) { + s2 = peg$c8; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s5 = peg$parseverbatim_group(); + if (s5 === peg$FAILED) { + s5 = peg$parseverbatim_delimited_by_char(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f36(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parseverbatim_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parseverbatim_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$currPos; + s9 = peg$parseend_env(); + if (s9 !== peg$FAILED) { + s10 = peg$parsegroup(); + if (s10 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s11 = peg$f40(s3, s10); + if (s11) { + s11 = void 0; + } else { + s11 = peg$FAILED; + } + if (s11 !== peg$FAILED) { + s9 = [s9, s10, s11]; + s8 = s9; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = s6; + s6 = peg$f41(s3, s8); + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$currPos; + s9 = peg$parseend_env(); + if (s9 !== peg$FAILED) { + s10 = peg$parsegroup(); + if (s10 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s11 = peg$f40(s3, s10); + if (s11) { + s11 = void 0; + } else { + s11 = peg$FAILED; + } + if (s11 !== peg$FAILED) { + s9 = [s9, s10, s11]; + s8 = s9; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = s6; + s6 = peg$f41(s3, s8); + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseend_env(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebegin_group(); + if (s7 !== peg$FAILED) { + s8 = peg$parseverbatim_env_name(); + if (s8 !== peg$FAILED) { + s9 = peg$parseend_group(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f42(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + return s0; + } + function peg$parseverbatim_env_name() { + var s0; + if (input.substr(peg$currPos, 9) === peg$c10) { + s0 = peg$c10; + peg$currPos += 9; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c11) { + s0 = peg$c11; + peg$currPos += 8; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 13) === peg$c12) { + s0 = peg$c12; + peg$currPos += 13; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 12) === peg$c13) { + s0 = peg$c13; + peg$currPos += 12; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c14) { + s0 = peg$c14; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c15) { + s0 = peg$c15; + peg$currPos += 10; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + } + } + } + } + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsechar(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsechar(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f43(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f44(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f45(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f46(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f46(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f47(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsegroup_contents_as_string() { + var s0, s1; + s0 = peg$currPos; + s1 = peg$parsegroup(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f48(); + } + s0 = s1; + return s0; + } + function peg$parseenvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup_contents_as_string(); + if (s2 !== peg$FAILED) { + s3 = peg$parsesameline_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f49(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f50(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f49(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f50(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$parseend_env(); + if (s5 !== peg$FAILED) { + s6 = peg$parsegroup_contents_as_string(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f51(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsemath_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsesameline_comment(); + if (s5 === peg$FAILED) { + s5 = null; + } + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f52(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f53(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f52(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f53(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s7 = peg$parseend_env(); + if (s7 !== peg$FAILED) { + s8 = peg$parsebegin_group(); + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_env_name(); + if (s9 !== peg$FAILED) { + s10 = peg$parseend_group(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f54(s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parsebegin_display_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 91) { + s2 = peg$c4; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_display_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s2 = peg$c5; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebegin_inline_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_inline_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s2 = peg$c17; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebegin_env() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c18) { + s2 = peg$c18; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e38); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_env() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c19) { + s2 = peg$c19; + peg$currPos += 3; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e39); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemath_env_name() { + var s0, s1; + s0 = peg$currPos; + if (input.substr(peg$currPos, 9) === peg$c20) { + s1 = peg$c20; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e40); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c21) { + s1 = peg$c21; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e41); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c22) { + s1 = peg$c22; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e42); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c23) { + s1 = peg$c23; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e43); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c24) { + s1 = peg$c24; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e44); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c25) { + s1 = peg$c25; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e45); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c26) { + s1 = peg$c26; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e46); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c27) { + s1 = peg$c27; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e47); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c28) { + s1 = peg$c28; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e48); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c29) { + s1 = peg$c29; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e49); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c30) { + s1 = peg$c30; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e50); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c31) { + s1 = peg$c31; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e51); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c32) { + s1 = peg$c32; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e52); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c33) { + s1 = peg$c33; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e53); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 11) === peg$c34) { + s1 = peg$c34; + peg$currPos += 11; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e54); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f57(s1); + } + s0 = s1; + return s0; + } + function peg$parseescape() { + var s0, s1; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e56); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f58(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e55); + } + } + return s0; + } + function peg$parsebegin_group() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c36; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e57); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f59(s1); + } + s0 = s1; + return s0; + } + function peg$parseend_group() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 125) { + s1 = peg$c37; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e58); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f60(s1); + } + s0 = s1; + return s0; + } + function peg$parsemath_shift() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 36) { + s1 = peg$c38; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e59); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f61(s1); + } + s0 = s1; + return s0; + } + function peg$parsealignment_tab() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 38) { + s1 = peg$c39; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e60); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f62(s1); + } + s0 = s1; + return s0; + } + function peg$parsenl() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 13) { + s2 = peg$c40; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c41; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e63); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c40; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c42) { + s0 = peg$c42; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e64); + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e61); + } + } + return s0; + } + function peg$parsemacro_parameter() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 35) { + s1 = peg$c43; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e65); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f63(s1); + } + s0 = s1; + return s0; + } + function peg$parsesuperscript() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 94) { + s1 = peg$c44; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e66); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f64(s1); + } + s0 = s1; + return s0; + } + function peg$parsesubscript() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s1 = peg$c45; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e67); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f65(s1); + } + s0 = s1; + return s0; + } + function peg$parseignore() { + var s0; + if (input.charCodeAt(peg$currPos) === 0) { + s0 = peg$c46; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e68); + } + } + return s0; + } + function peg$parsesp() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f66(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsechar() { + var s0; + peg$silentFails++; + if (peg$r2.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e71); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e70); + } + } + return s0; + } + function peg$parsenum() { + var s0; + peg$silentFails++; + if (peg$r3.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e73); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e72); + } + } + return s0; + } + function peg$parsepunctuation() { + var s0, s1; + peg$silentFails++; + s0 = peg$currPos; + if (peg$r4.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e75); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f67(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e74); + } + } + return s0; + } + function peg$parsecomment_start() { + var s0; + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsefull_comment() { + var s0; + peg$silentFails++; + s0 = peg$parseownline_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsesameline_comment(); + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e76); + } + } + return s0; + } + function peg$parseownline_comment() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseleading_sp(); + if (s2 !== peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f68(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesameline_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsesp(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + s2 = peg$parsecomment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f69(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f70(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f70(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseparbreak(); + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f71(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f72(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f72(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + s4 = peg$parsenl(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = peg$parsenl(); + if (s3 === peg$FAILED) { + s3 = peg$parseEOF(); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f73(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e77); + } + } + return s0; + } + function peg$parseleading_sp() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsestart_of_line(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsestart_of_line() { + var s0; + peg$savedPos = peg$currPos; + s0 = peg$f74(); + if (s0) { + s0 = void 0; + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOF() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function toString(e) { + if (typeof e === "string") { + return e; + } + if (typeof e.content === "string") { + return e.content; + } + if (e && e.type === "whitespace") { + return " "; + } + return e; + } + function compare_env(g1, g2) { + const g1Name = typeof g1 === "string" ? g1 : g1.content.map(toString).join(""); + const g2Name = typeof g2 === "string" ? g2 : g2.content.map(toString).join(""); + return g1Name === g2Name; + } + function createNode(type, extra = {}) { + return { type, ...extra, position: location() }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var align_environment_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(x) { + return { cells: [], colSeps: [], ...x }; + }; + var peg$f2 = function(rowItems, rowSep, trailingComment) { + return { ...rowItems, rowSep, trailingComment }; + }; + var peg$f3 = function(rowItems, trailingComment) { + return { ...rowItems, rowSep: null, trailingComment }; + }; + var peg$f4 = function(x) { + return x; + }; + var peg$f5 = function(x) { + return { + cells: [], + colSeps: [], + rowSep: null, + trailingComment: x + }; + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(colSep, cell) { + return { colSep, cell }; + }; + var peg$f8 = function(colSep) { + return { colSep }; + }; + var peg$f9 = function(a, b) { + return processRow(a, b); + }; + var peg$f10 = function(b) { + return processRow(null, b); + }; + var peg$f11 = function(tok) { + return options2.isSameLineComment(tok); + }; + var peg$f12 = function(tok) { + return tok; + }; + var peg$f13 = function(tok) { + return options2.isOwnLineComment(tok); + }; + var peg$f14 = function(tok) { + return tok; + }; + var peg$f15 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f16 = function(tok) { + return tok; + }; + var peg$f17 = function(tok) { + return options2.isRowSep(tok); + }; + var peg$f18 = function(tok) { + return tok; + }; + var peg$f19 = function(tok) { + return options2.isColSep(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f0(); + } + s0 = s1; + } + return s0; + } + function peg$parserow_with_end() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + s2 = peg$f1(s2); + s1 = s2; + s2 = peg$parserow_sep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_without_end() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parserow_items(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f5(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parserow_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsecol_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parseseparated_cell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsecell(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s1 = peg$f8(s1); + } + s0 = s1; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsecell(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_cell(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_cell(); + } + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_cell(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_cell(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f11(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f12(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f13(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f15(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f16(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f17(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f18(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecol_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processRow(leadCell, otherCells) { + const cells = [leadCell || []]; + const seps = []; + for (const x of otherCells) { + cells.push(x.cell || []); + seps.push(x.colSep); + } + return { cells, colSeps: seps }; + } + if (!options2.isWhitespace) { + try { + Object.assign( + options2, + createMatchers(["\\", "hline", "cr"], ["&"]) + ); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var xparse_argspec_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list }; + var peg$startRuleFunction = peg$parseargs_spec_list; + var peg$c1 = "v"; + var peg$c2 = "b"; + var peg$c3 = "!"; + var peg$c4 = "D"; + var peg$c5 = "d"; + var peg$c6 = "s"; + var peg$c7 = "O"; + var peg$c8 = "o"; + var peg$c9 = "e"; + var peg$c10 = "E"; + var peg$c11 = "t"; + var peg$c12 = "R"; + var peg$c13 = "r"; + var peg$c14 = "u"; + var peg$c15 = "m"; + var peg$c16 = "{"; + var peg$c17 = "}"; + var peg$c18 = " "; + var peg$c19 = "\n"; + var peg$c20 = "\r"; + var peg$r0 = /^[{ ]/; + var peg$e0 = peg$literalExpectation("+", false); + var peg$e1 = peg$literalExpectation("v", false); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$literalExpectation("b", false); + var peg$e4 = peg$literalExpectation("!", false); + var peg$e5 = peg$literalExpectation("D", false); + var peg$e6 = peg$literalExpectation("d", false); + var peg$e7 = peg$literalExpectation("s", false); + var peg$e8 = peg$literalExpectation("O", false); + var peg$e9 = peg$literalExpectation("o", false); + var peg$e10 = peg$literalExpectation("e", false); + var peg$e11 = peg$literalExpectation("E", false); + var peg$e12 = peg$literalExpectation("t", false); + var peg$e13 = peg$literalExpectation("R", false); + var peg$e14 = peg$literalExpectation("r", false); + var peg$e15 = peg$literalExpectation("u", false); + var peg$e16 = peg$classExpectation(["{", " "], false, false); + var peg$e17 = peg$literalExpectation("m", false); + var peg$e18 = peg$literalExpectation("{", false); + var peg$e19 = peg$literalExpectation("}", false); + var peg$e20 = peg$literalExpectation(" ", false); + var peg$e21 = peg$literalExpectation("\n", false); + var peg$e22 = peg$literalExpectation("\r", false); + var peg$f0 = function(x) { + return x; + }; + var peg$f1 = function(spec) { + return spec; + }; + var peg$f2 = function(spec) { + return spec; + }; + var peg$f3 = function(openBrace) { + return createNode("verbatim", { openBrace, closeBrace: openBrace }); + }; + var peg$f4 = function() { + return createNode("body"); + }; + var peg$f5 = function(leading_bang, spec) { + return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec; + }; + var peg$f6 = function(braceSpec, defaultArg) { + return createNode("optional", { ...braceSpec, defaultArg }); + }; + var peg$f7 = function(braceSpec) { + return createNode("optional", braceSpec); + }; + var peg$f8 = function() { + return createNode("optionalStar"); + }; + var peg$f9 = function(g) { + return createNode("optional", { defaultArg: g }); + }; + var peg$f10 = function() { + return createNode("optional"); + }; + var peg$f11 = function(args) { + return createNode("embellishment", { + embellishmentTokens: args.content + }); + }; + var peg$f12 = function(args, g) { + return createNode("embellishment", { + embellishmentTokens: args.content, + defaultArg: g + }); + }; + var peg$f13 = function(tok) { + return createNode("optionalToken", { token: tok }); + }; + var peg$f14 = function(braceSpec, defaultArg) { + return createNode("mandatory", { ...braceSpec, defaultArg }); + }; + var peg$f15 = function(braceSpec) { + return createNode("mandatory", braceSpec); + }; + var peg$f16 = function(stopTokens) { + return createNode("until", { stopTokens }); + }; + var peg$f17 = function(x) { + return [x]; + }; + var peg$f18 = function(g) { + return g.content; + }; + var peg$f19 = function() { + return createNode("mandatory"); + }; + var peg$f20 = function(openBrace, closeBrace) { + return { openBrace, closeBrace }; + }; + var peg$f21 = function(content) { + return { type: "group", content }; + }; + var peg$f22 = function() { + return ""; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseargs_spec_list() { + var s0, s1, s2, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + s2 = peg$parsewhitespace(); + s0 = peg$f1(s1); + return s0; + } + function peg$parsearg_spec() { + var s0, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + peg$currPos++; + } else { + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + s2 = peg$parseoptional(); + if (s2 === peg$FAILED) { + s2 = peg$parsemandatory(); + if (s2 === peg$FAILED) { + s2 = peg$parseverbatim(); + if (s2 === peg$FAILED) { + s2 = peg$parserequired(); + if (s2 === peg$FAILED) { + s2 = peg$parsebody(); + if (s2 === peg$FAILED) { + s2 = peg$parseuntil(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 118) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebody() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 98) { + s1 = peg$c2; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(); + } + s0 = s1; + return s0; + } + function peg$parseoptional() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c3; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseoptional_star(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_standard(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_delimited(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_embellishment(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_token(); + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseoptional_delimited() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 68) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + s0 = peg$f6(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 100) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_star() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 115) { + s1 = peg$c6; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f8(); + } + s0 = s1; + return s0; + } + function peg$parseoptional_standard() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 79) { + s1 = peg$c7; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 111) { + s1 = peg$c8; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + } + return s0; + } + function peg$parseoptional_embellishment() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 101) { + s1 = peg$c9; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 69) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + s0 = peg$f12(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_token() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 116) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserequired() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 82) { + s1 = peg$c12; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + s0 = peg$f14(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 114) { + s1 = peg$c13; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseuntil() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 117) { + s1 = peg$c14; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseuntil_stop_token(); + if (s2 !== peg$FAILED) { + s0 = peg$f16(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseuntil_stop_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebraced_group(); + if (s1 !== peg$FAILED) { + s1 = peg$f18(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsemandatory() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 109) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f19(); + } + s0 = s1; + return s0; + } + function peg$parsebrace_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = null; + } + s2 = input.substring(s2, peg$currPos); + s0 = peg$f20(s1, s2); + return s0; + } + function peg$parsebraced_group() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + } + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c17; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace_token(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace_token(); + } + s1 = peg$f22(); + s0 = s1; + return s0; + } + function peg$parsewhitespace_token() { + var s0; + if (input.charCodeAt(peg$currPos) === 32) { + s0 = peg$c18; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + } + } + return s0; + } + const DEFAULT_OPTIONS = { + optional: { openBrace: "[", closeBrace: "]" }, + mandatory: { openBrace: "{", closeBrace: "}" } + }; + function createNode(type, options22) { + const computedOptions = DEFAULT_OPTIONS[type] || {}; + return { type, ...computedOptions, ...options22 }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var pgfkeys_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(rowItems, trailingComment) { + return { + itemParts: [], + ...rowItems, + trailingComment, + trailingComma: true + }; + }; + var peg$f2 = function(rowItems, trailingComment) { + return { ...rowItems, trailingComment }; + }; + var peg$f3 = function(a, b) { + return processItem(a, b); + }; + var peg$f4 = function(b) { + return processItem(null, b); + }; + var peg$f5 = function(cell) { + return { cell }; + }; + var peg$f6 = function() { + return {}; + }; + var peg$f7 = function(part) { + return part; + }; + var peg$f8 = function(x) { + return x; + }; + var peg$f9 = function(space, x) { + return { + trailingComment: x, + leadingParbreak: space.parbreak > 0 + }; + }; + var peg$f10 = function(list) { + return { + whitespace: list.filter((x) => options2.isWhitespace(x)).length, + parbreak: list.filter((x) => options2.isParbreak(x)).length + }; + }; + var peg$f11 = function() { + return !options2.allowParenGroups; + }; + var peg$f12 = function(tok) { + return options2.isSameLineComment(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options2.isOwnLineComment(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options2.isParbreak(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options2.isComma(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options2.isEquals(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options2.isChar(tok, "("); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options2.isChar(tok, ")"); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_with_end() { + var s0, s2, s4, s5, s6, s7, s8; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$parsewhitespace_or_parbreaks(); + s4 = peg$parseitem_sep(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsewhitespace(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsewhitespace(); + } + s6 = peg$parsetrailing_comment(); + if (s6 === peg$FAILED) { + s6 = null; + } + s7 = []; + s8 = peg$parsewhitespace(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsewhitespace(); + } + s0 = peg$f1(s2, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_without_end() { + var s0, s2, s3; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseitem_part(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_part(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_part(); + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_part(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_part(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(s1); + } + s0 = s1; + } + return s0; + } + function peg$parseseparated_part() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseparbreak(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseparbreak(); + } + s4 = peg$parseitem_part(); + if (s4 !== peg$FAILED) { + s0 = peg$f5(s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_part() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$currPos; + s3 = []; + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsewhitespace_or_parbreaks(); + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsenon_token(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_whitespace_non_parbreak_token() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewhitespace(); + if (s3 === peg$FAILED) { + s3 = peg$parseparbreak(); + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseparen_block(); + if (s3 === peg$FAILED) { + s3 = peg$parsetoken(); + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_token() { + var s0; + s0 = peg$parseitem_sep(); + if (s0 === peg$FAILED) { + s0 = peg$parseequals(); + if (s0 === peg$FAILED) { + s0 = peg$parsetrailing_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parseown_line_comment(); + } + } + } + return s0; + } + function peg$parsewhitespace_or_parbreaks() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + } + s1 = peg$f10(s1); + s0 = s1; + return s0; + } + function peg$parseparen_block() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + s0 = peg$currPos; + s1 = peg$f11(); + if (s1) { + s1 = peg$FAILED; + } else { + s1 = void 0; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$parseopen_paren(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseclose_paren(); + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processItem(leadCell, otherCells) { + const cells = [leadCell || []]; + for (const x of otherCells) { + cells.push(x.cell || []); + } + return { itemParts: cells }; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isChar: (node, char) => node.type === "string" && node.content === char, + isComma(node) { + return node.type === "string" && node.content === ","; + }, + isEquals(node) { + return node.type === "string" && node.content === "="; + }, + isParbreak(node) { + return node.type === "parbreak"; + }, + isWhitespace(node) { + return node.type === "whitespace"; + }, + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + allowParenGroups: true + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(tok) { + return options2.isHash(tok); + }; + var peg$f3 = function(tok) { + return tok; + }; + var peg$f4 = function(tok) { + return options2.isNumber(tok); + }; + var peg$f5 = function(tok) { + return tok; + }; + var peg$f6 = function() { + return { type: "string", content: "#" }; + }; + var peg$f7 = function(num) { + const split = options2.splitNumber(num); + return [{ type: "hash_number", number: split.number }, split.rest]; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsehash() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f4(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_hash() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsehash(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehash_number() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isHash) { + try { + Object.assign(options2, { + isHash: (node) => node.type === "string" && node.content === "#", + isNumber: (node) => node.type === "string" && 0 < +node.content.charAt(0), + splitNumber: (node) => { + const number = +node.content.charAt(0); + if (node.content.length > 1) { + return { + number, + rest: { + type: "string", + content: node.content.slice(1) + } + }; + } + return { number }; + } + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f3 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f4 = function(tok1, tok2) { + const split = options2.split(tok2); + return options2.isRecognized([tok1, split[0]]); + }; + var peg$f5 = function(tok1, tok2) { + const split = options2.split(tok2); + return [options2.isRecognized([tok1, split[0]]), split[1]]; + }; + var peg$f6 = function(tok1, tok2) { + return options2.isRecognized([tok1, tok2]); + }; + var peg$f7 = function(tok1, tok2) { + return options2.isRecognized([tok1, tok2]); + }; + var peg$f8 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f9 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f10 = function(tok) { + return options2.isRecognized([tok]); + }; + var peg$f11 = function(tok) { + return options2.isRecognized([tok]); + }; + var peg$f12 = function(tok) { + return options2.isMacro(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options2.isSplitable(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsetriple_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_ligature() { + var s0; + s0 = peg$parsedouble_macro_ligature(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_macro_ligature_extracted(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_char_ligature(); + } + } + return s0; + } + function peg$parsedouble_macro_ligature_extracted() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + s3 = peg$parsesplitable(); + if (s3 !== peg$FAILED) { + s4 = peg$f4(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f5(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_macro_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$f6(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f7(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_char_ligature() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f8(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemono_ligature() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f10(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f11(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesplitable() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isMacro: (node) => node.type === "macro", + isWhitespace: (node) => node.type === "whitespace", + isRecognized: (nodes) => { + if (nodes.length == 2 && nodes[0].content === "^" && nodes[1].content === "o") { + return { type: "string", content: "ô" }; + } + return null; + }, + isSplitable: (node) => node.type === "string" && node.content.length > 1, + split: (node) => [ + { type: "string", content: node.content.charAt(0) }, + { type: "string", content: node.content.slice(1) } + ] + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { start: peg$parsestart }; + var peg$startRuleFunction = peg$parsestart; + var peg$c0 = ";"; + var peg$c1 = ","; + var peg$c2 = ":"; + var peg$c3 = "/"; + var peg$c4 = ">"; + var peg$c5 = "!"; + var peg$c6 = "."; + var peg$c7 = "!!["; + var peg$c8 = "]"; + var peg$c9 = "!!"; + var peg$c10 = "+"; + var peg$c11 = "-"; + var peg$r0 = /^[a-zA-Z0-9]/; + var peg$r1 = /^[0-9]/; + var peg$r2 = /^[ \t\n\r]/; + var peg$r3 = /^[0-9a-fA-F]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation(";", false); + var peg$e2 = peg$literalExpectation(",", false); + var peg$e3 = peg$otherExpectation("model list"); + var peg$e4 = peg$literalExpectation(":", false); + var peg$e5 = peg$literalExpectation("/", false); + var peg$e6 = peg$otherExpectation("model"); + var peg$e7 = peg$otherExpectation("color spec list"); + var peg$e8 = peg$otherExpectation("color spec"); + var peg$e9 = peg$otherExpectation("color"); + var peg$e10 = peg$otherExpectation("function expression"); + var peg$e11 = peg$literalExpectation(">", false); + var peg$e12 = peg$otherExpectation("function"); + var peg$e13 = peg$otherExpectation("extended expression"); + var peg$e14 = peg$otherExpectation("core model"); + var peg$e15 = peg$otherExpectation("expr"); + var peg$e16 = peg$literalExpectation("!", false); + var peg$e17 = peg$otherExpectation("mix expr"); + var peg$e18 = peg$otherExpectation("name"); + var peg$e19 = peg$literalExpectation(".", false); + var peg$e20 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e21 = peg$otherExpectation("postfix"); + var peg$e22 = peg$literalExpectation("!![", false); + var peg$e23 = peg$literalExpectation("]", false); + var peg$e24 = peg$literalExpectation("!!", false); + var peg$e25 = peg$otherExpectation("prefix"); + var peg$e26 = peg$otherExpectation("plus"); + var peg$e27 = peg$literalExpectation("+", false); + var peg$e28 = peg$otherExpectation("minus"); + var peg$e29 = peg$literalExpectation("-", false); + var peg$e30 = peg$otherExpectation("num"); + var peg$e31 = peg$classExpectation([["0", "9"]], false, false); + var peg$e32 = peg$otherExpectation("positive float"); + var peg$e33 = peg$otherExpectation("divisor"); + var peg$e34 = peg$otherExpectation("int"); + var peg$e36 = peg$classExpectation([" ", " ", "\n", "\r"], false, false); + var peg$e37 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false); + var peg$f0 = function(m) { + return m; + }; + var peg$f1 = function(m) { + return m; + }; + var peg$f2 = function(m) { + return m; + }; + var peg$f3 = function(m) { + return m; + }; + var peg$f4 = function(m) { + return m; + }; + var peg$f5 = function(a) { + return { type: "invalid_spec", content: a }; + }; + var peg$f6 = function(f, c) { + return c; + }; + var peg$f7 = function(f, r) { + return { type: "color_set", content: [f].concat(r) }; + }; + var peg$f8 = function(n, s2) { + return { type: "color_set_item", name: n, spec_list: s2 }; + }; + var peg$f9 = function(c, m) { + return { type: "model_list", contents: m, core_model: c }; + }; + var peg$f10 = function(m) { + return { type: "model_list", contents: m, core_model: null }; + }; + var peg$f11 = function(m, a) { + return a; + }; + var peg$f12 = function(m, r) { + return [m].concat(r); + }; + var peg$f13 = function(s2, a) { + return a; + }; + var peg$f14 = function(s2, r) { + return { type: "spec_list", content: [s2].concat(r) }; + }; + var peg$f15 = function(c) { + return { type: "hex_spec", content: [c] }; + }; + var peg$f16 = function(c, d) { + return d; + }; + var peg$f17 = function(c, d) { + return d; + }; + var peg$f18 = function(c, r) { + return { type: "num_spec", content: r ? [c].concat(r) : [c] }; + }; + var peg$f19 = function(c, fs) { + return { type: "color", color: c, functions: fs }; + }; + var peg$f20 = function(f, n) { + return n; + }; + var peg$f21 = function(f, args) { + return { type: "function", name: f, args }; + }; + var peg$f22 = function(core, d, e, es) { + return { + type: "extended_expr", + core_model: core, + div: d, + expressions: [e].concat(es) + }; + }; + var peg$f23 = function(core, e, es) { + return { + type: "extended_expr", + core_model: core, + div: null, + expressions: [e].concat(es) + }; + }; + var peg$f24 = function(e, d) { + return { type: "weighted_expr", color: e, weight: d }; + }; + var peg$f25 = function(e) { + return e; + }; + var peg$f26 = function(p, n, e, po) { + return { + type: "expr", + prefix: p, + name: n, + mix_expr: e, + postfix: po + }; + }; + var peg$f27 = function(p, n) { + return { type: "complete_mix", mix_percent: p, name: n }; + }; + var peg$f28 = function(p) { + return { type: "partial_mix", mix_percent: p }; + }; + var peg$f29 = function(c, p) { + return c.concat(p || []); + }; + var peg$f30 = function(n) { + return { type: "postfix", num: n }; + }; + var peg$f31 = function(p) { + return { type: "postfix", plusses: p }; + }; + var peg$f32 = function(n) { + return parseInt(n, 10); + }; + var peg$f33 = function(n) { + return parseFloat(n); + }; + var peg$f34 = function(n) { + return n; + }; + var peg$f35 = function(n) { + return -n; + }; + var peg$f36 = function(m, n) { + return m ? -n : n; + }; + var peg$f37 = function(h) { + return h.toUpperCase(); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsestart() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsespec_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f2(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor_set_spec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + s1 = input.substring(s1, peg$currPos); + s1 = peg$f5(s1); + s0 = s1; + } + } + } + } + } + return s0; + } + function peg$parsecolor_set_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsecolor_set_item(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolor_set_item() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsename(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsespec_list(); + if (s3 !== peg$FAILED) { + s0 = peg$f8(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel_list() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemodel_list_tail(); + if (s3 !== peg$FAILED) { + s0 = peg$f9(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list_tail(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parsemodel_list_tail() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsemodel(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f12(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel() { + var s0; + peg$silentFails++; + s0 = peg$parsecore_model(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsespec_list() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f14(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsespec() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsehex(); + if (s3 !== peg$FAILED) { + s4 = peg$parsehex(); + if (s4 !== peg$FAILED) { + s5 = peg$parsehex(); + if (s5 !== peg$FAILED) { + s6 = peg$parsehex(); + if (s6 !== peg$FAILED) { + s7 = peg$parsehex(); + if (s7 !== peg$FAILED) { + s8 = peg$parsehex(); + if (s8 !== peg$FAILED) { + s3 = [s3, s4, s5, s6, s7, s8]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f15(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsedec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + } + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f18(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsecolor() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecolor_expr(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsefunc_expr(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsefunc_expr(); + } + s0 = peg$f19(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsecolor_expr() { + var s0; + s0 = peg$parseext_expr(); + if (s0 === peg$FAILED) { + s0 = peg$parseexpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsename(); + } + } + return s0; + } + function peg$parsefunc_expr() { + var s0, s1, s2, s3, s4, s5, s6; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 62) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsefunction(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s0 = peg$f21(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parsefunction() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseext_expr() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsediv(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c2; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseweighted_expr(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseadditional_weighted_expr(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f22(s1, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseweighted_expr(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseadditional_weighted_expr(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f23(s1, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseweighted_expr() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseexpr(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsedec(); + if (s3 !== peg$FAILED) { + s0 = peg$f24(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseadditional_weighted_expr() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s1 = peg$c0; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseweighted_expr(); + if (s2 !== peg$FAILED) { + s0 = peg$f25(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecore_model() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseexpr() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseprefix(); + s2 = peg$parsename(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemix_expr(); + s4 = peg$parsepostfix(); + if (s4 === peg$FAILED) { + s4 = null; + } + s0 = peg$f26(s1, s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsecomplete_mix() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsename(); + if (s4 !== peg$FAILED) { + s0 = peg$f27(s2, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_mix() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemix_expr() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomplete_mix(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomplete_mix(); + } + s2 = peg$parsepartial_mix(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f29(s1, s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + return s0; + } + function peg$parsename() { + var s0, s1, s2; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 46) { + s0 = peg$c6; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parsepostfix() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c7) { + s1 = peg$c7; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c8; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c9) { + s1 = peg$c9; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$parseplus(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseplus(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + return s0; + } + function peg$parseprefix() { + var s0; + peg$silentFails++; + s0 = peg$parseminus(); + if (s0 === peg$FAILED) { + s0 = null; + } + peg$silentFails--; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + return s0; + } + function peg$parsenum() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f32(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + return s0; + } + function peg$parsepct() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + s4 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c6; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + s8 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + while (s9 !== peg$FAILED) { + s8.push(s9); + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + s7 = input.substring(s7, peg$currPos); + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 === peg$FAILED) { + s5 = null; + } + s4 = input.substring(s4, peg$currPos); + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c6; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f33(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsediv() { + var s0; + peg$silentFails++; + s0 = peg$parsepct(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsedec() { + var s0, s1, s2; + s0 = peg$parsepct(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f34(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f35(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parseint() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + s0 = peg$f36(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parsesp() { + var s0, s1; + s0 = []; + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + } + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehex() { + var s0, s1; + s0 = peg$currPos; + if (peg$r3.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f37(s1); + } + s0 = s1; + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$otherExpectation("decl_start"); + var peg$e1 = peg$otherExpectation("decl_end"); + var peg$e2 = peg$otherExpectation("vert"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("l"); + var peg$e5 = peg$otherExpectation("r"); + var peg$e6 = peg$otherExpectation("c"); + var peg$e7 = peg$otherExpectation("p"); + var peg$e8 = peg$otherExpectation("m"); + var peg$e9 = peg$otherExpectation("b"); + var peg$e10 = peg$otherExpectation("w"); + var peg$e11 = peg$otherExpectation("W"); + var peg$e12 = peg$otherExpectation("X"); + var peg$e13 = peg$otherExpectation("!"); + var peg$e14 = peg$otherExpectation("@"); + var peg$e15 = peg$otherExpectation("<"); + var peg$e16 = peg$otherExpectation(">"); + var peg$e17 = peg$otherExpectation("group"); + var peg$e18 = peg$otherExpectation("whitespace"); + var peg$f0 = function(c) { + return c; + }; + var peg$f1 = function(cols) { + return cols; + }; + var peg$f2 = function() { + return []; + }; + var peg$f3 = function(divs1, start, a, end, divs2) { + return { + type: "column", + pre_dividers: divs1, + post_dividers: divs2, + before_start_code: start, + before_end_code: end, + alignment: a + }; + }; + var peg$f4 = function() { + return { + type: "vert_divider" + }; + }; + var peg$f5 = function(b, g) { + return { + type: "bang_divider", + content: g[0].content + }; + }; + var peg$f6 = function(g) { + return { + type: "at_divider", + content: g[0].content + }; + }; + var peg$f7 = function(div) { + return div; + }; + var peg$f8 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f9 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f10 = function() { + return { type: "alignment", alignment: "left" }; + }; + var peg$f11 = function() { + return { type: "alignment", alignment: "center" }; + }; + var peg$f12 = function() { + return { type: "alignment", alignment: "right" }; + }; + var peg$f13 = function() { + return { type: "alignment", alignment: "X" }; + }; + var peg$f14 = function() { + return "top"; + }; + var peg$f15 = function() { + return "default"; + }; + var peg$f16 = function() { + return "bottom"; + }; + var peg$f17 = function(a, g) { + return { + type: "alignment", + alignment: "parbox", + baseline: a, + size: g[0].content + }; + }; + var peg$f18 = function(g1, g2) { + return { + type: "alignment", + alignment: "parbox", + baseline: g1[0].content, + size: g2[0].content + }; + }; + var peg$f19 = function(tok) { + return options2.matchChar(tok, "|"); + }; + var peg$f20 = function(tok) { + return options2.matchChar(tok, "l"); + }; + var peg$f21 = function(tok) { + return options2.matchChar(tok, "r"); + }; + var peg$f22 = function(tok) { + return options2.matchChar(tok, "c"); + }; + var peg$f23 = function(tok) { + return options2.matchChar(tok, "p"); + }; + var peg$f24 = function(tok) { + return options2.matchChar(tok, "m"); + }; + var peg$f25 = function(tok) { + return options2.matchChar(tok, "b"); + }; + var peg$f26 = function(tok) { + return options2.matchChar(tok, "w"); + }; + var peg$f27 = function(tok) { + return options2.matchChar(tok, "W"); + }; + var peg$f28 = function(tok) { + return options2.matchChar(tok, "X"); + }; + var peg$f29 = function(tok) { + return options2.matchChar(tok, "!"); + }; + var peg$f30 = function(tok) { + return options2.matchChar(tok, "@"); + }; + var peg$f31 = function(tok) { + return options2.matchChar(tok, "<"); + }; + var peg$f32 = function(tok) { + return options2.matchChar(tok, ">"); + }; + var peg$f33 = function(tok) { + return options2.isGroup(tok); + }; + var peg$f34 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f2(); + } + s0 = s1; + } + return s0; + } + function peg$parsecolumn() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecolumn_divider(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecolumn_divider(); + } + s2 = peg$parsedecl_start(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = peg$parsealignment(); + if (s3 !== peg$FAILED) { + s4 = peg$parsedecl_end(); + if (s4 === peg$FAILED) { + s4 = null; + } + s5 = []; + s6 = peg$parsecolumn_divider(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsecolumn_divider(); + } + s0 = peg$f3(s1, s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolumn_divider() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$currPos; + s3 = peg$parsevert(); + if (s3 !== peg$FAILED) { + s3 = peg$f4(); + } + s2 = s3; + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parsebang(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f5(s3, s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parseat(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f6(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedecl_start() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsegreater(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + return s0; + } + function peg$parsedecl_end() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseless(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parsealignment() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsel(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsec(); + if (s1 !== peg$FAILED) { + s1 = peg$f11(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parser(); + if (s1 !== peg$FAILED) { + s1 = peg$f12(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseX(); + if (s1 !== peg$FAILED) { + s1 = peg$f13(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsep(); + if (s2 !== peg$FAILED) { + s2 = peg$f14(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parsem(); + if (s2 !== peg$FAILED) { + s2 = peg$f15(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseb(); + if (s2 !== peg$FAILED) { + s2 = peg$f16(); + } + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s0 = peg$f17(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsew(); + if (s1 === peg$FAILED) { + s1 = peg$parseW(); + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f18(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + return s0; + } + function peg$parsevert() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parsel() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parser() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsec() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f23(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsem() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseb() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f25(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsew() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseW() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f27(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parseX() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parsebang() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f29(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseless() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f31(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsegreater() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f33(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isHash) { + try { + Object.assign(options2, { + matchChar: (node, char) => node.type === "string" && node.content === char, + isGroup: (node) => node.type === "group", + isWhitespace: (node) => node.type === "whitespace" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e1 = peg$otherExpectation("item"); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("equation"); + var peg$e4 = peg$otherExpectation("trailing comment"); + var peg$e5 = peg$otherExpectation("comment only line"); + var peg$e6 = peg$otherExpectation("non-var token"); + var peg$e7 = peg$otherExpectation("token"); + var peg$e8 = peg$otherExpectation("same line comment"); + var peg$e9 = peg$otherExpectation("own line comment"); + var peg$e10 = peg$otherExpectation(","); + var peg$e11 = peg$otherExpectation("@"); + var peg$e12 = peg$otherExpectation("variable token"); + var peg$e13 = peg$otherExpectation("+/-"); + var peg$e14 = peg$otherExpectation("="); + var peg$f0 = function(a, b) { + return a.concat(b ? b : []); + }; + var peg$f1 = function() { + return []; + }; + var peg$f3 = function(op, a, b, c) { + return { type: "item", op, variable: b, content: a.concat(b, c) }; + }; + var peg$f4 = function(op, a) { + return { type: "item", op, variable: null, content: a }; + }; + var peg$f5 = function(line3, sep, comment) { + return { ...line3, sep: [].concat(sep), trailingComment: comment }; + }; + var peg$f6 = function(line3, comment) { + return { ...line3, trailingComment: comment }; + }; + var peg$f7 = function(eq, ann) { + return { + type: "line", + equation: eq, + annotation: ann, + sep: null + }; + }; + var peg$f8 = function(at2, ann) { + return at2 ? { type: "annotation", marker: at2, content: ann } : null; + }; + var peg$f9 = function(left, eq, right) { + return { type: "equation", left, right, equals: eq }; + }; + var peg$f10 = function(x) { + return x; + }; + var peg$f11 = function(x) { + return { + type: "line", + trailingComment: x + }; + }; + var peg$f12 = function(v, s2) { + return [v].concat(s2 ? s2 : []); + }; + var peg$f13 = function(t) { + return t; + }; + var peg$f14 = function(x) { + return x; + }; + var peg$f15 = function(x) { + return x; + }; + var peg$f16 = function(tok) { + return options2.isSameLineComment(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options2.isOwnLineComment(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options2.isSep(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options2.isAt(tok); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options2.isVar(tok); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options2.isOperation(tok); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options2.isEquals(tok); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options2.isSubscript(tok); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + } + s2 = peg$parseline_without_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parseEOL(); + } + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parseitem() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsevar(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parse_(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parse_(); + } + s7 = []; + s8 = peg$parsetoken(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsetoken(); + } + s8 = []; + s9 = peg$parse_(); + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parse_(); + } + s0 = peg$f3(s1, s3, s5, s7); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s0 = peg$f4(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parseline_with_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f5(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_line_with_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_without_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s2 !== peg$FAILED) { + peg$currPos = s1; + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseequation(); + s3 = peg$parseannotation(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f7(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseannotation() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseat(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsenon_sep_token(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenon_sep_token(); + } + s0 = peg$f8(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseitem(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseitem(); + } + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + } + s0 = peg$f9(s1, s2, s3); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsevar() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsevar_token(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsesubscript(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenon_var_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsevar(); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsenon_sep_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parseat(); + if (s2 === peg$FAILED) { + s2 = peg$parseoperation(); + if (s2 === peg$FAILED) { + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsevar_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s4 = peg$f28(s2); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f29(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parsesubscript() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isSep: (node) => node.type === "string" && node.content === ",", + isVar: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isOperation: (node) => node.type === "string" && node.content.match(/[+-]/), + isEquals: (node) => node.type === "string" && node.content === "=", + isAt: (node) => node.type === "string" && node.content === "@", + isSubscript: (node) => node.content === "_", + isWhitespace: (node) => node.type === "whitespace", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { root: peg$parseroot }; + var peg$startRuleFunction = peg$parseroot; + var peg$c0 = "plus"; + var peg$c1 = "minus"; + var peg$c2 = "pt"; + var peg$c3 = "mm"; + var peg$c4 = "cm"; + var peg$c5 = "in"; + var peg$c6 = "ex"; + var peg$c7 = "em"; + var peg$c8 = "bp"; + var peg$c9 = "pc"; + var peg$c10 = "dd"; + var peg$c11 = "cc"; + var peg$c12 = "nd"; + var peg$c13 = "nc"; + var peg$c14 = "sp"; + var peg$c15 = "filll"; + var peg$c16 = "fill"; + var peg$c17 = "fil"; + var peg$c18 = "."; + var peg$c19 = "+"; + var peg$c20 = "-"; + var peg$r0 = /^[0-9]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation("plus", false); + var peg$e2 = peg$literalExpectation("minus", false); + var peg$e3 = peg$literalExpectation("pt", false); + var peg$e4 = peg$literalExpectation("mm", false); + var peg$e5 = peg$literalExpectation("cm", false); + var peg$e6 = peg$literalExpectation("in", false); + var peg$e7 = peg$literalExpectation("ex", false); + var peg$e8 = peg$literalExpectation("em", false); + var peg$e9 = peg$literalExpectation("bp", false); + var peg$e10 = peg$literalExpectation("pc", false); + var peg$e11 = peg$literalExpectation("dd", false); + var peg$e12 = peg$literalExpectation("cc", false); + var peg$e13 = peg$literalExpectation("nd", false); + var peg$e14 = peg$literalExpectation("nc", false); + var peg$e15 = peg$literalExpectation("sp", false); + var peg$e16 = peg$literalExpectation("filll", false); + var peg$e17 = peg$literalExpectation("fill", false); + var peg$e18 = peg$literalExpectation("fil", false); + var peg$e19 = peg$otherExpectation("number"); + var peg$e20 = peg$classExpectation([["0", "9"]], false, false); + var peg$e21 = peg$literalExpectation(".", false); + var peg$e22 = peg$literalExpectation("+", false); + var peg$e23 = peg$literalExpectation("-", false); + var peg$f0 = function(b, st, sh) { + return { + type: "glue", + fixed: b, + stretchable: st, + shrinkable: sh, + position: location() + }; + }; + var peg$f1 = function(glue) { + return glue; + }; + var peg$f2 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f3 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f4 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f5 = function(n) { + return parseFloat(n); + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseroot() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsebase(); + if (s2 !== peg$FAILED) { + s3 = peg$parsestretchable(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseshrinkable(); + if (s4 === peg$FAILED) { + s4 = null; + } + peg$savedPos = s1; + s1 = peg$f0(s2, s3, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + peg$savedPos = s0; + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebase() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + s2 = peg$parseunit(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsestretchable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c0) { + s1 = peg$c0; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseshrinkable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 5) === peg$c1) { + s1 = peg$c1; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunit() { + var s0; + if (input.substr(peg$currPos, 2) === peg$c2) { + s0 = peg$c2; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c3) { + s0 = peg$c3; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c4) { + s0 = peg$c4; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c5) { + s0 = peg$c5; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c6) { + s0 = peg$c6; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c7) { + s0 = peg$c7; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c8) { + s0 = peg$c8; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c9) { + s0 = peg$c9; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c10) { + s0 = peg$c10; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c11) { + s0 = peg$c11; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c12) { + s0 = peg$c12; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c13) { + s0 = peg$c13; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c14) { + s0 = peg$c14; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return s0; + } + function peg$parserubber_unit() { + var s0; + s0 = peg$parseunit(); + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c15) { + s0 = peg$c15; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c16) { + s0 = peg$c16; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c17) { + s0 = peg$c17; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + } + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsesign(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$currPos; + s5 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c18; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s6 !== peg$FAILED) { + s7 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 === peg$FAILED) { + s4 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parsesign() { + var s0; + if (input.charCodeAt(peg$currPos) === 43) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +var tikz_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body }; + var peg$startRuleFunction = peg$parsepath_spec; + var peg$e0 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("comment"); + var peg$e4 = peg$otherExpectation("floating comment"); + var peg$e5 = peg$otherExpectation("operation"); + var peg$e6 = peg$otherExpectation("="); + var peg$f0 = function(v) { + return v; + }; + var peg$f1 = function(ops) { + return { type: "path_spec", content: ops }; + }; + var peg$f2 = function(c1, op, comment) { + return { op, comment }; + }; + var peg$f3 = function(c1, ops, c2, body) { + const comments = [c1, ...ops.map((x) => x.comment), c2].filter( + (x) => x + ); + const attribute = ops.map((x) => x.op.content.content).join(" "); + return { + type: "animation", + comments, + attribute, + content: body.content + }; + }; + var peg$f4 = function(start, b) { + return { ...b, start, type: "foreach" }; + }; + var peg$f5 = function(c1, variables, options22, c2, c3, list, c4, command) { + const comments = [c1, c2, c3, c4].filter((x) => x); + return { + type: "foreach_body", + variables, + options: options22 && options22.content, + list, + command, + comments + }; + }; + var peg$f6 = function(c1, options22, c2, body) { + const comments = [c1, c2].filter((x) => x); + return { + type: "svg_operation", + options: options22 && options22.content, + content: body, + comments + }; + }; + var peg$f7 = function(c1, c2, coord, c3, c4, x) { + return { coord: x, comment: c4 }; + }; + var peg$f8 = function(c1, c2, coord, c3, a, c5) { + const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x); + return { + type: "curve_to", + controls: a ? [coord, a.coord] : [coord], + comments + }; + }; + var peg$f9 = function() { + return { type: "line_to", command: "|-" }; + }; + var peg$f10 = function() { + return { type: "line_to", command: "-|" }; + }; + var peg$f11 = function() { + return { type: "line_to", command: "--" }; + }; + var peg$f12 = function(prefix, content) { + return { type: "coordinate", content, prefix }; + }; + var peg$f13 = function(content) { + return { type: "square_brace_group", content }; + }; + var peg$f14 = function(v) { + return { type: "unknown", content: v }; + }; + var peg$f19 = function(tok) { + return options2.isComment(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$f21 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f22 = function(tok) { + return tok; + }; + var peg$f23 = function(c) { + return c; + }; + var peg$f24 = function(tok) { + return options2.isOperation(tok); + }; + var peg$f25 = function(tok) { + return { type: "operation", content: tok }; + }; + var peg$f26 = function(tok) { + return options2.isChar(tok, "="); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options2.isChar(tok, "["); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options2.isChar(tok, "]"); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options2.isChar(tok, "("); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$f34 = function(tok) { + return options2.isChar(tok, ")"); + }; + var peg$f35 = function(tok) { + return tok; + }; + var peg$f36 = function(tok) { + return options2.isChar(tok, "+"); + }; + var peg$f37 = function(tok) { + return tok; + }; + var peg$f38 = function(tok) { + return options2.isChar(tok, "-"); + }; + var peg$f39 = function(tok) { + return tok; + }; + var peg$f40 = function(tok) { + return options2.isChar(tok, "|"); + }; + var peg$f41 = function(tok) { + return tok; + }; + var peg$f42 = function(tok) { + return options2.isChar(tok, "."); + }; + var peg$f43 = function(tok) { + return tok; + }; + var peg$f44 = function(tok) { + return options2.isChar(tok, "controls"); + }; + var peg$f45 = function(tok) { + return tok; + }; + var peg$f46 = function(tok) { + return options2.isChar(tok, "and"); + }; + var peg$f47 = function(tok) { + return tok; + }; + var peg$f48 = function(tok) { + return options2.isChar(tok, "svg"); + }; + var peg$f49 = function(tok) { + return tok; + }; + var peg$f50 = function(tok) { + return options2.isGroup(tok); + }; + var peg$f51 = function(tok) { + return tok; + }; + var peg$f52 = function(tok) { + return options2.isAnyMacro(tok); + }; + var peg$f53 = function(tok) { + return tok; + }; + var peg$f54 = function(tok) { + return options2.isChar(tok, "foreach"); + }; + var peg$f55 = function(tok) { + return tok; + }; + var peg$f56 = function(tok) { + return options2.isMacro(tok, "foreach"); + }; + var peg$f57 = function(tok) { + return tok; + }; + var peg$f58 = function(tok) { + return options2.isChar(tok, "in"); + }; + var peg$f59 = function(tok) { + return tok; + }; + var peg$f60 = function(tok) { + return options2.isChar(tok, ":"); + }; + var peg$f61 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsepath_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + return s0; + } + function peg$parseanimation() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parsecolon(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = []; + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseequals(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_comment_(); + s6 = peg$parsegroup(); + if (s6 !== peg$FAILED) { + s0 = peg$f3(s2, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseforeach_keyword(); + if (s1 === peg$FAILED) { + s1 = peg$parseforeach_macro(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parseforeach_body(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_body() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = peg$parse_comment_(); + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsein_keyword(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$parsegroup(); + if (s7 === peg$FAILED) { + s7 = peg$parsemacro(); + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_comment_(); + s9 = peg$parseforeach(); + if (s9 === peg$FAILED) { + s9 = peg$parsegroup(); + if (s9 === peg$FAILED) { + s9 = peg$parsemacro(); + } + } + if (s9 !== peg$FAILED) { + s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsesvg_keyword(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f6(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecurve_to() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + s0 = peg$currPos; + s1 = peg$parsedotdot(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsecontrols_keyword(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_comment_(); + s5 = peg$parsecoordinate(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$currPos; + s8 = peg$parseand_keyword(); + if (s8 !== peg$FAILED) { + s9 = peg$parse_comment_(); + s10 = peg$parsecoordinate(); + if (s10 !== peg$FAILED) { + s7 = peg$f7(s2, s4, s5, s6, s9, s10); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 === peg$FAILED) { + s7 = null; + } + s8 = peg$parse_comment_(); + s9 = peg$parsedotdot(); + if (s9 !== peg$FAILED) { + s0 = peg$f8(s2, s4, s5, s6, s7, s8); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_to() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsepipe(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parsepipe(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parsecoordinate() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parseplus(); + if (s3 !== peg$FAILED) { + s4 = peg$parseplus(); + if (s4 === peg$FAILED) { + s4 = null; + } + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$parseopen_paren(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s3 = input.substring(s3, peg$currPos); + s4 = peg$parseclose_paren(); + if (s4 !== peg$FAILED) { + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesquare_brace_group() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parseopen_square_brace(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parseclose_square_brace(); + if (s3 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedotdot() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsedot(); + if (s1 !== peg$FAILED) { + s2 = peg$parsedot(); + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunknown() { + var s0, s1; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f14(s1); + } + s0 = s1; + return s0; + } + function peg$parsecomment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f22(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parse_comment_() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsecomment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f23(s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parseopen_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f29(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f35(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f36(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f37(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f38(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f39(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepipe() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f41(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedot() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f43(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecontrols_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f44(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f45(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseand_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f46(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f47(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f48(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f49(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f50(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f51(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f52(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f53(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f54(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f55(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_macro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f56(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f57(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsein_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f58(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f59(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolon() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f60(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f61(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isChar: (node, char) => node.type === "string" && node.content === char, + isOperation: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => node.type === "whitespace" || node.type === "parbreak", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + isGroup: (node) => node.type === "group", + isMacro: (node, name) => node.type === "macro" && node.content === name, + isAnyMacro: (node) => node.type === "macro" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var LatexPegParser = latex_default; +var AlignEnvironmentPegParser = align_environment_default; +var ArgSpecPegParser = xparse_argspec_default; +var PgfkeysPegParser = pgfkeys_default; +var TikzPegParser = tikz_default; +var parseCache = {}; +function parse$2(str = "") { + parseCache[str] = parseCache[str] || ArgSpecPegParser.parse(str); + return parseCache[str]; +} +var BRACES_MAP = { + "*": { openMark: "", closeMark: "" }, + "{": { openMark: "{", closeMark: "}" }, + "[": { openMark: "[", closeMark: "]" }, + "(": { openMark: "(", closeMark: ")" }, + "<": { openMark: "<", closeMark: ">" } +}; +var CLOSE_BRACES = new Set( + Object.values(BRACES_MAP).map((x) => x.closeMark).filter((x) => x) +); +function bracesToOpenAndCloseMarks(braces) { + const ret = []; + for (const char of braces.split("")) { + if (CLOSE_BRACES.has(char)) { + continue; + } + const braces2 = BRACES_MAP[char]; + if (braces2 == null) { + throw new Error(`Unknown open/close mark type "${char}"`); + } + ret.push(braces2); + } + return ret; +} +function arg(args2, special) { + if (args2 == null) { + return { type: "argument", content: [], openMark: "", closeMark: "" }; + } + if (typeof args2 === "string") { + args2 = s(args2); + } + if (!Array.isArray(args2) && args2.type === "argument") { + return args2; + } + let openMark = (special == null ? void 0 : special.openMark) ?? "{"; + let closeMark = (special == null ? void 0 : special.closeMark) ?? "}"; + if (special == null ? void 0 : special.braces) { + const braces = bracesToOpenAndCloseMarks(special.braces); + if (braces[0]) { + openMark = braces[0].openMark; + closeMark = braces[0].closeMark; + } + } + if (!Array.isArray(args2)) { + args2 = [args2]; + } + return { type: "argument", content: args2, openMark, closeMark }; +} +function s(value) { + if (typeof value === "string") { + return { type: "string", content: value }; + } + return value; +} +function getDefaultExportFromCjs(x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; +} +var dist = { exports: {} }; +var create = { exports: {} }; +var append = { exports: {} }; +var config = { exports: {} }; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = { + END_WORD: "$", + END_WORD_REPLACER: "9a219a89-91cd-42e2-abd5-eb113af08ca8", + PERMS_MIN_LEN: 2 + }; + module.exports = exports["default"]; +})(config, config.exports); +var configExports = config.exports; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = append2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function append2(trie, letter, index2, array) { + var isEndWordLetter = letter === _config2.default.END_WORD; + var isLastLetter = index2 === array.length - 1; + if (isEndWordLetter && !isLastLetter) { + trie[_config2.default.END_WORD] = 1; + trie[_config2.default.END_WORD_REPLACER] = {}; + trie = trie[_config2.default.END_WORD_REPLACER]; + } else { + trie[letter] = trie[letter] || {}; + trie = trie[letter]; + } + if (isLastLetter) { + trie[_config2.default.END_WORD] = 1; + } + return trie; + } + module.exports = exports["default"]; +})(append, append.exports); +var appendExports = append.exports; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports.default = create2; + var _append = appendExports; + var _append2 = _interopRequireDefault(_append); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function create2(input) { + if (!Array.isArray(input)) { + throw "Expected parameter Array, received " + (typeof input === "undefined" ? "undefined" : _typeof(input)); + } + var trie = input.reduce(function(accumulator, item) { + item.toLowerCase().split("").reduce(_append2.default, accumulator); + return accumulator; + }, {}); + return trie; + } + module.exports = exports["default"]; +})(create, create.exports); +var createExports = create.exports; +var checkPrefix = { exports: {} }; +var utils$1 = { exports: {} }; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = { + objectCopy: function objectCopy(obj) { + if (typeof obj === "undefined") { + return {}; + } + return JSON.parse(JSON.stringify(obj)); + }, + stringify: function stringify(obj) { + var spacer = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2; + if (typeof obj === "undefined") { + return ""; + } + return JSON.stringify(obj, null, spacer); + } + }; + module.exports = exports["default"]; +})(utils$1, utils$1.exports); +var utilsExports = utils$1.exports; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = checkPrefix2; + var _utils = utilsExports; + _interopRequireDefault(_utils); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function checkPrefix2(prefixNode, prefix) { + var input = prefix.toLowerCase().split(""); + var prefixFound = input.every(function(letter, index2) { + if (!prefixNode[letter]) { + return false; + } + return prefixNode = prefixNode[letter]; + }); + return { + prefixFound, + prefixNode + }; + } + module.exports = exports["default"]; +})(checkPrefix, checkPrefix.exports); +var checkPrefixExports = checkPrefix.exports; +var recursePrefix = { exports: {} }; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = recursePrefix2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var pushInOrder = function pushInOrder2(word, prefixes) { + var i = 0; + while (i < prefixes.length) { + if (word < prefixes[i]) { + break; + } + i += 1; + } + prefixes.splice(i, 0, word); + return prefixes; + }; + function recursePrefix2(node, prefix, sorted) { + var prefixes = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : []; + var word = prefix; + for (var branch in node) { + var currentLetter = branch; + if (branch === _config2.default.END_WORD && typeof node[branch] === "number") { + if (sorted) { + pushInOrder(word, prefixes); + } else { + prefixes.push(word); + } + word = ""; + } else if (branch === _config2.default.END_WORD_REPLACER) { + currentLetter = _config2.default.END_WORD; + } + recursePrefix2(node[branch], prefix + currentLetter, sorted, prefixes); + } + return prefixes; + } + module.exports = exports["default"]; +})(recursePrefix, recursePrefix.exports); +var recursePrefixExports = recursePrefix.exports; +var recurseRandomWord = { exports: {} }; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.default = recurseRandomWord2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function recurseRandomWord2(node, prefix) { + var word = prefix; + var branches = Object.keys(node); + var branch = branches[Math.floor(Math.random() * branches.length)]; + if (branch === _config2.default.END_WORD) { + return word; + } + return recurseRandomWord2(node[branch], prefix + branch); + } + module.exports = exports["default"]; +})(recurseRandomWord, recurseRandomWord.exports); +var recurseRandomWordExports = recurseRandomWord.exports; +var permutations = { exports: {} }; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports.default = permutations2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function permutations2(letters, trie) { + var opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : { + type: "anagram" + }; + if (typeof letters !== "string") { + throw "Permutations expects string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + var words = []; + var permute = function permute2(word, node) { + var prefix = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : ""; + var wordIsEmpty = word.length === 0; + var wordFound = words.indexOf(prefix) !== -1; + var endWordFound = node[_config2.default.END_WORD] === 1; + if (wordIsEmpty && endWordFound && !wordFound) { + words.push(prefix); + } + for (var i = 0, len = word.length; i < len; i++) { + var letter = word[i]; + if (opts.type === "sub-anagram") { + if (endWordFound && !(words.indexOf(prefix) !== -1)) { + words.push(prefix); + } + } + if (node[letter]) { + var remaining = word.substring(0, i) + word.substring(i + 1, len); + permute2(remaining, node[letter], prefix + letter, words); + } + } + return words.sort(); + }; + return permute(letters, trie); + } + module.exports = exports["default"]; +})(permutations, permutations.exports); +var permutationsExports = permutations.exports; +(function(module, exports) { + Object.defineProperty(exports, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports.default = function(input) { + if (!Array.isArray(input)) { + throw "Expected parameter Array, received " + (typeof input === "undefined" ? "undefined" : _typeof(input)); + } + var trie = (0, _create2.default)([].concat(_toConsumableArray(input))); + return { + /** + * Get the generated raw trie object + */ + tree: function tree() { + return trie; + }, + /** + * Get a string representation of the trie + */ + dump: function dump() { + var spacer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + return _utils2.default.stringify(trie, spacer); + }, + /** + * Add a new word to the trie + */ + addWord: function addWord(word) { + if (typeof word !== "string" || word === "") { + throw "Expected parameter string, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var reducer = function reducer2() { + return _append2.default.apply(void 0, arguments); + }; + var input2 = word.toLowerCase().split(""); + input2.reduce(reducer, trie); + return this; + }, + /** + * Remove an existing word from the trie + */ + removeWord: function removeWord(word) { + if (typeof word !== "string" || word === "") { + throw "Expected parameter string, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var _checkPrefix = (0, _checkPrefix6.default)(trie, word), prefixFound = _checkPrefix.prefixFound, prefixNode = _checkPrefix.prefixNode; + if (prefixFound) { + delete prefixNode[_config2.default.END_WORD]; + } + return this; + }, + /** + * Check a prefix is valid + * @returns Boolean + */ + isPrefix: function isPrefix(prefix) { + if (typeof prefix !== "string") { + throw "Expected string prefix, received " + (typeof prefix === "undefined" ? "undefined" : _typeof(prefix)); + } + var _checkPrefix2 = (0, _checkPrefix6.default)(trie, prefix), prefixFound = _checkPrefix2.prefixFound; + return prefixFound; + }, + /** + * Get a list of all words in the trie with the given prefix + * @returns Array + */ + getPrefix: function getPrefix(strPrefix) { + var sorted = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + if (typeof strPrefix !== "string") { + throw "Expected string prefix, received " + (typeof strPrefix === "undefined" ? "undefined" : _typeof(strPrefix)); + } + if (typeof sorted !== "boolean") { + throw "Expected sort parameter as boolean, received " + (typeof sorted === "undefined" ? "undefined" : _typeof(sorted)); + } + if (!this.isPrefix(strPrefix)) { + return []; + } + var prefixNode = strPrefix.length ? (0, _checkPrefix6.default)(trie, strPrefix).prefixNode : trie; + return (0, _recursePrefix2.default)(prefixNode, strPrefix, sorted); + }, + /** + * Get a random word in the trie with the given prefix + * @returns Array + */ + getRandomWordWithPrefix: function getRandomWordWithPrefix(strPrefix) { + if (typeof strPrefix !== "string") { + throw "Expected string prefix, received " + (typeof strPrefix === "undefined" ? "undefined" : _typeof(strPrefix)); + } + if (!this.isPrefix(strPrefix)) { + return ""; + } + var _checkPrefix3 = (0, _checkPrefix6.default)(trie, strPrefix), prefixNode = _checkPrefix3.prefixNode; + return (0, _recurseRandomWord2.default)(prefixNode, strPrefix); + }, + /** + * Count the number of words with the given prefixSearch + * @returns Number + */ + countPrefix: function countPrefix(strPrefix) { + var prefixes = this.getPrefix(strPrefix); + return prefixes.length; + }, + /** + * Get all words in the trie + * @returns Array + */ + getWords: function getWords() { + var sorted = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; + return this.getPrefix("", sorted); + }, + /** + * Check the existence of a word in the trie + * @returns Boolean + */ + hasWord: function hasWord(word) { + if (typeof word !== "string") { + throw "Expected string word, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var _checkPrefix4 = (0, _checkPrefix6.default)(trie, word), prefixFound = _checkPrefix4.prefixFound, prefixNode = _checkPrefix4.prefixNode; + if (prefixFound) { + return prefixNode[_config2.default.END_WORD] === 1; + } + return false; + }, + /** + * Get a list of valid anagrams that can be made from the given letters + * @returns Array + */ + getAnagrams: function getAnagrams(letters) { + if (typeof letters !== "string") { + throw "Anagrams expected string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + if (letters.length < PERMS_MIN_LEN) { + throw "getAnagrams expects at least " + PERMS_MIN_LEN + " letters"; + } + return (0, _permutations2.default)(letters, trie, { + type: "anagram" + }); + }, + /** + * Get a list of all sub-anagrams that can be made from the given letters + * @returns Array + */ + getSubAnagrams: function getSubAnagrams(letters) { + if (typeof letters !== "string") { + throw "Expected string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + if (letters.length < PERMS_MIN_LEN) { + throw "getSubAnagrams expects at least " + PERMS_MIN_LEN + " letters"; + } + return (0, _permutations2.default)(letters, trie, { + type: "sub-anagram" + }); + } + }; + }; + var _create = createExports; + var _create2 = _interopRequireDefault(_create); + var _append = appendExports; + var _append2 = _interopRequireDefault(_append); + var _checkPrefix5 = checkPrefixExports; + var _checkPrefix6 = _interopRequireDefault(_checkPrefix5); + var _recursePrefix = recursePrefixExports; + var _recursePrefix2 = _interopRequireDefault(_recursePrefix); + var _recurseRandomWord = recurseRandomWordExports; + var _recurseRandomWord2 = _interopRequireDefault(_recurseRandomWord); + var _utils = utilsExports; + var _utils2 = _interopRequireDefault(_utils); + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + var _permutations = permutationsExports; + var _permutations2 = _interopRequireDefault(_permutations); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function _toConsumableArray(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { + arr2[i] = arr[i]; + } + return arr2; + } else { + return Array.from(arr); + } + } + var PERMS_MIN_LEN = _config2.default.PERMS_MIN_LEN; + module.exports = exports["default"]; +})(dist, dist.exports); +function scan(nodes, token, options2) { + const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } = options2 || {}; + if (typeof token === "string") { + token = { type: "string", content: token }; + } + for (let i = startIndex || 0; i < nodes.length; i++) { + const node = nodes[i]; + if (node.type === token.type) { + switch (node.type) { + case "comment": + case "displaymath": + case "inlinemath": + case "root": + case "parbreak": + case "whitespace": + case "verb": + case "verbatim": + case "group": + return i; + case "macro": + if (node.content === token.content) { + return i; + } + break; + case "environment": + case "mathenv": + if (printRaw(node.env) === printRaw(token.env)) { + return i; + } + break; + case "string": + if (node.content === token.content) { + return i; + } + if (allowSubstringMatches && node.content.indexOf(token.content) >= 0) { + return i; + } + break; + } + } + if (onlySkipWhitespaceAndComments && !match.whitespace(node) && !match.comment(node)) { + return null; + } + } + return null; +} +function updateRenderInfo(node, renderInfo) { + if (renderInfo != null) { + node._renderInfo = { ...node._renderInfo || {}, ...renderInfo }; + } + return node; +} +function gobbleSingleArgument(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "string" || !argSpec.type) { + throw new Error( + `argSpec must be an already-parsed argument specification, not "${JSON.stringify( + argSpec + )}"` + ); + } + let argument = null; + let currPos = startPos; + const gobbleWhitespace = argSpec.noLeadingWhitespace ? () => { + } : () => { + while (currPos < nodes.length) { + if (!match.whitespace(nodes[currPos])) { + break; + } + currPos++; + } + }; + const openMark = argSpec.openBrace || ""; + const closeMark = argSpec.closeBrace || ""; + const acceptGroup = (argSpec.type === "mandatory" || argSpec.type === "optional") && openMark === "{" && closeMark === "}"; + function findBracePositions() { + let openMarkPos = null; + if (openMark) { + openMarkPos = nodes.findIndex( + (node, i) => i >= currPos && match.string(node, openMark) + ); + if (openMarkPos < currPos) { + openMarkPos = null; + } + } + let closeMarkPos = null; + if (openMarkPos != null) { + closeMarkPos = nodes.findIndex( + (node, i) => i >= openMarkPos + 1 && match.string(node, closeMark) + ); + if (closeMarkPos < openMarkPos + 1) { + closeMarkPos = null; + } + } + return [openMarkPos, closeMarkPos]; + } + gobbleWhitespace(); + const currNode = nodes[currPos]; + if (currNode == null || match.comment(currNode) || match.parbreak(currNode)) { + return { argument, nodesRemoved: 0 }; + } + switch (argSpec.type) { + case "mandatory": + if (acceptGroup) { + let content = [currNode]; + if (match.group(currNode)) { + content = currNode.content; + } + argument = arg(content, { + openMark, + closeMark + }); + currPos++; + break; + } + case "optional": + if (acceptGroup && match.group(currNode)) { + argument = arg(currNode.content, { + openMark, + closeMark + }); + currPos++; + break; + } + if (match.string(currNode, openMark)) { + const [openMarkPos, closeMarkPos] = findBracePositions(); + if (openMarkPos != null && closeMarkPos != null) { + argument = arg(nodes.slice(openMarkPos + 1, closeMarkPos), { + openMark, + closeMark + }); + currPos = closeMarkPos + 1; + break; + } + } + break; + case "optionalStar": + case "optionalToken": + if (match.string( + currNode, + argSpec.type === "optionalStar" ? "*" : argSpec.token + )) { + argument = arg([currNode], { openMark: "", closeMark: "" }); + currPos++; + break; + } + break; + case "until": { + if (argSpec.stopTokens.length > 1) { + console.warn( + `"until" matches with multi-token stop conditions are not yet implemented` + ); + break; + } + const rawToken = argSpec.stopTokens[0]; + const stopToken = rawToken === " " ? { type: "whitespace" } : { type: "string", content: argSpec.stopTokens[0] }; + let matchPos = scan(nodes, stopToken, { + startIndex: startPos, + allowSubstringMatches: true + }); + if (matchPos != null && partialStringMatch(nodes[matchPos], stopToken)) { + console.warn( + `"until" arguments that stop at non-punctuation symbols is not yet implemented` + ); + break; + } + if (matchPos == null) { + break; + } + argument = arg(nodes.slice(startPos, matchPos), { + openMark: "", + closeMark: rawToken + }); + currPos = matchPos; + if (currPos < nodes.length) { + currPos++; + } + break; + } + default: + console.warn( + `Don't know how to find an argument of argspec type "${argSpec.type}"` + ); + } + const nodesRemoved = argument ? currPos - startPos : 0; + nodes.splice(startPos, nodesRemoved); + return { argument, nodesRemoved }; +} +function partialStringMatch(node, token) { + return match.anyString(node) && match.anyString(token) && node.content.length > token.content.length; +} +function gobbleArguments(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "function") { + return argSpec(nodes, startPos); + } + if (typeof argSpec === "string") { + argSpec = parse$2(argSpec); + } + const args = []; + let nodesRemoved = 0; + for (const spec of argSpec) { + const { argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + spec, + startPos + ); + if (argument) { + args.push(argument); + nodesRemoved += removed; + } else { + args.push(arg([], { openMark: "", closeMark: "" })); + } + } + return { args, nodesRemoved }; +} +function attachMacroArgsInArray(nodes, macros17) { + let currIndex; + const isRelevantMacro = match.createMacroMatcher(macros17); + function gobbleUntilMacro() { + while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) { + currIndex--; + } + } + currIndex = nodes.length - 1; + while (currIndex >= 0) { + gobbleUntilMacro(); + if (currIndex < 0) { + return; + } + const macroIndex = currIndex; + const macro = nodes[macroIndex]; + const macroName = macro.content; + const macroInfo2 = macros17[macroName]; + updateRenderInfo(macro, macroInfo2.renderInfo); + const signatureOrParser = macroInfo2.argumentParser || macroInfo2.signature; + if (signatureOrParser == null) { + currIndex--; + continue; + } + if (macro.args != null) { + currIndex = macroIndex - 1; + continue; + } + currIndex++; + const { args } = gobbleArguments(nodes, signatureOrParser, currIndex); + macro.args = args; + currIndex = macroIndex - 1; + } +} +parse$2("o")[0]; +function createMatchers$3() { + return { + isChar: match.string, + isTerminal: (node) => match.string(node, ";"), + isOperation: (node) => match.anyString(node) && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => match.whitespace(node) || match.parbreak(node), + isComment: match.comment, + isGroup: match.group, + isMacro: match.macro, + isAnyMacro: match.anyMacro + }; +} +var matchers = createMatchers$3(); +function parse$1(ast, options2) { + const { startRule = "path_spec" } = options2 || {}; + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return TikzPegParser.parse(ast, { + ...matchers, + startRule + }); +} +function createMatchers$2() { + return { + isChar: (node, char) => match.string(node, char), + isComma: (node) => match.string(node, ","), + isEquals: (node) => match.string(node, "="), + isWhitespace: (node) => match.whitespace(node), + isParbreak: (node) => match.parbreak(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parsePgfkeys(ast, options2) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + const { allowParenGroups = false } = options2 || {}; + ast = decorateArrayForPegjs([...ast]); + return PgfkeysPegParser.parse(ast, { + ...createMatchers$2(), + allowParenGroups + }); +} +function createMatchers$1(rowSepMacros, colSep) { + const isRowSep = match.createMacroMatcher(rowSepMacros); + return { + isRowSep, + isColSep: (node) => colSep.some((sep) => match.string(node, sep)), + isWhitespace: (node) => match.whitespace(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parseAlignEnvironment(ast, colSep = ["&"], rowSepMacros = ["\\", "hline", "cr"]) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return AlignEnvironmentPegParser.parse( + ast, + createMatchers$1(rowSepMacros, colSep) + ); +} +function bail(error) { + if (error) { + throw error; + } +} +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var isBuffer = function isBuffer2(obj) { + return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj); +}; +const isBuffer$1 = /* @__PURE__ */ getDefaultExportFromCjs(isBuffer); +var hasOwn = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var defineProperty = Object.defineProperty; +var gOPD = Object.getOwnPropertyDescriptor; +var isArray = function isArray2(arr) { + if (typeof Array.isArray === "function") { + return Array.isArray(arr); + } + return toStr.call(arr) === "[object Array]"; +}; +var isPlainObject$1 = function isPlainObject(obj) { + if (!obj || toStr.call(obj) !== "[object Object]") { + return false; + } + var hasOwnConstructor = hasOwn.call(obj, "constructor"); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf"); + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } + var key; + for (key in obj) { + } + return typeof key === "undefined" || hasOwn.call(obj, key); +}; +var setProperty = function setProperty2(target, options2) { + if (defineProperty && options2.name === "__proto__") { + defineProperty(target, options2.name, { + enumerable: true, + configurable: true, + value: options2.newValue, + writable: true + }); + } else { + target[options2.name] = options2.newValue; + } +}; +var getProperty = function getProperty2(obj, name) { + if (name === "__proto__") { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + return gOPD(obj, name).value; + } + } + return obj[name]; +}; +var extend = function extend2() { + var options2, name, src, copy, copyIsArray, clone; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + i = 2; + } + if (target == null || typeof target !== "object" && typeof target !== "function") { + target = {}; + } + for (; i < length; ++i) { + options2 = arguments[i]; + if (options2 != null) { + for (name in options2) { + src = getProperty(target, name); + copy = getProperty(options2, name); + if (target !== copy) { + if (deep && copy && (isPlainObject$1(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + } else { + clone = src && isPlainObject$1(src) ? src : {}; + } + setProperty(target, { name, newValue: extend2(deep, clone, copy) }); + } else if (typeof copy !== "undefined") { + setProperty(target, { name, newValue: copy }); + } + } + } + } + } + return target; +}; +const extend$1 = /* @__PURE__ */ getDefaultExportFromCjs(extend); +function isPlainObject2(value) { + if (typeof value !== "object" || value === null) { + return false; + } + const prototype = Object.getPrototypeOf(value); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); +} +function trough() { + const fns = []; + const pipeline = { run, use }; + return pipeline; + function run(...values) { + let middlewareIndex = -1; + const callback = values.pop(); + if (typeof callback !== "function") { + throw new TypeError("Expected function as last argument, not " + callback); + } + next(null, ...values); + function next(error, ...output) { + const fn = fns[++middlewareIndex]; + let index2 = -1; + if (error) { + callback(error); + return; + } + while (++index2 < values.length) { + if (output[index2] === null || output[index2] === void 0) { + output[index2] = values[index2]; + } + } + values = output; + if (fn) { + wrap(fn, next)(...output); + } else { + callback(null, ...output); + } + } + } + function use(middelware) { + if (typeof middelware !== "function") { + throw new TypeError( + "Expected `middelware` to be a function, not " + middelware + ); + } + fns.push(middelware); + return pipeline; + } +} +function wrap(middleware, callback) { + let called; + return wrapped; + function wrapped(...parameters) { + const fnExpectsCallback = middleware.length > parameters.length; + let result; + if (fnExpectsCallback) { + parameters.push(done); + } + try { + result = middleware.apply(this, parameters); + } catch (error) { + const exception = ( + /** @type {Error} */ + error + ); + if (fnExpectsCallback && called) { + throw exception; + } + return done(exception); + } + if (!fnExpectsCallback) { + if (result instanceof Promise) { + result.then(then, done); + } else if (result instanceof Error) { + done(result); + } else { + then(result); + } + } + } + function done(error, ...output) { + if (!called) { + called = true; + callback(error, ...output); + } + } + function then(value) { + done(null, value); + } +} +function stringifyPosition(value) { + if (!value || typeof value !== "object") { + return ""; + } + if ("position" in value || "type" in value) { + return position(value.position); + } + if ("start" in value || "end" in value) { + return position(value); + } + if ("line" in value || "column" in value) { + return point(value); + } + return ""; +} +function point(point2) { + return index(point2 && point2.line) + ":" + index(point2 && point2.column); +} +function position(pos) { + return point(pos && pos.start) + "-" + point(pos && pos.end); +} +function index(value) { + return value && typeof value === "number" ? value : 1; +} +class VFileMessage extends Error { + /** + * Create a message for `reason` at `place` from `origin`. + * + * When an error is passed in as `reason`, the `stack` is copied. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * + * > 👉 **Note**: you should use markdown. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns + * Instance of `VFileMessage`. + */ + // To do: next major: expose `undefined` everywhere instead of `null`. + constructor(reason, place, origin) { + const parts = [null, null]; + let position2 = { + // @ts-expect-error: we always follows the structure of `position`. + start: { line: null, column: null }, + // @ts-expect-error: " + end: { line: null, column: null } + }; + super(); + if (typeof place === "string") { + origin = place; + place = void 0; + } + if (typeof origin === "string") { + const index2 = origin.indexOf(":"); + if (index2 === -1) { + parts[1] = origin; + } else { + parts[0] = origin.slice(0, index2); + parts[1] = origin.slice(index2 + 1); + } + } + if (place) { + if ("type" in place || "position" in place) { + if (place.position) { + position2 = place.position; + } + } else if ("start" in place || "end" in place) { + position2 = place; + } else if ("line" in place || "column" in place) { + position2.start = place; + } + } + this.name = stringifyPosition(place) || "1:1"; + this.message = typeof reason === "object" ? reason.message : reason; + this.stack = ""; + if (typeof reason === "object" && reason.stack) { + this.stack = reason.stack; + } + this.reason = this.message; + this.fatal; + this.line = position2.start.line; + this.column = position2.start.column; + this.position = position2; + this.source = parts[0]; + this.ruleId = parts[1]; + this.file; + this.actual; + this.expected; + this.url; + this.note; + } +} +VFileMessage.prototype.file = ""; +VFileMessage.prototype.name = ""; +VFileMessage.prototype.reason = ""; +VFileMessage.prototype.message = ""; +VFileMessage.prototype.stack = ""; +VFileMessage.prototype.fatal = null; +VFileMessage.prototype.column = null; +VFileMessage.prototype.line = null; +VFileMessage.prototype.source = null; +VFileMessage.prototype.ruleId = null; +VFileMessage.prototype.position = null; +const path = { basename, dirname, extname, join: join$1, sep: "/" }; +function basename(path2, ext) { + if (ext !== void 0 && typeof ext !== "string") { + throw new TypeError('"ext" argument must be a string'); + } + assertPath$1(path2); + let start = 0; + let end = -1; + let index2 = path2.length; + let seenNonSlash; + if (ext === void 0 || ext.length === 0 || ext.length > path2.length) { + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else if (end < 0) { + seenNonSlash = true; + end = index2 + 1; + } + } + return end < 0 ? "" : path2.slice(start, end); + } + if (ext === path2) { + return ""; + } + let firstNonSlashEnd = -1; + let extIndex = ext.length - 1; + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else { + if (firstNonSlashEnd < 0) { + seenNonSlash = true; + firstNonSlashEnd = index2 + 1; + } + if (extIndex > -1) { + if (path2.charCodeAt(index2) === ext.charCodeAt(extIndex--)) { + if (extIndex < 0) { + end = index2; + } + } else { + extIndex = -1; + end = firstNonSlashEnd; + } + } + } + } + if (start === end) { + end = firstNonSlashEnd; + } else if (end < 0) { + end = path2.length; + } + return path2.slice(start, end); +} +function dirname(path2) { + assertPath$1(path2); + if (path2.length === 0) { + return "."; + } + let end = -1; + let index2 = path2.length; + let unmatchedSlash; + while (--index2) { + if (path2.charCodeAt(index2) === 47) { + if (unmatchedSlash) { + end = index2; + break; + } + } else if (!unmatchedSlash) { + unmatchedSlash = true; + } + } + return end < 0 ? path2.charCodeAt(0) === 47 ? "/" : "." : end === 1 && path2.charCodeAt(0) === 47 ? "//" : path2.slice(0, end); +} +function extname(path2) { + assertPath$1(path2); + let index2 = path2.length; + let end = -1; + let startPart = 0; + let startDot = -1; + let preDotState = 0; + let unmatchedSlash; + while (index2--) { + const code = path2.charCodeAt(index2); + if (code === 47) { + if (unmatchedSlash) { + startPart = index2 + 1; + break; + } + continue; + } + if (end < 0) { + unmatchedSlash = true; + end = index2 + 1; + } + if (code === 46) { + if (startDot < 0) { + startDot = index2; + } else if (preDotState !== 1) { + preDotState = 1; + } + } else if (startDot > -1) { + preDotState = -1; + } + } + if (startDot < 0 || end < 0 || // We saw a non-dot character immediately before the dot. + preDotState === 0 || // The (right-most) trimmed path component is exactly `..`. + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ""; + } + return path2.slice(startDot, end); +} +function join$1(...segments) { + let index2 = -1; + let joined; + while (++index2 < segments.length) { + assertPath$1(segments[index2]); + if (segments[index2]) { + joined = joined === void 0 ? segments[index2] : joined + "/" + segments[index2]; + } + } + return joined === void 0 ? "." : normalize(joined); +} +function normalize(path2) { + assertPath$1(path2); + const absolute = path2.charCodeAt(0) === 47; + let value = normalizeString(path2, !absolute); + if (value.length === 0 && !absolute) { + value = "."; + } + if (value.length > 0 && path2.charCodeAt(path2.length - 1) === 47) { + value += "/"; + } + return absolute ? "/" + value : value; +} +function normalizeString(path2, allowAboveRoot) { + let result = ""; + let lastSegmentLength = 0; + let lastSlash = -1; + let dots = 0; + let index2 = -1; + let code; + let lastSlashIndex; + while (++index2 <= path2.length) { + if (index2 < path2.length) { + code = path2.charCodeAt(index2); + } else if (code === 47) { + break; + } else { + code = 47; + } + if (code === 47) { + if (lastSlash === index2 - 1 || dots === 1) + ; + else if (lastSlash !== index2 - 1 && dots === 2) { + if (result.length < 2 || lastSegmentLength !== 2 || result.charCodeAt(result.length - 1) !== 46 || result.charCodeAt(result.length - 2) !== 46) { + if (result.length > 2) { + lastSlashIndex = result.lastIndexOf("/"); + if (lastSlashIndex !== result.length - 1) { + if (lastSlashIndex < 0) { + result = ""; + lastSegmentLength = 0; + } else { + result = result.slice(0, lastSlashIndex); + lastSegmentLength = result.length - 1 - result.lastIndexOf("/"); + } + lastSlash = index2; + dots = 0; + continue; + } + } else if (result.length > 0) { + result = ""; + lastSegmentLength = 0; + lastSlash = index2; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + result = result.length > 0 ? result + "/.." : ".."; + lastSegmentLength = 2; + } + } else { + if (result.length > 0) { + result += "/" + path2.slice(lastSlash + 1, index2); + } else { + result = path2.slice(lastSlash + 1, index2); + } + lastSegmentLength = index2 - lastSlash - 1; + } + lastSlash = index2; + dots = 0; + } else if (code === 46 && dots > -1) { + dots++; + } else { + dots = -1; + } + } + return result; +} +function assertPath$1(path2) { + if (typeof path2 !== "string") { + throw new TypeError( + "Path must be a string. Received " + JSON.stringify(path2) + ); + } +} +const proc = { cwd }; +function cwd() { + return "/"; +} +function isUrl(fileUrlOrPath) { + return fileUrlOrPath !== null && typeof fileUrlOrPath === "object" && // @ts-expect-error: indexable. + fileUrlOrPath.href && // @ts-expect-error: indexable. + fileUrlOrPath.origin; +} +function urlToPath(path2) { + if (typeof path2 === "string") { + path2 = new URL(path2); + } else if (!isUrl(path2)) { + const error = new TypeError( + 'The "path" argument must be of type string or an instance of URL. Received `' + path2 + "`" + ); + error.code = "ERR_INVALID_ARG_TYPE"; + throw error; + } + if (path2.protocol !== "file:") { + const error = new TypeError("The URL must be of scheme file"); + error.code = "ERR_INVALID_URL_SCHEME"; + throw error; + } + return getPathFromURLPosix(path2); +} +function getPathFromURLPosix(url) { + if (url.hostname !== "") { + const error = new TypeError( + 'File URL host must be "localhost" or empty on darwin' + ); + error.code = "ERR_INVALID_FILE_URL_HOST"; + throw error; + } + const pathname = url.pathname; + let index2 = -1; + while (++index2 < pathname.length) { + if (pathname.charCodeAt(index2) === 37 && pathname.charCodeAt(index2 + 1) === 50) { + const third = pathname.charCodeAt(index2 + 2); + if (third === 70 || third === 102) { + const error = new TypeError( + "File URL path must not include encoded / characters" + ); + error.code = "ERR_INVALID_FILE_URL_PATH"; + throw error; + } + } + } + return decodeURIComponent(pathname); +} +const order = ["history", "path", "basename", "stem", "extname", "dirname"]; +class VFile { + /** + * Create a new virtual file. + * + * `options` is treated as: + * + * * `string` or `Buffer` — `{value: options}` + * * `URL` — `{path: options}` + * * `VFile` — shallow copies its data over to the new file + * * `object` — all fields are shallow copied over to the new file + * + * Path related fields are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * You cannot set `dirname` or `extname` without setting either `history`, + * `path`, `basename`, or `stem` too. + * + * @param {Compatible | null | undefined} [value] + * File value. + * @returns + * New instance. + */ + constructor(value) { + let options2; + if (!value) { + options2 = {}; + } else if (typeof value === "string" || buffer(value)) { + options2 = { value }; + } else if (isUrl(value)) { + options2 = { path: value }; + } else { + options2 = value; + } + this.data = {}; + this.messages = []; + this.history = []; + this.cwd = proc.cwd(); + this.value; + this.stored; + this.result; + this.map; + let index2 = -1; + while (++index2 < order.length) { + const prop2 = order[index2]; + if (prop2 in options2 && options2[prop2] !== void 0 && options2[prop2] !== null) { + this[prop2] = prop2 === "history" ? [...options2[prop2]] : options2[prop2]; + } + } + let prop; + for (prop in options2) { + if (!order.includes(prop)) { + this[prop] = options2[prop]; + } + } + } + /** + * Get the full path (example: `'~/index.min.js'`). + * + * @returns {string} + */ + get path() { + return this.history[this.history.length - 1]; + } + /** + * Set the full path (example: `'~/index.min.js'`). + * + * Cannot be nullified. + * You can set a file URL (a `URL` object with a `file:` protocol) which will + * be turned into a path with `url.fileURLToPath`. + * + * @param {string | URL} path + */ + set path(path2) { + if (isUrl(path2)) { + path2 = urlToPath(path2); + } + assertNonEmpty(path2, "path"); + if (this.path !== path2) { + this.history.push(path2); + } + } + /** + * Get the parent path (example: `'~'`). + */ + get dirname() { + return typeof this.path === "string" ? path.dirname(this.path) : void 0; + } + /** + * Set the parent path (example: `'~'`). + * + * Cannot be set if there’s no `path` yet. + */ + set dirname(dirname2) { + assertPath(this.basename, "dirname"); + this.path = path.join(dirname2 || "", this.basename); + } + /** + * Get the basename (including extname) (example: `'index.min.js'`). + */ + get basename() { + return typeof this.path === "string" ? path.basename(this.path) : void 0; + } + /** + * Set basename (including extname) (`'index.min.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set basename(basename2) { + assertNonEmpty(basename2, "basename"); + assertPart(basename2, "basename"); + this.path = path.join(this.dirname || "", basename2); + } + /** + * Get the extname (including dot) (example: `'.js'`). + */ + get extname() { + return typeof this.path === "string" ? path.extname(this.path) : void 0; + } + /** + * Set the extname (including dot) (example: `'.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be set if there’s no `path` yet. + */ + set extname(extname2) { + assertPart(extname2, "extname"); + assertPath(this.dirname, "extname"); + if (extname2) { + if (extname2.charCodeAt(0) !== 46) { + throw new Error("`extname` must start with `.`"); + } + if (extname2.includes(".", 1)) { + throw new Error("`extname` cannot contain multiple dots"); + } + } + this.path = path.join(this.dirname, this.stem + (extname2 || "")); + } + /** + * Get the stem (basename w/o extname) (example: `'index.min'`). + */ + get stem() { + return typeof this.path === "string" ? path.basename(this.path, this.extname) : void 0; + } + /** + * Set the stem (basename w/o extname) (example: `'index.min'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set stem(stem) { + assertNonEmpty(stem, "stem"); + assertPart(stem, "stem"); + this.path = path.join(this.dirname || "", stem + (this.extname || "")); + } + /** + * Serialize the file. + * + * @param {BufferEncoding | null | undefined} [encoding='utf8'] + * Character encoding to understand `value` as when it’s a `Buffer` + * (default: `'utf8'`). + * @returns {string} + * Serialized file. + */ + toString(encoding) { + return (this.value || "").toString(encoding || void 0); + } + /** + * Create a warning message associated with the file. + * + * Its `fatal` is set to `false` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + message(reason, place, origin) { + const message = new VFileMessage(reason, place, origin); + if (this.path) { + message.name = this.path + ":" + message.name; + message.file = this.path; + } + message.fatal = false; + this.messages.push(message); + return message; + } + /** + * Create an info message associated with the file. + * + * Its `fatal` is set to `null` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + info(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = null; + return message; + } + /** + * Create a fatal error associated with the file. + * + * Its `fatal` is set to `true` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * > 👉 **Note**: a fatal error means that a file is no longer processable. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {never} + * Message. + * @throws {VFileMessage} + * Message. + */ + fail(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = true; + throw message; + } +} +function assertPart(part, name) { + if (part && part.includes(path.sep)) { + throw new Error( + "`" + name + "` cannot be a path: did not expect `" + path.sep + "`" + ); + } +} +function assertNonEmpty(part, name) { + if (!part) { + throw new Error("`" + name + "` cannot be empty"); + } +} +function assertPath(path2, name) { + if (!path2) { + throw new Error("Setting `" + name + "` requires `path` to be set too"); + } +} +function buffer(value) { + return isBuffer$1(value); +} +const unified = base().freeze(); +const own = {}.hasOwnProperty; +function base() { + const transformers = trough(); + const attachers = []; + let namespace = {}; + let frozen; + let freezeIndex = -1; + processor.data = data; + processor.Parser = void 0; + processor.Compiler = void 0; + processor.freeze = freeze; + processor.attachers = attachers; + processor.use = use; + processor.parse = parse2; + processor.stringify = stringify; + processor.run = run; + processor.runSync = runSync; + processor.process = process; + processor.processSync = processSync; + return processor; + function processor() { + const destination = base(); + let index2 = -1; + while (++index2 < attachers.length) { + destination.use(...attachers[index2]); + } + destination.data(extend$1(true, {}, namespace)); + return destination; + } + function data(key, value) { + if (typeof key === "string") { + if (arguments.length === 2) { + assertUnfrozen("data", frozen); + namespace[key] = value; + return processor; + } + return own.call(namespace, key) && namespace[key] || null; + } + if (key) { + assertUnfrozen("data", frozen); + namespace = key; + return processor; + } + return namespace; + } + function freeze() { + if (frozen) { + return processor; + } + while (++freezeIndex < attachers.length) { + const [attacher, ...options2] = attachers[freezeIndex]; + if (options2[0] === false) { + continue; + } + if (options2[0] === true) { + options2[0] = void 0; + } + const transformer = attacher.call(processor, ...options2); + if (typeof transformer === "function") { + transformers.use(transformer); + } + } + frozen = true; + freezeIndex = Number.POSITIVE_INFINITY; + return processor; + } + function use(value, ...options2) { + let settings; + assertUnfrozen("use", frozen); + if (value === null || value === void 0) + ; + else if (typeof value === "function") { + addPlugin(value, ...options2); + } else if (typeof value === "object") { + if (Array.isArray(value)) { + addList(value); + } else { + addPreset(value); + } + } else { + throw new TypeError("Expected usable value, not `" + value + "`"); + } + if (settings) { + namespace.settings = Object.assign(namespace.settings || {}, settings); + } + return processor; + function add(value2) { + if (typeof value2 === "function") { + addPlugin(value2); + } else if (typeof value2 === "object") { + if (Array.isArray(value2)) { + const [plugin, ...options3] = value2; + addPlugin(plugin, ...options3); + } else { + addPreset(value2); + } + } else { + throw new TypeError("Expected usable value, not `" + value2 + "`"); + } + } + function addPreset(result) { + addList(result.plugins); + if (result.settings) { + settings = Object.assign(settings || {}, result.settings); + } + } + function addList(plugins) { + let index2 = -1; + if (plugins === null || plugins === void 0) + ; + else if (Array.isArray(plugins)) { + while (++index2 < plugins.length) { + const thing = plugins[index2]; + add(thing); + } + } else { + throw new TypeError("Expected a list of plugins, not `" + plugins + "`"); + } + } + function addPlugin(plugin, value2) { + let index2 = -1; + let entry; + while (++index2 < attachers.length) { + if (attachers[index2][0] === plugin) { + entry = attachers[index2]; + break; + } + } + if (entry) { + if (isPlainObject2(entry[1]) && isPlainObject2(value2)) { + value2 = extend$1(true, entry[1], value2); + } + entry[1] = value2; + } else { + attachers.push([...arguments]); + } + } + } + function parse2(doc) { + processor.freeze(); + const file = vfile(doc); + const Parser = processor.Parser; + assertParser("parse", Parser); + if (newable(Parser, "parse")) { + return new Parser(String(file), file).parse(); + } + return Parser(String(file), file); + } + function stringify(node, doc) { + processor.freeze(); + const file = vfile(doc); + const Compiler = processor.Compiler; + assertCompiler("stringify", Compiler); + assertNode(node); + if (newable(Compiler, "compile")) { + return new Compiler(node, file).compile(); + } + return Compiler(node, file); + } + function run(node, doc, callback) { + assertNode(node); + processor.freeze(); + if (!callback && typeof doc === "function") { + callback = doc; + doc = void 0; + } + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + transformers.run(node, vfile(doc), done); + function done(error, tree, file) { + tree = tree || node; + if (error) { + reject(error); + } else if (resolve) { + resolve(tree); + } else { + callback(null, tree, file); + } + } + } + } + function runSync(node, file) { + let result; + let complete; + processor.run(node, file, done); + assertDone("runSync", "run", complete); + return result; + function done(error, tree) { + bail(error); + result = tree; + complete = true; + } + } + function process(doc, callback) { + processor.freeze(); + assertParser("process", processor.Parser); + assertCompiler("process", processor.Compiler); + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + const file = vfile(doc); + processor.run(processor.parse(file), file, (error, tree, file2) => { + if (error || !tree || !file2) { + done(error); + } else { + const result = processor.stringify(tree, file2); + if (result === void 0 || result === null) + ; + else if (looksLikeAVFileValue(result)) { + file2.value = result; + } else { + file2.result = result; + } + done(error, file2); + } + }); + function done(error, file2) { + if (error || !file2) { + reject(error); + } else if (resolve) { + resolve(file2); + } else { + callback(null, file2); + } + } + } + } + function processSync(doc) { + let complete; + processor.freeze(); + assertParser("processSync", processor.Parser); + assertCompiler("processSync", processor.Compiler); + const file = vfile(doc); + processor.process(file, done); + assertDone("processSync", "process", complete); + return file; + function done(error) { + complete = true; + bail(error); + } + } +} +function newable(value, name) { + return typeof value === "function" && // Prototypes do exist. + // type-coverage:ignore-next-line + value.prototype && // A function with keys in its prototype is probably a constructor. + // Classes’ prototype methods are not enumerable, so we check if some value + // exists in the prototype. + // type-coverage:ignore-next-line + (keys(value.prototype) || name in value.prototype); +} +function keys(value) { + let key; + for (key in value) { + if (own.call(value, key)) { + return true; + } + } + return false; +} +function assertParser(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Parser`"); + } +} +function assertCompiler(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Compiler`"); + } +} +function assertUnfrozen(name, frozen) { + if (frozen) { + throw new Error( + "Cannot call `" + name + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`." + ); + } +} +function assertNode(node) { + if (!isPlainObject2(node) || typeof node.type !== "string") { + throw new TypeError("Expected node, got `" + node + "`"); + } +} +function assertDone(name, asyncName, complete) { + if (!complete) { + throw new Error( + "`" + name + "` finished async. Use `" + asyncName + "` instead" + ); + } +} +function vfile(value) { + return looksLikeAVFile(value) ? value : new VFile(value); +} +function looksLikeAVFile(value) { + return Boolean( + value && typeof value === "object" && "message" in value && "messages" in value + ); +} +function looksLikeAVFileValue(value) { + return typeof value === "string" || isBuffer$1(value); +} +function splitOnCondition(nodes, splitFunc = () => false, options2) { + if (!Array.isArray(nodes)) { + throw new Error(`Can only split an Array, not ${nodes}`); + } + const { onlySplitOnFirstOccurrence = false } = options2 || {}; + const splitIndices = []; + for (let i = 0; i < nodes.length; i++) { + if (splitFunc(nodes[i])) { + splitIndices.push(i); + if (onlySplitOnFirstOccurrence) { + break; + } + } + } + if (splitIndices.length === 0) { + return { segments: [nodes], separators: [] }; + } + let separators = splitIndices.map((i) => nodes[i]); + let segments = splitIndices.map((splitEnd, i) => { + const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1; + return nodes.slice(splitStart, splitEnd); + }); + segments.push( + nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length) + ); + return { segments, separators }; +} +function splitOnMacro(ast, macroName) { + if (typeof macroName === "string") { + macroName = [macroName]; + } + if (!Array.isArray(macroName)) { + throw new Error("Type coercion failed"); + } + const isSeparator = match.createMacroMatcher(macroName); + const { segments, separators } = splitOnCondition(ast, isSeparator); + return { segments, macros: separators }; +} +function lastSignificantNodeIndex(nodes, parbreaksAreInsignificant) { + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (match.whitespace(node) || match.comment(node) || parbreaksAreInsignificant && match.parbreak(node)) { + continue; + } + return i; + } + return void 0; +} +var colorString$1 = { exports: {} }; +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; +var simpleSwizzle = { exports: {} }; +var isArrayish$1 = function isArrayish(obj) { + if (!obj || typeof obj === "string") { + return false; + } + return obj instanceof Array || Array.isArray(obj) || obj.length >= 0 && (obj.splice instanceof Function || Object.getOwnPropertyDescriptor(obj, obj.length - 1) && obj.constructor.name !== "String"); +}; +var isArrayish2 = isArrayish$1; +var concat = Array.prototype.concat; +var slice = Array.prototype.slice; +var swizzle$1 = simpleSwizzle.exports = function swizzle(args) { + var results = []; + for (var i = 0, len = args.length; i < len; i++) { + var arg2 = args[i]; + if (isArrayish2(arg2)) { + results = concat.call(results, slice.call(arg2)); + } else { + results.push(arg2); + } + } + return results; +}; +swizzle$1.wrap = function(fn) { + return function() { + return fn(swizzle$1(arguments)); + }; +}; +var simpleSwizzleExports = simpleSwizzle.exports; +var colorNames = colorName; +var swizzle2 = simpleSwizzleExports; +var hasOwnProperty = Object.hasOwnProperty; +var reverseNames = /* @__PURE__ */ Object.create(null); +for (var name in colorNames) { + if (hasOwnProperty.call(colorNames, name)) { + reverseNames[colorNames[name]] = name; + } +} +var cs = colorString$1.exports = { + to: {}, + get: {} +}; +cs.get = function(string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case "hsl": + val = cs.get.hsl(string); + model = "hsl"; + break; + case "hwb": + val = cs.get.hwb(string); + model = "hwb"; + break; + default: + val = cs.get.rgb(string); + model = "rgb"; + break; + } + if (!val) { + return null; + } + return { model, value: val }; +}; +cs.get.rgb = function(string) { + if (!string) { + return null; + } + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var keyword = /^(\w+)$/; + var rgb = [0, 0, 0, 1]; + var match2; + var i; + var hexAlpha; + if (match2 = string.match(hex)) { + hexAlpha = match2[2]; + match2 = match2[1]; + for (i = 0; i < 3; i++) { + var i2 = i * 2; + rgb[i] = parseInt(match2.slice(i2, i2 + 2), 16); + } + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match2 = string.match(abbr)) { + match2 = match2[1]; + hexAlpha = match2[3]; + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match2[i] + match2[i], 16); + } + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match2 = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match2[i + 1], 0); + } + if (match2[4]) { + if (match2[5]) { + rgb[3] = parseFloat(match2[4]) * 0.01; + } else { + rgb[3] = parseFloat(match2[4]); + } + } + } else if (match2 = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match2[i + 1]) * 2.55); + } + if (match2[4]) { + if (match2[5]) { + rgb[3] = parseFloat(match2[4]) * 0.01; + } else { + rgb[3] = parseFloat(match2[4]); + } + } + } else if (match2 = string.match(keyword)) { + if (match2[1] === "transparent") { + return [0, 0, 0, 0]; + } + if (!hasOwnProperty.call(colorNames, match2[1])) { + return null; + } + rgb = colorNames[match2[1]]; + rgb[3] = 1; + return rgb; + } else { + return null; + } + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + return rgb; +}; +cs.get.hsl = function(string) { + if (!string) { + return null; + } + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match2 = string.match(hsl); + if (match2) { + var alpha = parseFloat(match2[4]); + var h = (parseFloat(match2[1]) % 360 + 360) % 360; + var s2 = clamp(parseFloat(match2[2]), 0, 100); + var l = clamp(parseFloat(match2[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, s2, l, a]; + } + return null; +}; +cs.get.hwb = function(string) { + if (!string) { + return null; + } + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match2 = string.match(hwb); + if (match2) { + var alpha = parseFloat(match2[4]); + var h = (parseFloat(match2[1]) % 360 + 360) % 360; + var w = clamp(parseFloat(match2[2]), 0, 100); + var b = clamp(parseFloat(match2[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + return null; +}; +cs.to.hex = function() { + var rgba = swizzle2(arguments); + return "#" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (rgba[3] < 1 ? hexDouble(Math.round(rgba[3] * 255)) : ""); +}; +cs.to.rgb = function() { + var rgba = swizzle2(arguments); + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ")" : "rgba(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ", " + rgba[3] + ")"; +}; +cs.to.rgb.percent = function() { + var rgba = swizzle2(arguments); + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + r + "%, " + g + "%, " + b + "%)" : "rgba(" + r + "%, " + g + "%, " + b + "%, " + rgba[3] + ")"; +}; +cs.to.hsl = function() { + var hsla = swizzle2(arguments); + return hsla.length < 4 || hsla[3] === 1 ? "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)" : "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, " + hsla[3] + ")"; +}; +cs.to.hwb = function() { + var hwba = swizzle2(arguments); + var a = ""; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ", " + hwba[3]; + } + return "hwb(" + hwba[0] + ", " + hwba[1] + "%, " + hwba[2] + "%" + a + ")"; +}; +cs.to.keyword = function(rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; +function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); +} +function hexDouble(num) { + var str = Math.round(num).toString(16).toUpperCase(); + return str.length < 2 ? "0" + str : str; +} +var colorStringExports = colorString$1.exports; +const cssKeywords = colorName; +const reverseKeywords = {}; +for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; +} +const convert$2 = { + rgb: { channels: 3, labels: "rgb" }, + hsl: { channels: 3, labels: "hsl" }, + hsv: { channels: 3, labels: "hsv" }, + hwb: { channels: 3, labels: "hwb" }, + cmyk: { channels: 4, labels: "cmyk" }, + xyz: { channels: 3, labels: "xyz" }, + lab: { channels: 3, labels: "lab" }, + lch: { channels: 3, labels: "lch" }, + hex: { channels: 1, labels: ["hex"] }, + keyword: { channels: 1, labels: ["keyword"] }, + ansi16: { channels: 1, labels: ["ansi16"] }, + ansi256: { channels: 1, labels: ["ansi256"] }, + hcg: { channels: 3, labels: ["h", "c", "g"] }, + apple: { channels: 3, labels: ["r16", "g16", "b16"] }, + gray: { channels: 1, labels: ["gray"] } +}; +var conversions$2 = convert$2; +for (const model of Object.keys(convert$2)) { + if (!("channels" in convert$2[model])) { + throw new Error("missing channels property: " + model); + } + if (!("labels" in convert$2[model])) { + throw new Error("missing channel labels property: " + model); + } + if (convert$2[model].labels.length !== convert$2[model].channels) { + throw new Error("channel and label counts mismatch: " + model); + } + const { channels, labels } = convert$2[model]; + delete convert$2[model].channels; + delete convert$2[model].labels; + Object.defineProperty(convert$2[model], "channels", { value: channels }); + Object.defineProperty(convert$2[model], "labels", { value: labels }); +} +convert$2.rgb.hsl = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s2; + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + h = Math.min(h * 60, 360); + if (h < 0) { + h += 360; + } + const l = (min + max) / 2; + if (max === min) { + s2 = 0; + } else if (l <= 0.5) { + s2 = delta / (max + min); + } else { + s2 = delta / (2 - max - min); + } + return [h, s2 * 100, l * 100]; +}; +convert$2.rgb.hsv = function(rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s2; + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function(c) { + return (v - c) / 6 / diff + 1 / 2; + }; + if (diff === 0) { + h = 0; + s2 = 0; + } else { + s2 = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = 1 / 3 + rdif - bdif; + } else if (b === v) { + h = 2 / 3 + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + return [ + h * 360, + s2 * 100, + v * 100 + ]; +}; +convert$2.rgb.hwb = function(rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert$2.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + return [h, w * 100, b * 100]; +}; +convert$2.rgb.cmyk = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + return [c * 100, m * 100, y * 100, k * 100]; +}; +function comparativeDistance(x, y) { + return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2; +} +convert$2.rgb.keyword = function(rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + let currentClosestDistance = Infinity; + let currentClosestKeyword; + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + const distance = comparativeDistance(rgb, value); + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + return currentClosestKeyword; +}; +convert$2.keyword.rgb = function(keyword) { + return cssKeywords[keyword]; +}; +convert$2.rgb.xyz = function(rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92; + g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92; + b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92; + const x = r * 0.4124 + g * 0.3576 + b * 0.1805; + const y = r * 0.2126 + g * 0.7152 + b * 0.0722; + const z = r * 0.0193 + g * 0.1192 + b * 0.9505; + return [x * 100, y * 100, z * 100]; +}; +convert$2.rgb.lab = function(rgb) { + const xyz = convert$2.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; +}; +convert$2.hsl.rgb = function(hsl) { + const h = hsl[0] / 360; + const s2 = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + if (s2 === 0) { + val = l * 255; + return [val, val, val]; + } + if (l < 0.5) { + t2 = l * (1 + s2); + } else { + t2 = l + s2 - l * s2; + } + const t1 = 2 * l - t2; + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + rgb[i] = val * 255; + } + return rgb; +}; +convert$2.hsl.hsv = function(hsl) { + const h = hsl[0]; + let s2 = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s2; + const lmin = Math.max(l, 0.01); + l *= 2; + s2 *= l <= 1 ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s2) / 2; + const sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s2 / (l + s2); + return [h, sv * 100, v * 100]; +}; +convert$2.hsv.rgb = function(hsv) { + const h = hsv[0] / 60; + const s2 = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + const f = h - Math.floor(h); + const p = 255 * v * (1 - s2); + const q = 255 * v * (1 - s2 * f); + const t = 255 * v * (1 - s2 * (1 - f)); + v *= 255; + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; +convert$2.hsv.hsl = function(hsv) { + const h = hsv[0]; + const s2 = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + l = (2 - s2) * v; + const lmin = (2 - s2) * vmin; + sl = s2 * vmin; + sl /= lmin <= 1 ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + return [h, sl * 100, l * 100]; +}; +convert$2.hwb.rgb = function(hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + if ((i & 1) !== 0) { + f = 1 - f; + } + const n = wh + f * (v - wh); + let r; + let g; + let b; + switch (i) { + default: + case 6: + case 0: + r = v; + g = n; + b = wh; + break; + case 1: + r = n; + g = v; + b = wh; + break; + case 2: + r = wh; + g = v; + b = n; + break; + case 3: + r = wh; + g = n; + b = v; + break; + case 4: + r = n; + g = wh; + b = v; + break; + case 5: + r = v; + g = wh; + b = n; + break; + } + return [r * 255, g * 255, b * 255]; +}; +convert$2.cmyk.rgb = function(cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + return [r * 255, g * 255, b * 255]; +}; +convert$2.xyz.rgb = function(xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + r = x * 3.2406 + y * -1.5372 + z * -0.4986; + g = x * -0.9689 + y * 1.8758 + z * 0.0415; + b = x * 0.0557 + y * -0.204 + z * 1.057; + r = r > 31308e-7 ? 1.055 * r ** (1 / 2.4) - 0.055 : r * 12.92; + g = g > 31308e-7 ? 1.055 * g ** (1 / 2.4) - 0.055 : g * 12.92; + b = b > 31308e-7 ? 1.055 * b ** (1 / 2.4) - 0.055 : b * 12.92; + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + return [r * 255, g * 255, b * 255]; +}; +convert$2.xyz.lab = function(xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; +}; +convert$2.lab.xyz = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 8856e-6 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 8856e-6 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 8856e-6 ? z2 : (z - 16 / 116) / 7.787; + x *= 95.047; + y *= 100; + z *= 108.883; + return [x, y, z]; +}; +convert$2.lab.lch = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + if (h < 0) { + h += 360; + } + const c = Math.sqrt(a * a + b * b); + return [l, c, h]; +}; +convert$2.lch.lab = function(lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + return [l, a, b]; +}; +convert$2.rgb.ansi16 = function(args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert$2.rgb.hsv(args)[2] : saturation; + value = Math.round(value / 50); + if (value === 0) { + return 30; + } + let ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255)); + if (value === 2) { + ansi += 60; + } + return ansi; +}; +convert$2.hsv.ansi16 = function(args) { + return convert$2.rgb.ansi16(convert$2.hsv.rgb(args), args[2]); +}; +convert$2.rgb.ansi256 = function(args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + if (r === g && g === b) { + if (r < 8) { + return 16; + } + if (r > 248) { + return 231; + } + return Math.round((r - 8) / 247 * 24) + 232; + } + const ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5); + return ansi; +}; +convert$2.ansi16.rgb = function(args) { + let color2 = args % 10; + if (color2 === 0 || color2 === 7) { + if (args > 50) { + color2 += 3.5; + } + color2 = color2 / 10.5 * 255; + return [color2, color2, color2]; + } + const mult = (~~(args > 50) + 1) * 0.5; + const r = (color2 & 1) * mult * 255; + const g = (color2 >> 1 & 1) * mult * 255; + const b = (color2 >> 2 & 1) * mult * 255; + return [r, g, b]; +}; +convert$2.ansi256.rgb = function(args) { + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + args -= 16; + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = rem % 6 / 5 * 255; + return [r, g, b]; +}; +convert$2.rgb.hex = function(args) { + const integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255); + const string = integer.toString(16).toUpperCase(); + return "000000".substring(string.length) + string; +}; +convert$2.hex.rgb = function(args) { + const match2 = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match2) { + return [0, 0, 0]; + } + let colorString2 = match2[0]; + if (match2[0].length === 3) { + colorString2 = colorString2.split("").map((char) => { + return char + char; + }).join(""); + } + const integer = parseInt(colorString2, 16); + const r = integer >> 16 & 255; + const g = integer >> 8 & 255; + const b = integer & 255; + return [r, g, b]; +}; +convert$2.rgb.hcg = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = max - min; + let grayscale; + let hue; + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + if (chroma <= 0) { + hue = 0; + } else if (max === r) { + hue = (g - b) / chroma % 6; + } else if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + hue /= 6; + hue %= 1; + return [hue * 360, chroma * 100, grayscale * 100]; +}; +convert$2.hsl.hcg = function(hsl) { + const s2 = hsl[1] / 100; + const l = hsl[2] / 100; + const c = l < 0.5 ? 2 * s2 * l : 2 * s2 * (1 - l); + let f = 0; + if (c < 1) { + f = (l - 0.5 * c) / (1 - c); + } + return [hsl[0], c * 100, f * 100]; +}; +convert$2.hsv.hcg = function(hsv) { + const s2 = hsv[1] / 100; + const v = hsv[2] / 100; + const c = s2 * v; + let f = 0; + if (c < 1) { + f = (v - c) / (1 - c); + } + return [hsv[0], c * 100, f * 100]; +}; +convert$2.hcg.rgb = function(hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + if (c === 0) { + return [g * 255, g * 255, g * 255]; + } + const pure = [0, 0, 0]; + const hi = h % 1 * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; + pure[1] = v; + pure[2] = 0; + break; + case 1: + pure[0] = w; + pure[1] = 1; + pure[2] = 0; + break; + case 2: + pure[0] = 0; + pure[1] = 1; + pure[2] = v; + break; + case 3: + pure[0] = 0; + pure[1] = w; + pure[2] = 1; + break; + case 4: + pure[0] = v; + pure[1] = 0; + pure[2] = 1; + break; + default: + pure[0] = 1; + pure[1] = 0; + pure[2] = w; + } + mg = (1 - c) * g; + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; +convert$2.hcg.hsv = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + let f = 0; + if (v > 0) { + f = c / v; + } + return [hcg[0], f * 100, v * 100]; +}; +convert$2.hcg.hsl = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const l = g * (1 - c) + 0.5 * c; + let s2 = 0; + if (l > 0 && l < 0.5) { + s2 = c / (2 * l); + } else if (l >= 0.5 && l < 1) { + s2 = c / (2 * (1 - l)); + } + return [hcg[0], s2 * 100, l * 100]; +}; +convert$2.hcg.hwb = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; +convert$2.hwb.hcg = function(hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + if (c < 1) { + g = (v - c) / (1 - c); + } + return [hwb[0], c * 100, g * 100]; +}; +convert$2.apple.rgb = function(apple) { + return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; +}; +convert$2.rgb.apple = function(rgb) { + return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535]; +}; +convert$2.gray.rgb = function(args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; +convert$2.gray.hsl = function(args) { + return [0, 0, args[0]]; +}; +convert$2.gray.hsv = convert$2.gray.hsl; +convert$2.gray.hwb = function(gray) { + return [0, 100, gray[0]]; +}; +convert$2.gray.cmyk = function(gray) { + return [0, 0, 0, gray[0]]; +}; +convert$2.gray.lab = function(gray) { + return [gray[0], 0, 0]; +}; +convert$2.gray.hex = function(gray) { + const val = Math.round(gray[0] / 100 * 255) & 255; + const integer = (val << 16) + (val << 8) + val; + const string = integer.toString(16).toUpperCase(); + return "000000".substring(string.length) + string; +}; +convert$2.rgb.gray = function(rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; +const conversions$1 = conversions$2; +function buildGraph() { + const graph = {}; + const models2 = Object.keys(conversions$1); + for (let len = models2.length, i = 0; i < len; i++) { + graph[models2[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + return graph; +} +function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; + graph[fromModel].distance = 0; + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions$1[current]); + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + return graph; +} +function link(from, to) { + return function(args) { + return to(from(args)); + }; +} +function wrapConversion(toModel, graph) { + const path2 = [graph[toModel].parent, toModel]; + let fn = conversions$1[graph[toModel].parent][toModel]; + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path2.unshift(graph[cur].parent); + fn = link(conversions$1[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + fn.conversion = path2; + return fn; +} +var route$1 = function(fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + const models2 = Object.keys(graph); + for (let len = models2.length, i = 0; i < len; i++) { + const toModel = models2[i]; + const node = graph[toModel]; + if (node.parent === null) { + continue; + } + conversion[toModel] = wrapConversion(toModel, graph); + } + return conversion; +}; +const conversions = conversions$2; +const route = route$1; +const convert$1 = {}; +const models = Object.keys(conversions); +function wrapRaw(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + return fn(args); + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; +} +function wrapRounded(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + const result = fn(args); + if (typeof result === "object") { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + return result; + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; +} +models.forEach((fromModel) => { + convert$1[fromModel] = {}; + Object.defineProperty(convert$1[fromModel], "channels", { value: conversions[fromModel].channels }); + Object.defineProperty(convert$1[fromModel], "labels", { value: conversions[fromModel].labels }); + const routes = route(fromModel); + const routeModels = Object.keys(routes); + routeModels.forEach((toModel) => { + const fn = routes[toModel]; + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); +}); +var colorConvert = convert$1; +const colorString = colorStringExports; +const convert = colorConvert; +const skippedModels = [ + // To be honest, I don't really feel like keyword belongs in color convert, but eh. + "keyword", + // Gray conflicts with some method names, and has its own method defined. + "gray", + // Shouldn't really be in color-convert either... + "hex" +]; +const hashedModelKeys = {}; +for (const model of Object.keys(convert)) { + hashedModelKeys[[...convert[model].labels].sort().join("")] = model; +} +const limiters = {}; +function Color(object, model) { + if (!(this instanceof Color)) { + return new Color(object, model); + } + if (model && model in skippedModels) { + model = null; + } + if (model && !(model in convert)) { + throw new Error("Unknown model: " + model); + } + let i; + let channels; + if (object == null) { + this.model = "rgb"; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (object instanceof Color) { + this.model = object.model; + this.color = [...object.color]; + this.valpha = object.valpha; + } else if (typeof object === "string") { + const result = colorString.get(object); + if (result === null) { + throw new Error("Unable to parse color from string: " + object); + } + this.model = result.model; + channels = convert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === "number" ? result.value[channels] : 1; + } else if (object.length > 0) { + this.model = model || "rgb"; + channels = convert[this.model].channels; + const newArray = Array.prototype.slice.call(object, 0, channels); + this.color = zeroArray(newArray, channels); + this.valpha = typeof object[channels] === "number" ? object[channels] : 1; + } else if (typeof object === "number") { + this.model = "rgb"; + this.color = [ + object >> 16 & 255, + object >> 8 & 255, + object & 255 + ]; + this.valpha = 1; + } else { + this.valpha = 1; + const keys2 = Object.keys(object); + if ("alpha" in object) { + keys2.splice(keys2.indexOf("alpha"), 1); + this.valpha = typeof object.alpha === "number" ? object.alpha : 0; + } + const hashedKeys = keys2.sort().join(""); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error("Unable to parse color from object: " + JSON.stringify(object)); + } + this.model = hashedModelKeys[hashedKeys]; + const { labels } = convert[this.model]; + const color2 = []; + for (i = 0; i < labels.length; i++) { + color2.push(object[labels[i]]); + } + this.color = zeroArray(color2); + } + if (limiters[this.model]) { + channels = convert[this.model].channels; + for (i = 0; i < channels; i++) { + const limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + this.valpha = Math.max(0, Math.min(1, this.valpha)); + if (Object.freeze) { + Object.freeze(this); + } +} +Color.prototype = { + toString() { + return this.string(); + }, + toJSON() { + return this[this.model](); + }, + string(places) { + let self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === "number" ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to[self.model](args); + }, + percentString(places) { + const self = this.rgb().round(typeof places === "number" ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to.rgb.percent(args); + }, + array() { + return this.valpha === 1 ? [...this.color] : [...this.color, this.valpha]; + }, + object() { + const result = {}; + const { channels } = convert[this.model]; + const { labels } = convert[this.model]; + for (let i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + return result; + }, + unitArray() { + const rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + return rgb; + }, + unitObject() { + const rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + return rgb; + }, + round(places) { + places = Math.max(places || 0, 0); + return new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model); + }, + alpha(value) { + if (value !== void 0) { + return new Color([...this.color, Math.max(0, Math.min(1, value))], this.model); + } + return this.valpha; + }, + // Rgb + red: getset("rgb", 0, maxfn(255)), + green: getset("rgb", 1, maxfn(255)), + blue: getset("rgb", 2, maxfn(255)), + hue: getset(["hsl", "hsv", "hsl", "hwb", "hcg"], 0, (value) => (value % 360 + 360) % 360), + saturationl: getset("hsl", 1, maxfn(100)), + lightness: getset("hsl", 2, maxfn(100)), + saturationv: getset("hsv", 1, maxfn(100)), + value: getset("hsv", 2, maxfn(100)), + chroma: getset("hcg", 1, maxfn(100)), + gray: getset("hcg", 2, maxfn(100)), + white: getset("hwb", 1, maxfn(100)), + wblack: getset("hwb", 2, maxfn(100)), + cyan: getset("cmyk", 0, maxfn(100)), + magenta: getset("cmyk", 1, maxfn(100)), + yellow: getset("cmyk", 2, maxfn(100)), + black: getset("cmyk", 3, maxfn(100)), + x: getset("xyz", 0, maxfn(95.047)), + y: getset("xyz", 1, maxfn(100)), + z: getset("xyz", 2, maxfn(108.833)), + l: getset("lab", 0, maxfn(100)), + a: getset("lab", 1), + b: getset("lab", 2), + keyword(value) { + if (value !== void 0) { + return new Color(value); + } + return convert[this.model].keyword(this.color); + }, + hex(value) { + if (value !== void 0) { + return new Color(value); + } + return colorString.to.hex(this.rgb().round().color); + }, + hexa(value) { + if (value !== void 0) { + return new Color(value); + } + const rgbArray = this.rgb().round().color; + let alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase(); + if (alphaHex.length === 1) { + alphaHex = "0" + alphaHex; + } + return colorString.to.hex(rgbArray) + alphaHex; + }, + rgbNumber() { + const rgb = this.rgb().color; + return (rgb[0] & 255) << 16 | (rgb[1] & 255) << 8 | rgb[2] & 255; + }, + luminosity() { + const rgb = this.rgb().color; + const lum = []; + for (const [i, element] of rgb.entries()) { + const chan = element / 255; + lum[i] = chan <= 0.04045 ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4; + } + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + contrast(color2) { + const lum1 = this.luminosity(); + const lum2 = color2.luminosity(); + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + return (lum2 + 0.05) / (lum1 + 0.05); + }, + level(color2) { + const contrastRatio = this.contrast(color2); + if (contrastRatio >= 7) { + return "AAA"; + } + return contrastRatio >= 4.5 ? "AA" : ""; + }, + isDark() { + const rgb = this.rgb().color; + const yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 1e4; + return yiq < 128; + }, + isLight() { + return !this.isDark(); + }, + negate() { + const rgb = this.rgb(); + for (let i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + lighten(ratio) { + const hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + darken(ratio) { + const hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + saturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + desaturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + whiten(ratio) { + const hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + blacken(ratio) { + const hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + grayscale() { + const rgb = this.rgb().color; + const value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(value, value, value); + }, + fade(ratio) { + return this.alpha(this.valpha - this.valpha * ratio); + }, + opaquer(ratio) { + return this.alpha(this.valpha + this.valpha * ratio); + }, + rotate(degrees) { + const hsl = this.hsl(); + let hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + mix(mixinColor, weight) { + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + const color1 = mixinColor.rgb(); + const color2 = this.rgb(); + const p = weight === void 0 ? 0.5 : weight; + const w = 2 * p - 1; + const a = color1.alpha() - color2.alpha(); + const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2; + const w2 = 1 - w1; + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p) + ); + } +}; +for (const model of Object.keys(convert)) { + if (skippedModels.includes(model)) { + continue; + } + const { channels } = convert[model]; + Color.prototype[model] = function(...args) { + if (this.model === model) { + return new Color(this); + } + if (args.length > 0) { + return new Color(args, model); + } + return new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model); + }; + Color[model] = function(...args) { + let color2 = args[0]; + if (typeof color2 === "number") { + color2 = zeroArray(args, channels); + } + return new Color(color2, model); + }; +} +function roundTo(number, places) { + return Number(number.toFixed(places)); +} +function roundToPlace(places) { + return function(number) { + return roundTo(number, places); + }; +} +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + for (const m of model) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + } + model = model[0]; + return function(value) { + let result; + if (value !== void 0) { + if (modifier) { + value = modifier(value); + } + result = this[model](); + result.color[channel] = value; + return result; + } + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + return result; + }; +} +function maxfn(max) { + return function(v) { + return Math.max(0, Math.min(max, v)); + }; +} +function assertArray(value) { + return Array.isArray(value) ? value : [value]; +} +function zeroArray(array, length) { + for (let i = 0; i < length; i++) { + if (typeof array[i] !== "number") { + array[i] = 0; + } + } + return array; +} +var color = Color; +const Color2 = /* @__PURE__ */ getDefaultExportFromCjs(color); +var macros = { + cref: { signature: "s m" }, + Cref: { signature: "s m" }, + crefrange: { signature: "s m m" }, + Crefrange: { signature: "s m m" }, + cpageref: { signature: "s m" }, + Cpageref: { signature: "s m" }, + ref: { signature: "m" }, + pageref: { signature: "m" }, + namecref: { signature: "m" }, + nameCref: { signature: "m" }, + lcnamecref: { signature: "m" }, + namecrefs: { signature: "m" }, + nameCrefs: { signature: "m" }, + lcnamecrefs: { signature: "m" }, + labelcref: { signature: "m" }, + labelcpageref: { signature: "m" }, + crefalias: { signature: "m m" }, + crefname: { signature: "m m m" }, + // XXX there are many more obscure commands to add here + // https://ctan.org/pkg/cleveref + crefdefaultlabelformat: { signature: "m" }, + crefrangeconjunction: { signature: "m" } +}; +var environments = {}; +function cleanEnumerateBody(ast, itemName = "item") { + let { segments, macros: macros17 } = splitOnMacro(ast, itemName); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + if (i === 0) { + trimEnd(segment); + } else { + trim$1(segment); + } + if (segment.length > 0 && i > 0) { + segment.unshift({ type: "whitespace" }); + } + } + let insertParbreakBefore = /* @__PURE__ */ new WeakSet(); + let body = macros17.flatMap((node, i) => { + var _a; + const segment = segments[i + 1]; + const trailingComments = popTrailingComments(segment); + node.args = node.args || []; + node.args.push(arg(segment, { openMark: "", closeMark: "" })); + updateRenderInfo(node, { inParMode: true }); + if (i > 0 || ((_a = segments[0]) == null ? void 0 : _a.length) > 0) { + insertParbreakBefore.add(node); + } + return [node, ...trailingComments]; + }); + body = body.flatMap( + (node) => insertParbreakBefore.has(node) ? [{ type: "parbreak" }, node] : node + ); + body.unshift(...segments[0]); + for (let i = 0; i < body.length - 1; i++) { + const node = body[i]; + const nextNode = body[i + 1]; + if (!match.parbreak(nextNode)) { + continue; + } + if (match.comment(node)) { + node.suffixParbreak = true; + } + if (match.macro(node) && node.args && node.args[node.args.length - 1].closeMark === "") { + const args = node.args[node.args.length - 1].content; + const lastArg = args[args.length - 1]; + if (match.comment(lastArg)) { + lastArg.suffixParbreak = true; + } + } + } + return body; +} +function popTrailingComments(nodes) { + let lastNodeIndex = lastSignificantNodeIndex(nodes, true); + if (lastNodeIndex === nodes.length - 1 || lastNodeIndex == null && nodes.length === 0) { + return []; + } + if (lastNodeIndex == null) { + lastNodeIndex = -1; + } + return nodes.splice(lastNodeIndex + 1); +} +var macros2 = { + answerline: { signature: "o" }, + fillin: { signature: "o o" }, + fullwidth: { signature: "m" }, + fillwidthlines: { signature: "m" }, + fillwidthdottedlines: { signature: "m" }, + fillwidthgrid: { signature: "m" }, + makeemptybox: { signature: "m" }, + CorrectChoiceEmphasis: { + signature: "m", + renderInfo: { breakAround: true } + }, + SolutionEmphasis: { signature: "m", renderInfo: { breakAround: true } }, + uplevel: { signature: "m", renderInfo: { breakAround: true } }, + checkboxchar: { signature: "m", renderInfo: { breakAround: true } }, + checkedchar: { signature: "m", renderInfo: { breakAround: true } }, + pointname: { signature: "m", renderInfo: { breakAround: true } }, + marginpointname: { signature: "m", renderInfo: { breakAround: true } }, + extrawidth: { signature: "m", renderInfo: { breakAround: true } }, + pointformat: { signature: "m", renderInfo: { breakAround: true } }, + bonuspointformat: { signature: "m", renderInfo: { breakAround: true } }, + totalformat: { signature: "m", renderInfo: { breakAround: true } }, + qformat: { signature: "m", renderInfo: { breakAround: true } }, + titledquestion: { signature: "m o", renderInfo: { breakAround: true } }, + pointpoints: { signature: "m m", renderInfo: { breakAround: true } }, + bonuspointpoints: { signature: "m m", renderInfo: { breakAround: true } } +}; +var environments2 = { + choices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + checkboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparchoices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparcheckboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + parts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "part") + }, + subparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subpart") + }, + subsubparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subsubpart") + }, + questions: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "question") + } +}; +var macros3 = { + geometry: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + } +}; +var environments3 = {}; +var macros4 = { + hypersetup: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + href: { signature: "o m m" }, + url: { signature: "m" }, + nolinkurl: { signature: "m" }, + hyperbaseurl: { signature: "m" }, + hyperimage: { signature: "m m" }, + hyperdef: { signature: "m m m" }, + hyperref: { signature: "o m" }, + hyperlink: { signature: "m m" }, + hypertarget: { signature: "m m" }, + autoref: { signature: "s m" }, + pageref: { signature: "s m" }, + autopageref: { signature: "s m" }, + pdfstringdef: { signature: "m m" }, + pdfbookmark: { signature: "o m m" }, + currentpdfbookmark: { signature: "m m" }, + subpdfbookmark: { signature: "m m" }, + belowpdfbookmark: { signature: "m m" }, + texorpdfstring: { signature: "m m" }, + thispdfpagelabel: { signature: "m" }, + hypercalcbp: { signature: "m" } +}; +var environments4 = {}; +var macros5 = { + // Special + "\\": { signature: "!s !o" }, + _: { signature: "m", escapeToken: "" }, + "^": { signature: "m", escapeToken: "" }, + // \newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands + // List can be found in latex2e.pdf "An unofficial reference manual" + newcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + renewcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + providecommand: { + signature: "s +m o +o +m", + renderInfo: { breakAround: true } + }, + // Counters + newcounter: { + signature: "m o", + renderInfo: { breakAround: true } + }, + usecounter: { + signature: "m" + }, + setcounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + addtocounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + stepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + refstepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + // Lengths + newlength: { + signature: "m", + renderInfo: { breakAround: true } + }, + addtolength: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settodepth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settoheight: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settowidth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Spaces + stretch: { signature: "m" }, + hspace: { signature: "s m" }, + vspace: { signature: "s m", renderInfo: { breakAround: true } }, + vfill: { renderInfo: { breakAround: true } }, + indent: { renderInfo: { breakAround: true } }, + phantom: { signature: "m" }, + vphantom: { signature: "m" }, + hphantom: { signature: "m" }, + noindent: { renderInfo: { breakAround: true } }, + smallskip: { renderInfo: { breakAround: true } }, + medskip: { renderInfo: { breakAround: true } }, + bigskip: { renderInfo: { breakAround: true } }, + smallbreak: { renderInfo: { breakAround: true } }, + medbreak: { renderInfo: { breakAround: true } }, + bigbreak: { renderInfo: { breakAround: true } }, + newline: { renderInfo: { breakAround: true } }, + linebreak: { signature: "o", renderInfo: { breakAround: true } }, + nolinebreak: { signature: "o", renderInfo: { breakAround: true } }, + clearpage: { renderInfo: { breakAround: true } }, + cleardoublepage: { renderInfo: { breakAround: true } }, + newpage: { renderInfo: { breakAround: true } }, + enlargethispage: { signature: "s", renderInfo: { breakAround: true } }, + pagebreak: { signature: "o", renderInfo: { breakAround: true } }, + nopagebreak: { signature: "o", renderInfo: { breakAround: true } }, + // Boxes + newsavebox: { + signature: "m", + renderInfo: { breakAround: true } + }, + sbox: { + signature: "m m", + renderInfo: { breakAround: true } + }, + savebox: { + signature: "m o o m", + renderInfo: { breakAround: true } + }, + mbox: { signature: "m" }, + makebox: { signature: "d() o o m", renderInfo: { breakAround: true } }, + fbox: { signature: "m" }, + framebox: { signature: "o o m", renderInfo: { breakAround: true } }, + frame: { signature: "m", renderInfo: { breakAround: true } }, + parbox: { signature: "o o o m m", renderInfo: { breakAround: true } }, + raisebox: { signature: "m o o m" }, + marginpar: { signature: "o m", renderInfo: { breakAround: true } }, + colorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + fcolorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + rotatebox: { signature: "o m m" }, + scalebox: { signature: "m o m" }, + reflectbox: { signature: "m" }, + resizebox: { signature: "s m m m" }, + // Define environments + newenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + newtheorem: { + signature: "s m o m o", + renderInfo: { breakAround: true } + }, + newfont: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Counters + alph: { signature: "m" }, + Alph: { signature: "m" }, + arabic: { signature: "m" }, + roman: { signature: "m" }, + Roman: { signature: "m" }, + fnsymbol: { signature: "m" }, + // Other + documentclass: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepackage: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + item: { + signature: "o", + renderInfo: { hangingIndent: true, namedArguments: ["label"] } + }, + value: { signature: "m" }, + centering: { renderInfo: { breakAround: true } }, + input: { signature: "m", renderInfo: { breakAround: true } }, + include: { signature: "m", renderInfo: { breakAround: true } }, + includeonly: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + discretionary: { signature: "m m m" }, + hyphenation: { signature: "m m m" }, + footnote: { signature: "o m", renderInfo: { inParMode: true } }, + footnotemark: { signature: "o" }, + footnotetext: { signature: "o m", renderInfo: { inParMode: true } }, + caption: { + signature: "o m", + renderInfo: { inParMode: true, breakAround: true } + }, + // Math Commands + sqrt: { signature: "o m", renderInfo: { inMathMode: true } }, + frac: { signature: "m m", renderInfo: { inMathMode: true } }, + stackrel: { signature: "m m" }, + ensuremath: { signature: "m", renderInfo: { inMathMode: true } }, + // Layout commands + abstract: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + maketitle: { renderInfo: { breakAround: true } }, + doublespacing: { renderInfo: { breakAround: true } }, + singlespacing: { renderInfo: { breakAround: true } }, + author: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + date: { signature: "o m", renderInfo: { breakAround: true } }, + thanks: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + // amsart document class adds an optional argument + title: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + pagenumbering: { signature: "m", renderInfo: { breakAround: true } }, + pagestyle: { signature: "m", renderInfo: { breakAround: true } }, + thispagestyle: { signature: "m", renderInfo: { breakAround: true } }, + // Colors + definecolor: { signature: "m m m", renderInfo: { breakAround: true } }, + pagecolor: { signature: "o m", renderInfo: { breakAround: true } }, + nopagecolor: { renderInfo: { breakAround: true } }, + multicolumn: { signature: "m m m" }, + // Graphics + includegraphics: { + signature: "s o o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + rule: { signature: "o m m" }, + // Sectioning + part: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + chapter: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + section: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + paragraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subparagraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + appendix: { renderInfo: { breakAround: true, inParMode: true } }, + frontmatter: { renderInfo: { breakAround: true, inParMode: true } }, + mainmatter: { renderInfo: { breakAround: true, inParMode: true } }, + backmatter: { renderInfo: { breakAround: true, inParMode: true } }, + // Citing and references + bibitem: { signature: "o m", renderInfo: { hangingIndent: true } }, + cite: { signature: "o m" }, + // Fonts + textrm: { signature: "m", renderInfo: { inParMode: true } }, + textit: { signature: "m", renderInfo: { inParMode: true } }, + textmd: { signature: "m", renderInfo: { inParMode: true } }, + textbf: { signature: "m", renderInfo: { inParMode: true } }, + textup: { signature: "m", renderInfo: { inParMode: true } }, + textsl: { signature: "m", renderInfo: { inParMode: true } }, + textsf: { signature: "m", renderInfo: { inParMode: true } }, + textsc: { signature: "m", renderInfo: { inParMode: true } }, + texttt: { signature: "m", renderInfo: { inParMode: true } }, + emph: { signature: "m", renderInfo: { inParMode: true } }, + textnormal: { signature: "m", renderInfo: { inParMode: true } }, + uppercase: { signature: "m", renderInfo: { inParMode: true } }, + mathbf: { signature: "m" }, + mathsf: { signature: "m" }, + mathtt: { signature: "m" }, + mathit: { signature: "m" }, + mathnormal: { signature: "m" }, + mathcal: { signature: "m" }, + mathrm: { signature: "m" }, + // Other + setlength: { signature: "m m", renderInfo: { breakAround: true } }, + ref: { signature: "s m" }, + label: { signature: "o m" }, + // cleveref changes \label to have this signature + printbibliography: { renderInfo: { breakAround: true } }, + addtocontents: { signature: "m m", renderInfo: { breakAround: true } }, + addcontentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + contentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + bibliography: { signature: "m", renderInfo: { breakAround: true } }, + bibliographystyle: { signature: "m", renderInfo: { breakAround: true } } +}; +var environments5 = { + document: { + processContent: (nodes) => { + trim$1(nodes); + return nodes; + } + }, + array: { signature: "o m", renderInfo: { alignContent: true } }, + description: { signature: "o", processContent: cleanEnumerateBody }, + enumerate: { + signature: "o", + processContent: cleanEnumerateBody, + renderInfo: { pgfkeysArgs: true } + }, + itemize: { signature: "o", processContent: cleanEnumerateBody }, + trivlist: { signature: "o", processContent: cleanEnumerateBody }, + list: { signature: "m m", processContent: cleanEnumerateBody }, + figure: { signature: "o" }, + "figure*": { signature: "o" }, + filecontents: { signature: "o m" }, + "filecontents*": { signature: "o m" }, + minipage: { signature: "o o o m" }, + picture: { signature: "r() d()" }, + tabbing: { renderInfo: { alignContent: true } }, + table: { signature: "o" }, + tabular: { signature: "o m", renderInfo: { alignContent: true } }, + "tabular*": { signature: "m o m", renderInfo: { alignContent: true } }, + thebibliography: { + signature: "m", + processContent: (nodes) => cleanEnumerateBody(nodes, "bibitem") + }, + // Math + math: { renderInfo: { inMathMode: true } } +}; +var argSpecM = parse$2("m")[0]; +var argSpecO = parse$2("o")[0]; +var argSpecRDelim = {}; +var argumentParser = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim[delim] = argSpecRDelim[delim] || parse$2(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [optionalArg || arg(null), codeArg || arg(null)], + nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved + }; +}; +var macros6 = { + lstset: { signature: "m" }, + lstinline: { argumentParser }, + lstinputlisting: { signature: "o m" }, + lstdefinestyle: { signature: "m m" }, + lstnewenvironment: { signature: "m o o m m" }, + lstMakeShortInline: { signature: "o m" }, + lstDeleteShortInline: { signature: "m" }, + lstdefineformat: { signature: "m m" }, + lstdefinelanguage: { signature: "o m o m o" }, + lstalias: { signature: "o m o m" }, + lstloadlanguages: { signature: "m" } +}; +var environments6 = {}; +var macros7 = { + see: { signature: "m m" }, + seealso: { signature: "m m" }, + seename: { signature: "m" }, + alsoname: { signature: "m" }, + index: { signature: "m" } +}; +var environments7 = {}; +var macros8 = { + mathtoolsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + mathllap: { + signature: "o m" + }, + mathrlap: { + signature: "o m" + }, + mathclap: { + signature: "o m" + }, + clap: { + signature: "m" + }, + mathmbox: { + signature: "m" + }, + mathmakebox: { + signature: "o o m" + }, + cramped: { + signature: "o m" + }, + crampedllap: { + signature: "o m" + }, + crampedrlap: { + signature: "o m" + }, + crampedclap: { + signature: "o m" + }, + crampedsubstack: { + signature: "o m" + }, + smashoperator: { + signature: "o m" + }, + newtagform: { + signature: "m o m m" + }, + renewtagform: { + signature: "m o m m" + }, + usetagform: { + signature: "m" + }, + xleftrightarrow: { signature: "o m" }, + xLeftarrow: { signature: "o m" }, + xhookleftarrow: { signature: "o m" }, + xmapsto: { signature: "o m" }, + xRightarrow: { signature: "o m" }, + xLeftrightarrow: { signature: "o m" }, + xhookrightarrow: { signature: "o m" }, + underbracket: { signature: "o o m" }, + overbracket: { signature: "o o m" }, + underbrace: { signature: "m" }, + overbrace: { signature: "m" }, + shoveleft: { signature: "o m" }, + shoveright: { signature: "o m" }, + ArrowBetweenLines: { signature: "s o" }, + vdotswithin: { signature: "m" }, + shortdotswithin: { signature: "s m" }, + DeclarePairedDelimiter: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterX: { + signature: "m o m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterXPP: { + signature: "m o m m m m m", + renderInfo: { breakAround: true } + }, + prescript: { signature: "m m m" }, + DeclareMathSizes: { signature: "m m m m" }, + newgathered: { signature: "m m m m" }, + renewgathered: { signature: "m m m m" }, + splitfrac: { signature: "m m" }, + splitdfrac: { signature: "m m" }, + xmathstrut: { signature: "o m" }, + // amsthm + newtheorem: { signature: "s m o m o", renderInfo: { breakAround: true } }, + theoremstyle: { signature: "m", renderInfo: { breakAround: true } }, + newtheoremstyle: { + signature: "m m m m m m m m m", + renderInfo: { breakAround: true } + }, + // amsmath + text: { signature: "m", renderInfo: { inMathMode: false } }, + // amsfonts + mathbb: { signature: "m" }, + mathscr: { signature: "m" }, + mathfrak: { signature: "m" }, + frak: { signature: "m" }, + Bdd: { signature: "m" }, + bold: { signature: "m" }, + // amsopn + operatorname: { signature: "s m" }, + DeclareMathOperator: { + signature: "s m m", + renderInfo: { breakAround: true } + } +}; +var environments8 = { + crampedsubarray: { + signature: "m", + renderInfo: { alignContent: true, inMathMode: true } + }, + matrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + pmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + "matrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "pmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "smallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "psmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + multilined: { signature: "o o", renderInfo: { inMathMode: true } }, + cases: { renderInfo: { alignContent: true, inMathMode: true } }, + "cases*": { renderInfo: { alignContent: true, inMathMode: true } }, + dcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "dcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + rcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "rcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + drcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "drcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + spreadlines: { signature: "m", renderInfo: { inMathMode: true } }, + lgathered: { signature: "o", renderInfo: { inMathMode: true } }, + rgathered: { signature: "o", renderInfo: { inMathMode: true } }, + // amsmath + "align*": { renderInfo: { inMathMode: true, alignContent: true } }, + align: { renderInfo: { inMathMode: true, alignContent: true } }, + aligned: { renderInfo: { inMathMode: true, alignContent: true } }, + "alignat*": { renderInfo: { inMathMode: true, alignContent: true } }, + alignat: { renderInfo: { inMathMode: true, alignContent: true } }, + "equation*": { renderInfo: { inMathMode: true } }, + equation: { renderInfo: { inMathMode: true } }, + "gather*": { renderInfo: { inMathMode: true } }, + gather: { renderInfo: { inMathMode: true } }, + "multline*": { renderInfo: { inMathMode: true } }, + multline: { renderInfo: { inMathMode: true } }, + "flalign*": { renderInfo: { inMathMode: true, alignContent: true } }, + flalign: { renderInfo: { inMathMode: true, alignContent: true } }, + split: { renderInfo: { inMathMode: true } }, + // Math environments + displaymath: { renderInfo: { inMathMode: true } }, + // Typical amsthm environments + theorem: { signature: "o" }, + lemma: { signature: "o" }, + definition: { signature: "o" }, + proposition: { signature: "o" }, + corollary: { signature: "o" }, + remark: { signature: "!o" }, + example: { signature: "!o" }, + proof: { signature: "o" } +}; +var argSpecM2 = parse$2("m")[0]; +var argSpecO2 = parse$2("o")[0]; +var argSpecRDelim2 = {}; +var argumentParser2 = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO2, startPos); + const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecM2, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM2, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim2[delim] = argSpecRDelim2[delim] || parse$2(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim2[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [ + optionalArg || arg(null), + languageArg || arg(null), + codeArg || arg(null) + ], + nodesRemoved: optionalArgNodesRemoved + languageArgNodesRemoved + codeArgNodesRemoved + }; +}; +var macros9 = { + mint: { argumentParser: argumentParser2 }, + mintinline: { argumentParser: argumentParser2 }, + inputminted: { argumentParser: argumentParser2 }, + usemintedstyle: { signature: "m" }, + setminted: { signature: "o m" }, + setmintedinline: { signature: "o m" }, + newmint: { signature: "o m m" }, + newminted: { signature: "o m m" }, + newmintinline: { signature: "o m m" }, + newmintedfile: { signature: "o m m" } +}; +var environments9 = {}; +var macros10 = { + NiceMatrixOptions: { + signature: "m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + } +}; +var environments10 = { + NiceTabular: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrixBlock: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArrayWithDelims: { + signature: "m m o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + } +}; +var macros11 = { + systeme: { + signature: "s o o m", + renderInfo: { inMathMode: true } + }, + sysdelim: { + signature: "m m" + }, + syseqsep: { signature: "m" }, + sysalign: { signature: "m" }, + syssignspace: { signature: "m" }, + syseqspace: { signature: "m" }, + syslineskipcoeff: { signature: "m" }, + syseqivsign: { signature: "m" }, + sysaddeqsign: { signature: "m" }, + sysremoveeqsign: { signature: "m" }, + sysextracolonsign: { signature: "m" }, + syscodeextracol: { signature: "m" }, + sysautonum: { signature: "m" }, + syssubstitute: { signature: "m" } +}; +var environments11 = {}; +(function() { + if (typeof globalThis === "object") + return; + Object.defineProperty(Object.prototype, "__magic__", { + get: function() { + return this; + }, + configurable: true + // This makes it possible to `delete` the getter later. + }); + __magic__.globalThis = __magic__; + delete Object.prototype.__magic__; +})(); +var OPTIONAL_ARGUMENT_ARG_SPEC = parse$2("o")[0]; +function blankArg() { + return arg([], { openMark: "", closeMark: "" }); +} +var tikzCommandArgumentParser = (nodes, startPos) => { + const origStartPos = startPos; + let pos = startPos; + let nodesRemoved = 0; + const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos); + let animationArg = blankArg(); + if (cursorPosAfterAnimations !== pos) { + const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos); + trim$1(argContent); + animationArg = arg(argContent, { + openMark: " ", + closeMark: " " + }); + } + nodesRemoved += cursorPosAfterAnimations - pos; + const { + argument: _optionalArgument, + nodesRemoved: optionalArgumentNodesRemoved + } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos); + nodesRemoved += optionalArgumentNodesRemoved; + const optionalArg = _optionalArgument || blankArg(); + while (match.whitespace(nodes[pos])) { + pos++; + } + const firstNode = nodes[pos]; + if (!firstNode) { + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; + } + if (match.group(firstNode)) { + const args = [animationArg, optionalArg, arg(firstNode.content)]; + nodes.splice(origStartPos, pos - origStartPos + 1); + return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved }; + } + const semicolonPosition = scan(nodes, ";", { startIndex: pos }); + if (semicolonPosition != null) { + const argNodes = nodes.splice( + origStartPos, + semicolonPosition - origStartPos + 1 + ); + trim$1(argNodes); + const args = [animationArg, optionalArg, arg(argNodes)]; + return { + args, + nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved + }; + } + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; +}; +function eatAllAnimationSpecs(nodes, startPos) { + const colonPos = scan(nodes, ":", { + startIndex: startPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (!colonPos) { + return startPos; + } + let lastMatchPos = startPos; + let i = colonPos + 1; + for (; i < nodes.length; i++) { + const node = nodes[i]; + if (match.string(node, "[")) { + break; + } + if (match.string(node, "=")) { + i++; + while (match.whitespace(nodes[i]) || match.comment(nodes[i])) { + i++; + } + if (!match.group(nodes[i])) { + break; + } + lastMatchPos = i + 1; + const colonPos2 = scan(nodes, ":", { + startIndex: lastMatchPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (colonPos2 == null) { + break; + } + i = colonPos2 + 1; + } + } + return lastMatchPos; +} +var macros12 = { + pgfkeys: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzoption: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzstyle: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usetikzlibrary: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepgfmodule: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + usepgflibrary: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfplotsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + pgfplotstabletypeset: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikz: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { namedArguments: ["animation", "options", "command"] } + } +}; +var environments12 = { + tikzpicture: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + axis: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + scope: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfonlayer: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgflowlevelscope: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfviewboxscope: { + signature: "m m m m m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgftransparencygroup: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + behindforegroundpath: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + pgfmetadecoration: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + colormixin: { signature: "m", renderInfo: { pgfkeysArgs: true } } +}; +function processTikzEnvironmentContent(nodes) { + attachMacroArgsInArray(nodes, conditionalMacros); + return nodes; +} +var conditionalMacros = { + pgfextra: { signature: "m" }, + beginpgfgraphicnamed: { signature: "m" }, + pgfrealjobname: { signature: "m" }, + pgfplotstreampoint: { signature: "m" }, + pgfplotstreampointoutlier: { signature: "m" }, + pgfplotstreamspecial: { signature: "m" }, + pgfplotxyfile: { signature: "m" }, + pgfplotxyzfile: { signature: "m" }, + pgfplotfunction: { signature: "mmm" }, + pgfplotgnuplot: { signature: "o m" }, + pgfplothandlerrecord: { signature: "m" }, + pgfdeclareplothandler: { signature: "m m m" }, + pgfdeclarelayer: { signature: "m" }, + pgfsetlayers: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfonlayer: { signature: "m" }, + startpgfonlayer: { signature: "m" }, + pgfdeclarehorizontalshading: { signature: "o m m m " }, + pgfdeclareradialshading: { signature: "o m m m" }, + pgfdeclarefunctionalshading: { signature: "o m m m m m" }, + pgfshadecolortorgb: { signature: "m m" }, + pgfshadecolortocmyk: { signature: "m m" }, + pgfshadecolortogray: { signature: "m m" }, + pgfuseshading: { signature: "m" }, + pgfshadepath: { signature: "m m" }, + pgfsetadditionalshadetransform: { signature: "m" }, + pgfsetstrokeopacity: { signature: "m" }, + pgfsetfillopacity: { signature: "m" }, + pgfsetblendmode: { signature: "m" }, + pgfdeclarefading: { signature: "m m" }, + pgfsetfading: { signature: "m m" }, + pgfsetfadingforcurrentpath: { signature: "m m" }, + pgfsetfadingforcurrentpathstroked: { signature: "m m" }, + pgfanimateattribute: { signature: "m m" }, + pgfsnapshot: { signature: "m" }, + pgfqpoint: { signature: "m m" }, + pgfqpointxy: { signature: "m m" }, + pgfqpointxyz: { signature: "m m m" }, + pgfqpointscale: { signature: "m m" }, + pgfpathqmoveto: { signature: "m m" }, + pgfpathqlineto: { signature: "m m" }, + pgfpathqcurveto: { signature: "m m m m m m" }, + pgfpathqcircle: { signature: "m" }, + pgfqbox: { signature: "m" }, + pgfqboxsynced: { signature: "m" }, + pgfaliasimage: { signature: "m m" }, + pgfuseimage: { signature: "m" }, + pgfimage: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclaremask: { signature: "o m m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclarepatternformonly: { signature: "o m m m m m" }, + pgfdeclarepatterninherentlycolored: { signature: "o m m m m m" }, + pgfsetfillpattern: { signature: "m m" }, + // Coordinate canvas and nonlinear transformations + pgftransformshift: { signature: "m" }, + pgftransformxshift: { signature: "m" }, + pgftransformyshift: { signature: "m" }, + pgftransformscale: { signature: "m" }, + pgftransformxscale: { signature: "m" }, + pgftransformyscale: { signature: "m" }, + pgftransformxslant: { signature: "m" }, + pgftransformyslant: { signature: "m" }, + pgftransformrotate: { signature: "m" }, + pgftransformtriangle: { signature: "m m m" }, + pgftransformcm: { signature: "m m m m m" }, + pgftransformarrow: { signature: "m m" }, + pgftransformlineattime: { signature: "m m m" }, + pgftransformcurveattime: { signature: "m m m m m" }, + pgftransformarcaxesattime: { signature: "m m m m m m" }, + pgfgettransform: { signature: "m" }, + pgfsettransform: { signature: "m" }, + pgfgettransformentries: { signature: "m m m m m m" }, + pgfsettransformentries: { signature: "m m m m m m" }, + pgfpointtransformed: { signature: "m" }, + pgflowlevel: { signature: "m" }, + pgflowlevelobj: { signature: "m m" }, + pgflowlevelscope: { signature: "m" }, + startpgflowlevelscope: { signature: "m" }, + pgfviewboxscope: { signature: "m m m m m" }, + startpgfviewboxscope: { signature: "m m m m m" }, + pgftransformnonlinear: { signature: "m" }, + pgfpointtransformednonlinear: { signature: "m" }, + pgfsetcurvilinearbeziercurve: { signature: "m m m m" }, + pgfcurvilineardistancetotime: { signature: "m" }, + pgfpointcurvilinearbezierorthogonal: { signature: "m m" }, + pgfpointcurvilinearbezierpolar: { signature: "m m" }, + // Matrices + pgfmatrix: { signature: "m m m m m m m" }, + pgfsetmatrixcolumnsep: { signature: "m" }, + pgfmatrixnextcell: { signature: "o" }, + pgfsetmatrixrowsep: { signature: "m" }, + pgfmatrixendrow: { signature: "o" }, + // Nodes and shapes + pgfnode: { signature: "m m m m m" }, + pgfmultipartnode: { signature: "m m m m" }, + pgfcoordinate: { signature: "m m" }, + pgfnodealias: { signature: "m m" }, + pgfnoderename: { signature: "m m" }, + pgfpositionnodelater: { signature: "m" }, + pgfpositionnodenow: { signature: "m" }, + pgfnodepostsetupcode: { signature: "m m" }, + pgfpointanchor: { signature: "m m" }, + pgfpointshapeborder: { signature: "m m" }, + pgfdeclareshape: { signature: "m m" }, + saveddimen: { signature: "m m" }, + savedmacro: { signature: " m" }, + anchor: { signature: "m m" }, + deferredanchor: { signature: "m m" }, + anchorborder: { signature: "m" }, + backgroundpath: { signature: "m" }, + foregroundpath: { signature: "m" }, + behindbackgroundpath: { signature: "m" }, + beforebackgroundpath: { signature: "m" }, + beforeforegroundpath: { signature: "m" }, + behindforegroundpath: { signature: "m" }, + // Arrows + pgfdeclarearrow: { signature: "m" }, + pgfarrowssettipend: { signature: "m" }, + pgfarrowssetbackend: { signature: "m" }, + pgfarrowssetlineend: { signature: "m" }, + pgfarrowssetvisualbackend: { signature: "m" }, + pgfarrowssetvisualtipend: { signature: "m" }, + pgfarrowshullpoint: { signature: "m m" }, + pgfarrowsupperhullpoint: { signature: "m m" }, + pgfarrowssave: { signature: "m" }, + pgfarrowssavethe: { signature: "m" }, + pgfarrowsaddtooptions: { signature: "m" }, + pgfarrowsaddtolateoptions: { signature: "m" }, + pgfarrowsaddtolengthscalelist: { signature: "m" }, + pgfarrowsaddtowidthscalelist: { signature: "m" }, + pgfarrowsthreeparameters: { signature: "m" }, + pgfarrowslinewidthdependent: { signature: "m m m" }, + pgfarrowslengthdependent: { signature: "m" }, + // Path + pgfusepath: { signature: "m" }, + pgfsetlinewidth: { signature: "m" }, + pgfsetmiterlimit: { signature: "m" }, + pgfsetdash: { signature: "m m" }, + pgfsetstrokecolor: { signature: "m" }, + pgfsetcolor: { signature: "m" }, + pgfsetinnerlinewidth: { signature: "m" }, + pgfsetinnerstrokecolor: { signature: "m" }, + pgfsetarrowsstart: { signature: "m" }, + pgfsetarrowsend: { signature: "m" }, + pgfsetarrows: { signature: "m" }, + pgfsetshortenstart: { signature: "m" }, + pgfsetshortenend: { signature: "m" }, + pgfsetfillcolor: { signature: "m" }, + // Decorations + pgfdeclaredecoration: { signature: "m m m" }, + state: { signature: "m o m" }, + pgfdecoratepath: { signature: "m m" }, + startpgfdecoration: { signature: "m" }, + pgfdecoration: { signature: "m" }, + pgfdecoratecurrentpath: { signature: "m" }, + pgfsetdecorationsegmenttransformation: { signature: "m" }, + pgfdeclaremetadecorate: { signature: "m m m" }, + pgfmetadecoration: { signature: "m" }, + startpgfmetadecoration: { signature: "m" }, + // Constructing paths + pgfpathmoveto: { signature: "m" }, + pgfpathlineto: { signature: "m" }, + pgfpathcurveto: { signature: "m m m" }, + pgfpathquadraticcurveto: { signature: "m m" }, + pgfpathcurvebetweentime: { signature: "m m m m m m" }, + pgfpathcurvebetweentimecontinue: { signature: "m m m m m m" }, + pgfpatharc: { signature: "m m m" }, + pgfpatharcaxes: { signature: "m m m m" }, + pgfpatharcto: { signature: "m m m m m m" }, + pgfpatharctoprecomputed: { signature: "m m m m m m m m" }, + pgfpathellipse: { signature: "m m m" }, + pgfpathcircle: { signature: "m m" }, + pgfpathrectangle: { signature: "m m" }, + pgfpathrectanglecorners: { signature: "m m" }, + pgfpathgrid: { signature: " o m m" }, + pgfpathparabola: { signature: "m m" }, + pgfpathsine: { signature: "m" }, + pgfpathcosine: { signature: "m" }, + pgfsetcornersarced: { signature: "m" }, + "pgf@protocolsizes": { signature: "m m" }, + // Specifying coordinates + pgfpoint: { signature: "m m" }, + pgfpointpolar: { signature: "m m m" }, + pgfpointxy: { signature: "m m" }, + pgfsetxvec: { signature: "m" }, + pgfsetyvec: { signature: "m" }, + pgfpointpolarxy: { signature: "m m" }, + pgfpointxyz: { signature: "m m m" }, + pgfsetzvec: { signature: "m" }, + pgfpointcylindrical: { signature: "m m m" }, + pgfpointspherical: { signature: "m m m" }, + pgfpointadd: { signature: "m m" }, + pgfpointscale: { signature: "m m" }, + pgfpointdiff: { signature: "m m" }, + pgfpointnormalised: { signature: "m" }, + pgfpointlineattime: { signature: "m m m" }, + pgfpointlineatdistance: { signature: "m m m" }, + pgfpointarcaxesattime: { signature: "m m m m m m" }, + pgfpointcurveattime: { signature: "m m m m m" }, + pgfpointborderrectangle: { signature: "m m" }, + pgfpointborderellipse: { signature: "m m" }, + pgfpointintersectionoflines: { signature: "m m m m" }, + pgfpointintersectionofcircles: { signature: "m m m m m" }, + pgfintersectionofpaths: { signature: "m m" }, + pgfpointintersectionsolution: { signature: "m" }, + pgfextractx: { signature: "m m" }, + pgfextracty: { signature: "m m" }, + pgfgetlastxy: { signature: "m m" }, + "pgf@process": { signature: "m" }, + // Heirarchical structres ... + pgfsetbaseline: { signature: "m" }, + pgfsetbaselinepointnow: { signature: "m" }, + pgfsetbaselinepointlater: { signature: "m" }, + pgftext: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfuseid: { signature: "m" }, + pgfusetype: { signature: "m" }, + pgfidrefnextuse: { signature: "m m" }, + pgfidrefprevuse: { signature: "m m" }, + pgfaliasid: { signature: "m m" }, + pgfgaliasid: { signature: "m m" }, + pgfifidreferenced: { signature: "m m m" }, + pgfrdfabout: { signature: "m" }, + pgfrdfcontent: { signature: "m" }, + pgfrdfdatatype: { signature: "m" }, + pgfrdfhref: { signature: "m" }, + pgfrdfprefix: { signature: "m" }, + pgfrdfproperty: { signature: "m" }, + pgfrdfrel: { signature: "m" }, + pgfrdfresource: { signature: "m" }, + pgfrdfrev: { signature: "m" }, + pgfrdfsrc: { signature: "m" }, + pgfrdftypeof: { signature: "m" }, + pgfrdfvocab: { signature: "m" }, + pgferror: { signature: "m" }, + pgfwarning: { signature: "m" }, + path: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + draw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + fill: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + filldraw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + pattern: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + shade: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + clip: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + useasboundingbox: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + node: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + coordinate: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + graph: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + scoped: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { + namedArguments: ["animation", "options", "command"], + breakAround: true + } + } +}; +var macros13 = { + substitutecolormodel: { + signature: "m m", + renderInfo: { breakAround: true } + }, + selectcolormodel: { + signature: "m", + renderInfo: { breakAround: true } + }, + definecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + colorlet: { + signature: "o m o m", + renderInfo: { breakAround: true } + }, + definecolorset: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + preparecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + preparecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + DefineNamedColor: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + definecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + providecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + color: { signature: "o m", renderInfo: { breakAround: true } }, + textcolor: { signature: "o m m", renderInfo: { inParMode: true } }, + pagecolor: { signature: "o m" }, + colorbox: { signature: "o m m" }, + fcolorbox: { signature: "o m o m m" }, + boxframe: { signature: "o m" }, + testcolor: { signature: "o m" }, + blendcolors: { signature: "s m" }, + maskcolors: { signature: "o m" }, + definecolorseries: { + signature: "m m m o m o m", + renderInfo: { breakAround: true } + }, + resetcolorseries: { + signature: "o m", + renderInfo: { breakAround: true } + }, + rowcolors: { signature: "s o m m m" }, + extractcolorspec: { signature: "m m" }, + extractcolorspecs: { signature: "m m m" }, + convertcolorspec: { signature: "m m m m" } +}; +var environments13 = { + testcolors: { signature: "o", renderInfo: { pgfkeysArgs: true } } +}; +var fromRgb = ([r, g, b]) => Color2([r * 255, g * 255, b * 255], "rgb"); +var DVI_PS_NAMES = { + Apricot: Color2("#FBB982"), + Aquamarine: Color2("#00B5BE"), + Bittersweet: Color2("#C04F17"), + Black: Color2("#221E1F"), + Blue: Color2("#2D2F92"), + BlueGreen: Color2("#00B3B8"), + BlueViolet: Color2("#473992"), + BrickRed: Color2("#B6321C"), + Brown: Color2("#792500"), + BurntOrange: Color2("#F7921D"), + CadetBlue: Color2("#74729A"), + CarnationPink: Color2("#F282B4"), + Cerulean: Color2("#00A2E3"), + CornflowerBlue: Color2("#41B0E4"), + Cyan: Color2("#00AEEF"), + Dandelion: Color2("#FDBC42"), + DarkOrchid: Color2("#A4538A"), + Emerald: Color2("#00A99D"), + ForestGreen: Color2("#009B55"), + Fuchsia: Color2("#8C368C"), + Goldenrod: Color2("#FFDF42"), + Gray: Color2("#949698"), + Green: Color2("#00A64F"), + GreenYellow: Color2("#DFE674"), + JungleGreen: Color2("#00A99A"), + Lavender: Color2("#F49EC4"), + LimeGreen: Color2("#8DC73E"), + Magenta: Color2("#EC008C"), + Mahogany: Color2("#A9341F"), + Maroon: Color2("#AF3235"), + Melon: Color2("#F89E7B"), + MidnightBlue: Color2("#006795"), + Mulberry: Color2("#A93C93"), + NavyBlue: Color2("#006EB8"), + OliveGreen: Color2("#3C8031"), + Orange: Color2("#F58137"), + OrangeRed: Color2("#ED135A"), + Orchid: Color2("#AF72B0"), + Peach: Color2("#F7965A"), + Periwinkle: Color2("#7977B8"), + PineGreen: Color2("#008B72"), + Plum: Color2("#92268F"), + ProcessBlue: Color2("#00B0F0"), + Purple: Color2("#99479B"), + RawSienna: Color2("#974006"), + Red: Color2("#ED1B23"), + RedOrange: Color2("#F26035"), + RedViolet: Color2("#A1246B"), + Rhodamine: Color2("#EF559F"), + RoyalBlue: Color2("#0071BC"), + RoyalPurple: Color2("#613F99"), + RubineRed: Color2("#ED017D"), + Salmon: Color2("#F69289"), + SeaGreen: Color2("#3FBC9D"), + Sepia: Color2("#671800"), + SkyBlue: Color2("#46C5DD"), + SpringGreen: Color2("#C6DC67"), + Tan: Color2("#DA9D76"), + TealBlue: Color2("#00AEB3"), + Thistle: Color2("#D883B7"), + Turquoise: Color2("#00B4CE"), + Violet: Color2("#58429B"), + VioletRed: Color2("#EF58A0"), + White: Color2("#FFFFFF"), + WildStrawberry: Color2("#EE2967"), + Yellow: Color2("#FFF200"), + YellowGreen: Color2("#98CC70"), + YellowOrange: Color2("#FAA21A") +}; +var SVG_NAMES = { + AliceBlue: fromRgb([0.94, 0.972, 1]), + AntiqueWhite: fromRgb([0.98, 0.92, 0.844]), + Aqua: fromRgb([0, 1, 1]), + Aquamarine: fromRgb([0.498, 1, 0.83]), + Azure: fromRgb([0.94, 1, 1]), + Beige: fromRgb([0.96, 0.96, 0.864]), + Bisque: fromRgb([1, 0.894, 0.77]), + Black: fromRgb([0, 0, 0]), + BlanchedAlmond: fromRgb([1, 0.92, 0.804]), + Blue: fromRgb([0, 0, 1]), + BlueViolet: fromRgb([0.54, 0.17, 0.888]), + Brown: fromRgb([0.648, 0.165, 0.165]), + BurlyWood: fromRgb([0.87, 0.72, 0.53]), + CadetBlue: fromRgb([0.372, 0.62, 0.628]), + Chartreuse: fromRgb([0.498, 1, 0]), + Chocolate: fromRgb([0.824, 0.41, 0.116]), + Coral: fromRgb([1, 0.498, 0.312]), + CornflowerBlue: fromRgb([0.392, 0.585, 0.93]), + Cornsilk: fromRgb([1, 0.972, 0.864]), + Crimson: fromRgb([0.864, 0.08, 0.235]), + Cyan: fromRgb([0, 1, 1]), + DarkBlue: fromRgb([0, 0, 0.545]), + DarkCyan: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]), + DarkGray: fromRgb([0.664, 0.664, 0.664]), + DarkGreen: fromRgb([0, 0.392, 0]), + DarkGrey: fromRgb([0.664, 0.664, 0.664]), + DarkKhaki: fromRgb([0.74, 0.716, 0.42]), + DarkMagenta: fromRgb([0.545, 0, 0.545]), + DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]), + DarkOrange: fromRgb([1, 0.55, 0]), + DarkOrchid: fromRgb([0.6, 0.196, 0.8]), + DarkRed: fromRgb([0.545, 0, 0]), + DarkSalmon: fromRgb([0.912, 0.59, 0.48]), + DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]), + DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]), + DarkSlateGray: fromRgb([0.185, 0.31, 0.31]), + DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]), + DarkTurquoise: fromRgb([0, 0.808, 0.82]), + DarkViolet: fromRgb([0.58, 0, 0.828]), + DeepPink: fromRgb([1, 0.08, 0.576]), + DeepSkyBlue: fromRgb([0, 0.75, 1]), + DimGray: fromRgb([0.41, 0.41, 0.41]), + DimGrey: fromRgb([0.41, 0.41, 0.41]), + DodgerBlue: fromRgb([0.116, 0.565, 1]), + FireBrick: fromRgb([0.698, 0.132, 0.132]), + FloralWhite: fromRgb([1, 0.98, 0.94]), + ForestGreen: fromRgb([0.132, 0.545, 0.132]), + Fuchsia: fromRgb([1, 0, 1]), + Gainsboro: fromRgb([0.864, 0.864, 0.864]), + GhostWhite: fromRgb([0.972, 0.972, 1]), + Gold: fromRgb([1, 0.844, 0]), + Goldenrod: fromRgb([0.855, 0.648, 0.125]), + Gray: fromRgb([0.5, 0.5, 0.5]), + Green: fromRgb([0, 0.5, 0]), + GreenYellow: fromRgb([0.68, 1, 0.185]), + Grey: fromRgb([0.5, 0.5, 0.5]), + Honeydew: fromRgb([0.94, 1, 0.94]), + HotPink: fromRgb([1, 0.41, 0.705]), + IndianRed: fromRgb([0.804, 0.36, 0.36]), + Indigo: fromRgb([0.294, 0, 0.51]), + Ivory: fromRgb([1, 1, 0.94]), + Khaki: fromRgb([0.94, 0.9, 0.55]), + Lavender: fromRgb([0.9, 0.9, 0.98]), + LavenderBlush: fromRgb([1, 0.94, 0.96]), + LawnGreen: fromRgb([0.488, 0.99, 0]), + LemonChiffon: fromRgb([1, 0.98, 0.804]), + LightBlue: fromRgb([0.68, 0.848, 0.9]), + LightCoral: fromRgb([0.94, 0.5, 0.5]), + LightCyan: fromRgb([0.88, 1, 1]), + LightGoldenrod: fromRgb([0.933, 0.867, 0.51]), + LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]), + LightGray: fromRgb([0.828, 0.828, 0.828]), + LightGreen: fromRgb([0.565, 0.932, 0.565]), + LightGrey: fromRgb([0.828, 0.828, 0.828]), + LightPink: fromRgb([1, 0.712, 0.756]), + LightSalmon: fromRgb([1, 0.628, 0.48]), + LightSeaGreen: fromRgb([0.125, 0.698, 0.668]), + LightSkyBlue: fromRgb([0.53, 0.808, 0.98]), + LightSlateBlue: fromRgb([0.518, 0.44, 1]), + LightSlateGray: fromRgb([0.468, 0.532, 0.6]), + LightSlateGrey: fromRgb([0.468, 0.532, 0.6]), + LightSteelBlue: fromRgb([0.69, 0.77, 0.87]), + LightYellow: fromRgb([1, 1, 0.88]), + Lime: fromRgb([0, 1, 0]), + LimeGreen: fromRgb([0.196, 0.804, 0.196]), + Linen: fromRgb([0.98, 0.94, 0.9]), + Magenta: fromRgb([1, 0, 1]), + Maroon: fromRgb([0.5, 0, 0]), + MediumAquamarine: fromRgb([0.4, 0.804, 0.668]), + MediumBlue: fromRgb([0, 0, 0.804]), + MediumOrchid: fromRgb([0.73, 0.332, 0.828]), + MediumPurple: fromRgb([0.576, 0.44, 0.86]), + MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]), + MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]), + MediumSpringGreen: fromRgb([0, 0.98, 0.604]), + MediumTurquoise: fromRgb([0.284, 0.82, 0.8]), + MediumVioletRed: fromRgb([0.78, 0.084, 0.52]), + MidnightBlue: fromRgb([0.098, 0.098, 0.44]), + MintCream: fromRgb([0.96, 1, 0.98]), + MistyRose: fromRgb([1, 0.894, 0.884]), + Moccasin: fromRgb([1, 0.894, 0.71]), + NavajoWhite: fromRgb([1, 0.87, 0.68]), + Navy: fromRgb([0, 0, 0.5]), + NavyBlue: fromRgb([0, 0, 0.5]), + OldLace: fromRgb([0.992, 0.96, 0.9]), + Olive: fromRgb([0.5, 0.5, 0]), + OliveDrab: fromRgb([0.42, 0.556, 0.136]), + Orange: fromRgb([1, 0.648, 0]), + OrangeRed: fromRgb([1, 0.27, 0]), + Orchid: fromRgb([0.855, 0.44, 0.84]), + PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]), + PaleGreen: fromRgb([0.596, 0.985, 0.596]), + PaleTurquoise: fromRgb([0.688, 0.932, 0.932]), + PaleVioletRed: fromRgb([0.86, 0.44, 0.576]), + PapayaWhip: fromRgb([1, 0.936, 0.835]), + PeachPuff: fromRgb([1, 0.855, 0.725]), + Peru: fromRgb([0.804, 0.52, 0.248]), + Pink: fromRgb([1, 0.752, 0.796]), + Plum: fromRgb([0.868, 0.628, 0.868]), + PowderBlue: fromRgb([0.69, 0.88, 0.9]), + Purple: fromRgb([0.5, 0, 0.5]), + Red: fromRgb([1, 0, 0]), + RosyBrown: fromRgb([0.736, 0.56, 0.56]), + RoyalBlue: fromRgb([0.255, 0.41, 0.884]), + SaddleBrown: fromRgb([0.545, 0.27, 0.075]), + Salmon: fromRgb([0.98, 0.5, 0.448]), + SandyBrown: fromRgb([0.956, 0.644, 0.376]), + SeaGreen: fromRgb([0.18, 0.545, 0.34]), + Seashell: fromRgb([1, 0.96, 0.932]), + Sienna: fromRgb([0.628, 0.32, 0.176]), + Silver: fromRgb([0.752, 0.752, 0.752]), + SkyBlue: fromRgb([0.53, 0.808, 0.92]), + SlateBlue: fromRgb([0.415, 0.352, 0.804]), + SlateGray: fromRgb([0.44, 0.5, 0.565]), + SlateGrey: fromRgb([0.44, 0.5, 0.565]), + Snow: fromRgb([1, 0.98, 0.98]), + SpringGreen: fromRgb([0, 1, 0.498]), + SteelBlue: fromRgb([0.275, 0.51, 0.705]), + Tan: fromRgb([0.824, 0.705, 0.55]), + Teal: fromRgb([0, 0.5, 0.5]), + Thistle: fromRgb([0.848, 0.75, 0.848]), + Tomato: fromRgb([1, 0.39, 0.28]), + Turquoise: fromRgb([0.25, 0.88, 0.815]), + Violet: fromRgb([0.932, 0.51, 0.932]), + VioletRed: fromRgb([0.816, 0.125, 0.565]), + Wheat: fromRgb([0.96, 0.87, 0.7]), + White: fromRgb([1, 1, 1]), + WhiteSmoke: fromRgb([0.96, 0.96, 0.96]), + Yellow: fromRgb([1, 1, 0]), + YellowGreen: fromRgb([0.604, 0.804, 0.196]) +}; +var X11_NAMES = { + AntiqueWhite1: fromRgb([1, 0.936, 0.86]), + AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]), + AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]), + AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]), + Aquamarine1: fromRgb([0.498, 1, 0.83]), + Aquamarine2: fromRgb([0.464, 0.932, 0.776]), + Aquamarine3: fromRgb([0.4, 0.804, 0.668]), + Aquamarine4: fromRgb([0.27, 0.545, 0.455]), + Azure1: fromRgb([0.94, 1, 1]), + Azure2: fromRgb([0.88, 0.932, 0.932]), + Azure3: fromRgb([0.756, 0.804, 0.804]), + Azure4: fromRgb([0.512, 0.545, 0.545]), + Bisque1: fromRgb([1, 0.894, 0.77]), + Bisque2: fromRgb([0.932, 0.835, 0.716]), + Bisque3: fromRgb([0.804, 0.716, 0.62]), + Bisque4: fromRgb([0.545, 0.49, 0.42]), + Blue1: fromRgb([0, 0, 1]), + Blue2: fromRgb([0, 0, 0.932]), + Blue3: fromRgb([0, 0, 0.804]), + Blue4: fromRgb([0, 0, 0.545]), + Brown1: fromRgb([1, 0.25, 0.25]), + Brown2: fromRgb([0.932, 0.23, 0.23]), + Brown3: fromRgb([0.804, 0.2, 0.2]), + Brown4: fromRgb([0.545, 0.136, 0.136]), + Burlywood1: fromRgb([1, 0.828, 0.608]), + Burlywood2: fromRgb([0.932, 0.772, 0.57]), + Burlywood3: fromRgb([0.804, 0.668, 0.49]), + Burlywood4: fromRgb([0.545, 0.45, 0.332]), + CadetBlue1: fromRgb([0.596, 0.96, 1]), + CadetBlue2: fromRgb([0.556, 0.898, 0.932]), + CadetBlue3: fromRgb([0.48, 0.772, 0.804]), + CadetBlue4: fromRgb([0.325, 0.525, 0.545]), + Chartreuse1: fromRgb([0.498, 1, 0]), + Chartreuse2: fromRgb([0.464, 0.932, 0]), + Chartreuse3: fromRgb([0.4, 0.804, 0]), + Chartreuse4: fromRgb([0.27, 0.545, 0]), + Chocolate1: fromRgb([1, 0.498, 0.14]), + Chocolate2: fromRgb([0.932, 0.464, 0.13]), + Chocolate3: fromRgb([0.804, 0.4, 0.112]), + Chocolate4: fromRgb([0.545, 0.27, 0.075]), + Coral1: fromRgb([1, 0.448, 0.336]), + Coral2: fromRgb([0.932, 0.415, 0.312]), + Coral3: fromRgb([0.804, 0.356, 0.27]), + Coral4: fromRgb([0.545, 0.244, 0.185]), + Cornsilk1: fromRgb([1, 0.972, 0.864]), + Cornsilk2: fromRgb([0.932, 0.91, 0.804]), + Cornsilk3: fromRgb([0.804, 0.785, 0.694]), + Cornsilk4: fromRgb([0.545, 0.532, 0.47]), + Cyan1: fromRgb([0, 1, 1]), + Cyan2: fromRgb([0, 0.932, 0.932]), + Cyan3: fromRgb([0, 0.804, 0.804]), + Cyan4: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod1: fromRgb([1, 0.725, 0.06]), + DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]), + DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]), + DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]), + DarkOliveGreen1: fromRgb([0.792, 1, 0.44]), + DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]), + DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]), + DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]), + DarkOrange1: fromRgb([1, 0.498, 0]), + DarkOrange2: fromRgb([0.932, 0.464, 0]), + DarkOrange3: fromRgb([0.804, 0.4, 0]), + DarkOrange4: fromRgb([0.545, 0.27, 0]), + DarkOrchid1: fromRgb([0.75, 0.244, 1]), + DarkOrchid2: fromRgb([0.698, 0.228, 0.932]), + DarkOrchid3: fromRgb([0.604, 0.196, 0.804]), + DarkOrchid4: fromRgb([0.408, 0.132, 0.545]), + DarkSeaGreen1: fromRgb([0.756, 1, 0.756]), + DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]), + DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]), + DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]), + DarkSlateGray1: fromRgb([0.592, 1, 1]), + DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]), + DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]), + DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]), + DeepPink1: fromRgb([1, 0.08, 0.576]), + DeepPink2: fromRgb([0.932, 0.07, 0.536]), + DeepPink3: fromRgb([0.804, 0.064, 0.464]), + DeepPink4: fromRgb([0.545, 0.04, 0.312]), + DeepSkyBlue1: fromRgb([0, 0.75, 1]), + DeepSkyBlue2: fromRgb([0, 0.698, 0.932]), + DeepSkyBlue3: fromRgb([0, 0.604, 0.804]), + DeepSkyBlue4: fromRgb([0, 0.408, 0.545]), + DodgerBlue1: fromRgb([0.116, 0.565, 1]), + DodgerBlue2: fromRgb([0.11, 0.525, 0.932]), + DodgerBlue3: fromRgb([0.094, 0.455, 0.804]), + DodgerBlue4: fromRgb([0.064, 0.305, 0.545]), + Firebrick1: fromRgb([1, 0.19, 0.19]), + Firebrick2: fromRgb([0.932, 0.172, 0.172]), + Firebrick3: fromRgb([0.804, 0.15, 0.15]), + Firebrick4: fromRgb([0.545, 0.1, 0.1]), + Gold1: fromRgb([1, 0.844, 0]), + Gold2: fromRgb([0.932, 0.79, 0]), + Gold3: fromRgb([0.804, 0.68, 0]), + Gold4: fromRgb([0.545, 0.46, 0]), + Goldenrod1: fromRgb([1, 0.756, 0.145]), + Goldenrod2: fromRgb([0.932, 0.705, 0.132]), + Goldenrod3: fromRgb([0.804, 0.608, 0.112]), + Goldenrod4: fromRgb([0.545, 0.41, 0.08]), + Green1: fromRgb([0, 1, 0]), + Green2: fromRgb([0, 0.932, 0]), + Green3: fromRgb([0, 0.804, 0]), + Green4: fromRgb([0, 0.545, 0]), + Honeydew1: fromRgb([0.94, 1, 0.94]), + Honeydew2: fromRgb([0.88, 0.932, 0.88]), + Honeydew3: fromRgb([0.756, 0.804, 0.756]), + Honeydew4: fromRgb([0.512, 0.545, 0.512]), + HotPink1: fromRgb([1, 0.43, 0.705]), + HotPink2: fromRgb([0.932, 0.415, 0.655]), + HotPink3: fromRgb([0.804, 0.376, 0.565]), + HotPink4: fromRgb([0.545, 0.228, 0.385]), + IndianRed1: fromRgb([1, 0.415, 0.415]), + IndianRed2: fromRgb([0.932, 0.39, 0.39]), + IndianRed3: fromRgb([0.804, 0.332, 0.332]), + IndianRed4: fromRgb([0.545, 0.228, 0.228]), + Ivory1: fromRgb([1, 1, 0.94]), + Ivory2: fromRgb([0.932, 0.932, 0.88]), + Ivory3: fromRgb([0.804, 0.804, 0.756]), + Ivory4: fromRgb([0.545, 0.545, 0.512]), + Khaki1: fromRgb([1, 0.965, 0.56]), + Khaki2: fromRgb([0.932, 0.9, 0.52]), + Khaki3: fromRgb([0.804, 0.776, 0.45]), + Khaki4: fromRgb([0.545, 0.525, 0.305]), + LavenderBlush1: fromRgb([1, 0.94, 0.96]), + LavenderBlush2: fromRgb([0.932, 0.88, 0.898]), + LavenderBlush3: fromRgb([0.804, 0.756, 0.772]), + LavenderBlush4: fromRgb([0.545, 0.512, 0.525]), + LemonChiffon1: fromRgb([1, 0.98, 0.804]), + LemonChiffon2: fromRgb([0.932, 0.912, 0.75]), + LemonChiffon3: fromRgb([0.804, 0.79, 0.648]), + LemonChiffon4: fromRgb([0.545, 0.536, 0.44]), + LightBlue1: fromRgb([0.75, 0.936, 1]), + LightBlue2: fromRgb([0.698, 0.875, 0.932]), + LightBlue3: fromRgb([0.604, 0.752, 0.804]), + LightBlue4: fromRgb([0.408, 0.512, 0.545]), + LightCyan1: fromRgb([0.88, 1, 1]), + LightCyan2: fromRgb([0.82, 0.932, 0.932]), + LightCyan3: fromRgb([0.705, 0.804, 0.804]), + LightCyan4: fromRgb([0.48, 0.545, 0.545]), + LightGoldenrod1: fromRgb([1, 0.925, 0.545]), + LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]), + LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]), + LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]), + LightPink1: fromRgb([1, 0.684, 0.725]), + LightPink2: fromRgb([0.932, 0.635, 0.68]), + LightPink3: fromRgb([0.804, 0.55, 0.585]), + LightPink4: fromRgb([0.545, 0.372, 0.396]), + LightSalmon1: fromRgb([1, 0.628, 0.48]), + LightSalmon2: fromRgb([0.932, 0.585, 0.448]), + LightSalmon3: fromRgb([0.804, 0.505, 0.385]), + LightSalmon4: fromRgb([0.545, 0.34, 0.26]), + LightSkyBlue1: fromRgb([0.69, 0.888, 1]), + LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]), + LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]), + LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]), + LightSteelBlue1: fromRgb([0.792, 0.884, 1]), + LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]), + LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]), + LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]), + LightYellow1: fromRgb([1, 1, 0.88]), + LightYellow2: fromRgb([0.932, 0.932, 0.82]), + LightYellow3: fromRgb([0.804, 0.804, 0.705]), + LightYellow4: fromRgb([0.545, 0.545, 0.48]), + Magenta1: fromRgb([1, 0, 1]), + Magenta2: fromRgb([0.932, 0, 0.932]), + Magenta3: fromRgb([0.804, 0, 0.804]), + Magenta4: fromRgb([0.545, 0, 0.545]), + Maroon1: fromRgb([1, 0.204, 0.7]), + Maroon2: fromRgb([0.932, 0.19, 0.655]), + Maroon3: fromRgb([0.804, 0.16, 0.565]), + Maroon4: fromRgb([0.545, 0.11, 0.385]), + MediumOrchid1: fromRgb([0.88, 0.4, 1]), + MediumOrchid2: fromRgb([0.82, 0.372, 0.932]), + MediumOrchid3: fromRgb([0.705, 0.32, 0.804]), + MediumOrchid4: fromRgb([0.48, 0.215, 0.545]), + MediumPurple1: fromRgb([0.67, 0.51, 1]), + MediumPurple2: fromRgb([0.624, 0.475, 0.932]), + MediumPurple3: fromRgb([0.536, 0.408, 0.804]), + MediumPurple4: fromRgb([0.365, 0.28, 0.545]), + MistyRose1: fromRgb([1, 0.894, 0.884]), + MistyRose2: fromRgb([0.932, 0.835, 0.824]), + MistyRose3: fromRgb([0.804, 0.716, 0.71]), + MistyRose4: fromRgb([0.545, 0.49, 0.484]), + NavajoWhite1: fromRgb([1, 0.87, 0.68]), + NavajoWhite2: fromRgb([0.932, 0.81, 0.63]), + NavajoWhite3: fromRgb([0.804, 0.7, 0.545]), + NavajoWhite4: fromRgb([0.545, 0.475, 0.37]), + OliveDrab1: fromRgb([0.752, 1, 0.244]), + OliveDrab2: fromRgb([0.7, 0.932, 0.228]), + OliveDrab3: fromRgb([0.604, 0.804, 0.196]), + OliveDrab4: fromRgb([0.41, 0.545, 0.132]), + Orange1: fromRgb([1, 0.648, 0]), + Orange2: fromRgb([0.932, 0.604, 0]), + Orange3: fromRgb([0.804, 0.52, 0]), + Orange4: fromRgb([0.545, 0.352, 0]), + OrangeRed1: fromRgb([1, 0.27, 0]), + OrangeRed2: fromRgb([0.932, 0.25, 0]), + OrangeRed3: fromRgb([0.804, 0.215, 0]), + OrangeRed4: fromRgb([0.545, 0.145, 0]), + Orchid1: fromRgb([1, 0.512, 0.98]), + Orchid2: fromRgb([0.932, 0.48, 0.912]), + Orchid3: fromRgb([0.804, 0.41, 0.79]), + Orchid4: fromRgb([0.545, 0.28, 0.536]), + PaleGreen1: fromRgb([0.604, 1, 0.604]), + PaleGreen2: fromRgb([0.565, 0.932, 0.565]), + PaleGreen3: fromRgb([0.488, 0.804, 0.488]), + PaleGreen4: fromRgb([0.33, 0.545, 0.33]), + PaleTurquoise1: fromRgb([0.732, 1, 1]), + PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]), + PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]), + PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]), + PaleVioletRed1: fromRgb([1, 0.51, 0.67]), + PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]), + PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]), + PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]), + PeachPuff1: fromRgb([1, 0.855, 0.725]), + PeachPuff2: fromRgb([0.932, 0.796, 0.68]), + PeachPuff3: fromRgb([0.804, 0.688, 0.585]), + PeachPuff4: fromRgb([0.545, 0.468, 0.396]), + Pink1: fromRgb([1, 0.71, 0.772]), + Pink2: fromRgb([0.932, 0.664, 0.72]), + Pink3: fromRgb([0.804, 0.57, 0.62]), + Pink4: fromRgb([0.545, 0.39, 0.424]), + Plum1: fromRgb([1, 0.732, 1]), + Plum2: fromRgb([0.932, 0.684, 0.932]), + Plum3: fromRgb([0.804, 0.59, 0.804]), + Plum4: fromRgb([0.545, 0.4, 0.545]), + Purple1: fromRgb([0.608, 0.19, 1]), + Purple2: fromRgb([0.57, 0.172, 0.932]), + Purple3: fromRgb([0.49, 0.15, 0.804]), + Purple4: fromRgb([0.332, 0.1, 0.545]), + Red1: fromRgb([1, 0, 0]), + Red2: fromRgb([0.932, 0, 0]), + Red3: fromRgb([0.804, 0, 0]), + Red4: fromRgb([0.545, 0, 0]), + RosyBrown1: fromRgb([1, 0.756, 0.756]), + RosyBrown2: fromRgb([0.932, 0.705, 0.705]), + RosyBrown3: fromRgb([0.804, 0.608, 0.608]), + RosyBrown4: fromRgb([0.545, 0.41, 0.41]), + RoyalBlue1: fromRgb([0.284, 0.464, 1]), + RoyalBlue2: fromRgb([0.264, 0.43, 0.932]), + RoyalBlue3: fromRgb([0.228, 0.372, 0.804]), + RoyalBlue4: fromRgb([0.152, 0.25, 0.545]), + Salmon1: fromRgb([1, 0.55, 0.41]), + Salmon2: fromRgb([0.932, 0.51, 0.385]), + Salmon3: fromRgb([0.804, 0.44, 0.33]), + Salmon4: fromRgb([0.545, 0.298, 0.224]), + SeaGreen1: fromRgb([0.33, 1, 0.624]), + SeaGreen2: fromRgb([0.305, 0.932, 0.58]), + SeaGreen3: fromRgb([0.264, 0.804, 0.5]), + SeaGreen4: fromRgb([0.18, 0.545, 0.34]), + Seashell1: fromRgb([1, 0.96, 0.932]), + Seashell2: fromRgb([0.932, 0.898, 0.87]), + Seashell3: fromRgb([0.804, 0.772, 0.75]), + Seashell4: fromRgb([0.545, 0.525, 0.51]), + Sienna1: fromRgb([1, 0.51, 0.28]), + Sienna2: fromRgb([0.932, 0.475, 0.26]), + Sienna3: fromRgb([0.804, 0.408, 0.224]), + Sienna4: fromRgb([0.545, 0.28, 0.15]), + SkyBlue1: fromRgb([0.53, 0.808, 1]), + SkyBlue2: fromRgb([0.494, 0.752, 0.932]), + SkyBlue3: fromRgb([0.424, 0.65, 0.804]), + SkyBlue4: fromRgb([0.29, 0.44, 0.545]), + SlateBlue1: fromRgb([0.512, 0.435, 1]), + SlateBlue2: fromRgb([0.48, 0.404, 0.932]), + SlateBlue3: fromRgb([0.41, 0.35, 0.804]), + SlateBlue4: fromRgb([0.28, 0.235, 0.545]), + SlateGray1: fromRgb([0.776, 0.888, 1]), + SlateGray2: fromRgb([0.725, 0.828, 0.932]), + SlateGray3: fromRgb([0.624, 0.712, 0.804]), + SlateGray4: fromRgb([0.424, 0.484, 0.545]), + Snow1: fromRgb([1, 0.98, 0.98]), + Snow2: fromRgb([0.932, 0.912, 0.912]), + Snow3: fromRgb([0.804, 0.79, 0.79]), + Snow4: fromRgb([0.545, 0.536, 0.536]), + SpringGreen1: fromRgb([0, 1, 0.498]), + SpringGreen2: fromRgb([0, 0.932, 0.464]), + SpringGreen3: fromRgb([0, 0.804, 0.4]), + SpringGreen4: fromRgb([0, 0.545, 0.27]), + SteelBlue1: fromRgb([0.39, 0.72, 1]), + SteelBlue2: fromRgb([0.36, 0.675, 0.932]), + SteelBlue3: fromRgb([0.31, 0.58, 0.804]), + SteelBlue4: fromRgb([0.21, 0.392, 0.545]), + Tan1: fromRgb([1, 0.648, 0.31]), + Tan2: fromRgb([0.932, 0.604, 0.288]), + Tan3: fromRgb([0.804, 0.52, 0.248]), + Tan4: fromRgb([0.545, 0.352, 0.17]), + Thistle1: fromRgb([1, 0.884, 1]), + Thistle2: fromRgb([0.932, 0.824, 0.932]), + Thistle3: fromRgb([0.804, 0.71, 0.804]), + Thistle4: fromRgb([0.545, 0.484, 0.545]), + Tomato1: fromRgb([1, 0.39, 0.28]), + Tomato2: fromRgb([0.932, 0.36, 0.26]), + Tomato3: fromRgb([0.804, 0.31, 0.224]), + Tomato4: fromRgb([0.545, 0.21, 0.15]), + Turquoise1: fromRgb([0, 0.96, 1]), + Turquoise2: fromRgb([0, 0.898, 0.932]), + Turquoise3: fromRgb([0, 0.772, 0.804]), + Turquoise4: fromRgb([0, 0.525, 0.545]), + VioletRed1: fromRgb([1, 0.244, 0.59]), + VioletRed2: fromRgb([0.932, 0.228, 0.55]), + VioletRed3: fromRgb([0.804, 0.196, 0.47]), + VioletRed4: fromRgb([0.545, 0.132, 0.32]), + Wheat1: fromRgb([1, 0.905, 0.73]), + Wheat2: fromRgb([0.932, 0.848, 0.684]), + Wheat3: fromRgb([0.804, 0.73, 0.59]), + Wheat4: fromRgb([0.545, 0.494, 0.4]), + Yellow1: fromRgb([1, 1, 0]), + Yellow2: fromRgb([0.932, 0.932, 0]), + Yellow3: fromRgb([0.804, 0.804, 0]), + Yellow4: fromRgb([0.545, 0.545, 0]), + Gray0: fromRgb([0.745, 0.745, 0.745]), + Green0: fromRgb([0, 1, 0]), + Grey0: fromRgb([0.745, 0.745, 0.745]), + Maroon0: fromRgb([0.69, 0.19, 0.376]), + Purple0: fromRgb([0.628, 0.125, 0.94]) +}; +var XColorCoreModelToColor = { + rgb: ([r, g, b]) => Color2([r * 255, g * 255, b * 255], "rgb"), + cmy: ([c, m, y]) => XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]), + cmyk: ([c, m, y, k]) => Color2([c * 255, m * 255, y * 255, k * 100], "cmyk"), + hsb: ([h, s2, b]) => Color2([h * 360, s2 * 100, b * 100], "hsv"), + gray: ([v]) => Color2([v * 255, v * 255, v * 255], "rgb") +}; +({ + // Core colors + red: XColorCoreModelToColor.rgb([1, 0, 0]), + green: XColorCoreModelToColor.rgb([0, 1, 0]), + blue: XColorCoreModelToColor.rgb([0, 0, 1]), + brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]), + lime: XColorCoreModelToColor.rgb([0.75, 1, 0]), + orange: XColorCoreModelToColor.rgb([1, 0.5, 0]), + pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]), + purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]), + teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]), + violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]), + cyan: XColorCoreModelToColor.rgb([0, 1, 1]), + magenta: XColorCoreModelToColor.rgb([1, 0, 1]), + yellow: XColorCoreModelToColor.rgb([1, 1, 0]), + olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]), + black: XColorCoreModelToColor.rgb([0, 0, 0]), + darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]), + gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]), + lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]), + white: XColorCoreModelToColor.rgb([1, 1, 1]), + ...DVI_PS_NAMES, + ...SVG_NAMES, + ...X11_NAMES +}); +var macros14 = { + NewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + NewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + NewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RequirePackage: { + signature: "o m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + }, + DeclareOption: { signature: "m m", renderInfo: { breakAround: true } } +}; +var environments14 = {}; +var macros15 = { + mode: { signature: "s d<> d{}", renderInfo: { breakAround: true } }, + insertnavigation: { signature: "m", renderInfo: { breakAround: true } }, + insertsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortdate: { signature: "o", renderInfo: { breakAround: true } }, + insertshortinstitute: { signature: "o", renderInfo: { breakAround: true } }, + insertshortpart: { signature: "o", renderInfo: { breakAround: true } }, + insertshorttitle: { signature: "o", renderInfo: { breakAround: true } }, + insertsubsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsubsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertverticalnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + usebeamercolor: { signature: "s m", renderInfo: { breakAround: true } }, + usebeamertemplate: { signature: "s m", renderInfo: { breakAround: true } }, + setbeamercolor: { + signature: "m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamersize: { + signature: "m o o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamertemplate: { + signature: "m o o d{}", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + newcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + renewcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + newenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + resetcounteronoverlays: { + signature: "m", + renderInfo: { breakAround: true } + }, + resetcountonoverlays: { signature: "m", renderInfo: { breakAround: true } }, + logo: { signature: "m", renderInfo: { breakAround: true } }, + frametitle: { signature: "d<> o m", renderInfo: { breakAround: true } }, + framesubtitle: { signature: "d<> m", renderInfo: { breakAround: true } }, + pause: { signature: "o" }, + onslide: { signature: "t+ t* d<> d{}" }, + only: { signature: "d<> m d<>" }, + uncover: { signature: "d<> m" }, + visible: { signature: "d<> m" }, + invisible: { signature: "d<> m" }, + alt: { signature: "d<> m m d<>" }, + temporal: { signature: "r<> m m m" }, + item: { + signature: "d<> o d<>", + renderInfo: { + hangingIndent: true, + namedArguments: [null, "label", null] + } + }, + label: { signature: "d<> o m" }, + // cleveref adds an optional argument to label; this gives maximum compatibility. + action: { signature: "d<> m" }, + beamerdefaultoverlayspecification: { signature: "m" }, + titlegraphic: { signature: "m", renderInfo: { breakAround: true } }, + subject: { signature: "m", renderInfo: { breakAround: true } }, + keywords: { signature: "m", renderInfo: { breakAround: true } }, + lecture: { signature: "o m m", renderInfo: { breakAround: true } }, + partpage: { renderInfo: { breakAround: true } }, + sectionpage: { renderInfo: { breakAround: true } }, + subsectionpage: { renderInfo: { breakAround: true } }, + AtBeginLecture: { signature: "m", renderInfo: { breakAround: true } }, + AtBeginPart: { signature: "m", renderInfo: { breakAround: true } }, + tableofcontents: { + signature: "o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + againframe: { signature: "d<> o o m", renderInfo: { breakAround: true } }, + framezoom: { + signature: "r<> r<> o r() r()", + renderInfo: { breakAround: true } + }, + column: { signature: "d<> o m", renderInfo: { breakAround: true } }, + animate: { signature: "r<>", renderInfo: { breakAround: true } }, + animatevalue: { signature: "r<> m m m", renderInfo: { breakAround: true } }, + sound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinksound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinkmute: { signature: "m", renderInfo: { breakAround: true } }, + // These signatures conflict with the default signatures. + // Care must be taken when processing an AST. + section: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + part: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + bibitem: { + signature: "s d<> o m", + renderInfo: { + hangingIndent: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + } +}; +var environments15 = { + frame: { + signature: "!d<> !o !o !d{} !d{}" + }, + block: { + signature: "!d<> !d{} !d<>" + }, + alertblock: { + signature: "!d<> !d{} !d<>" + }, + exampleblock: { + signature: "!d<> !d{} !d<>" + }, + onlyenv: { + signature: "!d<>" + }, + altenv: { + signature: "!d<> m m m m !d<>" + }, + overlayarea: { signature: "m m" }, + overprint: { signature: "o" }, + actionenv: { signature: "!d<>" }, + columns: { signature: "d<> o" }, + column: { signature: "d<> o m" } +}; +var macros16 = { + columnbreak: { renderInfo: { breakAround: true } } +}; +var environments16 = { + multicols: { + signature: "m o o" + }, + "multicols*": { + signature: "m o o" + } +}; +var macroInfo = { + cleveref: macros, + exam: macros2, + geometry: macros3, + hyperref: macros4, + latex2e: macros5, + listings: macros6, + makeidx: macros7, + mathtools: macros8, + minted: macros9, + nicematrix: macros10, + systeme: macros11, + tikz: macros12, + xcolor: macros13, + xparse: macros14, + beamer: macros15, + multicol: macros16 +}; +var environmentInfo = { + cleveref: environments, + exam: environments2, + geometry: environments3, + hyperref: environments4, + latex2e: environments5, + listings: environments6, + makeidx: environments7, + mathtools: environments8, + minted: environments9, + nicematrix: environments10, + systeme: environments11, + tikz: environments12, + xcolor: environments13, + xparse: environments14, + beamer: environments15, + multicol: environments16 +}; +function processEnvironment(envNode, envInfo) { + if (envInfo.signature && envNode.args == null) { + const { args } = gobbleArguments(envNode.content, envInfo.signature); + envNode.args = args; + } + updateRenderInfo(envNode, envInfo.renderInfo); + if (typeof envInfo.processContent === "function") { + envNode.content = envInfo.processContent(envNode.content); + } +} +function findRegionInArray(tree, start, end) { + const ret = []; + let currRegion = { start: void 0, end: tree.length }; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (start(node)) { + currRegion.start = i; + } + if (end(node)) { + currRegion.end = i + 1; + ret.push(currRegion); + currRegion = { start: void 0, end: tree.length }; + } + } + if (currRegion.start != null) { + ret.push(currRegion); + } + return ret; +} +function refineRegions(regions) { + const _regions = [...regions]; + _regions.sort((a, b) => a.start - b.start); + const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end])); + const cutPoints = Array.from(cutPointsSet); + cutPoints.sort((a, b) => a - b); + const retRegions = []; + const retRegionsContainedIn = []; + let seekIndex = 0; + for (let i = 0; i < cutPoints.length - 1; i++) { + const start = cutPoints[i]; + const end = cutPoints[i + 1]; + const region = { start, end }; + const regionContainedIn = /* @__PURE__ */ new Set(); + let encounteredEndPastStart = false; + for (let j = seekIndex; j < _regions.length; j++) { + const superRegion = _regions[j]; + if (superRegion.end >= region.start) { + encounteredEndPastStart = true; + } + if (!encounteredEndPastStart && superRegion.end < region.start) { + seekIndex = j + 1; + continue; + } + if (superRegion.start > end) { + break; + } + if (superRegion.start <= region.start && superRegion.end >= region.end) { + encounteredEndPastStart = true; + regionContainedIn.add(superRegion); + } + } + if (regionContainedIn.size > 0) { + retRegions.push(region); + retRegionsContainedIn.push(regionContainedIn); + } + } + return { regions: retRegions, regionsContainedIn: retRegionsContainedIn }; +} +function splitByRegions(array, regionsRecord) { + const ret = []; + const indices = [0, array.length]; + const reverseMap = {}; + for (const [key, records] of Object.entries(regionsRecord)) { + indices.push( + ...records.flatMap((r) => { + reverseMap["" + [r.start, r.end]] = key; + return [r.start, r.end]; + }) + ); + } + indices.sort((a, b) => a - b); + for (let i = 0; i < indices.length - 1; i++) { + const start = indices[i]; + const end = indices[i + 1]; + if (start === end) { + continue; + } + const regionKey = reverseMap["" + [start, end]]; + ret.push([regionKey || null, array.slice(start, end)]); + } + return ret; +} +function escapeRegExp(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function buildWordRegex(allowedSet) { + const regexpStr = `^(${["\\p{L}"].concat(Array.from(allowedSet).map(escapeRegExp)).join("|")})*`; + return new RegExp(regexpStr, "u"); +} +function hasReparsableMacroNamesInArray(tree, allowedTokens) { + for (let i = 0; i < tree.length; i++) { + const macro = tree[i]; + const string = tree[i + 1]; + if (match.anyMacro(macro) && match.anyString(string)) { + if (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0))) { + return true; + } + } + } + return false; +} +function hasReparsableMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + let ret = false; + visit( + tree, + (nodes) => { + if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) { + ret = true; + return EXIT; + } + }, + { includeArrays: true, test: Array.isArray } + ); + return ret; +} +function reparseMacroNamesInArray(tree, allowedTokens) { + var _a, _b, _c; + const regex = buildWordRegex(allowedTokens); + let i = 0; + while (i < tree.length) { + const macro = tree[i]; + const string = tree[i + 1]; + if (match.anyMacro(macro) && // The _^ macros in math mode should not be extended no-matter what; + // So we check to make sure that the macro we're dealing with has the default escape token. + (macro.escapeToken == null || macro.escapeToken === "\\") && match.anyString(string) && // There are two options. Either the macro ends with the special character, + // e.g. `\@foo` or the special character starts the next string, e.g. `\foo@`. + (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0)))) { + const match3 = string.content.match(regex); + const takeable = match3 ? match3[0] : ""; + if (takeable.length > 0) { + if (takeable.length === string.content.length) { + macro.content += string.content; + tree.splice(i + 1, 1); + if (macro.position && ((_a = string.position) == null ? void 0 : _a.end)) { + macro.position.end = string.position.end; + } + } else { + macro.content += takeable; + string.content = string.content.slice(takeable.length); + if ((_b = macro.position) == null ? void 0 : _b.end) { + macro.position.end.offset += takeable.length; + macro.position.end.column += takeable.length; + } + if ((_c = string.position) == null ? void 0 : _c.start) { + string.position.start.offset += takeable.length; + string.position.start.column += takeable.length; + } + } + } else { + i++; + } + } else { + ++i; + } + } +} +function reparseMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + visit( + tree, + (nodes) => { + reparseMacroNamesInArray(nodes, _allowedTokens); + }, + { includeArrays: true, test: Array.isArray } + ); +} +var expl3Find = { + start: match.createMacroMatcher(["ExplSyntaxOn"]), + end: match.createMacroMatcher(["ExplSyntaxOff"]) +}; +var atLetterFind = { + start: match.createMacroMatcher(["makeatletter"]), + end: match.createMacroMatcher(["makeatother"]) +}; +function findExpl3AndAtLetterRegionsInArray(tree) { + const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end); + const atLetter = findRegionInArray( + tree, + atLetterFind.start, + atLetterFind.end + ); + const regionMap = new Map([ + ...expl3.map((x) => [x, "expl"]), + ...atLetter.map((x) => [x, "atLetter"]) + ]); + const all = refineRegions([...expl3, ...atLetter]); + const ret = { + explOnly: [], + atLetterOnly: [], + both: [] + }; + for (let i = 0; i < all.regions.length; i++) { + const region = all.regions[i]; + const containedIn = all.regionsContainedIn[i]; + if (containedIn.size === 2) { + ret.both.push(region); + continue; + } + for (const v of containedIn.values()) { + if (regionMap.get(v) === "expl") { + ret.explOnly.push(region); + } + if (regionMap.get(v) === "atLetter") { + ret.atLetterOnly.push(region); + } + } + } + ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1); + ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1); + ret.both = ret.both.filter((r) => r.end - r.start > 1); + return ret; +} +var atLetterSet = /* @__PURE__ */ new Set(["@"]); +var explSet = /* @__PURE__ */ new Set(["_", ":"]); +var bothSet = /* @__PURE__ */ new Set(["_", ":", "@"]); +function reparseExpl3AndAtLetterRegions(tree) { + visit( + tree, + { + leave: (nodes) => { + const regions = findExpl3AndAtLetterRegionsInArray(nodes); + const totalNumRegions = regions.both.length + regions.atLetterOnly.length + regions.explOnly.length; + if (totalNumRegions === 0) { + return; + } + const splits = splitByRegions(nodes, regions); + const processed = []; + for (const [key, slice2] of splits) { + switch (key) { + case null: + processed.push(...slice2); + continue; + case "atLetterOnly": + reparseMacroNames(slice2, atLetterSet); + processed.push(...slice2); + continue; + case "explOnly": + reparseMacroNames(slice2, explSet); + processed.push(...slice2); + continue; + case "both": + reparseMacroNames(slice2, bothSet); + processed.push(...slice2); + continue; + default: + throw new Error( + `Unexpected case when splitting ${key}` + ); + } + } + nodes.length = 0; + nodes.push(...processed); + return SKIP; + } + }, + { includeArrays: true, test: Array.isArray } + ); +} +var unifiedLatexAstComplier = function unifiedLatexAstComplier2() { + Object.assign(this, { Compiler: (x) => x }); +}; +function parseMinimal(str) { + return LatexPegParser.parse(str); +} +function parseMathMinimal(str) { + return LatexPegParser.parse(str, { startRule: "math" }); +} +var unifiedLatexFromStringMinimal = function unifiedLatexFromStringMinimal2(options2) { + const parser2 = (str) => { + if ((options2 == null ? void 0 : options2.mode) === "math") { + return { + type: "root", + content: parseMathMinimal(str), + _renderInfo: { inMathMode: true } + }; + } + return parseMinimal(str); + }; + Object.assign(this, { Parser: parser2 }); +}; +function unifiedLatexReparseMathConstructPlugin({ + mathEnvs, + mathMacros +}) { + const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + const isMathMacro = match.createMacroMatcher(mathMacros); + return (tree) => { + visit( + tree, + (node) => { + if (match.anyMacro(node)) { + for (const arg2 of node.args || []) { + if (arg2.content.length > 0 && !wasParsedInMathMode(arg2.content)) { + arg2.content = parseMathMinimal( + printRaw(arg2.content) + ); + } + } + } + if (match.anyEnvironment(node)) { + if (!wasParsedInMathMode(node.content)) { + node.content = parseMathMinimal(printRaw(node.content)); + } + } + }, + { + test: (node) => isMathEnvironment(node) || isMathMacro(node) + } + ); + }; +} +function wasParsedInMathMode(nodes) { + return !nodes.some( + (node) => ( + // If there are multi-char strings or ^ and _ have been parsed as strings, we know + // that we were not parsed in math mode. + match.anyString(node) && node.content.length > 1 || match.string(node, "^") || match.string(node, "_") + ) + ); +} +var unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse2(options2) { + const { environments: environments17 = {}, macros: macros17 = {} } = options2 || {}; + const mathMacros = Object.fromEntries( + Object.entries(macros17).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathEnvs = Object.fromEntries( + Object.entries(environments17).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathReparser = unifiedLatexReparseMathConstructPlugin({ + mathEnvs: Object.keys(mathEnvs), + mathMacros: Object.keys(mathMacros) + }); + const isRelevantEnvironment = match.createEnvironmentMatcher(environments17); + const isRelevantMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + return (tree) => { + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, mathMacros); + }, + leave: (node) => { + if (!isRelevantMathEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments17[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + mathReparser(tree); + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, macros17); + }, + leave: (node) => { + if (!isRelevantEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments17[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + }; +}; +var unifiedLatexProcessAtLetterAndExplMacros = function unifiedLatexProcessAtLetterAndExplMacros2(options2) { + let { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = options2 || {}; + return (tree) => { + reparseExpl3AndAtLetterRegions(tree); + if (atLetter || expl3) { + autodetectExpl3AndAtLetter = false; + } + if (autodetectExpl3AndAtLetter) { + atLetter = hasReparsableMacroNames(tree, "@"); + expl3 = hasReparsableMacroNames(tree, "_"); + } + const charSet = /* @__PURE__ */ new Set(); + if (atLetter) { + charSet.add("@"); + } + if (expl3) { + charSet.add(":"); + charSet.add("_"); + } + if (charSet.size > 0) { + reparseMacroNames(tree, charSet); + } + }; +}; +var unifiedLatexFromString = function unifiedLatexFromString2(options2) { + const { + mode = "regular", + macros: macros17 = {}, + environments: environments17 = {}, + flags: { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = {} + } = options2 || {}; + const allMacroInfo = Object.assign( + {}, + ...Object.values(macroInfo), + macros17 + ); + const allEnvInfo = Object.assign( + {}, + ...Object.values(environmentInfo), + environments17 + ); + const fullParser = unified().use(unifiedLatexFromStringMinimal, { mode }).use(unifiedLatexProcessAtLetterAndExplMacros, { + atLetter, + expl3, + autodetectExpl3AndAtLetter + }).use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, { + macros: allMacroInfo, + environments: allEnvInfo + }).use(unifiedLatexTrimEnvironmentContents).use(unifiedLatexTrimRoot).use(unifiedLatexAstComplier); + const parser2 = (str) => { + const file = fullParser.processSync({ value: str }); + return file.result; + }; + Object.assign(this, { Parser: parser2 }); +}; +var parser = unified().use(unifiedLatexFromString).freeze(); +function parse(str) { + return parser.parse(str); +} +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; +var __defProp2 = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); +}; +var public_exports = {}; +__export(public_exports, { + builders: () => builders, + printer: () => printer, + utils: () => utils +}); +var DOC_TYPE_STRING = "string"; +var DOC_TYPE_ARRAY = "array"; +var DOC_TYPE_CURSOR = "cursor"; +var DOC_TYPE_INDENT = "indent"; +var DOC_TYPE_ALIGN = "align"; +var DOC_TYPE_TRIM = "trim"; +var DOC_TYPE_GROUP = "group"; +var DOC_TYPE_FILL = "fill"; +var DOC_TYPE_IF_BREAK = "if-break"; +var DOC_TYPE_INDENT_IF_BREAK = "indent-if-break"; +var DOC_TYPE_LINE_SUFFIX = "line-suffix"; +var DOC_TYPE_LINE_SUFFIX_BOUNDARY = "line-suffix-boundary"; +var DOC_TYPE_LINE = "line"; +var DOC_TYPE_LABEL = "label"; +var DOC_TYPE_BREAK_PARENT = "break-parent"; +var VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([ + DOC_TYPE_CURSOR, + DOC_TYPE_INDENT, + DOC_TYPE_ALIGN, + DOC_TYPE_TRIM, + DOC_TYPE_GROUP, + DOC_TYPE_FILL, + DOC_TYPE_IF_BREAK, + DOC_TYPE_INDENT_IF_BREAK, + DOC_TYPE_LINE_SUFFIX, + DOC_TYPE_LINE_SUFFIX_BOUNDARY, + DOC_TYPE_LINE, + DOC_TYPE_LABEL, + DOC_TYPE_BREAK_PARENT +]); +function getDocType(doc) { + if (typeof doc === "string") { + return DOC_TYPE_STRING; + } + if (Array.isArray(doc)) { + return DOC_TYPE_ARRAY; + } + if (!doc) { + return; + } + const { type } = doc; + if (VALID_OBJECT_DOC_TYPES.has(type)) { + return type; + } +} +var get_doc_type_default = getDocType; +var disjunctionListFormat = (list) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(list); +function getDocErrorMessage(doc) { + const type = doc === null ? "null" : typeof doc; + if (type !== "string" && type !== "object") { + return `Unexpected doc '${type}', +Expected it to be 'string' or 'object'.`; + } + if (get_doc_type_default(doc)) { + throw new Error("doc is valid."); + } + const objectType = Object.prototype.toString.call(doc); + if (objectType !== "[object Object]") { + return `Unexpected doc '${objectType}'.`; + } + const EXPECTED_TYPE_VALUES = disjunctionListFormat( + [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`) + ); + return `Unexpected doc.type '${doc.type}'. +Expected it to be ${EXPECTED_TYPE_VALUES}.`; +} +var InvalidDocError = class extends Error { + constructor(doc) { + super(getDocErrorMessage(doc)); + __publicField(this, "name", "InvalidDocError"); + this.doc = doc; + } +}; +var invalid_doc_error_default = InvalidDocError; +var traverseDocOnExitStackMarker = {}; +function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { + const docsStack = [doc]; + while (docsStack.length > 0) { + const doc2 = docsStack.pop(); + if (doc2 === traverseDocOnExitStackMarker) { + onExit(docsStack.pop()); + continue; + } + if (onExit) { + docsStack.push(doc2, traverseDocOnExitStackMarker); + } + const docType = get_doc_type_default(doc2); + if (!docType) { + throw new invalid_doc_error_default(doc2); + } + if ((onEnter == null ? void 0 : onEnter(doc2)) === false) { + continue; + } + switch (docType) { + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts; + for (let ic = parts.length, i = ic - 1; i >= 0; --i) { + docsStack.push(parts[i]); + } + break; + } + case DOC_TYPE_IF_BREAK: + docsStack.push(doc2.flatContents, doc2.breakContents); + break; + case DOC_TYPE_GROUP: + if (shouldTraverseConditionalGroups && doc2.expandedStates) { + for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) { + docsStack.push(doc2.expandedStates[i]); + } + } else { + docsStack.push(doc2.contents); + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + docsStack.push(doc2.contents); + break; + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + } +} +var traverse_doc_default = traverseDoc; +var noop = () => { +}; +var assertDocArray = noop; +function indent(contents) { + return { type: DOC_TYPE_INDENT, contents }; +} +function align(widthOrString, contents) { + return { type: DOC_TYPE_ALIGN, contents, n: widthOrString }; +} +function group(contents, opts = {}) { + assertDocArray( + opts.expandedStates + ); + return { + type: DOC_TYPE_GROUP, + id: opts.id, + contents, + break: Boolean(opts.shouldBreak), + expandedStates: opts.expandedStates + }; +} +function dedentToRoot(contents) { + return align(Number.NEGATIVE_INFINITY, contents); +} +function markAsRoot(contents) { + return align({ type: "root" }, contents); +} +function dedent(contents) { + return align(-1, contents); +} +function conditionalGroup(states, opts) { + return group(states[0], { ...opts, expandedStates: states }); +} +function fill(parts) { + return { type: DOC_TYPE_FILL, parts }; +} +function ifBreak(breakContents, flatContents = "", opts = {}) { + return { + type: DOC_TYPE_IF_BREAK, + breakContents, + flatContents, + groupId: opts.groupId + }; +} +function indentIfBreak(contents, opts) { + return { + type: DOC_TYPE_INDENT_IF_BREAK, + contents, + groupId: opts.groupId, + negate: opts.negate + }; +} +function lineSuffix(contents) { + return { type: DOC_TYPE_LINE_SUFFIX, contents }; +} +var lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY }; +var breakParent = { type: DOC_TYPE_BREAK_PARENT }; +var trim = { type: DOC_TYPE_TRIM }; +var hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true }; +var literallineWithoutBreakParent = { + type: DOC_TYPE_LINE, + hard: true, + literal: true +}; +var line = { type: DOC_TYPE_LINE }; +var softline = { type: DOC_TYPE_LINE, soft: true }; +var hardline = [hardlineWithoutBreakParent, breakParent]; +var literalline = [literallineWithoutBreakParent, breakParent]; +var cursor = { type: DOC_TYPE_CURSOR }; +function join(separator, docs) { + const parts = []; + for (let i = 0; i < docs.length; i++) { + if (i !== 0) { + parts.push(separator); + } + parts.push(docs[i]); + } + return parts; +} +function addAlignmentToDoc(doc, size, tabWidth) { + let aligned = doc; + if (size > 0) { + for (let i = 0; i < Math.floor(size / tabWidth); ++i) { + aligned = indent(aligned); + } + aligned = align(size % tabWidth, aligned); + aligned = align(Number.NEGATIVE_INFINITY, aligned); + } + return aligned; +} +function label(label2, contents) { + return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents; +} +var at = (isOptionalObject, object, index2) => { + if (isOptionalObject && (object === void 0 || object === null)) { + return; + } + if (Array.isArray(object) || typeof object === "string") { + return object[index2 < 0 ? object.length + index2 : index2]; + } + return object.at(index2); +}; +var at_default = at; +var stringReplaceAll = (isOptionalObject, original, pattern, replacement) => { + if (isOptionalObject && (original === void 0 || original === null)) { + return; + } + if (original.replaceAll) { + return original.replaceAll(pattern, replacement); + } + if (pattern.global) { + return original.replace(pattern, replacement); + } + return original.split(pattern).join(replacement); +}; +var string_replace_all_default = stringReplaceAll; +function convertEndOfLineToChars(value) { + switch (value) { + case "cr": + return "\r"; + case "crlf": + return "\r\n"; + default: + return "\n"; + } +} +var emoji_regex_default = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; +}; +var eastasianwidth_default = { + eastAsianWidth(character) { + var x = character.charCodeAt(0); + var y = character.length == 2 ? character.charCodeAt(1) : 0; + var codePoint = x; + if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) { + x &= 1023; + y &= 1023; + codePoint = x << 10 | y; + codePoint += 65536; + } + if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) { + return "F"; + } + if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) { + return "W"; + } + return "N"; + } +}; +var notAsciiRegex = /[^\x20-\x7F]/; +function getStringWidth(text) { + if (!text) { + return 0; + } + if (!notAsciiRegex.test(text)) { + return text.length; + } + text = text.replace(emoji_regex_default(), " "); + let width = 0; + for (const character of text) { + const codePoint = character.codePointAt(0); + if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) { + continue; + } + if (codePoint >= 768 && codePoint <= 879) { + continue; + } + const code = eastasianwidth_default.eastAsianWidth(character); + width += code === "F" || code === "W" ? 2 : 1; + } + return width; +} +var get_string_width_default = getStringWidth; +var getDocParts = (doc) => { + if (Array.isArray(doc)) { + return doc; + } + if (doc.type !== DOC_TYPE_FILL) { + throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`); + } + return doc.parts; +}; +function mapDoc(doc, cb) { + if (typeof doc === "string") { + return cb(doc); + } + const mapped = /* @__PURE__ */ new Map(); + return rec(doc); + function rec(doc2) { + if (mapped.has(doc2)) { + return mapped.get(doc2); + } + const result = process2(doc2); + mapped.set(doc2, result); + return result; + } + function process2(doc2) { + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_ARRAY: + return cb(doc2.map(rec)); + case DOC_TYPE_FILL: + return cb({ + ...doc2, + parts: doc2.parts.map(rec) + }); + case DOC_TYPE_IF_BREAK: + return cb({ + ...doc2, + breakContents: rec(doc2.breakContents), + flatContents: rec(doc2.flatContents) + }); + case DOC_TYPE_GROUP: { + let { + expandedStates, + contents + } = doc2; + if (expandedStates) { + expandedStates = expandedStates.map(rec); + contents = expandedStates[0]; + } else { + contents = rec(contents); + } + return cb({ + ...doc2, + contents, + expandedStates + }); + } + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + return cb({ + ...doc2, + contents: rec(doc2.contents) + }); + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + return cb(doc2); + default: + throw new invalid_doc_error_default(doc2); + } + } +} +function findInDoc(doc, fn, defaultValue) { + let result = defaultValue; + let shouldSkipFurtherProcessing = false; + function findInDocOnEnterFn(doc2) { + if (shouldSkipFurtherProcessing) { + return false; + } + const maybeResult = fn(doc2); + if (maybeResult !== void 0) { + shouldSkipFurtherProcessing = true; + result = maybeResult; + } + } + traverse_doc_default(doc, findInDocOnEnterFn); + return result; +} +function willBreakFn(doc) { + if (doc.type === DOC_TYPE_GROUP && doc.break) { + return true; + } + if (doc.type === DOC_TYPE_LINE && doc.hard) { + return true; + } + if (doc.type === DOC_TYPE_BREAK_PARENT) { + return true; + } +} +function willBreak(doc) { + return findInDoc(doc, willBreakFn, false); +} +function breakParentGroup(groupStack) { + if (groupStack.length > 0) { + const parentGroup = at_default( + /* isOptionalObject*/ + false, + groupStack, + -1 + ); + if (!parentGroup.expandedStates && !parentGroup.break) { + parentGroup.break = "propagated"; + } + } + return null; +} +function propagateBreaks(doc) { + const alreadyVisitedSet = /* @__PURE__ */ new Set(); + const groupStack = []; + function propagateBreaksOnEnterFn(doc2) { + if (doc2.type === DOC_TYPE_BREAK_PARENT) { + breakParentGroup(groupStack); + } + if (doc2.type === DOC_TYPE_GROUP) { + groupStack.push(doc2); + if (alreadyVisitedSet.has(doc2)) { + return false; + } + alreadyVisitedSet.add(doc2); + } + } + function propagateBreaksOnExitFn(doc2) { + if (doc2.type === DOC_TYPE_GROUP) { + const group22 = groupStack.pop(); + if (group22.break) { + breakParentGroup(groupStack); + } + } + } + traverse_doc_default( + doc, + propagateBreaksOnEnterFn, + propagateBreaksOnExitFn, + /* shouldTraverseConditionalGroups */ + true + ); +} +function removeLinesFn(doc) { + if (doc.type === DOC_TYPE_LINE && !doc.hard) { + return doc.soft ? "" : " "; + } + if (doc.type === DOC_TYPE_IF_BREAK) { + return doc.flatContents; + } + return doc; +} +function removeLines(doc) { + return mapDoc(doc, removeLinesFn); +} +function stripTrailingHardlineFromParts(parts) { + parts = [...parts]; + while (parts.length >= 2 && at_default( + /* isOptionalObject*/ + false, + parts, + -2 + ).type === DOC_TYPE_LINE && at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ).type === DOC_TYPE_BREAK_PARENT) { + parts.length -= 2; + } + if (parts.length > 0) { + const lastPart = stripTrailingHardlineFromDoc(at_default( + /* isOptionalObject*/ + false, + parts, + -1 + )); + parts[parts.length - 1] = lastPart; + } + return parts; +} +function stripTrailingHardlineFromDoc(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_GROUP: + case DOC_TYPE_LINE_SUFFIX: + case DOC_TYPE_LABEL: { + const contents = stripTrailingHardlineFromDoc(doc.contents); + return { + ...doc, + contents + }; + } + case DOC_TYPE_IF_BREAK: + return { + ...doc, + breakContents: stripTrailingHardlineFromDoc(doc.breakContents), + flatContents: stripTrailingHardlineFromDoc(doc.flatContents) + }; + case DOC_TYPE_FILL: + return { + ...doc, + parts: stripTrailingHardlineFromParts(doc.parts) + }; + case DOC_TYPE_ARRAY: + return stripTrailingHardlineFromParts(doc); + case DOC_TYPE_STRING: + return doc.replace(/[\n\r]*$/, ""); + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function stripTrailingHardline(doc) { + return stripTrailingHardlineFromDoc(cleanDoc(doc)); +} +function cleanDocFn(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_FILL: + if (doc.parts.every((part) => part === "")) { + return ""; + } + break; + case DOC_TYPE_GROUP: + if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) { + return ""; + } + if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) { + return doc.contents; + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LINE_SUFFIX: + if (!doc.contents) { + return ""; + } + break; + case DOC_TYPE_IF_BREAK: + if (!doc.flatContents && !doc.breakContents) { + return ""; + } + break; + case DOC_TYPE_ARRAY: { + const parts = []; + for (const part of doc) { + if (!part) { + continue; + } + const [currentPart, ...restParts] = Array.isArray(part) ? part : [part]; + if (typeof currentPart === "string" && typeof at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ) === "string") { + parts[parts.length - 1] += currentPart; + } else { + parts.push(currentPart); + } + parts.push(...restParts); + } + if (parts.length === 0) { + return ""; + } + if (parts.length === 1) { + return parts[0]; + } + return parts; + } + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_LABEL: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function cleanDoc(doc) { + return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc)); +} +function replaceEndOfLine(doc, replacement = literalline) { + return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" ? join(replacement, currentDoc.split("\n")) : currentDoc); +} +function canBreakFn(doc) { + if (doc.type === DOC_TYPE_LINE) { + return true; + } +} +function canBreak(doc) { + return findInDoc(doc, canBreakFn, false); +} +var MODE_BREAK = Symbol("MODE_BREAK"); +var MODE_FLAT = Symbol("MODE_FLAT"); +var CURSOR_PLACEHOLDER = Symbol("cursor"); +function rootIndent() { + return { + value: "", + length: 0, + queue: [] + }; +} +function makeIndent(ind, options2) { + return generateInd(ind, { + type: "indent" + }, options2); +} +function makeAlign(indent22, widthOrDoc, options2) { + if (widthOrDoc === Number.NEGATIVE_INFINITY) { + return indent22.root || rootIndent(); + } + if (widthOrDoc < 0) { + return generateInd(indent22, { + type: "dedent" + }, options2); + } + if (!widthOrDoc) { + return indent22; + } + if (widthOrDoc.type === "root") { + return { + ...indent22, + root: indent22 + }; + } + const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign"; + return generateInd(indent22, { + type: alignType, + n: widthOrDoc + }, options2); +} +function generateInd(ind, newPart, options2) { + const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart]; + let value = ""; + let length = 0; + let lastTabs = 0; + let lastSpaces = 0; + for (const part of queue) { + switch (part.type) { + case "indent": + flush(); + if (options2.useTabs) { + addTabs(1); + } else { + addSpaces(options2.tabWidth); + } + break; + case "stringAlign": + flush(); + value += part.n; + length += part.n.length; + break; + case "numberAlign": + lastTabs += 1; + lastSpaces += part.n; + break; + default: + throw new Error(`Unexpected type '${part.type}'`); + } + } + flushSpaces(); + return { + ...ind, + value, + length, + queue + }; + function addTabs(count) { + value += " ".repeat(count); + length += options2.tabWidth * count; + } + function addSpaces(count) { + value += " ".repeat(count); + length += count; + } + function flush() { + if (options2.useTabs) { + flushTabs(); + } else { + flushSpaces(); + } + } + function flushTabs() { + if (lastTabs > 0) { + addTabs(lastTabs); + } + resetLast(); + } + function flushSpaces() { + if (lastSpaces > 0) { + addSpaces(lastSpaces); + } + resetLast(); + } + function resetLast() { + lastTabs = 0; + lastSpaces = 0; + } +} +function trim2(out) { + let trimCount = 0; + let cursorCount = 0; + let outIndex = out.length; + outer: + while (outIndex--) { + const last = out[outIndex]; + if (last === CURSOR_PLACEHOLDER) { + cursorCount++; + continue; + } + for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) { + const char = last[charIndex]; + if (char === " " || char === " ") { + trimCount++; + } else { + out[outIndex] = last.slice(0, charIndex + 1); + break outer; + } + } + } + if (trimCount > 0 || cursorCount > 0) { + out.length = outIndex + 1; + while (cursorCount-- > 0) { + out.push(CURSOR_PLACEHOLDER); + } + } + return trimCount; +} +function fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) { + if (width === Number.POSITIVE_INFINITY) { + return true; + } + let restIdx = restCommands.length; + const cmds = [next]; + const out = []; + while (width >= 0) { + if (cmds.length === 0) { + if (restIdx === 0) { + return true; + } + cmds.push(restCommands[--restIdx]); + continue; + } + const { + mode, + doc + } = cmds.pop(); + switch (get_doc_type_default(doc)) { + case DOC_TYPE_STRING: + out.push(doc); + width -= get_string_width_default(doc); + break; + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = getDocParts(doc); + for (let i = parts.length - 1; i >= 0; i--) { + cmds.push({ + mode, + doc: parts[i] + }); + } + break; + } + case DOC_TYPE_INDENT: + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + cmds.push({ + mode, + doc: doc.contents + }); + break; + case DOC_TYPE_TRIM: + width += trim2(out); + break; + case DOC_TYPE_GROUP: { + if (mustBeFlat && doc.break) { + return false; + } + const groupMode = doc.break ? MODE_BREAK : mode; + const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default( + /* isOptionalObject*/ + false, + doc.expandedStates, + -1 + ) : doc.contents; + cmds.push({ + mode: groupMode, + doc: contents + }); + break; + } + case DOC_TYPE_IF_BREAK: { + const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode; + const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents; + if (contents) { + cmds.push({ + mode, + doc: contents + }); + } + break; + } + case DOC_TYPE_LINE: + if (mode === MODE_BREAK || doc.hard) { + return true; + } + if (!doc.soft) { + out.push(" "); + width--; + } + break; + case DOC_TYPE_LINE_SUFFIX: + hasLineSuffix = true; + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (hasLineSuffix) { + return false; + } + break; + } + } + return false; +} +function printDocToString(doc, options2) { + const groupModeMap = {}; + const width = options2.printWidth; + const newLine = convertEndOfLineToChars(options2.endOfLine); + let pos = 0; + const cmds = [{ + ind: rootIndent(), + mode: MODE_BREAK, + doc + }]; + const out = []; + let shouldRemeasure = false; + const lineSuffix22 = []; + let printedCursorCount = 0; + propagateBreaks(doc); + while (cmds.length > 0) { + const { + ind, + mode, + doc: doc2 + } = cmds.pop(); + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_STRING: { + const formatted = newLine !== "\n" ? string_replace_all_default( + /* isOptionalObject*/ + false, + doc2, + "\n", + newLine + ) : doc2; + out.push(formatted); + if (cmds.length > 0) { + pos += get_string_width_default(formatted); + } + break; + } + case DOC_TYPE_ARRAY: + for (let i = doc2.length - 1; i >= 0; i--) { + cmds.push({ + ind, + mode, + doc: doc2[i] + }); + } + break; + case DOC_TYPE_CURSOR: + if (printedCursorCount >= 2) { + throw new Error("There are too many 'cursor' in doc."); + } + out.push(CURSOR_PLACEHOLDER); + printedCursorCount++; + break; + case DOC_TYPE_INDENT: + cmds.push({ + ind: makeIndent(ind, options2), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_ALIGN: + cmds.push({ + ind: makeAlign(ind, doc2.n, options2), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_TRIM: + pos -= trim2(out); + break; + case DOC_TYPE_GROUP: + switch (mode) { + case MODE_FLAT: + if (!shouldRemeasure) { + cmds.push({ + ind, + mode: doc2.break ? MODE_BREAK : MODE_FLAT, + doc: doc2.contents + }); + break; + } + case MODE_BREAK: { + shouldRemeasure = false; + const next = { + ind, + mode: MODE_FLAT, + doc: doc2.contents + }; + const rem = width - pos; + const hasLineSuffix = lineSuffix22.length > 0; + if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(next); + } else { + if (doc2.expandedStates) { + const mostExpanded = at_default( + /* isOptionalObject*/ + false, + doc2.expandedStates, + -1 + ); + if (doc2.break) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + for (let i = 1; i < doc2.expandedStates.length + 1; i++) { + if (i >= doc2.expandedStates.length) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + const state = doc2.expandedStates[i]; + const cmd = { + ind, + mode: MODE_FLAT, + doc: state + }; + if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(cmd); + break; + } + } + } + } + } else { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: doc2.contents + }); + } + } + break; + } + } + if (doc2.id) { + groupModeMap[doc2.id] = at_default( + /* isOptionalObject*/ + false, + cmds, + -1 + ).mode; + } + break; + case DOC_TYPE_FILL: { + const rem = width - pos; + const { + parts + } = doc2; + if (parts.length === 0) { + break; + } + const [content, whitespace] = parts; + const contentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: content + }; + const contentBreakCmd = { + ind, + mode: MODE_BREAK, + doc: content + }; + const contentFits = fits(contentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (parts.length === 1) { + if (contentFits) { + cmds.push(contentFlatCmd); + } else { + cmds.push(contentBreakCmd); + } + break; + } + const whitespaceFlatCmd = { + ind, + mode: MODE_FLAT, + doc: whitespace + }; + const whitespaceBreakCmd = { + ind, + mode: MODE_BREAK, + doc: whitespace + }; + if (parts.length === 2) { + if (contentFits) { + cmds.push(whitespaceFlatCmd, contentFlatCmd); + } else { + cmds.push(whitespaceBreakCmd, contentBreakCmd); + } + break; + } + parts.splice(0, 2); + const remainingCmd = { + ind, + mode, + doc: fill(parts) + }; + const secondContent = parts[0]; + const firstAndSecondContentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: [content, whitespace, secondContent] + }; + const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (firstAndSecondContentFits) { + cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd); + } else if (contentFits) { + cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd); + } else { + cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd); + } + break; + } + case DOC_TYPE_IF_BREAK: + case DOC_TYPE_INDENT_IF_BREAK: { + const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode; + if (groupMode === MODE_BREAK) { + const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents); + if (breakContents) { + cmds.push({ + ind, + mode, + doc: breakContents + }); + } + } + if (groupMode === MODE_FLAT) { + const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents; + if (flatContents) { + cmds.push({ + ind, + mode, + doc: flatContents + }); + } + } + break; + } + case DOC_TYPE_LINE_SUFFIX: + lineSuffix22.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: hardlineWithoutBreakParent + }); + } + break; + case DOC_TYPE_LINE: + switch (mode) { + case MODE_FLAT: + if (!doc2.hard) { + if (!doc2.soft) { + out.push(" "); + pos += 1; + } + break; + } else { + shouldRemeasure = true; + } + case MODE_BREAK: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: doc2 + }, ...lineSuffix22.reverse()); + lineSuffix22.length = 0; + break; + } + if (doc2.literal) { + if (ind.root) { + out.push(newLine, ind.root.value); + pos = ind.root.length; + } else { + out.push(newLine); + pos = 0; + } + } else { + pos -= trim2(out); + out.push(newLine + ind.value); + pos = ind.length; + } + break; + } + break; + case DOC_TYPE_LABEL: + cmds.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + if (cmds.length === 0 && lineSuffix22.length > 0) { + cmds.push(...lineSuffix22.reverse()); + lineSuffix22.length = 0; + } + } + const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER); + if (cursorPlaceholderIndex !== -1) { + const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1); + const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(""); + const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(""); + const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(""); + return { + formatted: beforeCursor + aroundCursor + afterCursor, + cursorNodeStart: beforeCursor.length, + cursorNodeText: aroundCursor + }; + } + return { + formatted: out.join("") + }; +} +var builders = { + join, + line, + softline, + hardline, + literalline, + group, + conditionalGroup, + fill, + lineSuffix, + lineSuffixBoundary, + cursor, + breakParent, + ifBreak, + trim, + indent, + indentIfBreak, + align, + addAlignmentToDoc, + markAsRoot, + dedentToRoot, + dedent, + hardlineWithoutBreakParent, + literallineWithoutBreakParent, + label, + // TODO: Remove this in v4 + concat: (parts) => parts +}; +var printer = { printDocToString }; +var utils = { + willBreak, + traverseDoc: traverse_doc_default, + findInDoc, + mapDoc, + removeLines, + stripTrailingHardline, + replaceEndOfLine, + canBreak +}; +function formatEnvSurround(node) { + const env = printRaw(node.env); + return { + envName: env, + start: ESCAPE + "begin{" + env + "}", + end: ESCAPE + "end{" + env + "}" + }; +} +function isLineType(elm) { + if (elm == null || typeof elm === "string") { + return false; + } + if (Array.isArray(elm)) { + return isLineType(elm[0]); + } + if (elm.type === "concat") { + return isLineType(elm.parts); + } + return elm.type === "line"; +} +function joinWithSoftline(arr) { + if (arr.length === 0 || arr.length === 1) { + return arr; + } + const ret = [arr[0]]; + for (let i = 1; i < arr.length; i++) { + const prevNode = arr[i - 1]; + const nextNode = arr[i]; + if (!isLineType(prevNode) && !isLineType(nextNode)) { + ret.push(softline2); + } + ret.push(nextNode); + } + return ret; +} +function getNodeInfo(node, options2) { + if (!node) { + return { renderInfo: {} }; + } + const renderInfo = node._renderInfo || {}; + const previousNode = options2.referenceMap && options2.referenceMap.getPreviousNode(node); + const nextNode = options2.referenceMap && options2.referenceMap.getNextNode(node); + const renderCache = options2.referenceMap && options2.referenceMap.getRenderCache(node); + return { + renderInfo, + renderCache, + previousNode, + nextNode, + referenceMap: options2.referenceMap + }; +} +var ESCAPE = "\\"; +var { + group: group2, + fill: fill2, + ifBreak: ifBreak2, + line: line2, + softline: softline2, + hardline: hardline2, + lineSuffix: lineSuffix2, + lineSuffixBoundary: lineSuffixBoundary2, + breakParent: breakParent2, + indent: indent2, + markAsRoot: markAsRoot2, + join: join2 +} = builders; +function formatDocArray(nodes, docArray, options2) { + const ret = []; + for (let i = 0; i < nodes.length; i++) { + const rawNode = nodes[i]; + const printedNode = docArray[i]; + const { renderInfo, referenceMap, previousNode, nextNode } = getNodeInfo(rawNode, options2); + const renderCache = referenceMap && referenceMap.getRenderCache(rawNode); + switch (rawNode.type) { + case "comment": + if (!rawNode.sameline && previousNode && !match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + ret.push(printedNode); + if (nextNode && !rawNode.suffixParbreak) { + ret.push(hardline2); + } + break; + case "environment": + case "displaymath": + case "mathenv": + if (previousNode && (previousNode == null ? void 0 : previousNode.type) !== "parbreak") { + if (ret[ret.length - 1] === line2) { + ret.pop(); + } + if (ret[ret.length - 1] !== hardline2) { + ret.push(hardline2); + } + } + ret.push(printedNode); + if ((nextNode == null ? void 0 : nextNode.type) === "whitespace") { + ret.push(hardline2); + i++; + } + break; + case "macro": + if (renderInfo.breakBefore || renderInfo.breakAround) { + if (previousNode) { + if (ret[ret.length - 1] === line2 || ret[ret.length - 1] === hardline2) { + ret.pop(); + ret.push(hardline2); + } else if (!match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + } + } + if (renderInfo.inParMode && !renderInfo.hangingIndent && renderCache) { + ret.push( + renderCache.content, + ...renderCache.rawArgs || [] + ); + } else { + ret.push(printedNode); + } + if (renderInfo.breakAfter || renderInfo.breakAround) { + if (nextNode) { + if (match.whitespace(nextNode)) { + ret.push(hardline2); + i++; + } else if (match.parbreak(nextNode)) + ; + else if (!match.comment(nextNode)) { + ret.push(hardline2); + } + } + } + break; + case "parbreak": + ret.push(hardline2, hardline2); + break; + default: + ret.push(printedNode); + break; + } + } + return ret; +} +function zip(array1, array2) { + const ret = []; + const len = Math.min(array1.length, array2.length); + for (let i = 0; i < len; i++) { + ret.push([array1[i], array2[i]]); + } + return ret; +} +function printMacro(path2, print, options2) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options2 + ); + const content = (node.escapeToken != null ? node.escapeToken : ESCAPE) + node.content; + const args = node.args ? path2.map(print, "args") : []; + const rawArgs = []; + for (const [arg2, printedArg] of zip(node.args || [], args)) { + const renderCache = referenceMap && referenceMap.getRenderCache(arg2); + if (renderInfo.inParMode && renderCache) { + rawArgs.push(...renderCache); + } else { + rawArgs.push(printedArg); + } + } + if (referenceMap) { + referenceMap.setRenderCache(node, { rawArgs, content }); + } + if (renderInfo.hangingIndent) { + return indent2(fill2([content, ...rawArgs])); + } + return group2([content, ...rawArgs]); +} +function printArgumentPgfkeys(nodes, options2) { + const { allowParenGroups = false } = options2; + const parsed = parsePgfkeys(nodes, { allowParenGroups }); + const content = []; + for (const part of parsed) { + const isLastItem = part === parsed[parsed.length - 1]; + if (part.itemParts) { + const parts = part.itemParts.map( + (node) => printRaw(node, { asArray: true }).map( + (token) => token === linebreak ? hardline2 : token + ) + ); + const row = join2("=", parts); + content.push(row); + if (part.trailingComma) { + content.push(","); + } + } + if (part.trailingComment) { + const leadingContent = part.itemParts ? [" "] : []; + if (part.leadingParbreak) { + leadingContent.push(hardline2); + } + content.push( + ...leadingContent, + // We're carefully and manually controlling the newlines, + // so print the comment directly without any newlines + "%", + part.trailingComment.content, + breakParent2 + ); + } + if (!isLastItem) { + content.push(line2); + } + } + let leadingComment = [""]; + if (options2.leadingComment) { + if (options2.leadingComment.leadingWhitespace) { + leadingComment.push(" "); + } + leadingComment.push("%" + options2.leadingComment.content, breakParent2); + } + return group2([ + options2.openMark, + ...leadingComment, + // If there is no content, we don't want to push an extra `softline`. + // This matters because the braces group could still be broken by `leadingComment` + content.length > 0 ? indent2([softline2, ...content]) : "", + softline2, + options2.closeMark + ]); +} +function printTikzArgument(path2, print, options2) { + const node = path2.getNode(); + getNodeInfo( + node, + options2 + ); + const content = []; + const nodes = [...node.content]; + trim$1(nodes); + try { + const tikzAst = parse$1(nodes); + if (tikzAst.content.length === 0) { + content.push(";"); + return content; + } + const printer2 = new TikzArgumentPrinter(tikzAst, path2, print); + return printer2.toDoc(); + } catch (e) { + console.warn("Encountered error when trying to parse tikz argument", e); + } + content.push(";"); + return content; +} +function printFragment(fragment, path2, print) { + const tmpKey = Symbol(); + const currNode = path2.getNode(); + if (!currNode) { + throw new Error( + "tried to print a fragment, but the current node is `null`" + ); + } + currNode[tmpKey] = fragment; + const ret = print(tmpKey); + delete currNode[tmpKey]; + return ret; +} +function printTikzPathSpecNode(node, path2, print) { + switch (node.type) { + case "comment": + return printFragment(node, path2, print); + case "unknown": + return printFragment(node.content, path2, print); + case "coordinate": + return [printRaw(node.prefix), "(", printRaw(node.content), ")"]; + case "line_to": + return node.command; + case "square_brace_group": + return printOptionalArgs(node.content); + case "operation": + return node.content.content; + case "svg_operation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const options2 = node.options ? printOptionalArgs(node.options) : []; + const rest = node.options ? [group2(indent2([line2, printRaw(node.content)]))] : [" ", printRaw(node.content)]; + return [...comments, "svg", options2, ...rest]; + } + case "curve_to": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const printedControls = node.controls.length > 1 ? [ + printTikzPathSpecNode(node.controls[0], path2, print), + " ", + "and", + line2, + printTikzPathSpecNode(node.controls[1], path2, print) + ] : [printTikzPathSpecNode(node.controls[0], path2, print)]; + return [ + ...comments, + "..", + " ", + group2( + indent2(["controls", line2, ...printedControls, " ", ".."]) + ) + ]; + } + case "animation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + return [ + ...comments, + ":", + node.attribute, + " ", + "=", + " ", + group2( + indent2([ + printArgumentPgfkeys(node.content, { + openMark: "{", + closeMark: "}" + }) + ]) + ) + ]; + } + case "foreach": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const variables = [...node.variables]; + trim$1(variables); + const list = node.list.type === "macro" ? printFragment(node.list, path2, print) : printArgumentPgfkeys(node.list.content, { + openMark: "{", + closeMark: "}", + allowParenGroups: true + }); + const doc = [ + ...comments, + printRaw(node.start), + " ", + printRaw(variables) + ]; + if (node.options) { + doc.push(" ", indent2(printOptionalArgs(node.options))); + } + doc.push(" ", "in", " ", group2(indent2(list))); + const commandType = node.command.type; + switch (commandType) { + case "foreach": + doc.push( + indent2([ + line2, + printTikzPathSpecNode(node.command, path2, print) + ]) + ); + break; + case "macro": + doc.push( + indent2([line2, printFragment(node.command, path2, print)]) + ); + break; + case "group": { + const groupContent = [...node.command.content]; + trim$1(groupContent); + doc.push( + " ", + indent2( + group2([ + "{", + indent2([ + softline2, + ...groupContent.map( + (n) => printFragment(n, path2, print) + ) + ]), + softline2, + "}" + ]) + ) + ); + break; + } + default: + const invalidType = commandType; + console.warn( + `Unhandled command type when printing "foreach": ${invalidType}` + ); + } + return indent2(doc); + } + } + console.warn( + `Encountered unknown type when trying to print tikz PathSpec: "${node.type}"` + ); + return []; +} +function printOptionalArgs(nodes) { + return printArgumentPgfkeys(nodes, { + openMark: "[", + closeMark: "]" + }); +} +var _path, _print; +var TikzArgumentPrinter = class { + constructor(spec, path2, print) { + __privateAdd(this, _path, void 0); + __privateAdd(this, _print, void 0); + __privateSet(this, _path, path2); + __privateSet(this, _print, print); + this.nodes = [...spec.content]; + } + nodeToDoc(node) { + return printTikzPathSpecNode(node, __privateGet(this, _path), __privateGet(this, _print)); + } + toDoc() { + const doc = []; + const startArg = this.eatOptionalArg(); + if (startArg.optionalArg) { + doc.push( + ...startArg.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ) + ); + doc.push(printOptionalArgs(startArg.optionalArg.content)); + } + const innerDoc = []; + doc.push(group2([indent2(innerDoc), ";"])); + let cycle = -1; + while (this.nodes.length > 0) { + cycle++; + const firstSep = cycle === 0 && !startArg.optionalArg ? " " : line2; + const comingUp = this.peek(); + switch (comingUp) { + case "short_path": { + const [n0, n1, n2] = this.nodes.splice(0, 3); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1), + " ", + this.nodeToDoc(n2) + ); + continue; + } + case "long_path": { + const [n0, n1] = this.nodes.splice(0, 2); + if (n1.type === "operation") { + this.nodes.unshift(n1); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.eatOperation() + ); + } else { + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1) + ); + } + continue; + } + case "node": + { + const eatenNode = this.eatNode(); + if (eatenNode) { + innerDoc.push(line2, ...eatenNode); + continue; + } + console.warn( + "Expected to print a tikz `node` PathSpec but couldn't find the text `node`" + ); + } + continue; + case "operation": + innerDoc.push(firstSep, this.eatOperation()); + continue; + case "unknown": { + const node = this.nodes.shift(); + innerDoc.push(firstSep, this.nodeToDoc(node)); + continue; + } + } + this.nodes.shift(); + } + return doc; + } + /** + * Look at the current node and the nodes that follow. Return what + * "type" is recognized. + */ + peek() { + const [n0, n1, n2, n3] = [ + this.nodes[0], + this.nodes[1], + this.nodes[2], + this.nodes[3] + ]; + if ((n0 == null ? void 0 : n0.type) === "coordinate" && isPathJoinOperation(n1)) { + if ((n2 == null ? void 0 : n2.type) === "coordinate" && !((n3 == null ? void 0 : n3.type) === "coordinate" || isPathJoinOperation(n3))) { + return "short_path"; + } + return "long_path"; + } + if ((n0 == null ? void 0 : n0.type) === "operation") { + if (n0.content.content === "node") { + return "node"; + } + return "operation"; + } + return "unknown"; + } + /** + * Eat comments and an optional arg if present. If no optional + * arg is present, do nothing. + */ + eatOptionalArg() { + let i = 0; + const comments = []; + let optionalArg = null; + for (; i < this.nodes.length; i++) { + const node = this.nodes[i]; + if (node.type === "square_brace_group") { + optionalArg = node; + i++; + break; + } + if (node.type === "comment") { + comments.push(node); + continue; + } + break; + } + if (optionalArg) { + this.nodes.splice(0, i); + } + return { optionalArg, comments }; + } + /** + * Eat a `type === "operation"` node whose contents is `"node"`. I.e., + * the type of thing that shows up in `\path node at (1,1) {foo};` + */ + eatNode() { + const firstNode = this.nodes[0]; + if ((firstNode == null ? void 0 : firstNode.type) === "operation" && firstNode.content.content === "node") { + this.nodes.shift(); + } else { + return null; + } + const innerDoc = []; + const commentBlock = []; + const doc = [commentBlock, "node", group2(indent2(innerDoc))]; + let hasNodeArgument = false; + let shouldBail = false; + let i = 0; + const comments = []; + const options2 = []; + const name = []; + const atLocations = []; + const animations = []; + let content = []; + for (; i < this.nodes.length && !shouldBail; i++) { + const node = this.nodes[i]; + switch (node.type) { + case "animation": + animations.push(this.nodeToDoc(node)); + continue; + case "comment": { + const comment = { + ...node, + leadingWhitespace: false + }; + comments.push(this.nodeToDoc(comment)); + continue; + } + case "square_brace_group": + options2.push(printOptionalArgs(node.content)); + continue; + case "coordinate": + name.push(this.nodeToDoc(node)); + continue; + case "operation": { + if (node.content.content === "at") { + const nextNode = this.nodes[i + 1]; + if (!nextNode || !(nextNode.type === "coordinate" || nextNode.type === "unknown" && match.anyMacro(nextNode.content))) { + shouldBail = true; + continue; + } + atLocations.push(["at", " ", this.nodeToDoc(nextNode)]); + i++; + continue; + } + shouldBail = true; + continue; + } + case "unknown": { + if (match.group(node.content)) { + hasNodeArgument = true; + content = this.nodeToDoc(node); + } + } + } + break; + } + if (!hasNodeArgument) { + return innerDoc; + } + this.nodes.splice(0, i + 1); + let isFirstElement = true; + let isNamed = !(Array.isArray(name) && name.length === 0); + for (const comment of comments) { + commentBlock.push(comment, hardline2); + } + if (options2.length > 0) { + innerDoc.push(join2(" ", options2)); + isFirstElement = false; + } + if (animations.length > 0) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(join2(line2, animations)); + isFirstElement = false; + } + if (isNamed) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(name); + isFirstElement = false; + } + if (atLocations.length > 0) { + innerDoc.push(isFirstElement || isNamed ? " " : line2); + innerDoc.push(join2(line2, atLocations)); + isFirstElement = false; + } + innerDoc.push(line2, content); + return doc; + } + /** + * Eat a `type === "operation"` node, including its optional arguments. + */ + eatOperation() { + const node = this.nodes[0]; + if ((node == null ? void 0 : node.type) === "operation") { + this.nodes.shift(); + } else { + return []; + } + const doc = []; + if ((node == null ? void 0 : node.type) !== "operation") { + throw new Error("Expecting `operation` node."); + } + const options2 = this.eatOptionalArg(); + doc.push( + ...options2.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ), + node.content.content + ); + if (options2.optionalArg) { + doc.push(indent2(printOptionalArgs(options2.optionalArg.content))); + } + return doc; + } +}; +_path = /* @__PURE__ */ new WeakMap(); +_print = /* @__PURE__ */ new WeakMap(); +var PATH_JOIN_OPERATIONS = /* @__PURE__ */ new Set(["rectangle", "grid", "sin", "cos", "to"]); +function isPathJoinOperation(node) { + if (!node) { + return false; + } + switch (node.type) { + case "line_to": + case "curve_to": + return true; + case "operation": + return PATH_JOIN_OPERATIONS.has(node.content.content); + } + return false; +} +function printArgument(path2, print, options2) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options2 + ); + if (node.openMark === "" && node.closeMark === "" && node.content.length === 0) { + return []; + } + const parentNode = path2.getParentNode(); + const { renderInfo: parentRenderInfo } = getNodeInfo(parentNode, options2); + if (parentRenderInfo.pgfkeysArgs) { + const leadingComment = node.content.length > 0 && match.comment(node.content[0]) && node.content[0].sameline ? node.content[0] : null; + const content2 = leadingComment ? node.content.slice(1) : node.content; + trim$1(content2); + return printArgumentPgfkeys(content2, { + openMark: node.openMark, + closeMark: node.closeMark, + leadingComment + }); + } + if (parentRenderInfo.tikzPathCommand) { + return printTikzArgument(path2, print, options2); + } + const openMark = node.openMark; + const closeMark = node.closeMark; + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + if (match.comment(node.content[node.content.length - 1])) { + content.push(hardline2); + } + let rawRet = [openMark, fill2(content), closeMark]; + if (renderInfo.inParMode) { + rawRet = [openMark, ...content, closeMark]; + } + if (referenceMap) { + referenceMap.setRenderCache(node, rawRet); + } + return rawRet; +} +function hasPreambleCode(nodes) { + return nodes.some((node) => match.macro(node, "documentclass")); +} +function printRoot(path2, print, options2) { + const node = path2.getNode(); + getNodeInfo( + node, + options2 + ); + const content = path2.map(print, "content"); + const rawContent = formatDocArray(node.content, content, options2); + const concatFunction = hasPreambleCode(node.content) ? (x) => x : fill2; + return concatFunction(rawContent); +} +function printComment(path2, _print2, _options) { + const node = path2.getNode(); + let leadingWhitespace = ""; + if (node.leadingWhitespace && node.sameline) { + leadingWhitespace = " "; + } + const content = [leadingWhitespace, "%" + printRaw(node.content)]; + return content; +} +function printInlineMath(path2, print, options2) { + const node = path2.getNode(); + if (node.content.length === 0) { + return ["$", " ", "$"]; + } + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + content = joinWithSoftline(content); + if (node.content[node.content.length - 1].type === "comment") { + content.push(hardline2); + } + return fill2(["$", ...content, "$"]); +} +function printDisplayMath(path2, print, options2) { + const node = path2.getNode(); + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + content = joinWithSoftline(content); + const bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + ESCAPE + "[", + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + ESCAPE + "]" + ]; +} +function printVerbatimEnvironment(path2, print, options2) { + const node = path2.getNode(); + const env = formatEnvSurround(node); + return [env.start, node.content, env.end]; +} +function printEnvironment(path2, print, options2) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options2 + ); + const args = node.args ? path2.map(print, "args") : []; + const env = formatEnvSurround(node); + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + if (renderInfo.inMathMode) { + content = joinWithSoftline(content); + } + let bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + env.start, + ...args, + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + env.end + ]; +} +function printAlignedEnvironment(path2, print, options2) { + const node = path2.getNode(); + getNodeInfo( + node, + options2 + ); + const args = node.args ? path2.map(print, "args") : []; + const env = formatEnvSurround(node); + const leadingComment = node.content[0] && node.content[0].type === "comment" && node.content[0].sameline ? node.content[0] : null; + const { rows, rowSeps, trailingComments } = formatAlignedContent( + leadingComment ? node.content.slice(1) : node.content + ); + const content = []; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + const rowSep = rowSeps[i]; + const trailingComment = trailingComments[i]; + content.push(row); + if (rowSep) { + content.push(printRaw(rowSep)); + } + if (rowSep && trailingComment) { + content.push(" "); + } + if (trailingComment) { + content.push(["%", printRaw(trailingComment.content)]); + } + if (rowSep || trailingComment) { + content.push(hardline2); + } + } + if (content[content.length - 1] === hardline2) { + content.pop(); + } + if (leadingComment) { + content.unshift( + leadingComment.leadingWhitespace ? " " : "", + "%" + printRaw(leadingComment.content), + hardline2 + ); + return [env.start, ...args, indent2(content), hardline2, env.end]; + } + return [ + env.start, + ...args, + indent2([hardline2, ...content]), + hardline2, + env.end + ]; +} +function formatAlignedContent(nodes) { + function getSpace(len = 1) { + return " ".repeat(len); + } + const rows = parseAlignEnvironment(nodes); + const numCols = Math.max(...rows.map((r) => r.cells.length)); + const rowSeps = rows.map(({ rowSep }) => printRaw(rowSep || [])); + const trailingComments = rows.map(({ trailingComment }) => trailingComment); + const renderedRows = rows.map(({ cells, colSeps }) => ({ + cells: cells.map((nodes2) => { + trim$1(nodes2); + return printRaw(nodes2); + }), + seps: colSeps.map((nodes2) => printRaw(nodes2)) + })); + const colWidths = []; + for (let i = 0; i < numCols; i++) { + colWidths.push( + Math.max( + ...renderedRows.map( + ({ cells, seps }) => ((cells[i] || "") + (seps[i] || "")).length + ) + ) + ); + } + const joinedRows = renderedRows.map(({ cells, seps }) => { + if (cells.length === 1 && cells[0] === "") { + return ""; + } + let ret = ""; + for (let i = 0; i < cells.length; i++) { + const width = colWidths[i] - (seps[i] || "").length; + ret += (i === 0 ? "" : " ") + cells[i] + getSpace(width - cells[i].length + 1) + (seps[i] || ""); + } + return ret; + }); + return { rows: joinedRows, rowSeps, trailingComments }; +} +var ReferenceMap = class { + constructor(ast) { + this.ast = ast; + this.map = /* @__PURE__ */ new Map(); + visit( + this.ast, + (nodeList) => { + for (let i = 0; i < nodeList.length; i++) { + this.map.set(nodeList[i], { + previous: nodeList[i - 1], + next: nodeList[i + 1] + }); + } + }, + { includeArrays: true, test: Array.isArray } + ); + } + /** + * Associate render-specific data with this node. This data + * will be overwritten if `setRenderCache` is called twice. + * + * @param {Ast.Ast} node + * @param {*} data + * @memberof ReferenceMap + */ + setRenderCache(node, data) { + const currData = this.map.get(node) || {}; + this.map.set(node, { ...currData, renderCache: data }); + } + /** + * Retrieve data associated with `node` via `setRenderCache` + * + * @param {Ast.Ast} node + * @returns {(object | undefined)} + * @memberof ReferenceMap + */ + getRenderCache(node) { + var _a; + return (_a = this.map.get(node)) == null ? void 0 : _a.renderCache; + } + getPreviousNode(node) { + return (this.map.get(node) || {}).previous; + } + getNextNode(node) { + return (this.map.get(node) || {}).next; + } +}; +function printLatexAst(path2, options2, print) { + const node = path2.getValue(); + const { renderInfo } = getNodeInfo(node, options2); + if (node == null) { + return node; + } + if (typeof node === "string") { + return node; + } + switch (node.type) { + case "root": + if (options2.referenceMap) { + console.warn( + "Processing root node, but ReferenceMap already exists. Are there multiple nodes of type 'root'?" + ); + } + options2.referenceMap = new ReferenceMap(node); + return printRoot(path2, print, options2); + case "argument": + return printArgument(path2, print, options2); + case "comment": + return printComment(path2); + case "environment": + case "mathenv": + if (renderInfo.alignContent) { + return printAlignedEnvironment(path2, print, options2); + } + return printEnvironment(path2, print, options2); + case "displaymath": + return printDisplayMath(path2, print, options2); + case "group": + const content = printRaw(node.content, { + asArray: true + }).map((token) => token === linebreak ? hardline2 : token); + return ["{", ...content, "}"]; + case "inlinemath": + return printInlineMath(path2, print, options2); + case "macro": + return printMacro(path2, print, options2); + case "parbreak": + return [hardline2, hardline2]; + case "string": + return node.content; + case "verb": + return [ + ESCAPE, + node.env, + node.escape, + printRaw(node.content), + node.escape + ]; + case "verbatim": + return printVerbatimEnvironment(path2); + case "whitespace": + return line2; + default: + console.warn("Printing unknown type", node); + return printRaw(node); + } +} +var languages$1 = [ + { + name: "latex", + extensions: [".tex"], + parsers: ["latex-parser"] + } +]; +var parsers$1 = { + "latex-parser": { + parse, + astFormat: "latex-ast", + locStart: (node) => node.position ? node.position.start.offset : 0, + locEnd: (node) => node.position ? node.position.end.offset : 1 + } +}; +var printers$1 = { + "latex-ast": { + print: printLatexAst + } +}; +var prettierPluginLatex$1 = { languages: languages$1, parsers: parsers$1, printers: printers$1 }; +const options = {}; +const defaultOptions = { + useTabs: true +}; +const languages = prettierPluginLatex$1.languages; +const parsers = prettierPluginLatex$1.parsers; +const printers = prettierPluginLatex$1.printers; +const prettierPluginLatex = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + defaultOptions, + languages, + options, + parsers, + printers +}, Symbol.toStringTag, { value: "Module" })); +export { + parsers as a, + printers as b, + defaultOptions as d, + languages as l, + options as o, + prettierPluginLatex as p +}; +//# sourceMappingURL=prettier-plugin-latex-9db821d0.mjs.map diff --git a/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js new file mode 100644 index 0000000..219ffea --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js @@ -0,0 +1,24908 @@ +"use strict"; +var __defProp = Object.defineProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var linebreak = Symbol("linebreak"); +var ESCAPE$1 = "\\"; +function _printRaw(node) { + if (typeof node === "string") { + return [node]; + } + if (Array.isArray(node)) { + return [].concat( + ...node.map((n) => _printRaw(n)) + ); + } + let argsString, escape; + switch (node.type) { + case "root": + return _printRaw(node.content); + case "argument": + return [node.openMark, ..._printRaw(node.content), node.closeMark]; + case "comment": + var suffix = node.suffixParbreak ? "" : linebreak; + var leadingWhitespace = ""; + if (node.sameline && node.leadingWhitespace) { + leadingWhitespace = " "; + } + if (node.sameline) { + return [ + leadingWhitespace, + "%", + ..._printRaw(node.content), + suffix + ]; + } + return [linebreak, "%", ..._printRaw(node.content), suffix]; + case "environment": + case "mathenv": + case "verbatim": + var env = _printRaw(node.env); + var envStart = [ESCAPE$1 + "begin{", ...env, "}"]; + var envEnd = [ESCAPE$1 + "end{", ...env, "}"]; + argsString = node.args == null ? [] : _printRaw(node.args); + return [ + ...envStart, + ...argsString, + ..._printRaw(node.content), + ...envEnd + ]; + case "displaymath": + return [ESCAPE$1 + "[", ..._printRaw(node.content), ESCAPE$1 + "]"]; + case "group": + return ["{", ..._printRaw(node.content), "}"]; + case "inlinemath": + return ["$", ..._printRaw(node.content), "$"]; + case "macro": + argsString = node.args == null ? [] : _printRaw(node.args); + escape = node.escapeToken == null ? ESCAPE$1 : node.escapeToken; + return [escape, ..._printRaw(node.content), ...argsString]; + case "parbreak": + return [linebreak, linebreak]; + case "string": + return [node.content]; + case "verb": + return [ + ESCAPE$1, + node.env, + node.escape, + ..._printRaw(node.content), + node.escape + ]; + case "whitespace": + return [" "]; + default: + console.warn( + "Cannot find render for node ", + node, + `(of type ${typeof node})` + ); + return ["" + node]; + } +} +function printRaw(node, options2) { + const asArray = options2 != null ? options2.asArray : false; + const printedTokens = _printRaw(node); + if (asArray) { + return printedTokens; + } + return printedTokens.map((x) => x === linebreak ? "\n" : x).join(""); +} +function createMacroMatcher(macros17) { + const macrosHash = Array.isArray(macros17) ? macros17.length > 0 ? typeof macros17[0] === "string" ? Object.fromEntries( + macros17.map((macro2) => { + if (typeof macro2 !== "string") { + throw new Error("Wrong branch of map function"); + } + return [macro2, {}]; + }) + ) : Object.fromEntries( + macros17.map((macro2) => { + if (typeof macro2 === "string") { + throw new Error("Wrong branch of map function"); + } + if (macro2.escapeToken != null) { + return [ + macro2.content, + { escapeToken: macro2.escapeToken } + ]; + } + return [macro2.content, {}]; + }) + ) : {} : macros17; + return function matchAgainstMacros(node) { + if (node == null || node.type !== "macro") { + return false; + } + const spec = macrosHash[node.content]; + if (!spec) { + return false; + } + if (typeof spec === "object" && "escapeToken" in spec) { + return spec.escapeToken == null || spec.escapeToken === node.escapeToken; + } + return true; + }; +} +function createEnvironmentMatcher(macros17) { + const environmentsHash = Array.isArray(macros17) ? Object.fromEntries( + macros17.map((str) => { + return [str, {}]; + }) + ) : macros17; + return function matchAgainstEnvironments(node) { + if (!match.anyEnvironment(node)) { + return false; + } + const envName = printRaw(node.env); + const spec = environmentsHash[envName]; + if (!spec) { + return false; + } + return true; + }; +} +var match = { + macro(node, macroName) { + if (node == null) { + return false; + } + return node.type === "macro" && (macroName == null || node.content === macroName); + }, + anyMacro(node) { + return match.macro(node); + }, + environment(node, envName) { + if (node == null) { + return false; + } + return (node.type === "environment" || node.type === "mathenv") && (envName == null || printRaw(node.env) === envName); + }, + anyEnvironment(node) { + return match.environment(node); + }, + comment(node) { + if (node == null) { + return false; + } + return node.type === "comment"; + }, + parbreak(node) { + if (node == null) { + return false; + } + return node.type === "parbreak"; + }, + whitespace(node) { + if (node == null) { + return false; + } + return node.type === "whitespace"; + }, + /** + * Matches whitespace or a comment with leading whitespace. + */ + whitespaceLike(node) { + if (node == null) { + return false; + } + return node.type === "whitespace" || node.type === "whitespace" && node.leadingWhitespace === true; + }, + string(node, value) { + if (node == null) { + return false; + } + return node.type === "string" && (value == null || node.content === value); + }, + anyString(node) { + return match.string(node); + }, + group(node) { + if (node == null) { + return false; + } + return node.type === "group"; + }, + argument(node) { + if (node == null) { + return false; + } + return node.type === "argument"; + }, + blankArgument(node) { + if (!match.argument(node)) { + return false; + } + return node.openMark === "" && node.closeMark === "" && node.content.length === 0; + }, + math(node) { + if (node == null) { + return false; + } + return node.type === "displaymath" || node.type === "inlinemath"; + }, + createMacroMatcher, + createEnvironmentMatcher +}; +function listMathChildren(node) { + const NULL_RETURN = { enter: [], leave: [] }; + if (Array.isArray(node)) { + return NULL_RETURN; + } + if (match.math(node)) { + return { enter: ["content"], leave: [] }; + } + const renderInfo = node._renderInfo || {}; + if (renderInfo.inMathMode == null) { + return NULL_RETURN; + } + if (match.macro(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["args"], leave: [] }; + } else if (renderInfo.inMathMode === false) { + return { enter: [], leave: ["args"] }; + } + } + if (match.environment(node)) { + if (renderInfo.inMathMode === true) { + return { enter: ["content"], leave: [] }; + } else { + return { enter: [], leave: ["content"] }; + } + } + return NULL_RETURN; +} +var CONTINUE = Symbol("continue"); +var SKIP = Symbol("skip"); +var EXIT = Symbol("exit"); +var DEFAULT_CONTEXT = { + inMathMode: false, + hasMathModeAncestor: false +}; +function visit(tree, visitor, options2) { + const { + startingContext = DEFAULT_CONTEXT, + test = () => true, + includeArrays = false + } = options2 || {}; + let enter; + let leave; + if (typeof visitor === "function") { + enter = visitor; + } else if (visitor && typeof visitor === "object") { + enter = visitor.enter; + leave = visitor.leave; + } + walk(tree, { + key: void 0, + index: void 0, + parents: [], + containingArray: void 0, + context: { ...startingContext } + }); + function walk(node, { key, index: index2, parents, context, containingArray }) { + const nodePassesTest = includeArrays ? test(node, { key, index: index2, parents, context, containingArray }) : !Array.isArray(node) && test(node, { key, index: index2, parents, context, containingArray }); + const result = enter && nodePassesTest ? toResult( + enter(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : [CONTINUE]; + if (result[0] === EXIT) { + return result; + } + if (result[0] === SKIP) { + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : result; + } + if (Array.isArray(node)) { + for (let index22 = 0; index22 > -1 && index22 < node.length; index22++) { + const item = node[index22]; + const result2 = walk(item, { + key, + index: index22, + parents, + context, + containingArray: node + }); + if (result2[0] === EXIT) { + return result2; + } + if (typeof result2[1] === "number") { + index22 = result2[1] - 1; + } + } + } else { + let childProps = ["content", "args"]; + switch (node.type) { + case "macro": + childProps = ["args"]; + break; + case "comment": + case "string": + case "verb": + case "verbatim": + childProps = []; + break; + } + const mathModeProps = listMathChildren(node); + for (const key2 of childProps) { + const value = node[key2]; + const grandparents = [node].concat(parents); + if (value == null) { + continue; + } + const newContext = { ...context }; + if (mathModeProps.enter.includes(key2)) { + newContext.inMathMode = true; + newContext.hasMathModeAncestor = true; + } else if (mathModeProps.leave.includes(key2)) { + newContext.inMathMode = false; + } + const result2 = walk(value, { + key: key2, + index: void 0, + parents: grandparents, + context: newContext, + containingArray: void 0 + }); + if (result2[0] === EXIT) { + return result2; + } + } + } + return leave && nodePassesTest ? toResult( + leave(node, { + key, + index: index2, + parents, + context, + containingArray + }) + ) : result; + } +} +function toResult(value) { + if (value == null) { + return [CONTINUE]; + } + if (Array.isArray(value)) { + return value; + } + if (typeof value === "number") { + return [CONTINUE, value]; + } + return [value]; +} +function trim$1(nodes) { + if (!Array.isArray(nodes)) { + console.warn("Trying to trim a non-array ast", nodes); + return nodes; + } + const { trimmedStart } = trimStart(nodes); + const { trimmedEnd } = trimEnd(nodes); + return { trimmedStart, trimmedEnd }; +} +function trimStart(nodes) { + const { start } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(0, start); + for (const leadingToken of nodes) { + if (!match.comment(leadingToken)) { + break; + } + if (leadingToken.leadingWhitespace || leadingToken.sameline) { + leadingToken.leadingWhitespace = false; + delete leadingToken.position; + } + if (start > 0 && leadingToken.sameline) { + leadingToken.sameline = false; + delete leadingToken.position; + } + } + return { trimmedStart: start }; +} +function trimEnd(nodes) { + const { end } = amountOfLeadingAndTrailingWhitespace(nodes); + nodes.splice(nodes.length - end, end); + for (let i = nodes.length - 1; i >= 0; i--) { + const trailingToken = nodes[i]; + if (!match.comment(trailingToken)) { + break; + } + delete trailingToken.suffixParbreak; + if (match.comment(trailingToken) && trailingToken.leadingWhitespace && !trailingToken.sameline) { + trailingToken.leadingWhitespace = false; + delete trailingToken.position; + } + } + return { trimmedEnd: end }; +} +function amountOfLeadingAndTrailingWhitespace(ast) { + let start = 0; + let end = 0; + for (const node of ast) { + if (match.whitespace(node) || match.parbreak(node)) { + start++; + } else { + break; + } + } + if (start === ast.length) { + return { start, end: 0 }; + } + for (let i = ast.length - 1; i >= 0; i--) { + const node = ast[i]; + if (match.whitespace(node) || match.parbreak(node)) { + end++; + } else { + break; + } + } + return { start, end }; +} +var unifiedLatexTrimEnvironmentContents = function unifiedLatexTrimEnvironmentContents2() { + return (tree) => { + visit(tree, (node) => { + if (!(match.math(node) || match.anyEnvironment(node))) { + return; + } + let firstNode = node.content[0]; + if (match.comment(firstNode) && firstNode.sameline) { + firstNode.suffixParbreak = false; + trimEnd(node.content); + const { trimmedStart } = trimStart(node.content.slice(1)); + node.content.splice(1, trimmedStart); + } else { + trim$1(node.content); + } + }); + }; +}; +var unifiedLatexTrimRoot = function unifiedLatexTrimRoot2() { + return (tree) => { + trim$1(tree.content); + }; +}; +function decorateArrayForPegjs(array) { + array.charAt = function(i) { + return this[i]; + }; + array.charCodeAt = () => 0; + array.substring = function(i, j) { + return this.slice(i, j); + }; + array.replace = function(a, b) { + const ret = JSON.stringify(this); + return ret.replace(a, b); + }; + return array; +} +var latex_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath }; + var peg$startRuleFunction = peg$parsedocument; + var peg$c0 = "%"; + var peg$c1 = "."; + var peg$c2 = "verb*"; + var peg$c3 = "verb"; + var peg$c4 = "["; + var peg$c5 = "]"; + var peg$c6 = "lstinline"; + var peg$c7 = "mintinline"; + var peg$c8 = "mint"; + var peg$c10 = "verbatim*"; + var peg$c11 = "verbatim"; + var peg$c12 = "filecontents*"; + var peg$c13 = "filecontents"; + var peg$c14 = "comment"; + var peg$c15 = "lstlisting"; + var peg$c16 = "("; + var peg$c17 = ")"; + var peg$c18 = "begin"; + var peg$c19 = "end"; + var peg$c20 = "equation*"; + var peg$c21 = "equation"; + var peg$c22 = "align*"; + var peg$c23 = "align"; + var peg$c24 = "alignat*"; + var peg$c25 = "alignat"; + var peg$c26 = "gather*"; + var peg$c27 = "gather"; + var peg$c28 = "multline*"; + var peg$c29 = "multline"; + var peg$c30 = "flalign*"; + var peg$c31 = "flalign"; + var peg$c32 = "split"; + var peg$c33 = "math"; + var peg$c34 = "displaymath"; + var peg$c35 = "\\"; + var peg$c36 = "{"; + var peg$c37 = "}"; + var peg$c38 = "$"; + var peg$c39 = "&"; + var peg$c40 = "\r"; + var peg$c41 = "\n"; + var peg$c42 = "\r\n"; + var peg$c43 = "#"; + var peg$c44 = "^"; + var peg$c45 = "_"; + var peg$c46 = "\0"; + var peg$r0 = /^[^ \t\n\r]/; + var peg$r1 = /^[ \t]/; + var peg$r2 = /^[a-zA-Z]/; + var peg$r3 = /^[0-9]/; + var peg$r4 = /^[.,;:\-*\/()!?=+<>[\]`'"~]/; + var peg$e0 = peg$otherExpectation("document"); + var peg$e1 = peg$otherExpectation("math"); + var peg$e2 = peg$otherExpectation("token"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("parbreak"); + var peg$e5 = peg$otherExpectation("math token"); + var peg$e6 = peg$otherExpectation("nonchar token"); + var peg$e7 = peg$literalExpectation("%", false); + var peg$e8 = peg$otherExpectation("whitespace"); + var peg$e9 = peg$otherExpectation("number"); + var peg$e10 = peg$literalExpectation(".", false); + var peg$e11 = peg$otherExpectation("special macro"); + var peg$e12 = peg$literalExpectation("verb*", false); + var peg$e13 = peg$literalExpectation("verb", false); + var peg$e14 = peg$literalExpectation("[", false); + var peg$e15 = peg$literalExpectation("]", false); + var peg$e16 = peg$classExpectation([" ", " ", "\n", "\r"], true, false); + var peg$e17 = peg$otherExpectation("verbatim listings"); + var peg$e18 = peg$literalExpectation("lstinline", false); + var peg$e19 = peg$otherExpectation("verbatim minted"); + var peg$e20 = peg$literalExpectation("mintinline", false); + var peg$e21 = peg$literalExpectation("mint", false); + var peg$e24 = peg$otherExpectation("verbatim environment"); + var peg$e25 = peg$literalExpectation("verbatim*", false); + var peg$e26 = peg$literalExpectation("verbatim", false); + var peg$e27 = peg$literalExpectation("filecontents*", false); + var peg$e28 = peg$literalExpectation("filecontents", false); + var peg$e29 = peg$literalExpectation("comment", false); + var peg$e30 = peg$literalExpectation("lstlisting", false); + var peg$e31 = peg$otherExpectation("macro"); + var peg$e32 = peg$otherExpectation("group"); + var peg$e33 = peg$otherExpectation("environment"); + var peg$e34 = peg$otherExpectation("math environment"); + var peg$e36 = peg$literalExpectation("(", false); + var peg$e37 = peg$literalExpectation(")", false); + var peg$e38 = peg$literalExpectation("begin", false); + var peg$e39 = peg$literalExpectation("end", false); + var peg$e40 = peg$literalExpectation("equation*", false); + var peg$e41 = peg$literalExpectation("equation", false); + var peg$e42 = peg$literalExpectation("align*", false); + var peg$e43 = peg$literalExpectation("align", false); + var peg$e44 = peg$literalExpectation("alignat*", false); + var peg$e45 = peg$literalExpectation("alignat", false); + var peg$e46 = peg$literalExpectation("gather*", false); + var peg$e47 = peg$literalExpectation("gather", false); + var peg$e48 = peg$literalExpectation("multline*", false); + var peg$e49 = peg$literalExpectation("multline", false); + var peg$e50 = peg$literalExpectation("flalign*", false); + var peg$e51 = peg$literalExpectation("flalign", false); + var peg$e52 = peg$literalExpectation("split", false); + var peg$e53 = peg$literalExpectation("math", false); + var peg$e54 = peg$literalExpectation("displaymath", false); + var peg$e55 = peg$otherExpectation("escape"); + var peg$e56 = peg$literalExpectation("\\", false); + var peg$e57 = peg$literalExpectation("{", false); + var peg$e58 = peg$literalExpectation("}", false); + var peg$e59 = peg$literalExpectation("$", false); + var peg$e60 = peg$literalExpectation("&", false); + var peg$e61 = peg$otherExpectation("newline"); + var peg$e62 = peg$literalExpectation("\r", false); + var peg$e63 = peg$literalExpectation("\n", false); + var peg$e64 = peg$literalExpectation("\r\n", false); + var peg$e65 = peg$literalExpectation("#", false); + var peg$e66 = peg$literalExpectation("^", false); + var peg$e67 = peg$literalExpectation("_", false); + var peg$e68 = peg$literalExpectation("\0", false); + var peg$e69 = peg$classExpectation([" ", " "], false, false); + var peg$e70 = peg$otherExpectation("letter"); + var peg$e71 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false); + var peg$e72 = peg$otherExpectation("digit"); + var peg$e73 = peg$classExpectation([["0", "9"]], false, false); + var peg$e74 = peg$otherExpectation("punctuation"); + var peg$e75 = peg$classExpectation([".", ",", ";", ":", "-", "*", "/", "(", ")", "!", "?", "=", "+", "<", ">", "[", "]", "`", "'", '"', "~"], false, false); + var peg$e76 = peg$otherExpectation("full comment"); + var peg$e77 = peg$otherExpectation("comment"); + var peg$f0 = function(content) { + return createNode("root", { content: content.flatMap((x) => x) }); + }; + var peg$f1 = function(t) { + return t; + }; + var peg$f2 = function(eq) { + return createNode("inlinemath", { content: eq.flatMap((x) => x) }); + }; + var peg$f3 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f4 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f5 = function() { + return createNode("parbreak"); + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(x) { + return x; + }; + var peg$f8 = function() { + return createNode("macro", { content: "^", escapeToken: "" }); + }; + var peg$f9 = function() { + return createNode("macro", { content: "_", escapeToken: "" }); + }; + var peg$f10 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f11 = function() { + return createNode("whitespace"); + }; + var peg$f12 = function(a, b) { + return a.join("") + "." + b.join(""); + }; + var peg$f13 = function(b) { + return "." + b.join(""); + }; + var peg$f14 = function(a) { + return a.join("") + "."; + }; + var peg$f15 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f16 = function(env, e, end) { + return end == e; + }; + var peg$f17 = function(env, e, x) { + return x; + }; + var peg$f18 = function(env, e, x, end) { + return end == e; + }; + var peg$f19 = function(env, e, x) { + return createNode("verb", { + env, + escape: e, + content: x.join("") + }); + }; + var peg$f20 = function(x) { + return x; + }; + var peg$f21 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f22 = function(x) { + return x; + }; + var peg$f23 = function(x) { + return createNode("inlinemath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f24 = function(x) { + return x; + }; + var peg$f25 = function(x) { + return createNode("displaymath", { content: x.flatMap((x2) => x2) }); + }; + var peg$f26 = function(end) { + return end.type === "string" && end.content === "]"; + }; + var peg$f27 = function(x) { + return x; + }; + var peg$f28 = function(o) { + return [ + createNode("string", { content: "[" }), + ...o, + createNode("string", { content: "]" }) + ]; + }; + var peg$f29 = function(x) { + return x; + }; + var peg$f30 = function(v) { + return createNode("group", { + content: createNode("string", { content: v.join("") }) + }); + }; + var peg$f31 = function(d, end) { + return end == d; + }; + var peg$f32 = function(d, x) { + return x; + }; + var peg$f33 = function(d, v, end) { + return end == d; + }; + var peg$f34 = function(d, v) { + return [ + createNode("string", { content: d }), + createNode("string", { content: v.join("") }), + createNode("string", { content: d }) + ]; + }; + var peg$f35 = function(macro, option, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + ...[].concat(verbatim) + ]; + }; + var peg$f36 = function(macro, option, language, verbatim) { + return [ + createNode("macro", { content: macro }), + ...option || [], + language, + ...[].concat(verbatim) + ]; + }; + var peg$f40 = function(env, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f41 = function(env, x) { + return x; + }; + var peg$f42 = function(env, body) { + return createNode("verbatim", { + env, + content: body.join("") + }); + }; + var peg$f43 = function(n) { + return n.join(""); + }; + var peg$f44 = function(n) { + return n; + }; + var peg$f45 = function(m) { + return createNode("macro", { content: m }); + }; + var peg$f46 = function(c) { + return c; + }; + var peg$f47 = function(x) { + return createNode("group", { content: x.flatMap((x2) => x2) }); + }; + var peg$f48 = function(g) { + return text().slice(1, -1); + }; + var peg$f49 = function(env, env_comment, end_env) { + return compare_env(env, end_env); + }; + var peg$f50 = function(env, env_comment, x) { + return x; + }; + var peg$f51 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("environment", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f52 = function(env, env_comment, end_env) { + return compare_env({ content: [env] }, end_env); + }; + var peg$f53 = function(env, env_comment, x) { + return x; + }; + var peg$f54 = function(env, env_comment, body) { + body = body.flatMap((x) => x); + return createNode("mathenv", { + env, + content: env_comment ? [env_comment, ...body] : body + }); + }; + var peg$f57 = function(e) { + return createNode("string", { content: e }); + }; + var peg$f58 = function() { + return createNode("string", { content: "\\" }); + }; + var peg$f59 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f60 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f61 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f62 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f63 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f64 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f65 = function(s2) { + return createNode("string", { content: s2 }); + }; + var peg$f66 = function() { + return " "; + }; + var peg$f67 = function(p) { + return createNode("string", { content: p }); + }; + var peg$f68 = function(leading_sp, comment) { + return createNode("comment", { + ...comment, + sameline: false, + leadingWhitespace: leading_sp.length > 0 + }); + }; + var peg$f69 = function(spaces, x) { + return createNode("comment", { + ...x, + sameline: true, + leadingWhitespace: spaces.length > 0 + }); + }; + var peg$f70 = function(c) { + return c; + }; + var peg$f71 = function(c) { + return { content: c.join(""), suffixParbreak: true }; + }; + var peg$f72 = function(c) { + return c; + }; + var peg$f73 = function(c) { + return { content: c.join("") }; + }; + var peg$f74 = function() { + var loc = location(); + return loc.start.column === 1; + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsedocument() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + peg$savedPos = s0; + s1 = peg$f0(s1); + s0 = s1; + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + return s0; + } + function peg$parsemath() { + var s0, s1; + peg$silentFails++; + s0 = []; + s1 = peg$parsemath_token(); + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsemath_token(); + } + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsegroup(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsemath_shift(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f1(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_shift(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parseparbreak(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsenumber(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenonchar_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f3(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f4(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = []; + s7 = peg$parsesp(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parsesp(); + } + s7 = peg$parsenl(); + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsemath_token() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$parsespecial_macro(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro(); + if (s0 === peg$FAILED) { + s0 = peg$parsefull_comment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsealignment_tab(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesuperscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f8(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesubscript(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + peg$savedPos = s0; + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsewhitespace(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f10(s1); + } + s0 = s1; + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsenonchar_token() { + var s0; + peg$silentFails++; + s0 = peg$parseescape(); + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + s0 = peg$parsebegin_group(); + if (s0 === peg$FAILED) { + s0 = peg$parseend_group(); + if (s0 === peg$FAILED) { + s0 = peg$parsemath_shift(); + if (s0 === peg$FAILED) { + s0 = peg$parsealignment_tab(); + if (s0 === peg$FAILED) { + s0 = peg$parsenl(); + if (s0 === peg$FAILED) { + s0 = peg$parsemacro_parameter(); + if (s0 === peg$FAILED) { + s0 = peg$parseignore(); + if (s0 === peg$FAILED) { + s0 = peg$parsesp(); + if (s0 === peg$FAILED) { + s0 = peg$parsepunctuation(); + if (s0 === peg$FAILED) { + s0 = peg$parseEOF(); + } + } + } + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsenl(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsecomment_start(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsenl(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s2 = [s2, s3, s4, s5, s6]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = []; + s2 = peg$parsesp(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + } else { + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f11(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parsenum(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parsenum(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f12(s2, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsenum(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenum(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f13(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = []; + s3 = peg$parsenum(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenum(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c1; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f14(s2); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f15(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsespecial_macro() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c2) { + s2 = peg$c2; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c3) { + s2 = peg$c3; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s9 = peg$f16(s2, s3, s8); + if (s9) { + s9 = void 0; + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f17(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f18(s2, s3, s4, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f19(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_listings(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_minted(); + if (s0 === peg$FAILED) { + s0 = peg$parseverbatim_environment(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_display_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_display_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f20(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_display_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebegin_inline_math(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_inline_math(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_token(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f22(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_inline_math(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemath_shift(); + if (s1 !== peg$FAILED) { + s2 = peg$parsemath_shift(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$currPos; + s7 = peg$parsemath_shift(); + if (s7 !== peg$FAILED) { + s8 = peg$parsemath_shift(); + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parsemath_token(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s4 = peg$f24(s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s4 = peg$parsemath_shift(); + if (s4 !== peg$FAILED) { + s5 = peg$parsemath_shift(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f25(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parsemath_environment(); + if (s0 === peg$FAILED) { + s0 = peg$parseenvironment(); + } + } + } + } + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsesquare_bracket_argument() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + s6 = peg$parsetoken(); + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f26(s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f27(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_group() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f29(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_delimited_by_char() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (peg$r0.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$currPos; + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s7 = peg$f31(s1, s6); + if (s7) { + s7 = void 0; + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f32(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$f33(s1, s2, s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f34(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim_listings() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c6) { + s2 = peg$c6; + peg$currPos += 9; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseverbatim_group(); + if (s4 === peg$FAILED) { + s4 = peg$parseverbatim_delimited_by_char(); + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f35(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parseverbatim_minted() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c7) { + s2 = peg$c7; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c8) { + s2 = peg$c8; + peg$currPos += 4; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsesquare_bracket_argument(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s5 = peg$parseverbatim_group(); + if (s5 === peg$FAILED) { + s5 = peg$parseverbatim_delimited_by_char(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f36(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parseverbatim_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parseverbatim_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$currPos; + s9 = peg$parseend_env(); + if (s9 !== peg$FAILED) { + s10 = peg$parsegroup(); + if (s10 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s11 = peg$f40(s3, s10); + if (s11) { + s11 = void 0; + } else { + s11 = peg$FAILED; + } + if (s11 !== peg$FAILED) { + s9 = [s9, s10, s11]; + s8 = s9; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = s6; + s6 = peg$f41(s3, s8); + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$currPos; + s9 = peg$parseend_env(); + if (s9 !== peg$FAILED) { + s10 = peg$parsegroup(); + if (s10 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s11 = peg$f40(s3, s10); + if (s11) { + s11 = void 0; + } else { + s11 = peg$FAILED; + } + if (s11 !== peg$FAILED) { + s9 = [s9, s10, s11]; + s8 = s9; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s8 !== peg$FAILED) { + peg$savedPos = s6; + s6 = peg$f41(s3, s8); + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseend_env(); + if (s6 !== peg$FAILED) { + s7 = peg$parsebegin_group(); + if (s7 !== peg$FAILED) { + s8 = peg$parseverbatim_env_name(); + if (s8 !== peg$FAILED) { + s9 = peg$parseend_group(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f42(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + return s0; + } + function peg$parseverbatim_env_name() { + var s0; + if (input.substr(peg$currPos, 9) === peg$c10) { + s0 = peg$c10; + peg$currPos += 9; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c11) { + s0 = peg$c11; + peg$currPos += 8; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 13) === peg$c12) { + s0 = peg$c12; + peg$currPos += 13; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 12) === peg$c13) { + s0 = peg$c13; + peg$currPos += 12; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c14) { + s0 = peg$c14; + peg$currPos += 7; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c15) { + s0 = peg$c15; + peg$currPos += 10; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + } + } + } + } + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsechar(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsechar(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f43(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseescape(); + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s1; + s1 = peg$f44(s3); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f45(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_group(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f46(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parseend_group(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsetoken(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f46(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$parseend_group(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f47(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsegroup_contents_as_string() { + var s0, s1; + s0 = peg$currPos; + s1 = peg$parsegroup(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f48(); + } + s0 = s1; + return s0; + } + function peg$parseenvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup_contents_as_string(); + if (s2 !== peg$FAILED) { + s3 = peg$parsesameline_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f49(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f50(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = peg$parseend_env(); + if (s8 !== peg$FAILED) { + s9 = peg$parsegroup_contents_as_string(); + if (s9 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s10 = peg$f49(s2, s3, s9); + if (s10) { + s10 = void 0; + } else { + s10 = peg$FAILED; + } + if (s10 !== peg$FAILED) { + s8 = [s8, s9, s10]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s7 = peg$parsetoken(); + if (s7 !== peg$FAILED) { + peg$savedPos = s5; + s5 = peg$f50(s2, s3, s7); + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s5 = peg$parseend_env(); + if (s5 !== peg$FAILED) { + s6 = peg$parsegroup_contents_as_string(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f51(s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsemath_environment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsebegin_env(); + if (s1 !== peg$FAILED) { + s2 = peg$parsebegin_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemath_env_name(); + if (s3 !== peg$FAILED) { + s4 = peg$parseend_group(); + if (s4 !== peg$FAILED) { + s5 = peg$parsesameline_comment(); + if (s5 === peg$FAILED) { + s5 = null; + } + s6 = []; + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f52(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f53(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$currPos; + s8 = peg$currPos; + peg$silentFails++; + s9 = peg$currPos; + s10 = peg$parseend_env(); + if (s10 !== peg$FAILED) { + s11 = peg$parsegroup(); + if (s11 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s12 = peg$f52(s3, s5, s11); + if (s12) { + s12 = void 0; + } else { + s12 = peg$FAILED; + } + if (s12 !== peg$FAILED) { + s10 = [s10, s11, s12]; + s9 = s10; + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + } else { + peg$currPos = s9; + s9 = peg$FAILED; + } + peg$silentFails--; + if (s9 === peg$FAILED) { + s8 = void 0; + } else { + peg$currPos = s8; + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_token(); + if (s9 !== peg$FAILED) { + peg$savedPos = s7; + s7 = peg$f53(s3, s5, s9); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } + s7 = peg$parseend_env(); + if (s7 !== peg$FAILED) { + s8 = peg$parsebegin_group(); + if (s8 !== peg$FAILED) { + s9 = peg$parsemath_env_name(); + if (s9 !== peg$FAILED) { + s10 = peg$parseend_group(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f54(s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parsebegin_display_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 91) { + s2 = peg$c4; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_display_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s2 = peg$c5; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebegin_inline_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c16; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_inline_math() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s2 = peg$c17; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebegin_env() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c18) { + s2 = peg$c18; + peg$currPos += 5; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e38); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseend_env() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseescape(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c19) { + s2 = peg$c19; + peg$currPos += 3; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e39); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemath_env_name() { + var s0, s1; + s0 = peg$currPos; + if (input.substr(peg$currPos, 9) === peg$c20) { + s1 = peg$c20; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e40); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c21) { + s1 = peg$c21; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e41); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c22) { + s1 = peg$c22; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e42); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c23) { + s1 = peg$c23; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e43); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c24) { + s1 = peg$c24; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e44); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c25) { + s1 = peg$c25; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e45); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c26) { + s1 = peg$c26; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e46); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c27) { + s1 = peg$c27; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e47); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 9) === peg$c28) { + s1 = peg$c28; + peg$currPos += 9; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e48); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c29) { + s1 = peg$c29; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e49); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 8) === peg$c30) { + s1 = peg$c30; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e50); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 7) === peg$c31) { + s1 = peg$c31; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e51); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c32) { + s1 = peg$c32; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e52); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c33) { + s1 = peg$c33; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e53); + } + } + if (s1 === peg$FAILED) { + if (input.substr(peg$currPos, 11) === peg$c34) { + s1 = peg$c34; + peg$currPos += 11; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e54); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f57(s1); + } + s0 = s1; + return s0; + } + function peg$parseescape() { + var s0, s1; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e56); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f58(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e55); + } + } + return s0; + } + function peg$parsebegin_group() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c36; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e57); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f59(s1); + } + s0 = s1; + return s0; + } + function peg$parseend_group() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 125) { + s1 = peg$c37; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e58); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f60(s1); + } + s0 = s1; + return s0; + } + function peg$parsemath_shift() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 36) { + s1 = peg$c38; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e59); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f61(s1); + } + s0 = s1; + return s0; + } + function peg$parsealignment_tab() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 38) { + s1 = peg$c39; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e60); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f62(s1); + } + s0 = s1; + return s0; + } + function peg$parsenl() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 13) { + s2 = peg$c40; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s2 = peg$c41; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e63); + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c40; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e62); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c42) { + s0 = peg$c42; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e64); + } + } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e61); + } + } + return s0; + } + function peg$parsemacro_parameter() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 35) { + s1 = peg$c43; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e65); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f63(s1); + } + s0 = s1; + return s0; + } + function peg$parsesuperscript() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 94) { + s1 = peg$c44; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e66); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f64(s1); + } + s0 = s1; + return s0; + } + function peg$parsesubscript() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s1 = peg$c45; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e67); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f65(s1); + } + s0 = s1; + return s0; + } + function peg$parseignore() { + var s0; + if (input.charCodeAt(peg$currPos) === 0) { + s0 = peg$c46; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e68); + } + } + return s0; + } + function peg$parsesp() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r1.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e69); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f66(); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsechar() { + var s0; + peg$silentFails++; + if (peg$r2.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e71); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e70); + } + } + return s0; + } + function peg$parsenum() { + var s0; + peg$silentFails++; + if (peg$r3.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e73); + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e72); + } + } + return s0; + } + function peg$parsepunctuation() { + var s0, s1; + peg$silentFails++; + s0 = peg$currPos; + if (peg$r4.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e75); + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f67(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e74); + } + } + return s0; + } + function peg$parsecomment_start() { + var s0; + if (input.charCodeAt(peg$currPos) === 37) { + s0 = peg$c0; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsefull_comment() { + var s0; + peg$silentFails++; + s0 = peg$parseownline_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parsesameline_comment(); + } + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e76); + } + } + return s0; + } + function peg$parseownline_comment() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + s3 = peg$parsesp(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsesp(); + } + s3 = peg$parsenl(); + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseleading_sp(); + if (s2 !== peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f68(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesameline_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsesp(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsesp(); + } + s2 = peg$parsecomment(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f69(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f70(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f70(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseparbreak(); + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f71(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecomment_start(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f72(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsenl(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s3 = peg$f72(s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s3 = peg$currPos; + s4 = peg$parsenl(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsesp(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsesp(); + } + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsecomment_start(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = peg$parsenl(); + if (s3 === peg$FAILED) { + s3 = peg$parseEOF(); + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f73(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e77); + } + } + return s0; + } + function peg$parseleading_sp() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsestart_of_line(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsesp(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsesp(); + } + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsestart_of_line() { + var s0; + peg$savedPos = peg$currPos; + s0 = peg$f74(); + if (s0) { + s0 = void 0; + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOF() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function toString(e) { + if (typeof e === "string") { + return e; + } + if (typeof e.content === "string") { + return e.content; + } + if (e && e.type === "whitespace") { + return " "; + } + return e; + } + function compare_env(g1, g2) { + const g1Name = typeof g1 === "string" ? g1 : g1.content.map(toString).join(""); + const g2Name = typeof g2 === "string" ? g2 : g2.content.map(toString).join(""); + return g1Name === g2Name; + } + function createNode(type, extra = {}) { + return { type, ...extra, position: location() }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var align_environment_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(x) { + return { cells: [], colSeps: [], ...x }; + }; + var peg$f2 = function(rowItems, rowSep, trailingComment) { + return { ...rowItems, rowSep, trailingComment }; + }; + var peg$f3 = function(rowItems, trailingComment) { + return { ...rowItems, rowSep: null, trailingComment }; + }; + var peg$f4 = function(x) { + return x; + }; + var peg$f5 = function(x) { + return { + cells: [], + colSeps: [], + rowSep: null, + trailingComment: x + }; + }; + var peg$f6 = function(x) { + return x; + }; + var peg$f7 = function(colSep, cell) { + return { colSep, cell }; + }; + var peg$f8 = function(colSep) { + return { colSep }; + }; + var peg$f9 = function(a, b) { + return processRow(a, b); + }; + var peg$f10 = function(b) { + return processRow(null, b); + }; + var peg$f11 = function(tok) { + return options2.isSameLineComment(tok); + }; + var peg$f12 = function(tok) { + return tok; + }; + var peg$f13 = function(tok) { + return options2.isOwnLineComment(tok); + }; + var peg$f14 = function(tok) { + return tok; + }; + var peg$f15 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f16 = function(tok) { + return tok; + }; + var peg$f17 = function(tok) { + return options2.isRowSep(tok); + }; + var peg$f18 = function(tok) { + return tok; + }; + var peg$f19 = function(tok) { + return options2.isColSep(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parserow_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f0(); + } + s0 = s1; + } + return s0; + } + function peg$parserow_with_end() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + s2 = peg$f1(s2); + s1 = s2; + s2 = peg$parserow_sep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_without_end() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parserow_items(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f5(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parserow_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsecol_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f6(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetoken(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parseseparated_cell() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsecell(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecol_sep(); + if (s1 !== peg$FAILED) { + s1 = peg$f8(s1); + } + s0 = s1; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsecell(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_cell(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_cell(); + } + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_cell(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_cell(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f11(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f12(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f13(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f15(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f16(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f17(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f18(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecol_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processRow(leadCell, otherCells) { + const cells = [leadCell || []]; + const seps = []; + for (const x of otherCells) { + cells.push(x.cell || []); + seps.push(x.colSep); + } + return { cells, colSeps: seps }; + } + if (!options2.isWhitespace) { + try { + Object.assign( + options2, + createMatchers(["\\", "hline", "cr"], ["&"]) + ); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var xparse_argspec_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list }; + var peg$startRuleFunction = peg$parseargs_spec_list; + var peg$c1 = "v"; + var peg$c2 = "b"; + var peg$c3 = "!"; + var peg$c4 = "D"; + var peg$c5 = "d"; + var peg$c6 = "s"; + var peg$c7 = "O"; + var peg$c8 = "o"; + var peg$c9 = "e"; + var peg$c10 = "E"; + var peg$c11 = "t"; + var peg$c12 = "R"; + var peg$c13 = "r"; + var peg$c14 = "u"; + var peg$c15 = "m"; + var peg$c16 = "{"; + var peg$c17 = "}"; + var peg$c18 = " "; + var peg$c19 = "\n"; + var peg$c20 = "\r"; + var peg$r0 = /^[{ ]/; + var peg$e0 = peg$literalExpectation("+", false); + var peg$e1 = peg$literalExpectation("v", false); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$literalExpectation("b", false); + var peg$e4 = peg$literalExpectation("!", false); + var peg$e5 = peg$literalExpectation("D", false); + var peg$e6 = peg$literalExpectation("d", false); + var peg$e7 = peg$literalExpectation("s", false); + var peg$e8 = peg$literalExpectation("O", false); + var peg$e9 = peg$literalExpectation("o", false); + var peg$e10 = peg$literalExpectation("e", false); + var peg$e11 = peg$literalExpectation("E", false); + var peg$e12 = peg$literalExpectation("t", false); + var peg$e13 = peg$literalExpectation("R", false); + var peg$e14 = peg$literalExpectation("r", false); + var peg$e15 = peg$literalExpectation("u", false); + var peg$e16 = peg$classExpectation(["{", " "], false, false); + var peg$e17 = peg$literalExpectation("m", false); + var peg$e18 = peg$literalExpectation("{", false); + var peg$e19 = peg$literalExpectation("}", false); + var peg$e20 = peg$literalExpectation(" ", false); + var peg$e21 = peg$literalExpectation("\n", false); + var peg$e22 = peg$literalExpectation("\r", false); + var peg$f0 = function(x) { + return x; + }; + var peg$f1 = function(spec) { + return spec; + }; + var peg$f2 = function(spec) { + return spec; + }; + var peg$f3 = function(openBrace) { + return createNode("verbatim", { openBrace, closeBrace: openBrace }); + }; + var peg$f4 = function() { + return createNode("body"); + }; + var peg$f5 = function(leading_bang, spec) { + return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec; + }; + var peg$f6 = function(braceSpec, defaultArg) { + return createNode("optional", { ...braceSpec, defaultArg }); + }; + var peg$f7 = function(braceSpec) { + return createNode("optional", braceSpec); + }; + var peg$f8 = function() { + return createNode("optionalStar"); + }; + var peg$f9 = function(g) { + return createNode("optional", { defaultArg: g }); + }; + var peg$f10 = function() { + return createNode("optional"); + }; + var peg$f11 = function(args) { + return createNode("embellishment", { + embellishmentTokens: args.content + }); + }; + var peg$f12 = function(args, g) { + return createNode("embellishment", { + embellishmentTokens: args.content, + defaultArg: g + }); + }; + var peg$f13 = function(tok) { + return createNode("optionalToken", { token: tok }); + }; + var peg$f14 = function(braceSpec, defaultArg) { + return createNode("mandatory", { ...braceSpec, defaultArg }); + }; + var peg$f15 = function(braceSpec) { + return createNode("mandatory", braceSpec); + }; + var peg$f16 = function(stopTokens) { + return createNode("until", { stopTokens }); + }; + var peg$f17 = function(x) { + return [x]; + }; + var peg$f18 = function(g) { + return g.content; + }; + var peg$f19 = function() { + return createNode("mandatory"); + }; + var peg$f20 = function(openBrace, closeBrace) { + return { openBrace, closeBrace }; + }; + var peg$f21 = function(content) { + return { type: "group", content }; + }; + var peg$f22 = function() { + return ""; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseargs_spec_list() { + var s0, s1, s2, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + peg$parsewhitespace(); + s4 = peg$parsearg_spec(); + if (s4 !== peg$FAILED) { + s2 = peg$f0(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + s2 = peg$parsewhitespace(); + s0 = peg$f1(s1); + return s0; + } + function peg$parsearg_spec() { + var s0, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + peg$currPos++; + } else { + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + s2 = peg$parseoptional(); + if (s2 === peg$FAILED) { + s2 = peg$parsemandatory(); + if (s2 === peg$FAILED) { + s2 = peg$parseverbatim(); + if (s2 === peg$FAILED) { + s2 = peg$parserequired(); + if (s2 === peg$FAILED) { + s2 = peg$parsebody(); + if (s2 === peg$FAILED) { + s2 = peg$parseuntil(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f2(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseverbatim() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 118) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebody() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 98) { + s1 = peg$c2; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(); + } + s0 = s1; + return s0; + } + function peg$parseoptional() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c3; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parseoptional_star(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_standard(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_delimited(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_embellishment(); + if (s2 === peg$FAILED) { + s2 = peg$parseoptional_token(); + } + } + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseoptional_delimited() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 68) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + s0 = peg$f6(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 100) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_star() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 115) { + s1 = peg$c6; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f8(); + } + s0 = s1; + return s0; + } + function peg$parseoptional_standard() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 79) { + s1 = peg$c7; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 111) { + s1 = peg$c8; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + } + return s0; + } + function peg$parseoptional_embellishment() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 101) { + s1 = peg$c9; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 69) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebraced_group(); + if (s2 !== peg$FAILED) { + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + s0 = peg$f12(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseoptional_token() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 116) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserequired() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 82) { + s1 = peg$c12; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s3 = peg$parsebraced_group(); + if (s3 !== peg$FAILED) { + s0 = peg$f14(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 114) { + s1 = peg$c13; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsebrace_spec(); + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseuntil() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 117) { + s1 = peg$c14; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseuntil_stop_token(); + if (s2 !== peg$FAILED) { + s0 = peg$f16(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseuntil_stop_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsebraced_group(); + if (s1 !== peg$FAILED) { + s1 = peg$f18(s1); + } + s0 = s1; + } + return s0; + } + function peg$parsemandatory() { + var s0, s1; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 109) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f19(); + } + s0 = s1; + return s0; + } + function peg$parsebrace_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$currPos; + peg$silentFails++; + s5 = peg$parsewhitespace_token(); + peg$silentFails--; + if (s5 === peg$FAILED) { + s4 = void 0; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + if (input.length > peg$currPos) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 === peg$FAILED) { + s3 = null; + } + s2 = input.substring(s2, peg$currPos); + s0 = peg$f20(s1, s2); + return s0; + } + function peg$parsebraced_group() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c17; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parsebraced_group(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 === peg$FAILED) { + s3 = peg$parsebraced_group(); + } + } + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c17; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f21(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace_token(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace_token(); + } + s1 = peg$f22(); + s0 = s1; + return s0; + } + function peg$parsewhitespace_token() { + var s0; + if (input.charCodeAt(peg$currPos) === 32) { + s0 = peg$c18; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + } + } + return s0; + } + const DEFAULT_OPTIONS = { + optional: { openBrace: "[", closeBrace: "]" }, + mandatory: { openBrace: "{", closeBrace: "}" } + }; + function createNode(type, options22) { + const computedOptions = DEFAULT_OPTIONS[type] || {}; + return { type, ...computedOptions, ...options22 }; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var pgfkeys_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function() { + return []; + }; + var peg$f1 = function(rowItems, trailingComment) { + return { + itemParts: [], + ...rowItems, + trailingComment, + trailingComma: true + }; + }; + var peg$f2 = function(rowItems, trailingComment) { + return { ...rowItems, trailingComment }; + }; + var peg$f3 = function(a, b) { + return processItem(a, b); + }; + var peg$f4 = function(b) { + return processItem(null, b); + }; + var peg$f5 = function(cell) { + return { cell }; + }; + var peg$f6 = function() { + return {}; + }; + var peg$f7 = function(part) { + return part; + }; + var peg$f8 = function(x) { + return x; + }; + var peg$f9 = function(space, x) { + return { + trailingComment: x, + leadingParbreak: space.parbreak > 0 + }; + }; + var peg$f10 = function(list) { + return { + whitespace: list.filter((x) => options2.isWhitespace(x)).length, + parbreak: list.filter((x) => options2.isParbreak(x)).length + }; + }; + var peg$f11 = function() { + return !options2.allowParenGroups; + }; + var peg$f12 = function(tok) { + return options2.isSameLineComment(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options2.isOwnLineComment(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options2.isParbreak(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options2.isComma(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options2.isEquals(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options2.isChar(tok, "("); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options2.isChar(tok, ")"); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = []; + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + s1 = peg$parsecomment_only_line(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_with_end(); + if (s1 === peg$FAILED) { + s1 = peg$parseitem_without_end(); + } + } + } + } else { + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_with_end() { + var s0, s2, s4, s5, s6, s7, s8; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$parsewhitespace_or_parbreaks(); + s4 = peg$parseitem_sep(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parsewhitespace(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsewhitespace(); + } + s6 = peg$parsetrailing_comment(); + if (s6 === peg$FAILED) { + s6 = null; + } + s7 = []; + s8 = peg$parsewhitespace(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsewhitespace(); + } + s0 = peg$f1(s2, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_without_end() { + var s0, s2, s3; + s0 = peg$currPos; + peg$parsewhitespace_or_parbreaks(); + s2 = peg$parserow_items(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f2(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parserow_items() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseitem_part(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseseparated_part(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseseparated_part(); + } + s0 = peg$f3(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseseparated_part(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseseparated_part(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f4(s1); + } + s0 = s1; + } + return s0; + } + function peg$parseseparated_part() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseparbreak(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseparbreak(); + } + s4 = peg$parseitem_part(); + if (s4 !== peg$FAILED) { + s0 = peg$f5(s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseparbreak(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseparbreak(); + } + s2 = peg$parseequals(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + return s0; + } + function peg$parseitem_part() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$currPos; + s3 = []; + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_whitespace_non_parbreak_token(); + if (s4 === peg$FAILED) { + s4 = peg$currPos; + s5 = peg$parsewhitespace(); + if (s5 === peg$FAILED) { + s5 = peg$parseparbreak(); + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$currPos; + s8 = []; + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parsewhitespace(); + if (s9 === peg$FAILED) { + s9 = peg$parseparbreak(); + } + } + s9 = peg$parsenon_whitespace_non_parbreak_token(); + if (s9 !== peg$FAILED) { + s8 = [s8, s9]; + s7 = s8; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + peg$silentFails--; + if (s7 !== peg$FAILED) { + peg$currPos = s6; + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parsewhitespace(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsewhitespace(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsewhitespace_or_parbreaks(); + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsenon_token(); + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_whitespace_non_parbreak_token() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + peg$silentFails++; + s3 = peg$parsewhitespace(); + if (s3 === peg$FAILED) { + s3 = peg$parseparbreak(); + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseparen_block(); + if (s3 === peg$FAILED) { + s3 = peg$parsetoken(); + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + return s0; + } + function peg$parsenon_token() { + var s0; + s0 = peg$parseitem_sep(); + if (s0 === peg$FAILED) { + s0 = peg$parseequals(); + if (s0 === peg$FAILED) { + s0 = peg$parsetrailing_comment(); + if (s0 === peg$FAILED) { + s0 = peg$parseown_line_comment(); + } + } + } + return s0; + } + function peg$parsewhitespace_or_parbreaks() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + if (s2 === peg$FAILED) { + s2 = peg$parseparbreak(); + } + } + s1 = peg$f10(s1); + s0 = s1; + return s0; + } + function peg$parseparen_block() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + s0 = peg$currPos; + s1 = peg$f11(); + if (s1) { + s1 = peg$FAILED; + } else { + s1 = void 0; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + s4 = peg$parseopen_paren(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$currPos; + s7 = peg$currPos; + peg$silentFails++; + s8 = peg$parseclose_paren(); + peg$silentFails--; + if (s8 === peg$FAILED) { + s7 = void 0; + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + if (input.length > peg$currPos) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s8 !== peg$FAILED) { + s7 = [s7, s8]; + s6 = s7; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + } + s6 = peg$parseclose_paren(); + if (s6 !== peg$FAILED) { + s4 = [s4, s5, s6]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseparbreak() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseitem_sep() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function processItem(leadCell, otherCells) { + const cells = [leadCell || []]; + for (const x of otherCells) { + cells.push(x.cell || []); + } + return { itemParts: cells }; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isChar: (node, char) => node.type === "string" && node.content === char, + isComma(node) { + return node.type === "string" && node.content === ","; + }, + isEquals(node) { + return node.type === "string" && node.content === "="; + }, + isParbreak(node) { + return node.type === "parbreak"; + }, + isWhitespace(node) { + return node.type === "whitespace"; + }, + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + allowParenGroups: true + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(tok) { + return options2.isHash(tok); + }; + var peg$f3 = function(tok) { + return tok; + }; + var peg$f4 = function(tok) { + return options2.isNumber(tok); + }; + var peg$f5 = function(tok) { + return tok; + }; + var peg$f6 = function() { + return { type: "string", content: "#" }; + }; + var peg$f7 = function(num) { + const split = options2.splitNumber(num); + return [{ type: "hash_number", number: split.number }, split.rest]; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsedouble_hash(); + if (s2 === peg$FAILED) { + s2 = peg$parsehash_number(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsehash() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f4(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f5(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_hash() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsehash(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehash_number() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsehash(); + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isHash) { + try { + Object.assign(options2, { + isHash: (node) => node.type === "string" && node.content === "#", + isNumber: (node) => node.type === "string" && 0 < +node.content.charAt(0), + splitNumber: (node) => { + const number = +node.content.charAt(0); + if (node.content.length > 1) { + return { + number, + rest: { + type: "string", + content: node.content.slice(1) + } + }; + } + return { number }; + } + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$anyExpectation(); + var peg$f0 = function(e) { + return [].concat(...e).filter((n) => !!n); + }; + var peg$f1 = function() { + return []; + }; + var peg$f2 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f3 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f4 = function(tok1, tok2) { + const split = options2.split(tok2); + return options2.isRecognized([tok1, split[0]]); + }; + var peg$f5 = function(tok1, tok2) { + const split = options2.split(tok2); + return [options2.isRecognized([tok1, split[0]]), split[1]]; + }; + var peg$f6 = function(tok1, tok2) { + return options2.isRecognized([tok1, tok2]); + }; + var peg$f7 = function(tok1, tok2) { + return options2.isRecognized([tok1, tok2]); + }; + var peg$f8 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f9 = function(toks) { + return options2.isRecognized(toks); + }; + var peg$f10 = function(tok) { + return options2.isRecognized([tok]); + }; + var peg$f11 = function(tok) { + return options2.isRecognized([tok]); + }; + var peg$f12 = function(tok) { + return options2.isMacro(tok); + }; + var peg$f13 = function(tok) { + return tok; + }; + var peg$f14 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f15 = function(tok) { + return tok; + }; + var peg$f16 = function(tok) { + return options2.isSplitable(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsetriple_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsedouble_ligature(); + if (s2 === peg$FAILED) { + s2 = peg$parsemono_ligature(); + if (s2 === peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f0(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parsetriple_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s4 !== peg$FAILED) { + s2 = [s2, s3, s4]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f2(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_ligature() { + var s0; + s0 = peg$parsedouble_macro_ligature(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_macro_ligature_extracted(); + if (s0 === peg$FAILED) { + s0 = peg$parsedouble_char_ligature(); + } + } + return s0; + } + function peg$parsedouble_macro_ligature_extracted() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + s3 = peg$parsesplitable(); + if (s3 !== peg$FAILED) { + s4 = peg$f4(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f5(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_macro_ligature() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$parsemacro(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsewhitespace(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsewhitespace(); + } + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$f6(s1, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f7(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedouble_char_ligature() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s2 !== peg$FAILED) { + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$f8(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f9(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemono_ligature() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f10(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f11(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f12(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f13(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsewhitespace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f14(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesplitable() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isMacro: (node) => node.type === "macro", + isWhitespace: (node) => node.type === "whitespace", + isRecognized: (nodes) => { + if (nodes.length == 2 && nodes[0].content === "^" && nodes[1].content === "o") { + return { type: "string", content: "ô" }; + } + return null; + }, + isSplitable: (node) => node.type === "string" && node.content.length > 1, + split: (node) => [ + { type: "string", content: node.content.charAt(0) }, + { type: "string", content: node.content.slice(1) } + ] + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { start: peg$parsestart }; + var peg$startRuleFunction = peg$parsestart; + var peg$c0 = ";"; + var peg$c1 = ","; + var peg$c2 = ":"; + var peg$c3 = "/"; + var peg$c4 = ">"; + var peg$c5 = "!"; + var peg$c6 = "."; + var peg$c7 = "!!["; + var peg$c8 = "]"; + var peg$c9 = "!!"; + var peg$c10 = "+"; + var peg$c11 = "-"; + var peg$r0 = /^[a-zA-Z0-9]/; + var peg$r1 = /^[0-9]/; + var peg$r2 = /^[ \t\n\r]/; + var peg$r3 = /^[0-9a-fA-F]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation(";", false); + var peg$e2 = peg$literalExpectation(",", false); + var peg$e3 = peg$otherExpectation("model list"); + var peg$e4 = peg$literalExpectation(":", false); + var peg$e5 = peg$literalExpectation("/", false); + var peg$e6 = peg$otherExpectation("model"); + var peg$e7 = peg$otherExpectation("color spec list"); + var peg$e8 = peg$otherExpectation("color spec"); + var peg$e9 = peg$otherExpectation("color"); + var peg$e10 = peg$otherExpectation("function expression"); + var peg$e11 = peg$literalExpectation(">", false); + var peg$e12 = peg$otherExpectation("function"); + var peg$e13 = peg$otherExpectation("extended expression"); + var peg$e14 = peg$otherExpectation("core model"); + var peg$e15 = peg$otherExpectation("expr"); + var peg$e16 = peg$literalExpectation("!", false); + var peg$e17 = peg$otherExpectation("mix expr"); + var peg$e18 = peg$otherExpectation("name"); + var peg$e19 = peg$literalExpectation(".", false); + var peg$e20 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false); + var peg$e21 = peg$otherExpectation("postfix"); + var peg$e22 = peg$literalExpectation("!![", false); + var peg$e23 = peg$literalExpectation("]", false); + var peg$e24 = peg$literalExpectation("!!", false); + var peg$e25 = peg$otherExpectation("prefix"); + var peg$e26 = peg$otherExpectation("plus"); + var peg$e27 = peg$literalExpectation("+", false); + var peg$e28 = peg$otherExpectation("minus"); + var peg$e29 = peg$literalExpectation("-", false); + var peg$e30 = peg$otherExpectation("num"); + var peg$e31 = peg$classExpectation([["0", "9"]], false, false); + var peg$e32 = peg$otherExpectation("positive float"); + var peg$e33 = peg$otherExpectation("divisor"); + var peg$e34 = peg$otherExpectation("int"); + var peg$e36 = peg$classExpectation([" ", " ", "\n", "\r"], false, false); + var peg$e37 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false); + var peg$f0 = function(m) { + return m; + }; + var peg$f1 = function(m) { + return m; + }; + var peg$f2 = function(m) { + return m; + }; + var peg$f3 = function(m) { + return m; + }; + var peg$f4 = function(m) { + return m; + }; + var peg$f5 = function(a) { + return { type: "invalid_spec", content: a }; + }; + var peg$f6 = function(f, c) { + return c; + }; + var peg$f7 = function(f, r) { + return { type: "color_set", content: [f].concat(r) }; + }; + var peg$f8 = function(n, s2) { + return { type: "color_set_item", name: n, spec_list: s2 }; + }; + var peg$f9 = function(c, m) { + return { type: "model_list", contents: m, core_model: c }; + }; + var peg$f10 = function(m) { + return { type: "model_list", contents: m, core_model: null }; + }; + var peg$f11 = function(m, a) { + return a; + }; + var peg$f12 = function(m, r) { + return [m].concat(r); + }; + var peg$f13 = function(s2, a) { + return a; + }; + var peg$f14 = function(s2, r) { + return { type: "spec_list", content: [s2].concat(r) }; + }; + var peg$f15 = function(c) { + return { type: "hex_spec", content: [c] }; + }; + var peg$f16 = function(c, d) { + return d; + }; + var peg$f17 = function(c, d) { + return d; + }; + var peg$f18 = function(c, r) { + return { type: "num_spec", content: r ? [c].concat(r) : [c] }; + }; + var peg$f19 = function(c, fs) { + return { type: "color", color: c, functions: fs }; + }; + var peg$f20 = function(f, n) { + return n; + }; + var peg$f21 = function(f, args) { + return { type: "function", name: f, args }; + }; + var peg$f22 = function(core, d, e, es) { + return { + type: "extended_expr", + core_model: core, + div: d, + expressions: [e].concat(es) + }; + }; + var peg$f23 = function(core, e, es) { + return { + type: "extended_expr", + core_model: core, + div: null, + expressions: [e].concat(es) + }; + }; + var peg$f24 = function(e, d) { + return { type: "weighted_expr", color: e, weight: d }; + }; + var peg$f25 = function(e) { + return e; + }; + var peg$f26 = function(p, n, e, po) { + return { + type: "expr", + prefix: p, + name: n, + mix_expr: e, + postfix: po + }; + }; + var peg$f27 = function(p, n) { + return { type: "complete_mix", mix_percent: p, name: n }; + }; + var peg$f28 = function(p) { + return { type: "partial_mix", mix_percent: p }; + }; + var peg$f29 = function(c, p) { + return c.concat(p || []); + }; + var peg$f30 = function(n) { + return { type: "postfix", num: n }; + }; + var peg$f31 = function(p) { + return { type: "postfix", plusses: p }; + }; + var peg$f32 = function(n) { + return parseInt(n, 10); + }; + var peg$f33 = function(n) { + return parseFloat(n); + }; + var peg$f34 = function(n) { + return n; + }; + var peg$f35 = function(n) { + return -n; + }; + var peg$f36 = function(m, n) { + return m ? -n : n; + }; + var peg$f37 = function(h) { + return h.toUpperCase(); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsestart() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsespec_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f2(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f3(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecolor_set_spec(); + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + s1 = input.substring(s1, peg$currPos); + s1 = peg$f5(s1); + s0 = s1; + } + } + } + } + } + return s0; + } + function peg$parsecolor_set_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsecolor_set_item(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s4 = peg$c0; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecolor_set_item(); + if (s5 !== peg$FAILED) { + s3 = peg$f6(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f7(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolor_set_item() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsename(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsespec_list(); + if (s3 !== peg$FAILED) { + s0 = peg$f8(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel_list() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsemodel_list_tail(); + if (s3 !== peg$FAILED) { + s0 = peg$f9(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsemodel_list_tail(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(s1); + } + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parsemodel_list_tail() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsemodel(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsemodel(); + if (s5 !== peg$FAILED) { + s3 = peg$f11(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f12(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemodel() { + var s0; + peg$silentFails++; + s0 = peg$parsecore_model(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsespec_list() { + var s0, s1, s2, s3, s4, s5; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsespec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 47) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsespec(); + if (s5 !== peg$FAILED) { + s3 = peg$f13(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + s0 = peg$f14(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsespec() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsehex(); + if (s3 !== peg$FAILED) { + s4 = peg$parsehex(); + if (s4 !== peg$FAILED) { + s5 = peg$parsehex(); + if (s5 !== peg$FAILED) { + s6 = peg$parsehex(); + if (s6 !== peg$FAILED) { + s7 = peg$parsehex(); + if (s7 !== peg$FAILED) { + s8 = peg$parsehex(); + if (s8 !== peg$FAILED) { + s3 = [s3, s4, s5, s6, s7, s8]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f15(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsedec(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c1; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f16(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parsesp(); + if (s4 !== peg$FAILED) { + s5 = peg$parsedec(); + if (s5 !== peg$FAILED) { + s3 = peg$f17(s1, s5); + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + } else { + s2 = peg$FAILED; + } + } + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f18(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parsecolor() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecolor_expr(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsefunc_expr(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsefunc_expr(); + } + s0 = peg$f19(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsecolor_expr() { + var s0; + s0 = peg$parseext_expr(); + if (s0 === peg$FAILED) { + s0 = peg$parseexpr(); + if (s0 === peg$FAILED) { + s0 = peg$parsename(); + } + } + return s0; + } + function peg$parsefunc_expr() { + var s0, s1, s2, s3, s4, s5, s6; + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 62) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsefunction(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseint(); + if (s6 !== peg$FAILED) { + s4 = peg$f20(s2, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s0 = peg$f21(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parsefunction() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseext_expr() { + var s0, s1, s2, s3, s4, s5, s6, s7; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsediv(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c2; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseweighted_expr(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseadditional_weighted_expr(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f22(s1, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsecore_model(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseweighted_expr(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseadditional_weighted_expr(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseadditional_weighted_expr(); + } + s0 = peg$f23(s1, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseweighted_expr() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseexpr(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsedec(); + if (s3 !== peg$FAILED) { + s0 = peg$f24(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseadditional_weighted_expr() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 59) { + s1 = peg$c0; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseweighted_expr(); + if (s2 !== peg$FAILED) { + s0 = peg$f25(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecore_model() { + var s0; + peg$silentFails++; + s0 = peg$parsename(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseexpr() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseprefix(); + s2 = peg$parsename(); + if (s2 !== peg$FAILED) { + s3 = peg$parsemix_expr(); + s4 = peg$parsepostfix(); + if (s4 === peg$FAILED) { + s4 = null; + } + s0 = peg$f26(s1, s2, s3, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsecomplete_mix() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 33) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$parsename(); + if (s4 !== peg$FAILED) { + s0 = peg$f27(s2, s4); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_mix() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 33) { + s1 = peg$c5; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f28(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemix_expr() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomplete_mix(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomplete_mix(); + } + s2 = peg$parsepartial_mix(); + if (s2 === peg$FAILED) { + s2 = null; + } + s0 = peg$f29(s1, s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + return s0; + } + function peg$parsename() { + var s0, s1, s2; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 46) { + s0 = peg$c6; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$r0.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parsepostfix() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c7) { + s1 = peg$c7; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c8; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + if (s3 !== peg$FAILED) { + s0 = peg$f30(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c9) { + s1 = peg$c9; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e24); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$parseplus(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseplus(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + return s0; + } + function peg$parseprefix() { + var s0; + peg$silentFails++; + s0 = peg$parseminus(); + if (s0 === peg$FAILED) { + s0 = null; + } + peg$silentFails--; + if (peg$silentFails === 0) { + peg$fail(peg$e25); + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 43) { + s2 = peg$c10; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e26); + } + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c11; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e28); + } + } + return s0; + } + function peg$parsenum() { + var s0, s1, s2, s3; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$r1.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + s1 = peg$f32(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e30); + } + } + return s0; + } + function peg$parsepct() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$currPos; + s4 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r1.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c6; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s6 !== peg$FAILED) { + s7 = peg$currPos; + s8 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + while (s9 !== peg$FAILED) { + s8.push(s9); + if (peg$r1.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + s7 = input.substring(s7, peg$currPos); + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 === peg$FAILED) { + s5 = null; + } + s4 = input.substring(s4, peg$currPos); + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 46) { + s3 = peg$c6; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r1.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e31); + } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f33(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e32); + } + } + return s0; + } + function peg$parsediv() { + var s0; + peg$silentFails++; + s0 = peg$parsepct(); + peg$silentFails--; + if (s0 === peg$FAILED) { + if (peg$silentFails === 0) { + peg$fail(peg$e33); + } + } + return s0; + } + function peg$parsedec() { + var s0, s1, s2; + s0 = peg$parsepct(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 43) { + s1 = peg$c10; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e27); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f34(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c11; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e29); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsepct(); + if (s2 !== peg$FAILED) { + s0 = peg$f35(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parseint() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = peg$parsenum(); + if (s2 !== peg$FAILED) { + s0 = peg$f36(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e34); + } + } + return s0; + } + function peg$parsesp() { + var s0, s1; + s0 = []; + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$r2.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e36); + } + } + } + } else { + s0 = peg$FAILED; + } + return s0; + } + function peg$parsehex() { + var s0, s1; + s0 = peg$currPos; + if (peg$r3.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e37); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f37(s1); + } + s0 = s1; + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e0 = peg$otherExpectation("decl_start"); + var peg$e1 = peg$otherExpectation("decl_end"); + var peg$e2 = peg$otherExpectation("vert"); + var peg$e3 = peg$anyExpectation(); + var peg$e4 = peg$otherExpectation("l"); + var peg$e5 = peg$otherExpectation("r"); + var peg$e6 = peg$otherExpectation("c"); + var peg$e7 = peg$otherExpectation("p"); + var peg$e8 = peg$otherExpectation("m"); + var peg$e9 = peg$otherExpectation("b"); + var peg$e10 = peg$otherExpectation("w"); + var peg$e11 = peg$otherExpectation("W"); + var peg$e12 = peg$otherExpectation("X"); + var peg$e13 = peg$otherExpectation("!"); + var peg$e14 = peg$otherExpectation("@"); + var peg$e15 = peg$otherExpectation("<"); + var peg$e16 = peg$otherExpectation(">"); + var peg$e17 = peg$otherExpectation("group"); + var peg$e18 = peg$otherExpectation("whitespace"); + var peg$f0 = function(c) { + return c; + }; + var peg$f1 = function(cols) { + return cols; + }; + var peg$f2 = function() { + return []; + }; + var peg$f3 = function(divs1, start, a, end, divs2) { + return { + type: "column", + pre_dividers: divs1, + post_dividers: divs2, + before_start_code: start, + before_end_code: end, + alignment: a + }; + }; + var peg$f4 = function() { + return { + type: "vert_divider" + }; + }; + var peg$f5 = function(b, g) { + return { + type: "bang_divider", + content: g[0].content + }; + }; + var peg$f6 = function(g) { + return { + type: "at_divider", + content: g[0].content + }; + }; + var peg$f7 = function(div) { + return div; + }; + var peg$f8 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f9 = function(g) { + return { type: "decl_code", code: g[0].content }; + }; + var peg$f10 = function() { + return { type: "alignment", alignment: "left" }; + }; + var peg$f11 = function() { + return { type: "alignment", alignment: "center" }; + }; + var peg$f12 = function() { + return { type: "alignment", alignment: "right" }; + }; + var peg$f13 = function() { + return { type: "alignment", alignment: "X" }; + }; + var peg$f14 = function() { + return "top"; + }; + var peg$f15 = function() { + return "default"; + }; + var peg$f16 = function() { + return "bottom"; + }; + var peg$f17 = function(a, g) { + return { + type: "alignment", + alignment: "parbox", + baseline: a, + size: g[0].content + }; + }; + var peg$f18 = function(g1, g2) { + return { + type: "alignment", + alignment: "parbox", + baseline: g1[0].content, + size: g2[0].content + }; + }; + var peg$f19 = function(tok) { + return options2.matchChar(tok, "|"); + }; + var peg$f20 = function(tok) { + return options2.matchChar(tok, "l"); + }; + var peg$f21 = function(tok) { + return options2.matchChar(tok, "r"); + }; + var peg$f22 = function(tok) { + return options2.matchChar(tok, "c"); + }; + var peg$f23 = function(tok) { + return options2.matchChar(tok, "p"); + }; + var peg$f24 = function(tok) { + return options2.matchChar(tok, "m"); + }; + var peg$f25 = function(tok) { + return options2.matchChar(tok, "b"); + }; + var peg$f26 = function(tok) { + return options2.matchChar(tok, "w"); + }; + var peg$f27 = function(tok) { + return options2.matchChar(tok, "W"); + }; + var peg$f28 = function(tok) { + return options2.matchChar(tok, "X"); + }; + var peg$f29 = function(tok) { + return options2.matchChar(tok, "!"); + }; + var peg$f30 = function(tok) { + return options2.matchChar(tok, "@"); + }; + var peg$f31 = function(tok) { + return options2.matchChar(tok, "<"); + }; + var peg$f32 = function(tok) { + return options2.matchChar(tok, ">"); + }; + var peg$f33 = function(tok) { + return options2.isGroup(tok); + }; + var peg$f34 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsecolumn(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f2(); + } + s0 = s1; + } + return s0; + } + function peg$parsecolumn() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecolumn_divider(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecolumn_divider(); + } + s2 = peg$parsedecl_start(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = peg$parsealignment(); + if (s3 !== peg$FAILED) { + s4 = peg$parsedecl_end(); + if (s4 === peg$FAILED) { + s4 = null; + } + s5 = []; + s6 = peg$parsecolumn_divider(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parsecolumn_divider(); + } + s0 = peg$f3(s1, s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolumn_divider() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$currPos; + s3 = peg$parsevert(); + if (s3 !== peg$FAILED) { + s3 = peg$f4(); + } + s2 = s3; + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parsebang(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f5(s3, s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$parseat(); + if (s3 !== peg$FAILED) { + s4 = peg$parsegroup(); + if (s4 !== peg$FAILED) { + s2 = peg$f6(s4); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f7(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedecl_start() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parsegreater(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f8(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + return s0; + } + function peg$parsedecl_end() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseless(); + if (s1 !== peg$FAILED) { + s2 = peg$parsegroup(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parsealignment() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsel(); + if (s1 !== peg$FAILED) { + s1 = peg$f10(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsec(); + if (s1 !== peg$FAILED) { + s1 = peg$f11(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parser(); + if (s1 !== peg$FAILED) { + s1 = peg$f12(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseX(); + if (s1 !== peg$FAILED) { + s1 = peg$f13(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsep(); + if (s2 !== peg$FAILED) { + s2 = peg$f14(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parsem(); + if (s2 !== peg$FAILED) { + s2 = peg$f15(); + } + s1 = s2; + if (s1 === peg$FAILED) { + s1 = peg$currPos; + s2 = peg$parseb(); + if (s2 !== peg$FAILED) { + s2 = peg$f16(); + } + s1 = s2; + } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s0 = peg$f17(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsew(); + if (s1 === peg$FAILED) { + s1 = peg$parseW(); + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsegroup(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f18(s3, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + return s0; + } + function peg$parsevert() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + return s0; + } + function peg$parsel() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parser() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsec() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f23(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsem() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseb() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f25(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parsew() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseW() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f27(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parseX() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parsebang() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f29(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parseless() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f31(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + return s0; + } + function peg$parsegreater() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f33(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isHash) { + try { + Object.assign(options2, { + matchChar: (node, char) => node.type === "string" && node.content === char, + isGroup: (node) => node.type === "group", + isWhitespace: (node) => node.type === "whitespace" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { body: peg$parsebody }; + var peg$startRuleFunction = peg$parsebody; + var peg$e1 = peg$otherExpectation("item"); + var peg$e2 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("equation"); + var peg$e4 = peg$otherExpectation("trailing comment"); + var peg$e5 = peg$otherExpectation("comment only line"); + var peg$e6 = peg$otherExpectation("non-var token"); + var peg$e7 = peg$otherExpectation("token"); + var peg$e8 = peg$otherExpectation("same line comment"); + var peg$e9 = peg$otherExpectation("own line comment"); + var peg$e10 = peg$otherExpectation(","); + var peg$e11 = peg$otherExpectation("@"); + var peg$e12 = peg$otherExpectation("variable token"); + var peg$e13 = peg$otherExpectation("+/-"); + var peg$e14 = peg$otherExpectation("="); + var peg$f0 = function(a, b) { + return a.concat(b ? b : []); + }; + var peg$f1 = function() { + return []; + }; + var peg$f3 = function(op, a, b, c) { + return { type: "item", op, variable: b, content: a.concat(b, c) }; + }; + var peg$f4 = function(op, a) { + return { type: "item", op, variable: null, content: a }; + }; + var peg$f5 = function(line3, sep, comment) { + return { ...line3, sep: [].concat(sep), trailingComment: comment }; + }; + var peg$f6 = function(line3, comment) { + return { ...line3, trailingComment: comment }; + }; + var peg$f7 = function(eq, ann) { + return { + type: "line", + equation: eq, + annotation: ann, + sep: null + }; + }; + var peg$f8 = function(at2, ann) { + return at2 ? { type: "annotation", marker: at2, content: ann } : null; + }; + var peg$f9 = function(left, eq, right) { + return { type: "equation", left, right, equals: eq }; + }; + var peg$f10 = function(x) { + return x; + }; + var peg$f11 = function(x) { + return { + type: "line", + trailingComment: x + }; + }; + var peg$f12 = function(v, s2) { + return [v].concat(s2 ? s2 : []); + }; + var peg$f13 = function(t) { + return t; + }; + var peg$f14 = function(x) { + return x; + }; + var peg$f15 = function(x) { + return x; + }; + var peg$f16 = function(tok) { + return options2.isSameLineComment(tok); + }; + var peg$f17 = function(tok) { + return tok; + }; + var peg$f18 = function(tok) { + return options2.isOwnLineComment(tok); + }; + var peg$f19 = function(tok) { + return tok; + }; + var peg$f20 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f21 = function(tok) { + return tok; + }; + var peg$f22 = function(tok) { + return options2.isSep(tok); + }; + var peg$f23 = function(tok) { + return tok; + }; + var peg$f24 = function(tok) { + return options2.isAt(tok); + }; + var peg$f25 = function(tok) { + return tok; + }; + var peg$f26 = function(tok) { + return options2.isVar(tok); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options2.isOperation(tok); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options2.isEquals(tok); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options2.isSubscript(tok); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsebody() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsecomment_only_line(); + if (s2 === peg$FAILED) { + s2 = peg$parseline_with_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parsepartial_line_with_comment(); + } + } + } + s2 = peg$parseline_without_sep(); + if (s2 === peg$FAILED) { + s2 = peg$parseEOL(); + } + if (s2 !== peg$FAILED) { + s0 = peg$f0(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s1 = peg$f1(); + } + s0 = s1; + } + return s0; + } + function peg$parseitem() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s5 = peg$parsevar(); + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parse_(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parse_(); + } + s7 = []; + s8 = peg$parsetoken(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parsetoken(); + } + s8 = []; + s9 = peg$parse_(); + while (s9 !== peg$FAILED) { + s8.push(s9); + s9 = peg$parse_(); + } + s0 = peg$f3(s1, s3, s5, s7); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoperation(); + if (s1 === peg$FAILED) { + s1 = null; + } + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = []; + s4 = peg$parsenon_var_token(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsenon_var_token(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s0 = peg$f4(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + return s0; + } + function peg$parseline_with_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsesep(); + if (s2 !== peg$FAILED) { + s3 = peg$parsetrailing_comment(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f5(s1, s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepartial_line_with_comment() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseline_without_sep(); + if (s1 !== peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f6(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_without_sep() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s2 !== peg$FAILED) { + peg$currPos = s1; + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseequation(); + s3 = peg$parseannotation(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f7(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseannotation() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parseat(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsenon_sep_token(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsenon_sep_token(); + } + s0 = peg$f8(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseequation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parseitem(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseitem(); + } + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parsetoken(); + if (s4 === peg$FAILED) { + s4 = peg$parseoperation(); + } + } + s0 = peg$f9(s1, s2, s3); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + return s0; + } + function peg$parsetrailing_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsesame_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + return s0; + } + function peg$parsecomment_only_line() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parseown_line_comment(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parsevar() { + var s0, s1, s2, s3; + s0 = peg$currPos; + s1 = peg$parsevar_token(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parse_(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parse_(); + } + s3 = peg$parsesubscript(); + if (s3 === peg$FAILED) { + s3 = null; + } + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsenon_var_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsevar(); + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parsetoken(); + if (s2 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parsenon_sep_token() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f14(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsetoken() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$parsesep(); + if (s2 === peg$FAILED) { + s2 = peg$parseat(); + if (s2 === peg$FAILED) { + s2 = peg$parseoperation(); + if (s2 === peg$FAILED) { + s2 = peg$parseequals(); + if (s2 === peg$FAILED) { + s2 = peg$parsetrailing_comment(); + if (s2 === peg$FAILED) { + s2 = peg$parseown_line_comment(); + } + } + } + } + } + peg$silentFails--; + if (s2 === peg$FAILED) { + s1 = void 0; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s0 = peg$f15(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + return s0; + } + function peg$parsesame_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f16(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f17(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + return s0; + } + function peg$parseown_line_comment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f18(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f19(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f20(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f21(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesep() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f23(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + return s0; + } + function peg$parseat() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + return s0; + } + function peg$parsevar_token() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + if (input.length > peg$currPos) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s4 = peg$f28(s2); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s0 = peg$f29(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + return s0; + } + function peg$parsesubscript() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseEOL() { + var s0, s1; + s0 = peg$currPos; + peg$silentFails++; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + peg$silentFails--; + if (s1 === peg$FAILED) { + s0 = void 0; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isSep: (node) => node.type === "string" && node.content === ",", + isVar: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isOperation: (node) => node.type === "string" && node.content.match(/[+-]/), + isEquals: (node) => node.type === "string" && node.content === "=", + isAt: (node) => node.type === "string" && node.content === "@", + isSubscript: (node) => node.content === "_", + isWhitespace: (node) => node.type === "whitespace", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +// Generated by Peggy 2.0.1. +// +// https://peggyjs.org/ +(function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { root: peg$parseroot }; + var peg$startRuleFunction = peg$parseroot; + var peg$c0 = "plus"; + var peg$c1 = "minus"; + var peg$c2 = "pt"; + var peg$c3 = "mm"; + var peg$c4 = "cm"; + var peg$c5 = "in"; + var peg$c6 = "ex"; + var peg$c7 = "em"; + var peg$c8 = "bp"; + var peg$c9 = "pc"; + var peg$c10 = "dd"; + var peg$c11 = "cc"; + var peg$c12 = "nd"; + var peg$c13 = "nc"; + var peg$c14 = "sp"; + var peg$c15 = "filll"; + var peg$c16 = "fill"; + var peg$c17 = "fil"; + var peg$c18 = "."; + var peg$c19 = "+"; + var peg$c20 = "-"; + var peg$r0 = /^[0-9]/; + var peg$e0 = peg$anyExpectation(); + var peg$e1 = peg$literalExpectation("plus", false); + var peg$e2 = peg$literalExpectation("minus", false); + var peg$e3 = peg$literalExpectation("pt", false); + var peg$e4 = peg$literalExpectation("mm", false); + var peg$e5 = peg$literalExpectation("cm", false); + var peg$e6 = peg$literalExpectation("in", false); + var peg$e7 = peg$literalExpectation("ex", false); + var peg$e8 = peg$literalExpectation("em", false); + var peg$e9 = peg$literalExpectation("bp", false); + var peg$e10 = peg$literalExpectation("pc", false); + var peg$e11 = peg$literalExpectation("dd", false); + var peg$e12 = peg$literalExpectation("cc", false); + var peg$e13 = peg$literalExpectation("nd", false); + var peg$e14 = peg$literalExpectation("nc", false); + var peg$e15 = peg$literalExpectation("sp", false); + var peg$e16 = peg$literalExpectation("filll", false); + var peg$e17 = peg$literalExpectation("fill", false); + var peg$e18 = peg$literalExpectation("fil", false); + var peg$e19 = peg$otherExpectation("number"); + var peg$e20 = peg$classExpectation([["0", "9"]], false, false); + var peg$e21 = peg$literalExpectation(".", false); + var peg$e22 = peg$literalExpectation("+", false); + var peg$e23 = peg$literalExpectation("-", false); + var peg$f0 = function(b, st, sh) { + return { + type: "glue", + fixed: b, + stretchable: st, + shrinkable: sh, + position: location() + }; + }; + var peg$f1 = function(glue) { + return glue; + }; + var peg$f2 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f3 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f4 = function(n, u) { + return { type: "dim", value: n, unit: u }; + }; + var peg$f5 = function(n) { + return parseFloat(n); + }; + var peg$currPos = 0; + var peg$savedPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + function peg$literalExpectation(text2, ignoreCase) { + return { type: "literal", text: text2, ignoreCase }; + } + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts, inverted, ignoreCase }; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parseroot() { + var s0, s1, s2, s3, s4; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$parsebase(); + if (s2 !== peg$FAILED) { + s3 = peg$parsestretchable(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parseshrinkable(); + if (s4 === peg$FAILED) { + s4 = null; + } + peg$savedPos = s1; + s1 = peg$f0(s2, s3, s4); + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (input.length > peg$currPos) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + } + peg$savedPos = s0; + s0 = peg$f1(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsebase() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsenumber(); + if (s1 !== peg$FAILED) { + s2 = peg$parseunit(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f2(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsestretchable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c0) { + s1 = peg$c0; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e1); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f3(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseshrinkable() { + var s0, s1, s2, s3; + s0 = peg$currPos; + if (input.substr(peg$currPos, 5) === peg$c1) { + s1 = peg$c1; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e2); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 !== peg$FAILED) { + s3 = peg$parserubber_unit(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f4(s2, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunit() { + var s0; + if (input.substr(peg$currPos, 2) === peg$c2) { + s0 = peg$c2; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c3) { + s0 = peg$c3; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c4) { + s0 = peg$c4; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c5) { + s0 = peg$c5; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c6) { + s0 = peg$c6; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e7); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c7) { + s0 = peg$c7; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e8); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c8) { + s0 = peg$c8; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e9); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c9) { + s0 = peg$c9; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e10); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c10) { + s0 = peg$c10; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e11); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c11) { + s0 = peg$c11; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e12); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c12) { + s0 = peg$c12; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e13); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c13) { + s0 = peg$c13; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e14); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c14) { + s0 = peg$c14; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e15); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return s0; + } + function peg$parserubber_unit() { + var s0; + s0 = peg$parseunit(); + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c15) { + s0 = peg$c15; + peg$currPos += 5; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e16); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c16) { + s0 = peg$c16; + peg$currPos += 4; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e17); + } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c17) { + s0 = peg$c17; + peg$currPos += 3; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e18); + } + } + } + } + } + return s0; + } + function peg$parsenumber() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parsesign(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$currPos; + s5 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$r0.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + if (input.charCodeAt(peg$currPos) === 46) { + s6 = peg$c18; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e21); + } + } + if (s6 !== peg$FAILED) { + s7 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$r0.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 === peg$FAILED) { + s4 = []; + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$r0.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e20); + } + } + } + } else { + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f5(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e19); + } + } + return s0; + } + function peg$parsesign() { + var s0; + if (input.charCodeAt(peg$currPos) === 43) { + s0 = peg$c19; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e22); + } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s0 = peg$c20; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e23); + } + } + } + return s0; + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; +})(); +var tikz_default = ( + // Generated by Peggy 2.0.1. + // + // https://peggyjs.org/ + function() { + function peg$subclass(child, parent) { + function C() { + this.constructor = child; + } + C.prototype = parent.prototype; + child.prototype = new C(); + } + function peg$SyntaxError(message, expected, found, location) { + var self = Error.call(this, message); + if (Object.setPrototypeOf) { + Object.setPrototypeOf(self, peg$SyntaxError.prototype); + } + self.expected = expected; + self.found = found; + self.location = location; + self.name = "SyntaxError"; + return self; + } + peg$subclass(peg$SyntaxError, Error); + function peg$padEnd(str, targetLength, padString) { + padString = padString || " "; + if (str.length > targetLength) { + return str; + } + targetLength -= str.length; + padString += padString.repeat(targetLength); + return str + padString.slice(0, targetLength); + } + peg$SyntaxError.prototype.format = function(sources) { + var str = "Error: " + this.message; + if (this.location) { + var src = null; + var k; + for (k = 0; k < sources.length; k++) { + if (sources[k].source === this.location.source) { + src = sources[k].text.split(/\r\n|\n|\r/g); + break; + } + } + var s2 = this.location.start; + var loc = this.location.source + ":" + s2.line + ":" + s2.column; + if (src) { + var e = this.location.end; + var filler = peg$padEnd("", s2.line.toString().length, " "); + var line3 = src[s2.line - 1]; + var last = s2.line === e.line ? e.column : line3.length + 1; + var hatLen = last - s2.column || 1; + str += "\n --> " + loc + "\n" + filler + " |\n" + s2.line + " | " + line3 + "\n" + filler + " | " + peg$padEnd("", s2.column - 1, " ") + peg$padEnd("", hatLen, "^"); + } else { + str += "\n at " + loc; + } + } + return str; + }; + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return '"' + literalEscape(expectation.text) + '"'; + }, + class: function(expectation) { + var escapedParts = expectation.parts.map(function(part) { + return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; + }, + any: function() { + return "any character"; + }, + end: function() { + return "end of input"; + }, + other: function(expectation) { + return expectation.description; + } + }; + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function classEscape(s2) { + return s2.replace(/\\/g, "\\\\").replace(/\]/g, "\\]").replace(/\^/g, "\\^").replace(/-/g, "\\-").replace(/\0/g, "\\0").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/[\x00-\x0F]/g, function(ch) { + return "\\x0" + hex(ch); + }).replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { + return "\\x" + hex(ch); + }); + } + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + function describeExpected(expected2) { + var descriptions = expected2.map(describeExpectation); + var i, j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; + } + } + function describeFound(found2) { + return found2 ? '"' + literalEscape(found2) + '"' : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + function peg$parse(input, options2) { + options2 = options2 !== void 0 ? options2 : {}; + var peg$FAILED = {}; + var peg$source = options2.grammarSource; + var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body }; + var peg$startRuleFunction = peg$parsepath_spec; + var peg$e0 = peg$anyExpectation(); + var peg$e3 = peg$otherExpectation("comment"); + var peg$e4 = peg$otherExpectation("floating comment"); + var peg$e5 = peg$otherExpectation("operation"); + var peg$e6 = peg$otherExpectation("="); + var peg$f0 = function(v) { + return v; + }; + var peg$f1 = function(ops) { + return { type: "path_spec", content: ops }; + }; + var peg$f2 = function(c1, op, comment) { + return { op, comment }; + }; + var peg$f3 = function(c1, ops, c2, body) { + const comments = [c1, ...ops.map((x) => x.comment), c2].filter( + (x) => x + ); + const attribute = ops.map((x) => x.op.content.content).join(" "); + return { + type: "animation", + comments, + attribute, + content: body.content + }; + }; + var peg$f4 = function(start, b) { + return { ...b, start, type: "foreach" }; + }; + var peg$f5 = function(c1, variables, options22, c2, c3, list, c4, command) { + const comments = [c1, c2, c3, c4].filter((x) => x); + return { + type: "foreach_body", + variables, + options: options22 && options22.content, + list, + command, + comments + }; + }; + var peg$f6 = function(c1, options22, c2, body) { + const comments = [c1, c2].filter((x) => x); + return { + type: "svg_operation", + options: options22 && options22.content, + content: body, + comments + }; + }; + var peg$f7 = function(c1, c2, coord, c3, c4, x) { + return { coord: x, comment: c4 }; + }; + var peg$f8 = function(c1, c2, coord, c3, a, c5) { + const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x); + return { + type: "curve_to", + controls: a ? [coord, a.coord] : [coord], + comments + }; + }; + var peg$f9 = function() { + return { type: "line_to", command: "|-" }; + }; + var peg$f10 = function() { + return { type: "line_to", command: "-|" }; + }; + var peg$f11 = function() { + return { type: "line_to", command: "--" }; + }; + var peg$f12 = function(prefix, content) { + return { type: "coordinate", content, prefix }; + }; + var peg$f13 = function(content) { + return { type: "square_brace_group", content }; + }; + var peg$f14 = function(v) { + return { type: "unknown", content: v }; + }; + var peg$f19 = function(tok) { + return options2.isComment(tok); + }; + var peg$f20 = function(tok) { + return tok; + }; + var peg$f21 = function(tok) { + return options2.isWhitespace(tok); + }; + var peg$f22 = function(tok) { + return tok; + }; + var peg$f23 = function(c) { + return c; + }; + var peg$f24 = function(tok) { + return options2.isOperation(tok); + }; + var peg$f25 = function(tok) { + return { type: "operation", content: tok }; + }; + var peg$f26 = function(tok) { + return options2.isChar(tok, "="); + }; + var peg$f27 = function(tok) { + return tok; + }; + var peg$f28 = function(tok) { + return options2.isChar(tok, "["); + }; + var peg$f29 = function(tok) { + return tok; + }; + var peg$f30 = function(tok) { + return options2.isChar(tok, "]"); + }; + var peg$f31 = function(tok) { + return tok; + }; + var peg$f32 = function(tok) { + return options2.isChar(tok, "("); + }; + var peg$f33 = function(tok) { + return tok; + }; + var peg$f34 = function(tok) { + return options2.isChar(tok, ")"); + }; + var peg$f35 = function(tok) { + return tok; + }; + var peg$f36 = function(tok) { + return options2.isChar(tok, "+"); + }; + var peg$f37 = function(tok) { + return tok; + }; + var peg$f38 = function(tok) { + return options2.isChar(tok, "-"); + }; + var peg$f39 = function(tok) { + return tok; + }; + var peg$f40 = function(tok) { + return options2.isChar(tok, "|"); + }; + var peg$f41 = function(tok) { + return tok; + }; + var peg$f42 = function(tok) { + return options2.isChar(tok, "."); + }; + var peg$f43 = function(tok) { + return tok; + }; + var peg$f44 = function(tok) { + return options2.isChar(tok, "controls"); + }; + var peg$f45 = function(tok) { + return tok; + }; + var peg$f46 = function(tok) { + return options2.isChar(tok, "and"); + }; + var peg$f47 = function(tok) { + return tok; + }; + var peg$f48 = function(tok) { + return options2.isChar(tok, "svg"); + }; + var peg$f49 = function(tok) { + return tok; + }; + var peg$f50 = function(tok) { + return options2.isGroup(tok); + }; + var peg$f51 = function(tok) { + return tok; + }; + var peg$f52 = function(tok) { + return options2.isAnyMacro(tok); + }; + var peg$f53 = function(tok) { + return tok; + }; + var peg$f54 = function(tok) { + return options2.isChar(tok, "foreach"); + }; + var peg$f55 = function(tok) { + return tok; + }; + var peg$f56 = function(tok) { + return options2.isMacro(tok, "foreach"); + }; + var peg$f57 = function(tok) { + return tok; + }; + var peg$f58 = function(tok) { + return options2.isChar(tok, "in"); + }; + var peg$f59 = function(tok) { + return tok; + }; + var peg$f60 = function(tok) { + return options2.isChar(tok, ":"); + }; + var peg$f61 = function(tok) { + return tok; + }; + var peg$currPos = 0; + var peg$posDetailsCache = [{ line: 1, column: 1 }]; + var peg$maxFailPos = 0; + var peg$maxFailExpected = []; + var peg$silentFails = 0; + var peg$result; + if ("startRule" in options2) { + if (!(options2.startRule in peg$startRuleFunctions)) { + throw new Error(`Can't start parsing from rule "` + options2.startRule + '".'); + } + peg$startRuleFunction = peg$startRuleFunctions[options2.startRule]; + } + function peg$anyExpectation() { + return { type: "any" }; + } + function peg$endExpectation() { + return { type: "end" }; + } + function peg$otherExpectation(description) { + return { type: "other", description }; + } + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos]; + var p; + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + p++; + } + peg$posDetailsCache[pos] = details; + return details; + } + } + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos); + var endPosDetails = peg$computePosDetails(endPos); + return { + source: peg$source, + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + function peg$fail(expected2) { + if (peg$currPos < peg$maxFailPos) { + return; + } + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected2); + } + function peg$buildStructuredError(expected2, found, location2) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected2, found), + expected2, + found, + location2 + ); + } + function peg$parsepath_spec() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = peg$parsecoordinate(); + if (s3 === peg$FAILED) { + s3 = peg$parsecurve_to(); + if (s3 === peg$FAILED) { + s3 = peg$parseline_to(); + if (s3 === peg$FAILED) { + s3 = peg$parsesvg(); + if (s3 === peg$FAILED) { + s3 = peg$parseforeach(); + if (s3 === peg$FAILED) { + s3 = peg$parseoperation(); + if (s3 === peg$FAILED) { + s3 = peg$parsecomment(); + if (s3 === peg$FAILED) { + s3 = peg$parseanimation(); + if (s3 === peg$FAILED) { + s3 = peg$parseunknown(); + } + } + } + } + } + } + } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parse_(); + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parse_(); + } + s2 = peg$f0(s3); + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s1 = peg$f1(s1); + } + s0 = s1; + return s0; + } + function peg$parseanimation() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parsecolon(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = []; + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$parseoperation(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s4 = peg$f2(s2, s5, s6); + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseequals(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_comment_(); + s6 = peg$parsegroup(); + if (s6 !== peg$FAILED) { + s0 = peg$f3(s2, s3, s5, s6); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parseforeach_keyword(); + if (s1 === peg$FAILED) { + s1 = peg$parseforeach_macro(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parseforeach_body(); + if (s2 !== peg$FAILED) { + s0 = peg$f4(s1, s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_body() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + s0 = peg$currPos; + s1 = peg$parse_comment_(); + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parsein_keyword(); + if (s6 === peg$FAILED) { + s6 = peg$parsesquare_brace_group(); + } + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsein_keyword(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$parsegroup(); + if (s7 === peg$FAILED) { + s7 = peg$parsemacro(); + } + if (s7 !== peg$FAILED) { + s8 = peg$parse_comment_(); + s9 = peg$parseforeach(); + if (s9 === peg$FAILED) { + s9 = peg$parsegroup(); + if (s9 === peg$FAILED) { + s9 = peg$parsemacro(); + } + } + if (s9 !== peg$FAILED) { + s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg() { + var s0, s1, s2, s3, s4, s5; + s0 = peg$currPos; + s1 = peg$parsesvg_keyword(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsesquare_brace_group(); + if (s3 === peg$FAILED) { + s3 = null; + } + s4 = peg$parse_comment_(); + s5 = peg$parsegroup(); + if (s5 !== peg$FAILED) { + s0 = peg$f6(s2, s3, s4, s5); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecurve_to() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + s0 = peg$currPos; + s1 = peg$parsedotdot(); + if (s1 !== peg$FAILED) { + s2 = peg$parse_comment_(); + s3 = peg$parsecontrols_keyword(); + if (s3 !== peg$FAILED) { + s4 = peg$parse_comment_(); + s5 = peg$parsecoordinate(); + if (s5 !== peg$FAILED) { + s6 = peg$parse_comment_(); + s7 = peg$currPos; + s8 = peg$parseand_keyword(); + if (s8 !== peg$FAILED) { + s9 = peg$parse_comment_(); + s10 = peg$parsecoordinate(); + if (s10 !== peg$FAILED) { + s7 = peg$f7(s2, s4, s5, s6, s9, s10); + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + } else { + peg$currPos = s7; + s7 = peg$FAILED; + } + if (s7 === peg$FAILED) { + s7 = null; + } + s8 = peg$parse_comment_(); + s9 = peg$parsedotdot(); + if (s9 !== peg$FAILED) { + s0 = peg$f8(s2, s4, s5, s6, s7, s8); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseline_to() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsepipe(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f9(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parsepipe(); + if (s2 !== peg$FAILED) { + s0 = peg$f10(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseminus(); + if (s1 !== peg$FAILED) { + s2 = peg$parseminus(); + if (s2 !== peg$FAILED) { + s0 = peg$f11(); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + return s0; + } + function peg$parsecoordinate() { + var s0, s1, s2, s3, s4, s5, s6, s7; + s0 = peg$currPos; + s1 = peg$currPos; + s2 = peg$currPos; + s3 = peg$parseplus(); + if (s3 !== peg$FAILED) { + s4 = peg$parseplus(); + if (s4 === peg$FAILED) { + s4 = null; + } + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + s1 = input.substring(s1, peg$currPos); + s2 = peg$parseopen_paren(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseclose_paren(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + s3 = input.substring(s3, peg$currPos); + s4 = peg$parseclose_paren(); + if (s4 !== peg$FAILED) { + s0 = peg$f12(s1, s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesquare_brace_group() { + var s0, s1, s2, s3, s4, s5, s6; + s0 = peg$currPos; + s1 = peg$parseopen_square_brace(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$currPos; + peg$silentFails++; + s6 = peg$parseclose_square_brace(); + peg$silentFails--; + if (s6 === peg$FAILED) { + s5 = void 0; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + if (input.length > peg$currPos) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + s2 = input.substring(s2, peg$currPos); + s3 = peg$parseclose_square_brace(); + if (s3 !== peg$FAILED) { + s0 = peg$f13(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedotdot() { + var s0, s1, s2; + s0 = peg$currPos; + s1 = peg$parsedot(); + if (s1 !== peg$FAILED) { + s2 = peg$parsedot(); + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseunknown() { + var s0, s1; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s1 = peg$f14(s1); + } + s0 = s1; + return s0; + } + function peg$parsecomment() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f19(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f20(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e3); + } + } + return s0; + } + function peg$parse_() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f22(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parse_comment_() { + var s0, s1, s2, s3, s4; + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parse_(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parse_(); + } + s2 = peg$parsecomment(); + if (s2 === peg$FAILED) { + s2 = null; + } + s3 = []; + s4 = peg$parse_(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parse_(); + } + s0 = peg$f23(s2); + peg$silentFails--; + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e4); + } + return s0; + } + function peg$parseoperation() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f24(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f25(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e5); + } + } + return s0; + } + function peg$parseequals() { + var s0, s1, s2; + peg$silentFails++; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f26(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f27(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e6); + } + } + return s0; + } + function peg$parseopen_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f28(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f29(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_square_brace() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f30(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f31(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseopen_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f32(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f33(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseclose_paren() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f34(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f35(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseplus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f36(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f37(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseminus() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f38(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f39(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsepipe() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f41(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsedot() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f43(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecontrols_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f44(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f45(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseand_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f46(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f47(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsesvg_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f48(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f49(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsegroup() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f50(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f51(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsemacro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f52(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f53(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f54(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f55(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parseforeach_macro() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f56(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f57(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsein_keyword() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f58(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f59(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + function peg$parsecolon() { + var s0, s1, s2; + s0 = peg$currPos; + if (input.length > peg$currPos) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { + peg$fail(peg$e0); + } + } + if (s1 !== peg$FAILED) { + s2 = peg$f60(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s0 = peg$f61(s1); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + return s0; + } + if (!options2.isWhitespace) { + try { + Object.assign(options2, { + isChar: (node, char) => node.type === "string" && node.content === char, + isOperation: (node) => node.type === "string" && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => node.type === "whitespace" || node.type === "parbreak", + isSameLineComment: (node) => node.type === "comment" && node.sameline, + isOwnLineComment: (node) => node.type === "comment" && !node.sameline, + isComment: (node) => node.type === "comment", + isGroup: (node) => node.type === "group", + isMacro: (node, name) => node.type === "macro" && node.content === name, + isAnyMacro: (node) => node.type === "macro" + }); + } catch (e) { + console.warn("Error when initializing parser", e); + } + } + peg$result = peg$startRuleFunction(); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + return { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + }() +); +var LatexPegParser = latex_default; +var AlignEnvironmentPegParser = align_environment_default; +var ArgSpecPegParser = xparse_argspec_default; +var PgfkeysPegParser = pgfkeys_default; +var TikzPegParser = tikz_default; +var parseCache = {}; +function parse$2(str = "") { + parseCache[str] = parseCache[str] || ArgSpecPegParser.parse(str); + return parseCache[str]; +} +var BRACES_MAP = { + "*": { openMark: "", closeMark: "" }, + "{": { openMark: "{", closeMark: "}" }, + "[": { openMark: "[", closeMark: "]" }, + "(": { openMark: "(", closeMark: ")" }, + "<": { openMark: "<", closeMark: ">" } +}; +var CLOSE_BRACES = new Set( + Object.values(BRACES_MAP).map((x) => x.closeMark).filter((x) => x) +); +function bracesToOpenAndCloseMarks(braces) { + const ret = []; + for (const char of braces.split("")) { + if (CLOSE_BRACES.has(char)) { + continue; + } + const braces2 = BRACES_MAP[char]; + if (braces2 == null) { + throw new Error(`Unknown open/close mark type "${char}"`); + } + ret.push(braces2); + } + return ret; +} +function arg(args2, special) { + if (args2 == null) { + return { type: "argument", content: [], openMark: "", closeMark: "" }; + } + if (typeof args2 === "string") { + args2 = s(args2); + } + if (!Array.isArray(args2) && args2.type === "argument") { + return args2; + } + let openMark = (special == null ? void 0 : special.openMark) ?? "{"; + let closeMark = (special == null ? void 0 : special.closeMark) ?? "}"; + if (special == null ? void 0 : special.braces) { + const braces = bracesToOpenAndCloseMarks(special.braces); + if (braces[0]) { + openMark = braces[0].openMark; + closeMark = braces[0].closeMark; + } + } + if (!Array.isArray(args2)) { + args2 = [args2]; + } + return { type: "argument", content: args2, openMark, closeMark }; +} +function s(value) { + if (typeof value === "string") { + return { type: "string", content: value }; + } + return value; +} +function getDefaultExportFromCjs(x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; +} +var dist = { exports: {} }; +var create = { exports: {} }; +var append = { exports: {} }; +var config = { exports: {} }; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + exports2.default = { + END_WORD: "$", + END_WORD_REPLACER: "9a219a89-91cd-42e2-abd5-eb113af08ca8", + PERMS_MIN_LEN: 2 + }; + module2.exports = exports2["default"]; +})(config, config.exports); +var configExports = config.exports; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + exports2.default = append2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function append2(trie, letter, index2, array) { + var isEndWordLetter = letter === _config2.default.END_WORD; + var isLastLetter = index2 === array.length - 1; + if (isEndWordLetter && !isLastLetter) { + trie[_config2.default.END_WORD] = 1; + trie[_config2.default.END_WORD_REPLACER] = {}; + trie = trie[_config2.default.END_WORD_REPLACER]; + } else { + trie[letter] = trie[letter] || {}; + trie = trie[letter]; + } + if (isLastLetter) { + trie[_config2.default.END_WORD] = 1; + } + return trie; + } + module2.exports = exports2["default"]; +})(append, append.exports); +var appendExports = append.exports; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports2.default = create2; + var _append = appendExports; + var _append2 = _interopRequireDefault(_append); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function create2(input) { + if (!Array.isArray(input)) { + throw "Expected parameter Array, received " + (typeof input === "undefined" ? "undefined" : _typeof(input)); + } + var trie = input.reduce(function(accumulator, item) { + item.toLowerCase().split("").reduce(_append2.default, accumulator); + return accumulator; + }, {}); + return trie; + } + module2.exports = exports2["default"]; +})(create, create.exports); +var createExports = create.exports; +var checkPrefix = { exports: {} }; +var utils$1 = { exports: {} }; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + exports2.default = { + objectCopy: function objectCopy(obj) { + if (typeof obj === "undefined") { + return {}; + } + return JSON.parse(JSON.stringify(obj)); + }, + stringify: function stringify(obj) { + var spacer = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2; + if (typeof obj === "undefined") { + return ""; + } + return JSON.stringify(obj, null, spacer); + } + }; + module2.exports = exports2["default"]; +})(utils$1, utils$1.exports); +var utilsExports = utils$1.exports; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + exports2.default = checkPrefix2; + var _utils = utilsExports; + _interopRequireDefault(_utils); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function checkPrefix2(prefixNode, prefix) { + var input = prefix.toLowerCase().split(""); + var prefixFound = input.every(function(letter, index2) { + if (!prefixNode[letter]) { + return false; + } + return prefixNode = prefixNode[letter]; + }); + return { + prefixFound, + prefixNode + }; + } + module2.exports = exports2["default"]; +})(checkPrefix, checkPrefix.exports); +var checkPrefixExports = checkPrefix.exports; +var recursePrefix = { exports: {} }; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + exports2.default = recursePrefix2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + var pushInOrder = function pushInOrder2(word, prefixes) { + var i = 0; + while (i < prefixes.length) { + if (word < prefixes[i]) { + break; + } + i += 1; + } + prefixes.splice(i, 0, word); + return prefixes; + }; + function recursePrefix2(node, prefix, sorted) { + var prefixes = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : []; + var word = prefix; + for (var branch in node) { + var currentLetter = branch; + if (branch === _config2.default.END_WORD && typeof node[branch] === "number") { + if (sorted) { + pushInOrder(word, prefixes); + } else { + prefixes.push(word); + } + word = ""; + } else if (branch === _config2.default.END_WORD_REPLACER) { + currentLetter = _config2.default.END_WORD; + } + recursePrefix2(node[branch], prefix + currentLetter, sorted, prefixes); + } + return prefixes; + } + module2.exports = exports2["default"]; +})(recursePrefix, recursePrefix.exports); +var recursePrefixExports = recursePrefix.exports; +var recurseRandomWord = { exports: {} }; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + exports2.default = recurseRandomWord2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function recurseRandomWord2(node, prefix) { + var word = prefix; + var branches = Object.keys(node); + var branch = branches[Math.floor(Math.random() * branches.length)]; + if (branch === _config2.default.END_WORD) { + return word; + } + return recurseRandomWord2(node[branch], prefix + branch); + } + module2.exports = exports2["default"]; +})(recurseRandomWord, recurseRandomWord.exports); +var recurseRandomWordExports = recurseRandomWord.exports; +var permutations = { exports: {} }; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports2.default = permutations2; + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function permutations2(letters, trie) { + var opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : { + type: "anagram" + }; + if (typeof letters !== "string") { + throw "Permutations expects string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + var words = []; + var permute = function permute2(word, node) { + var prefix = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : ""; + var wordIsEmpty = word.length === 0; + var wordFound = words.indexOf(prefix) !== -1; + var endWordFound = node[_config2.default.END_WORD] === 1; + if (wordIsEmpty && endWordFound && !wordFound) { + words.push(prefix); + } + for (var i = 0, len = word.length; i < len; i++) { + var letter = word[i]; + if (opts.type === "sub-anagram") { + if (endWordFound && !(words.indexOf(prefix) !== -1)) { + words.push(prefix); + } + } + if (node[letter]) { + var remaining = word.substring(0, i) + word.substring(i + 1, len); + permute2(remaining, node[letter], prefix + letter, words); + } + } + return words.sort(); + }; + return permute(letters, trie); + } + module2.exports = exports2["default"]; +})(permutations, permutations.exports); +var permutationsExports = permutations.exports; +(function(module2, exports2) { + Object.defineProperty(exports2, "__esModule", { + value: true + }); + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + exports2.default = function(input) { + if (!Array.isArray(input)) { + throw "Expected parameter Array, received " + (typeof input === "undefined" ? "undefined" : _typeof(input)); + } + var trie = (0, _create2.default)([].concat(_toConsumableArray(input))); + return { + /** + * Get the generated raw trie object + */ + tree: function tree() { + return trie; + }, + /** + * Get a string representation of the trie + */ + dump: function dump() { + var spacer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + return _utils2.default.stringify(trie, spacer); + }, + /** + * Add a new word to the trie + */ + addWord: function addWord(word) { + if (typeof word !== "string" || word === "") { + throw "Expected parameter string, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var reducer = function reducer2() { + return _append2.default.apply(void 0, arguments); + }; + var input2 = word.toLowerCase().split(""); + input2.reduce(reducer, trie); + return this; + }, + /** + * Remove an existing word from the trie + */ + removeWord: function removeWord(word) { + if (typeof word !== "string" || word === "") { + throw "Expected parameter string, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var _checkPrefix = (0, _checkPrefix6.default)(trie, word), prefixFound = _checkPrefix.prefixFound, prefixNode = _checkPrefix.prefixNode; + if (prefixFound) { + delete prefixNode[_config2.default.END_WORD]; + } + return this; + }, + /** + * Check a prefix is valid + * @returns Boolean + */ + isPrefix: function isPrefix(prefix) { + if (typeof prefix !== "string") { + throw "Expected string prefix, received " + (typeof prefix === "undefined" ? "undefined" : _typeof(prefix)); + } + var _checkPrefix2 = (0, _checkPrefix6.default)(trie, prefix), prefixFound = _checkPrefix2.prefixFound; + return prefixFound; + }, + /** + * Get a list of all words in the trie with the given prefix + * @returns Array + */ + getPrefix: function getPrefix(strPrefix) { + var sorted = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + if (typeof strPrefix !== "string") { + throw "Expected string prefix, received " + (typeof strPrefix === "undefined" ? "undefined" : _typeof(strPrefix)); + } + if (typeof sorted !== "boolean") { + throw "Expected sort parameter as boolean, received " + (typeof sorted === "undefined" ? "undefined" : _typeof(sorted)); + } + if (!this.isPrefix(strPrefix)) { + return []; + } + var prefixNode = strPrefix.length ? (0, _checkPrefix6.default)(trie, strPrefix).prefixNode : trie; + return (0, _recursePrefix2.default)(prefixNode, strPrefix, sorted); + }, + /** + * Get a random word in the trie with the given prefix + * @returns Array + */ + getRandomWordWithPrefix: function getRandomWordWithPrefix(strPrefix) { + if (typeof strPrefix !== "string") { + throw "Expected string prefix, received " + (typeof strPrefix === "undefined" ? "undefined" : _typeof(strPrefix)); + } + if (!this.isPrefix(strPrefix)) { + return ""; + } + var _checkPrefix3 = (0, _checkPrefix6.default)(trie, strPrefix), prefixNode = _checkPrefix3.prefixNode; + return (0, _recurseRandomWord2.default)(prefixNode, strPrefix); + }, + /** + * Count the number of words with the given prefixSearch + * @returns Number + */ + countPrefix: function countPrefix(strPrefix) { + var prefixes = this.getPrefix(strPrefix); + return prefixes.length; + }, + /** + * Get all words in the trie + * @returns Array + */ + getWords: function getWords() { + var sorted = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; + return this.getPrefix("", sorted); + }, + /** + * Check the existence of a word in the trie + * @returns Boolean + */ + hasWord: function hasWord(word) { + if (typeof word !== "string") { + throw "Expected string word, received " + (typeof word === "undefined" ? "undefined" : _typeof(word)); + } + var _checkPrefix4 = (0, _checkPrefix6.default)(trie, word), prefixFound = _checkPrefix4.prefixFound, prefixNode = _checkPrefix4.prefixNode; + if (prefixFound) { + return prefixNode[_config2.default.END_WORD] === 1; + } + return false; + }, + /** + * Get a list of valid anagrams that can be made from the given letters + * @returns Array + */ + getAnagrams: function getAnagrams(letters) { + if (typeof letters !== "string") { + throw "Anagrams expected string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + if (letters.length < PERMS_MIN_LEN) { + throw "getAnagrams expects at least " + PERMS_MIN_LEN + " letters"; + } + return (0, _permutations2.default)(letters, trie, { + type: "anagram" + }); + }, + /** + * Get a list of all sub-anagrams that can be made from the given letters + * @returns Array + */ + getSubAnagrams: function getSubAnagrams(letters) { + if (typeof letters !== "string") { + throw "Expected string letters, received " + (typeof letters === "undefined" ? "undefined" : _typeof(letters)); + } + if (letters.length < PERMS_MIN_LEN) { + throw "getSubAnagrams expects at least " + PERMS_MIN_LEN + " letters"; + } + return (0, _permutations2.default)(letters, trie, { + type: "sub-anagram" + }); + } + }; + }; + var _create = createExports; + var _create2 = _interopRequireDefault(_create); + var _append = appendExports; + var _append2 = _interopRequireDefault(_append); + var _checkPrefix5 = checkPrefixExports; + var _checkPrefix6 = _interopRequireDefault(_checkPrefix5); + var _recursePrefix = recursePrefixExports; + var _recursePrefix2 = _interopRequireDefault(_recursePrefix); + var _recurseRandomWord = recurseRandomWordExports; + var _recurseRandomWord2 = _interopRequireDefault(_recurseRandomWord); + var _utils = utilsExports; + var _utils2 = _interopRequireDefault(_utils); + var _config = configExports; + var _config2 = _interopRequireDefault(_config); + var _permutations = permutationsExports; + var _permutations2 = _interopRequireDefault(_permutations); + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { default: obj }; + } + function _toConsumableArray(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { + arr2[i] = arr[i]; + } + return arr2; + } else { + return Array.from(arr); + } + } + var PERMS_MIN_LEN = _config2.default.PERMS_MIN_LEN; + module2.exports = exports2["default"]; +})(dist, dist.exports); +function scan(nodes, token, options2) { + const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } = options2 || {}; + if (typeof token === "string") { + token = { type: "string", content: token }; + } + for (let i = startIndex || 0; i < nodes.length; i++) { + const node = nodes[i]; + if (node.type === token.type) { + switch (node.type) { + case "comment": + case "displaymath": + case "inlinemath": + case "root": + case "parbreak": + case "whitespace": + case "verb": + case "verbatim": + case "group": + return i; + case "macro": + if (node.content === token.content) { + return i; + } + break; + case "environment": + case "mathenv": + if (printRaw(node.env) === printRaw(token.env)) { + return i; + } + break; + case "string": + if (node.content === token.content) { + return i; + } + if (allowSubstringMatches && node.content.indexOf(token.content) >= 0) { + return i; + } + break; + } + } + if (onlySkipWhitespaceAndComments && !match.whitespace(node) && !match.comment(node)) { + return null; + } + } + return null; +} +function updateRenderInfo(node, renderInfo) { + if (renderInfo != null) { + node._renderInfo = { ...node._renderInfo || {}, ...renderInfo }; + } + return node; +} +function gobbleSingleArgument(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "string" || !argSpec.type) { + throw new Error( + `argSpec must be an already-parsed argument specification, not "${JSON.stringify( + argSpec + )}"` + ); + } + let argument = null; + let currPos = startPos; + const gobbleWhitespace = argSpec.noLeadingWhitespace ? () => { + } : () => { + while (currPos < nodes.length) { + if (!match.whitespace(nodes[currPos])) { + break; + } + currPos++; + } + }; + const openMark = argSpec.openBrace || ""; + const closeMark = argSpec.closeBrace || ""; + const acceptGroup = (argSpec.type === "mandatory" || argSpec.type === "optional") && openMark === "{" && closeMark === "}"; + function findBracePositions() { + let openMarkPos = null; + if (openMark) { + openMarkPos = nodes.findIndex( + (node, i) => i >= currPos && match.string(node, openMark) + ); + if (openMarkPos < currPos) { + openMarkPos = null; + } + } + let closeMarkPos = null; + if (openMarkPos != null) { + closeMarkPos = nodes.findIndex( + (node, i) => i >= openMarkPos + 1 && match.string(node, closeMark) + ); + if (closeMarkPos < openMarkPos + 1) { + closeMarkPos = null; + } + } + return [openMarkPos, closeMarkPos]; + } + gobbleWhitespace(); + const currNode = nodes[currPos]; + if (currNode == null || match.comment(currNode) || match.parbreak(currNode)) { + return { argument, nodesRemoved: 0 }; + } + switch (argSpec.type) { + case "mandatory": + if (acceptGroup) { + let content = [currNode]; + if (match.group(currNode)) { + content = currNode.content; + } + argument = arg(content, { + openMark, + closeMark + }); + currPos++; + break; + } + case "optional": + if (acceptGroup && match.group(currNode)) { + argument = arg(currNode.content, { + openMark, + closeMark + }); + currPos++; + break; + } + if (match.string(currNode, openMark)) { + const [openMarkPos, closeMarkPos] = findBracePositions(); + if (openMarkPos != null && closeMarkPos != null) { + argument = arg(nodes.slice(openMarkPos + 1, closeMarkPos), { + openMark, + closeMark + }); + currPos = closeMarkPos + 1; + break; + } + } + break; + case "optionalStar": + case "optionalToken": + if (match.string( + currNode, + argSpec.type === "optionalStar" ? "*" : argSpec.token + )) { + argument = arg([currNode], { openMark: "", closeMark: "" }); + currPos++; + break; + } + break; + case "until": { + if (argSpec.stopTokens.length > 1) { + console.warn( + `"until" matches with multi-token stop conditions are not yet implemented` + ); + break; + } + const rawToken = argSpec.stopTokens[0]; + const stopToken = rawToken === " " ? { type: "whitespace" } : { type: "string", content: argSpec.stopTokens[0] }; + let matchPos = scan(nodes, stopToken, { + startIndex: startPos, + allowSubstringMatches: true + }); + if (matchPos != null && partialStringMatch(nodes[matchPos], stopToken)) { + console.warn( + `"until" arguments that stop at non-punctuation symbols is not yet implemented` + ); + break; + } + if (matchPos == null) { + break; + } + argument = arg(nodes.slice(startPos, matchPos), { + openMark: "", + closeMark: rawToken + }); + currPos = matchPos; + if (currPos < nodes.length) { + currPos++; + } + break; + } + default: + console.warn( + `Don't know how to find an argument of argspec type "${argSpec.type}"` + ); + } + const nodesRemoved = argument ? currPos - startPos : 0; + nodes.splice(startPos, nodesRemoved); + return { argument, nodesRemoved }; +} +function partialStringMatch(node, token) { + return match.anyString(node) && match.anyString(token) && node.content.length > token.content.length; +} +function gobbleArguments(nodes, argSpec, startPos = 0) { + if (typeof argSpec === "function") { + return argSpec(nodes, startPos); + } + if (typeof argSpec === "string") { + argSpec = parse$2(argSpec); + } + const args = []; + let nodesRemoved = 0; + for (const spec of argSpec) { + const { argument, nodesRemoved: removed } = gobbleSingleArgument( + nodes, + spec, + startPos + ); + if (argument) { + args.push(argument); + nodesRemoved += removed; + } else { + args.push(arg([], { openMark: "", closeMark: "" })); + } + } + return { args, nodesRemoved }; +} +function attachMacroArgsInArray(nodes, macros17) { + let currIndex; + const isRelevantMacro = match.createMacroMatcher(macros17); + function gobbleUntilMacro() { + while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) { + currIndex--; + } + } + currIndex = nodes.length - 1; + while (currIndex >= 0) { + gobbleUntilMacro(); + if (currIndex < 0) { + return; + } + const macroIndex = currIndex; + const macro = nodes[macroIndex]; + const macroName = macro.content; + const macroInfo2 = macros17[macroName]; + updateRenderInfo(macro, macroInfo2.renderInfo); + const signatureOrParser = macroInfo2.argumentParser || macroInfo2.signature; + if (signatureOrParser == null) { + currIndex--; + continue; + } + if (macro.args != null) { + currIndex = macroIndex - 1; + continue; + } + currIndex++; + const { args } = gobbleArguments(nodes, signatureOrParser, currIndex); + macro.args = args; + currIndex = macroIndex - 1; + } +} +parse$2("o")[0]; +function createMatchers$3() { + return { + isChar: match.string, + isTerminal: (node) => match.string(node, ";"), + isOperation: (node) => match.anyString(node) && node.content.match(/[a-zA-Z]/), + isWhitespace: (node) => match.whitespace(node) || match.parbreak(node), + isComment: match.comment, + isGroup: match.group, + isMacro: match.macro, + isAnyMacro: match.anyMacro + }; +} +var matchers = createMatchers$3(); +function parse$1(ast, options2) { + const { startRule = "path_spec" } = options2 || {}; + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return TikzPegParser.parse(ast, { + ...matchers, + startRule + }); +} +function createMatchers$2() { + return { + isChar: (node, char) => match.string(node, char), + isComma: (node) => match.string(node, ","), + isEquals: (node) => match.string(node, "="), + isWhitespace: (node) => match.whitespace(node), + isParbreak: (node) => match.parbreak(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parsePgfkeys(ast, options2) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + const { allowParenGroups = false } = options2 || {}; + ast = decorateArrayForPegjs([...ast]); + return PgfkeysPegParser.parse(ast, { + ...createMatchers$2(), + allowParenGroups + }); +} +function createMatchers$1(rowSepMacros, colSep) { + const isRowSep = match.createMacroMatcher(rowSepMacros); + return { + isRowSep, + isColSep: (node) => colSep.some((sep) => match.string(node, sep)), + isWhitespace: (node) => match.whitespace(node), + isSameLineComment: (node) => match.comment(node) && node.sameline, + isOwnLineComment: (node) => match.comment(node) && !node.sameline + }; +} +function parseAlignEnvironment(ast, colSep = ["&"], rowSepMacros = ["\\", "hline", "cr"]) { + if (!Array.isArray(ast)) { + throw new Error("You must pass an array of nodes"); + } + ast = decorateArrayForPegjs([...ast]); + return AlignEnvironmentPegParser.parse( + ast, + createMatchers$1(rowSepMacros, colSep) + ); +} +function bail(error) { + if (error) { + throw error; + } +} +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var isBuffer = function isBuffer2(obj) { + return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj); +}; +const isBuffer$1 = /* @__PURE__ */ getDefaultExportFromCjs(isBuffer); +var hasOwn = Object.prototype.hasOwnProperty; +var toStr = Object.prototype.toString; +var defineProperty = Object.defineProperty; +var gOPD = Object.getOwnPropertyDescriptor; +var isArray = function isArray2(arr) { + if (typeof Array.isArray === "function") { + return Array.isArray(arr); + } + return toStr.call(arr) === "[object Array]"; +}; +var isPlainObject$1 = function isPlainObject(obj) { + if (!obj || toStr.call(obj) !== "[object Object]") { + return false; + } + var hasOwnConstructor = hasOwn.call(obj, "constructor"); + var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf"); + if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { + return false; + } + var key; + for (key in obj) { + } + return typeof key === "undefined" || hasOwn.call(obj, key); +}; +var setProperty = function setProperty2(target, options2) { + if (defineProperty && options2.name === "__proto__") { + defineProperty(target, options2.name, { + enumerable: true, + configurable: true, + value: options2.newValue, + writable: true + }); + } else { + target[options2.name] = options2.newValue; + } +}; +var getProperty = function getProperty2(obj, name) { + if (name === "__proto__") { + if (!hasOwn.call(obj, name)) { + return void 0; + } else if (gOPD) { + return gOPD(obj, name).value; + } + } + return obj[name]; +}; +var extend = function extend2() { + var options2, name, src, copy, copyIsArray, clone; + var target = arguments[0]; + var i = 1; + var length = arguments.length; + var deep = false; + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + i = 2; + } + if (target == null || typeof target !== "object" && typeof target !== "function") { + target = {}; + } + for (; i < length; ++i) { + options2 = arguments[i]; + if (options2 != null) { + for (name in options2) { + src = getProperty(target, name); + copy = getProperty(options2, name); + if (target !== copy) { + if (deep && copy && (isPlainObject$1(copy) || (copyIsArray = isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + } else { + clone = src && isPlainObject$1(src) ? src : {}; + } + setProperty(target, { name, newValue: extend2(deep, clone, copy) }); + } else if (typeof copy !== "undefined") { + setProperty(target, { name, newValue: copy }); + } + } + } + } + } + return target; +}; +const extend$1 = /* @__PURE__ */ getDefaultExportFromCjs(extend); +function isPlainObject2(value) { + if (typeof value !== "object" || value === null) { + return false; + } + const prototype = Object.getPrototypeOf(value); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); +} +function trough() { + const fns = []; + const pipeline = { run, use }; + return pipeline; + function run(...values) { + let middlewareIndex = -1; + const callback = values.pop(); + if (typeof callback !== "function") { + throw new TypeError("Expected function as last argument, not " + callback); + } + next(null, ...values); + function next(error, ...output) { + const fn = fns[++middlewareIndex]; + let index2 = -1; + if (error) { + callback(error); + return; + } + while (++index2 < values.length) { + if (output[index2] === null || output[index2] === void 0) { + output[index2] = values[index2]; + } + } + values = output; + if (fn) { + wrap(fn, next)(...output); + } else { + callback(null, ...output); + } + } + } + function use(middelware) { + if (typeof middelware !== "function") { + throw new TypeError( + "Expected `middelware` to be a function, not " + middelware + ); + } + fns.push(middelware); + return pipeline; + } +} +function wrap(middleware, callback) { + let called; + return wrapped; + function wrapped(...parameters) { + const fnExpectsCallback = middleware.length > parameters.length; + let result; + if (fnExpectsCallback) { + parameters.push(done); + } + try { + result = middleware.apply(this, parameters); + } catch (error) { + const exception = ( + /** @type {Error} */ + error + ); + if (fnExpectsCallback && called) { + throw exception; + } + return done(exception); + } + if (!fnExpectsCallback) { + if (result instanceof Promise) { + result.then(then, done); + } else if (result instanceof Error) { + done(result); + } else { + then(result); + } + } + } + function done(error, ...output) { + if (!called) { + called = true; + callback(error, ...output); + } + } + function then(value) { + done(null, value); + } +} +function stringifyPosition(value) { + if (!value || typeof value !== "object") { + return ""; + } + if ("position" in value || "type" in value) { + return position(value.position); + } + if ("start" in value || "end" in value) { + return position(value); + } + if ("line" in value || "column" in value) { + return point(value); + } + return ""; +} +function point(point2) { + return index(point2 && point2.line) + ":" + index(point2 && point2.column); +} +function position(pos) { + return point(pos && pos.start) + "-" + point(pos && pos.end); +} +function index(value) { + return value && typeof value === "number" ? value : 1; +} +class VFileMessage extends Error { + /** + * Create a message for `reason` at `place` from `origin`. + * + * When an error is passed in as `reason`, the `stack` is copied. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * + * > 👉 **Note**: you should use markdown. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns + * Instance of `VFileMessage`. + */ + // To do: next major: expose `undefined` everywhere instead of `null`. + constructor(reason, place, origin) { + const parts = [null, null]; + let position2 = { + // @ts-expect-error: we always follows the structure of `position`. + start: { line: null, column: null }, + // @ts-expect-error: " + end: { line: null, column: null } + }; + super(); + if (typeof place === "string") { + origin = place; + place = void 0; + } + if (typeof origin === "string") { + const index2 = origin.indexOf(":"); + if (index2 === -1) { + parts[1] = origin; + } else { + parts[0] = origin.slice(0, index2); + parts[1] = origin.slice(index2 + 1); + } + } + if (place) { + if ("type" in place || "position" in place) { + if (place.position) { + position2 = place.position; + } + } else if ("start" in place || "end" in place) { + position2 = place; + } else if ("line" in place || "column" in place) { + position2.start = place; + } + } + this.name = stringifyPosition(place) || "1:1"; + this.message = typeof reason === "object" ? reason.message : reason; + this.stack = ""; + if (typeof reason === "object" && reason.stack) { + this.stack = reason.stack; + } + this.reason = this.message; + this.fatal; + this.line = position2.start.line; + this.column = position2.start.column; + this.position = position2; + this.source = parts[0]; + this.ruleId = parts[1]; + this.file; + this.actual; + this.expected; + this.url; + this.note; + } +} +VFileMessage.prototype.file = ""; +VFileMessage.prototype.name = ""; +VFileMessage.prototype.reason = ""; +VFileMessage.prototype.message = ""; +VFileMessage.prototype.stack = ""; +VFileMessage.prototype.fatal = null; +VFileMessage.prototype.column = null; +VFileMessage.prototype.line = null; +VFileMessage.prototype.source = null; +VFileMessage.prototype.ruleId = null; +VFileMessage.prototype.position = null; +const path = { basename, dirname, extname, join: join$1, sep: "/" }; +function basename(path2, ext) { + if (ext !== void 0 && typeof ext !== "string") { + throw new TypeError('"ext" argument must be a string'); + } + assertPath$1(path2); + let start = 0; + let end = -1; + let index2 = path2.length; + let seenNonSlash; + if (ext === void 0 || ext.length === 0 || ext.length > path2.length) { + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else if (end < 0) { + seenNonSlash = true; + end = index2 + 1; + } + } + return end < 0 ? "" : path2.slice(start, end); + } + if (ext === path2) { + return ""; + } + let firstNonSlashEnd = -1; + let extIndex = ext.length - 1; + while (index2--) { + if (path2.charCodeAt(index2) === 47) { + if (seenNonSlash) { + start = index2 + 1; + break; + } + } else { + if (firstNonSlashEnd < 0) { + seenNonSlash = true; + firstNonSlashEnd = index2 + 1; + } + if (extIndex > -1) { + if (path2.charCodeAt(index2) === ext.charCodeAt(extIndex--)) { + if (extIndex < 0) { + end = index2; + } + } else { + extIndex = -1; + end = firstNonSlashEnd; + } + } + } + } + if (start === end) { + end = firstNonSlashEnd; + } else if (end < 0) { + end = path2.length; + } + return path2.slice(start, end); +} +function dirname(path2) { + assertPath$1(path2); + if (path2.length === 0) { + return "."; + } + let end = -1; + let index2 = path2.length; + let unmatchedSlash; + while (--index2) { + if (path2.charCodeAt(index2) === 47) { + if (unmatchedSlash) { + end = index2; + break; + } + } else if (!unmatchedSlash) { + unmatchedSlash = true; + } + } + return end < 0 ? path2.charCodeAt(0) === 47 ? "/" : "." : end === 1 && path2.charCodeAt(0) === 47 ? "//" : path2.slice(0, end); +} +function extname(path2) { + assertPath$1(path2); + let index2 = path2.length; + let end = -1; + let startPart = 0; + let startDot = -1; + let preDotState = 0; + let unmatchedSlash; + while (index2--) { + const code = path2.charCodeAt(index2); + if (code === 47) { + if (unmatchedSlash) { + startPart = index2 + 1; + break; + } + continue; + } + if (end < 0) { + unmatchedSlash = true; + end = index2 + 1; + } + if (code === 46) { + if (startDot < 0) { + startDot = index2; + } else if (preDotState !== 1) { + preDotState = 1; + } + } else if (startDot > -1) { + preDotState = -1; + } + } + if (startDot < 0 || end < 0 || // We saw a non-dot character immediately before the dot. + preDotState === 0 || // The (right-most) trimmed path component is exactly `..`. + preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { + return ""; + } + return path2.slice(startDot, end); +} +function join$1(...segments) { + let index2 = -1; + let joined; + while (++index2 < segments.length) { + assertPath$1(segments[index2]); + if (segments[index2]) { + joined = joined === void 0 ? segments[index2] : joined + "/" + segments[index2]; + } + } + return joined === void 0 ? "." : normalize(joined); +} +function normalize(path2) { + assertPath$1(path2); + const absolute = path2.charCodeAt(0) === 47; + let value = normalizeString(path2, !absolute); + if (value.length === 0 && !absolute) { + value = "."; + } + if (value.length > 0 && path2.charCodeAt(path2.length - 1) === 47) { + value += "/"; + } + return absolute ? "/" + value : value; +} +function normalizeString(path2, allowAboveRoot) { + let result = ""; + let lastSegmentLength = 0; + let lastSlash = -1; + let dots = 0; + let index2 = -1; + let code; + let lastSlashIndex; + while (++index2 <= path2.length) { + if (index2 < path2.length) { + code = path2.charCodeAt(index2); + } else if (code === 47) { + break; + } else { + code = 47; + } + if (code === 47) { + if (lastSlash === index2 - 1 || dots === 1) + ; + else if (lastSlash !== index2 - 1 && dots === 2) { + if (result.length < 2 || lastSegmentLength !== 2 || result.charCodeAt(result.length - 1) !== 46 || result.charCodeAt(result.length - 2) !== 46) { + if (result.length > 2) { + lastSlashIndex = result.lastIndexOf("/"); + if (lastSlashIndex !== result.length - 1) { + if (lastSlashIndex < 0) { + result = ""; + lastSegmentLength = 0; + } else { + result = result.slice(0, lastSlashIndex); + lastSegmentLength = result.length - 1 - result.lastIndexOf("/"); + } + lastSlash = index2; + dots = 0; + continue; + } + } else if (result.length > 0) { + result = ""; + lastSegmentLength = 0; + lastSlash = index2; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + result = result.length > 0 ? result + "/.." : ".."; + lastSegmentLength = 2; + } + } else { + if (result.length > 0) { + result += "/" + path2.slice(lastSlash + 1, index2); + } else { + result = path2.slice(lastSlash + 1, index2); + } + lastSegmentLength = index2 - lastSlash - 1; + } + lastSlash = index2; + dots = 0; + } else if (code === 46 && dots > -1) { + dots++; + } else { + dots = -1; + } + } + return result; +} +function assertPath$1(path2) { + if (typeof path2 !== "string") { + throw new TypeError( + "Path must be a string. Received " + JSON.stringify(path2) + ); + } +} +const proc = { cwd }; +function cwd() { + return "/"; +} +function isUrl(fileUrlOrPath) { + return fileUrlOrPath !== null && typeof fileUrlOrPath === "object" && // @ts-expect-error: indexable. + fileUrlOrPath.href && // @ts-expect-error: indexable. + fileUrlOrPath.origin; +} +function urlToPath(path2) { + if (typeof path2 === "string") { + path2 = new URL(path2); + } else if (!isUrl(path2)) { + const error = new TypeError( + 'The "path" argument must be of type string or an instance of URL. Received `' + path2 + "`" + ); + error.code = "ERR_INVALID_ARG_TYPE"; + throw error; + } + if (path2.protocol !== "file:") { + const error = new TypeError("The URL must be of scheme file"); + error.code = "ERR_INVALID_URL_SCHEME"; + throw error; + } + return getPathFromURLPosix(path2); +} +function getPathFromURLPosix(url) { + if (url.hostname !== "") { + const error = new TypeError( + 'File URL host must be "localhost" or empty on darwin' + ); + error.code = "ERR_INVALID_FILE_URL_HOST"; + throw error; + } + const pathname = url.pathname; + let index2 = -1; + while (++index2 < pathname.length) { + if (pathname.charCodeAt(index2) === 37 && pathname.charCodeAt(index2 + 1) === 50) { + const third = pathname.charCodeAt(index2 + 2); + if (third === 70 || third === 102) { + const error = new TypeError( + "File URL path must not include encoded / characters" + ); + error.code = "ERR_INVALID_FILE_URL_PATH"; + throw error; + } + } + } + return decodeURIComponent(pathname); +} +const order = ["history", "path", "basename", "stem", "extname", "dirname"]; +class VFile { + /** + * Create a new virtual file. + * + * `options` is treated as: + * + * * `string` or `Buffer` — `{value: options}` + * * `URL` — `{path: options}` + * * `VFile` — shallow copies its data over to the new file + * * `object` — all fields are shallow copied over to the new file + * + * Path related fields are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * You cannot set `dirname` or `extname` without setting either `history`, + * `path`, `basename`, or `stem` too. + * + * @param {Compatible | null | undefined} [value] + * File value. + * @returns + * New instance. + */ + constructor(value) { + let options2; + if (!value) { + options2 = {}; + } else if (typeof value === "string" || buffer(value)) { + options2 = { value }; + } else if (isUrl(value)) { + options2 = { path: value }; + } else { + options2 = value; + } + this.data = {}; + this.messages = []; + this.history = []; + this.cwd = proc.cwd(); + this.value; + this.stored; + this.result; + this.map; + let index2 = -1; + while (++index2 < order.length) { + const prop2 = order[index2]; + if (prop2 in options2 && options2[prop2] !== void 0 && options2[prop2] !== null) { + this[prop2] = prop2 === "history" ? [...options2[prop2]] : options2[prop2]; + } + } + let prop; + for (prop in options2) { + if (!order.includes(prop)) { + this[prop] = options2[prop]; + } + } + } + /** + * Get the full path (example: `'~/index.min.js'`). + * + * @returns {string} + */ + get path() { + return this.history[this.history.length - 1]; + } + /** + * Set the full path (example: `'~/index.min.js'`). + * + * Cannot be nullified. + * You can set a file URL (a `URL` object with a `file:` protocol) which will + * be turned into a path with `url.fileURLToPath`. + * + * @param {string | URL} path + */ + set path(path2) { + if (isUrl(path2)) { + path2 = urlToPath(path2); + } + assertNonEmpty(path2, "path"); + if (this.path !== path2) { + this.history.push(path2); + } + } + /** + * Get the parent path (example: `'~'`). + */ + get dirname() { + return typeof this.path === "string" ? path.dirname(this.path) : void 0; + } + /** + * Set the parent path (example: `'~'`). + * + * Cannot be set if there’s no `path` yet. + */ + set dirname(dirname2) { + assertPath(this.basename, "dirname"); + this.path = path.join(dirname2 || "", this.basename); + } + /** + * Get the basename (including extname) (example: `'index.min.js'`). + */ + get basename() { + return typeof this.path === "string" ? path.basename(this.path) : void 0; + } + /** + * Set basename (including extname) (`'index.min.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set basename(basename2) { + assertNonEmpty(basename2, "basename"); + assertPart(basename2, "basename"); + this.path = path.join(this.dirname || "", basename2); + } + /** + * Get the extname (including dot) (example: `'.js'`). + */ + get extname() { + return typeof this.path === "string" ? path.extname(this.path) : void 0; + } + /** + * Set the extname (including dot) (example: `'.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be set if there’s no `path` yet. + */ + set extname(extname2) { + assertPart(extname2, "extname"); + assertPath(this.dirname, "extname"); + if (extname2) { + if (extname2.charCodeAt(0) !== 46) { + throw new Error("`extname` must start with `.`"); + } + if (extname2.includes(".", 1)) { + throw new Error("`extname` cannot contain multiple dots"); + } + } + this.path = path.join(this.dirname, this.stem + (extname2 || "")); + } + /** + * Get the stem (basename w/o extname) (example: `'index.min'`). + */ + get stem() { + return typeof this.path === "string" ? path.basename(this.path, this.extname) : void 0; + } + /** + * Set the stem (basename w/o extname) (example: `'index.min'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set stem(stem) { + assertNonEmpty(stem, "stem"); + assertPart(stem, "stem"); + this.path = path.join(this.dirname || "", stem + (this.extname || "")); + } + /** + * Serialize the file. + * + * @param {BufferEncoding | null | undefined} [encoding='utf8'] + * Character encoding to understand `value` as when it’s a `Buffer` + * (default: `'utf8'`). + * @returns {string} + * Serialized file. + */ + toString(encoding) { + return (this.value || "").toString(encoding || void 0); + } + /** + * Create a warning message associated with the file. + * + * Its `fatal` is set to `false` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + message(reason, place, origin) { + const message = new VFileMessage(reason, place, origin); + if (this.path) { + message.name = this.path + ":" + message.name; + message.file = this.path; + } + message.fatal = false; + this.messages.push(message); + return message; + } + /** + * Create an info message associated with the file. + * + * Its `fatal` is set to `null` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + info(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = null; + return message; + } + /** + * Create a fatal error associated with the file. + * + * Its `fatal` is set to `true` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * > 👉 **Note**: a fatal error means that a file is no longer processable. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {never} + * Message. + * @throws {VFileMessage} + * Message. + */ + fail(reason, place, origin) { + const message = this.message(reason, place, origin); + message.fatal = true; + throw message; + } +} +function assertPart(part, name) { + if (part && part.includes(path.sep)) { + throw new Error( + "`" + name + "` cannot be a path: did not expect `" + path.sep + "`" + ); + } +} +function assertNonEmpty(part, name) { + if (!part) { + throw new Error("`" + name + "` cannot be empty"); + } +} +function assertPath(path2, name) { + if (!path2) { + throw new Error("Setting `" + name + "` requires `path` to be set too"); + } +} +function buffer(value) { + return isBuffer$1(value); +} +const unified = base().freeze(); +const own = {}.hasOwnProperty; +function base() { + const transformers = trough(); + const attachers = []; + let namespace = {}; + let frozen; + let freezeIndex = -1; + processor.data = data; + processor.Parser = void 0; + processor.Compiler = void 0; + processor.freeze = freeze; + processor.attachers = attachers; + processor.use = use; + processor.parse = parse2; + processor.stringify = stringify; + processor.run = run; + processor.runSync = runSync; + processor.process = process; + processor.processSync = processSync; + return processor; + function processor() { + const destination = base(); + let index2 = -1; + while (++index2 < attachers.length) { + destination.use(...attachers[index2]); + } + destination.data(extend$1(true, {}, namespace)); + return destination; + } + function data(key, value) { + if (typeof key === "string") { + if (arguments.length === 2) { + assertUnfrozen("data", frozen); + namespace[key] = value; + return processor; + } + return own.call(namespace, key) && namespace[key] || null; + } + if (key) { + assertUnfrozen("data", frozen); + namespace = key; + return processor; + } + return namespace; + } + function freeze() { + if (frozen) { + return processor; + } + while (++freezeIndex < attachers.length) { + const [attacher, ...options2] = attachers[freezeIndex]; + if (options2[0] === false) { + continue; + } + if (options2[0] === true) { + options2[0] = void 0; + } + const transformer = attacher.call(processor, ...options2); + if (typeof transformer === "function") { + transformers.use(transformer); + } + } + frozen = true; + freezeIndex = Number.POSITIVE_INFINITY; + return processor; + } + function use(value, ...options2) { + let settings; + assertUnfrozen("use", frozen); + if (value === null || value === void 0) + ; + else if (typeof value === "function") { + addPlugin(value, ...options2); + } else if (typeof value === "object") { + if (Array.isArray(value)) { + addList(value); + } else { + addPreset(value); + } + } else { + throw new TypeError("Expected usable value, not `" + value + "`"); + } + if (settings) { + namespace.settings = Object.assign(namespace.settings || {}, settings); + } + return processor; + function add(value2) { + if (typeof value2 === "function") { + addPlugin(value2); + } else if (typeof value2 === "object") { + if (Array.isArray(value2)) { + const [plugin, ...options3] = value2; + addPlugin(plugin, ...options3); + } else { + addPreset(value2); + } + } else { + throw new TypeError("Expected usable value, not `" + value2 + "`"); + } + } + function addPreset(result) { + addList(result.plugins); + if (result.settings) { + settings = Object.assign(settings || {}, result.settings); + } + } + function addList(plugins) { + let index2 = -1; + if (plugins === null || plugins === void 0) + ; + else if (Array.isArray(plugins)) { + while (++index2 < plugins.length) { + const thing = plugins[index2]; + add(thing); + } + } else { + throw new TypeError("Expected a list of plugins, not `" + plugins + "`"); + } + } + function addPlugin(plugin, value2) { + let index2 = -1; + let entry; + while (++index2 < attachers.length) { + if (attachers[index2][0] === plugin) { + entry = attachers[index2]; + break; + } + } + if (entry) { + if (isPlainObject2(entry[1]) && isPlainObject2(value2)) { + value2 = extend$1(true, entry[1], value2); + } + entry[1] = value2; + } else { + attachers.push([...arguments]); + } + } + } + function parse2(doc) { + processor.freeze(); + const file = vfile(doc); + const Parser = processor.Parser; + assertParser("parse", Parser); + if (newable(Parser, "parse")) { + return new Parser(String(file), file).parse(); + } + return Parser(String(file), file); + } + function stringify(node, doc) { + processor.freeze(); + const file = vfile(doc); + const Compiler = processor.Compiler; + assertCompiler("stringify", Compiler); + assertNode(node); + if (newable(Compiler, "compile")) { + return new Compiler(node, file).compile(); + } + return Compiler(node, file); + } + function run(node, doc, callback) { + assertNode(node); + processor.freeze(); + if (!callback && typeof doc === "function") { + callback = doc; + doc = void 0; + } + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + transformers.run(node, vfile(doc), done); + function done(error, tree, file) { + tree = tree || node; + if (error) { + reject(error); + } else if (resolve) { + resolve(tree); + } else { + callback(null, tree, file); + } + } + } + } + function runSync(node, file) { + let result; + let complete; + processor.run(node, file, done); + assertDone("runSync", "run", complete); + return result; + function done(error, tree) { + bail(error); + result = tree; + complete = true; + } + } + function process(doc, callback) { + processor.freeze(); + assertParser("process", processor.Parser); + assertCompiler("process", processor.Compiler); + if (!callback) { + return new Promise(executor); + } + executor(null, callback); + function executor(resolve, reject) { + const file = vfile(doc); + processor.run(processor.parse(file), file, (error, tree, file2) => { + if (error || !tree || !file2) { + done(error); + } else { + const result = processor.stringify(tree, file2); + if (result === void 0 || result === null) + ; + else if (looksLikeAVFileValue(result)) { + file2.value = result; + } else { + file2.result = result; + } + done(error, file2); + } + }); + function done(error, file2) { + if (error || !file2) { + reject(error); + } else if (resolve) { + resolve(file2); + } else { + callback(null, file2); + } + } + } + } + function processSync(doc) { + let complete; + processor.freeze(); + assertParser("processSync", processor.Parser); + assertCompiler("processSync", processor.Compiler); + const file = vfile(doc); + processor.process(file, done); + assertDone("processSync", "process", complete); + return file; + function done(error) { + complete = true; + bail(error); + } + } +} +function newable(value, name) { + return typeof value === "function" && // Prototypes do exist. + // type-coverage:ignore-next-line + value.prototype && // A function with keys in its prototype is probably a constructor. + // Classes’ prototype methods are not enumerable, so we check if some value + // exists in the prototype. + // type-coverage:ignore-next-line + (keys(value.prototype) || name in value.prototype); +} +function keys(value) { + let key; + for (key in value) { + if (own.call(value, key)) { + return true; + } + } + return false; +} +function assertParser(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Parser`"); + } +} +function assertCompiler(name, value) { + if (typeof value !== "function") { + throw new TypeError("Cannot `" + name + "` without `Compiler`"); + } +} +function assertUnfrozen(name, frozen) { + if (frozen) { + throw new Error( + "Cannot call `" + name + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`." + ); + } +} +function assertNode(node) { + if (!isPlainObject2(node) || typeof node.type !== "string") { + throw new TypeError("Expected node, got `" + node + "`"); + } +} +function assertDone(name, asyncName, complete) { + if (!complete) { + throw new Error( + "`" + name + "` finished async. Use `" + asyncName + "` instead" + ); + } +} +function vfile(value) { + return looksLikeAVFile(value) ? value : new VFile(value); +} +function looksLikeAVFile(value) { + return Boolean( + value && typeof value === "object" && "message" in value && "messages" in value + ); +} +function looksLikeAVFileValue(value) { + return typeof value === "string" || isBuffer$1(value); +} +function splitOnCondition(nodes, splitFunc = () => false, options2) { + if (!Array.isArray(nodes)) { + throw new Error(`Can only split an Array, not ${nodes}`); + } + const { onlySplitOnFirstOccurrence = false } = options2 || {}; + const splitIndices = []; + for (let i = 0; i < nodes.length; i++) { + if (splitFunc(nodes[i])) { + splitIndices.push(i); + if (onlySplitOnFirstOccurrence) { + break; + } + } + } + if (splitIndices.length === 0) { + return { segments: [nodes], separators: [] }; + } + let separators = splitIndices.map((i) => nodes[i]); + let segments = splitIndices.map((splitEnd, i) => { + const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1; + return nodes.slice(splitStart, splitEnd); + }); + segments.push( + nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length) + ); + return { segments, separators }; +} +function splitOnMacro(ast, macroName) { + if (typeof macroName === "string") { + macroName = [macroName]; + } + if (!Array.isArray(macroName)) { + throw new Error("Type coercion failed"); + } + const isSeparator = match.createMacroMatcher(macroName); + const { segments, separators } = splitOnCondition(ast, isSeparator); + return { segments, macros: separators }; +} +function lastSignificantNodeIndex(nodes, parbreaksAreInsignificant) { + for (let i = nodes.length - 1; i >= 0; i--) { + const node = nodes[i]; + if (match.whitespace(node) || match.comment(node) || parbreaksAreInsignificant && match.parbreak(node)) { + continue; + } + return i; + } + return void 0; +} +var colorString$1 = { exports: {} }; +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; +var simpleSwizzle = { exports: {} }; +var isArrayish$1 = function isArrayish(obj) { + if (!obj || typeof obj === "string") { + return false; + } + return obj instanceof Array || Array.isArray(obj) || obj.length >= 0 && (obj.splice instanceof Function || Object.getOwnPropertyDescriptor(obj, obj.length - 1) && obj.constructor.name !== "String"); +}; +var isArrayish2 = isArrayish$1; +var concat = Array.prototype.concat; +var slice = Array.prototype.slice; +var swizzle$1 = simpleSwizzle.exports = function swizzle(args) { + var results = []; + for (var i = 0, len = args.length; i < len; i++) { + var arg2 = args[i]; + if (isArrayish2(arg2)) { + results = concat.call(results, slice.call(arg2)); + } else { + results.push(arg2); + } + } + return results; +}; +swizzle$1.wrap = function(fn) { + return function() { + return fn(swizzle$1(arguments)); + }; +}; +var simpleSwizzleExports = simpleSwizzle.exports; +var colorNames = colorName; +var swizzle2 = simpleSwizzleExports; +var hasOwnProperty = Object.hasOwnProperty; +var reverseNames = /* @__PURE__ */ Object.create(null); +for (var name in colorNames) { + if (hasOwnProperty.call(colorNames, name)) { + reverseNames[colorNames[name]] = name; + } +} +var cs = colorString$1.exports = { + to: {}, + get: {} +}; +cs.get = function(string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case "hsl": + val = cs.get.hsl(string); + model = "hsl"; + break; + case "hwb": + val = cs.get.hwb(string); + model = "hwb"; + break; + default: + val = cs.get.rgb(string); + model = "rgb"; + break; + } + if (!val) { + return null; + } + return { model, value: val }; +}; +cs.get.rgb = function(string) { + if (!string) { + return null; + } + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; + var keyword = /^(\w+)$/; + var rgb = [0, 0, 0, 1]; + var match2; + var i; + var hexAlpha; + if (match2 = string.match(hex)) { + hexAlpha = match2[2]; + match2 = match2[1]; + for (i = 0; i < 3; i++) { + var i2 = i * 2; + rgb[i] = parseInt(match2.slice(i2, i2 + 2), 16); + } + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match2 = string.match(abbr)) { + match2 = match2[1]; + hexAlpha = match2[3]; + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match2[i] + match2[i], 16); + } + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match2 = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match2[i + 1], 0); + } + if (match2[4]) { + if (match2[5]) { + rgb[3] = parseFloat(match2[4]) * 0.01; + } else { + rgb[3] = parseFloat(match2[4]); + } + } + } else if (match2 = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match2[i + 1]) * 2.55); + } + if (match2[4]) { + if (match2[5]) { + rgb[3] = parseFloat(match2[4]) * 0.01; + } else { + rgb[3] = parseFloat(match2[4]); + } + } + } else if (match2 = string.match(keyword)) { + if (match2[1] === "transparent") { + return [0, 0, 0, 0]; + } + if (!hasOwnProperty.call(colorNames, match2[1])) { + return null; + } + rgb = colorNames[match2[1]]; + rgb[3] = 1; + return rgb; + } else { + return null; + } + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + return rgb; +}; +cs.get.hsl = function(string) { + if (!string) { + return null; + } + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match2 = string.match(hsl); + if (match2) { + var alpha = parseFloat(match2[4]); + var h = (parseFloat(match2[1]) % 360 + 360) % 360; + var s2 = clamp(parseFloat(match2[2]), 0, 100); + var l = clamp(parseFloat(match2[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, s2, l, a]; + } + return null; +}; +cs.get.hwb = function(string) { + if (!string) { + return null; + } + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; + var match2 = string.match(hwb); + if (match2) { + var alpha = parseFloat(match2[4]); + var h = (parseFloat(match2[1]) % 360 + 360) % 360; + var w = clamp(parseFloat(match2[2]), 0, 100); + var b = clamp(parseFloat(match2[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + return null; +}; +cs.to.hex = function() { + var rgba = swizzle2(arguments); + return "#" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (rgba[3] < 1 ? hexDouble(Math.round(rgba[3] * 255)) : ""); +}; +cs.to.rgb = function() { + var rgba = swizzle2(arguments); + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ")" : "rgba(" + Math.round(rgba[0]) + ", " + Math.round(rgba[1]) + ", " + Math.round(rgba[2]) + ", " + rgba[3] + ")"; +}; +cs.to.rgb.percent = function() { + var rgba = swizzle2(arguments); + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + return rgba.length < 4 || rgba[3] === 1 ? "rgb(" + r + "%, " + g + "%, " + b + "%)" : "rgba(" + r + "%, " + g + "%, " + b + "%, " + rgba[3] + ")"; +}; +cs.to.hsl = function() { + var hsla = swizzle2(arguments); + return hsla.length < 4 || hsla[3] === 1 ? "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)" : "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, " + hsla[3] + ")"; +}; +cs.to.hwb = function() { + var hwba = swizzle2(arguments); + var a = ""; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ", " + hwba[3]; + } + return "hwb(" + hwba[0] + ", " + hwba[1] + "%, " + hwba[2] + "%" + a + ")"; +}; +cs.to.keyword = function(rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; +function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); +} +function hexDouble(num) { + var str = Math.round(num).toString(16).toUpperCase(); + return str.length < 2 ? "0" + str : str; +} +var colorStringExports = colorString$1.exports; +const cssKeywords = colorName; +const reverseKeywords = {}; +for (const key of Object.keys(cssKeywords)) { + reverseKeywords[cssKeywords[key]] = key; +} +const convert$2 = { + rgb: { channels: 3, labels: "rgb" }, + hsl: { channels: 3, labels: "hsl" }, + hsv: { channels: 3, labels: "hsv" }, + hwb: { channels: 3, labels: "hwb" }, + cmyk: { channels: 4, labels: "cmyk" }, + xyz: { channels: 3, labels: "xyz" }, + lab: { channels: 3, labels: "lab" }, + lch: { channels: 3, labels: "lch" }, + hex: { channels: 1, labels: ["hex"] }, + keyword: { channels: 1, labels: ["keyword"] }, + ansi16: { channels: 1, labels: ["ansi16"] }, + ansi256: { channels: 1, labels: ["ansi256"] }, + hcg: { channels: 3, labels: ["h", "c", "g"] }, + apple: { channels: 3, labels: ["r16", "g16", "b16"] }, + gray: { channels: 1, labels: ["gray"] } +}; +var conversions$2 = convert$2; +for (const model of Object.keys(convert$2)) { + if (!("channels" in convert$2[model])) { + throw new Error("missing channels property: " + model); + } + if (!("labels" in convert$2[model])) { + throw new Error("missing channel labels property: " + model); + } + if (convert$2[model].labels.length !== convert$2[model].channels) { + throw new Error("channel and label counts mismatch: " + model); + } + const { channels, labels } = convert$2[model]; + delete convert$2[model].channels; + delete convert$2[model].labels; + Object.defineProperty(convert$2[model], "channels", { value: channels }); + Object.defineProperty(convert$2[model], "labels", { value: labels }); +} +convert$2.rgb.hsl = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s2; + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + h = Math.min(h * 60, 360); + if (h < 0) { + h += 360; + } + const l = (min + max) / 2; + if (max === min) { + s2 = 0; + } else if (l <= 0.5) { + s2 = delta / (max + min); + } else { + s2 = delta / (2 - max - min); + } + return [h, s2 * 100, l * 100]; +}; +convert$2.rgb.hsv = function(rgb) { + let rdif; + let gdif; + let bdif; + let h; + let s2; + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const v = Math.max(r, g, b); + const diff = v - Math.min(r, g, b); + const diffc = function(c) { + return (v - c) / 6 / diff + 1 / 2; + }; + if (diff === 0) { + h = 0; + s2 = 0; + } else { + s2 = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = 1 / 3 + rdif - bdif; + } else if (b === v) { + h = 2 / 3 + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + return [ + h * 360, + s2 * 100, + v * 100 + ]; +}; +convert$2.rgb.hwb = function(rgb) { + const r = rgb[0]; + const g = rgb[1]; + let b = rgb[2]; + const h = convert$2.rgb.hsl(rgb)[0]; + const w = 1 / 255 * Math.min(r, Math.min(g, b)); + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + return [h, w * 100, b * 100]; +}; +convert$2.rgb.cmyk = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const k = Math.min(1 - r, 1 - g, 1 - b); + const c = (1 - r - k) / (1 - k) || 0; + const m = (1 - g - k) / (1 - k) || 0; + const y = (1 - b - k) / (1 - k) || 0; + return [c * 100, m * 100, y * 100, k * 100]; +}; +function comparativeDistance(x, y) { + return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2; +} +convert$2.rgb.keyword = function(rgb) { + const reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + let currentClosestDistance = Infinity; + let currentClosestKeyword; + for (const keyword of Object.keys(cssKeywords)) { + const value = cssKeywords[keyword]; + const distance = comparativeDistance(rgb, value); + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + return currentClosestKeyword; +}; +convert$2.keyword.rgb = function(keyword) { + return cssKeywords[keyword]; +}; +convert$2.rgb.xyz = function(rgb) { + let r = rgb[0] / 255; + let g = rgb[1] / 255; + let b = rgb[2] / 255; + r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92; + g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92; + b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92; + const x = r * 0.4124 + g * 0.3576 + b * 0.1805; + const y = r * 0.2126 + g * 0.7152 + b * 0.0722; + const z = r * 0.0193 + g * 0.1192 + b * 0.9505; + return [x * 100, y * 100, z * 100]; +}; +convert$2.rgb.lab = function(rgb) { + const xyz = convert$2.rgb.xyz(rgb); + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; +}; +convert$2.hsl.rgb = function(hsl) { + const h = hsl[0] / 360; + const s2 = hsl[1] / 100; + const l = hsl[2] / 100; + let t2; + let t3; + let val; + if (s2 === 0) { + val = l * 255; + return [val, val, val]; + } + if (l < 0.5) { + t2 = l * (1 + s2); + } else { + t2 = l + s2 - l * s2; + } + const t1 = 2 * l - t2; + const rgb = [0, 0, 0]; + for (let i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + rgb[i] = val * 255; + } + return rgb; +}; +convert$2.hsl.hsv = function(hsl) { + const h = hsl[0]; + let s2 = hsl[1] / 100; + let l = hsl[2] / 100; + let smin = s2; + const lmin = Math.max(l, 0.01); + l *= 2; + s2 *= l <= 1 ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + const v = (l + s2) / 2; + const sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s2 / (l + s2); + return [h, sv * 100, v * 100]; +}; +convert$2.hsv.rgb = function(hsv) { + const h = hsv[0] / 60; + const s2 = hsv[1] / 100; + let v = hsv[2] / 100; + const hi = Math.floor(h) % 6; + const f = h - Math.floor(h); + const p = 255 * v * (1 - s2); + const q = 255 * v * (1 - s2 * f); + const t = 255 * v * (1 - s2 * (1 - f)); + v *= 255; + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; +convert$2.hsv.hsl = function(hsv) { + const h = hsv[0]; + const s2 = hsv[1] / 100; + const v = hsv[2] / 100; + const vmin = Math.max(v, 0.01); + let sl; + let l; + l = (2 - s2) * v; + const lmin = (2 - s2) * vmin; + sl = s2 * vmin; + sl /= lmin <= 1 ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + return [h, sl * 100, l * 100]; +}; +convert$2.hwb.rgb = function(hwb) { + const h = hwb[0] / 360; + let wh = hwb[1] / 100; + let bl = hwb[2] / 100; + const ratio = wh + bl; + let f; + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + const i = Math.floor(6 * h); + const v = 1 - bl; + f = 6 * h - i; + if ((i & 1) !== 0) { + f = 1 - f; + } + const n = wh + f * (v - wh); + let r; + let g; + let b; + switch (i) { + default: + case 6: + case 0: + r = v; + g = n; + b = wh; + break; + case 1: + r = n; + g = v; + b = wh; + break; + case 2: + r = wh; + g = v; + b = n; + break; + case 3: + r = wh; + g = n; + b = v; + break; + case 4: + r = n; + g = wh; + b = v; + break; + case 5: + r = v; + g = wh; + b = n; + break; + } + return [r * 255, g * 255, b * 255]; +}; +convert$2.cmyk.rgb = function(cmyk) { + const c = cmyk[0] / 100; + const m = cmyk[1] / 100; + const y = cmyk[2] / 100; + const k = cmyk[3] / 100; + const r = 1 - Math.min(1, c * (1 - k) + k); + const g = 1 - Math.min(1, m * (1 - k) + k); + const b = 1 - Math.min(1, y * (1 - k) + k); + return [r * 255, g * 255, b * 255]; +}; +convert$2.xyz.rgb = function(xyz) { + const x = xyz[0] / 100; + const y = xyz[1] / 100; + const z = xyz[2] / 100; + let r; + let g; + let b; + r = x * 3.2406 + y * -1.5372 + z * -0.4986; + g = x * -0.9689 + y * 1.8758 + z * 0.0415; + b = x * 0.0557 + y * -0.204 + z * 1.057; + r = r > 31308e-7 ? 1.055 * r ** (1 / 2.4) - 0.055 : r * 12.92; + g = g > 31308e-7 ? 1.055 * g ** (1 / 2.4) - 0.055 : g * 12.92; + b = b > 31308e-7 ? 1.055 * b ** (1 / 2.4) - 0.055 : b * 12.92; + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + return [r * 255, g * 255, b * 255]; +}; +convert$2.xyz.lab = function(xyz) { + let x = xyz[0]; + let y = xyz[1]; + let z = xyz[2]; + x /= 95.047; + y /= 100; + z /= 108.883; + x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116; + y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116; + z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116; + const l = 116 * y - 16; + const a = 500 * (x - y); + const b = 200 * (y - z); + return [l, a, b]; +}; +convert$2.lab.xyz = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let x; + let y; + let z; + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + const y2 = y ** 3; + const x2 = x ** 3; + const z2 = z ** 3; + y = y2 > 8856e-6 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 8856e-6 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 8856e-6 ? z2 : (z - 16 / 116) / 7.787; + x *= 95.047; + y *= 100; + z *= 108.883; + return [x, y, z]; +}; +convert$2.lab.lch = function(lab) { + const l = lab[0]; + const a = lab[1]; + const b = lab[2]; + let h; + const hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + if (h < 0) { + h += 360; + } + const c = Math.sqrt(a * a + b * b); + return [l, c, h]; +}; +convert$2.lch.lab = function(lch) { + const l = lch[0]; + const c = lch[1]; + const h = lch[2]; + const hr = h / 360 * 2 * Math.PI; + const a = c * Math.cos(hr); + const b = c * Math.sin(hr); + return [l, a, b]; +}; +convert$2.rgb.ansi16 = function(args, saturation = null) { + const [r, g, b] = args; + let value = saturation === null ? convert$2.rgb.hsv(args)[2] : saturation; + value = Math.round(value / 50); + if (value === 0) { + return 30; + } + let ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255)); + if (value === 2) { + ansi += 60; + } + return ansi; +}; +convert$2.hsv.ansi16 = function(args) { + return convert$2.rgb.ansi16(convert$2.hsv.rgb(args), args[2]); +}; +convert$2.rgb.ansi256 = function(args) { + const r = args[0]; + const g = args[1]; + const b = args[2]; + if (r === g && g === b) { + if (r < 8) { + return 16; + } + if (r > 248) { + return 231; + } + return Math.round((r - 8) / 247 * 24) + 232; + } + const ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5); + return ansi; +}; +convert$2.ansi16.rgb = function(args) { + let color2 = args % 10; + if (color2 === 0 || color2 === 7) { + if (args > 50) { + color2 += 3.5; + } + color2 = color2 / 10.5 * 255; + return [color2, color2, color2]; + } + const mult = (~~(args > 50) + 1) * 0.5; + const r = (color2 & 1) * mult * 255; + const g = (color2 >> 1 & 1) * mult * 255; + const b = (color2 >> 2 & 1) * mult * 255; + return [r, g, b]; +}; +convert$2.ansi256.rgb = function(args) { + if (args >= 232) { + const c = (args - 232) * 10 + 8; + return [c, c, c]; + } + args -= 16; + let rem; + const r = Math.floor(args / 36) / 5 * 255; + const g = Math.floor((rem = args % 36) / 6) / 5 * 255; + const b = rem % 6 / 5 * 255; + return [r, g, b]; +}; +convert$2.rgb.hex = function(args) { + const integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255); + const string = integer.toString(16).toUpperCase(); + return "000000".substring(string.length) + string; +}; +convert$2.hex.rgb = function(args) { + const match2 = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match2) { + return [0, 0, 0]; + } + let colorString2 = match2[0]; + if (match2[0].length === 3) { + colorString2 = colorString2.split("").map((char) => { + return char + char; + }).join(""); + } + const integer = parseInt(colorString2, 16); + const r = integer >> 16 & 255; + const g = integer >> 8 & 255; + const b = integer & 255; + return [r, g, b]; +}; +convert$2.rgb.hcg = function(rgb) { + const r = rgb[0] / 255; + const g = rgb[1] / 255; + const b = rgb[2] / 255; + const max = Math.max(Math.max(r, g), b); + const min = Math.min(Math.min(r, g), b); + const chroma = max - min; + let grayscale; + let hue; + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + if (chroma <= 0) { + hue = 0; + } else if (max === r) { + hue = (g - b) / chroma % 6; + } else if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma; + } + hue /= 6; + hue %= 1; + return [hue * 360, chroma * 100, grayscale * 100]; +}; +convert$2.hsl.hcg = function(hsl) { + const s2 = hsl[1] / 100; + const l = hsl[2] / 100; + const c = l < 0.5 ? 2 * s2 * l : 2 * s2 * (1 - l); + let f = 0; + if (c < 1) { + f = (l - 0.5 * c) / (1 - c); + } + return [hsl[0], c * 100, f * 100]; +}; +convert$2.hsv.hcg = function(hsv) { + const s2 = hsv[1] / 100; + const v = hsv[2] / 100; + const c = s2 * v; + let f = 0; + if (c < 1) { + f = (v - c) / (1 - c); + } + return [hsv[0], c * 100, f * 100]; +}; +convert$2.hcg.rgb = function(hcg) { + const h = hcg[0] / 360; + const c = hcg[1] / 100; + const g = hcg[2] / 100; + if (c === 0) { + return [g * 255, g * 255, g * 255]; + } + const pure = [0, 0, 0]; + const hi = h % 1 * 6; + const v = hi % 1; + const w = 1 - v; + let mg = 0; + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; + pure[1] = v; + pure[2] = 0; + break; + case 1: + pure[0] = w; + pure[1] = 1; + pure[2] = 0; + break; + case 2: + pure[0] = 0; + pure[1] = 1; + pure[2] = v; + break; + case 3: + pure[0] = 0; + pure[1] = w; + pure[2] = 1; + break; + case 4: + pure[0] = v; + pure[1] = 0; + pure[2] = 1; + break; + default: + pure[0] = 1; + pure[1] = 0; + pure[2] = w; + } + mg = (1 - c) * g; + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; +convert$2.hcg.hsv = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + let f = 0; + if (v > 0) { + f = c / v; + } + return [hcg[0], f * 100, v * 100]; +}; +convert$2.hcg.hsl = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const l = g * (1 - c) + 0.5 * c; + let s2 = 0; + if (l > 0 && l < 0.5) { + s2 = c / (2 * l); + } else if (l >= 0.5 && l < 1) { + s2 = c / (2 * (1 - l)); + } + return [hcg[0], s2 * 100, l * 100]; +}; +convert$2.hcg.hwb = function(hcg) { + const c = hcg[1] / 100; + const g = hcg[2] / 100; + const v = c + g * (1 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; +convert$2.hwb.hcg = function(hwb) { + const w = hwb[1] / 100; + const b = hwb[2] / 100; + const v = 1 - b; + const c = v - w; + let g = 0; + if (c < 1) { + g = (v - c) / (1 - c); + } + return [hwb[0], c * 100, g * 100]; +}; +convert$2.apple.rgb = function(apple) { + return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; +}; +convert$2.rgb.apple = function(rgb) { + return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535]; +}; +convert$2.gray.rgb = function(args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; +convert$2.gray.hsl = function(args) { + return [0, 0, args[0]]; +}; +convert$2.gray.hsv = convert$2.gray.hsl; +convert$2.gray.hwb = function(gray) { + return [0, 100, gray[0]]; +}; +convert$2.gray.cmyk = function(gray) { + return [0, 0, 0, gray[0]]; +}; +convert$2.gray.lab = function(gray) { + return [gray[0], 0, 0]; +}; +convert$2.gray.hex = function(gray) { + const val = Math.round(gray[0] / 100 * 255) & 255; + const integer = (val << 16) + (val << 8) + val; + const string = integer.toString(16).toUpperCase(); + return "000000".substring(string.length) + string; +}; +convert$2.rgb.gray = function(rgb) { + const val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; +const conversions$1 = conversions$2; +function buildGraph() { + const graph = {}; + const models2 = Object.keys(conversions$1); + for (let len = models2.length, i = 0; i < len; i++) { + graph[models2[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + return graph; +} +function deriveBFS(fromModel) { + const graph = buildGraph(); + const queue = [fromModel]; + graph[fromModel].distance = 0; + while (queue.length) { + const current = queue.pop(); + const adjacents = Object.keys(conversions$1[current]); + for (let len = adjacents.length, i = 0; i < len; i++) { + const adjacent = adjacents[i]; + const node = graph[adjacent]; + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + return graph; +} +function link(from, to) { + return function(args) { + return to(from(args)); + }; +} +function wrapConversion(toModel, graph) { + const path2 = [graph[toModel].parent, toModel]; + let fn = conversions$1[graph[toModel].parent][toModel]; + let cur = graph[toModel].parent; + while (graph[cur].parent) { + path2.unshift(graph[cur].parent); + fn = link(conversions$1[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + fn.conversion = path2; + return fn; +} +var route$1 = function(fromModel) { + const graph = deriveBFS(fromModel); + const conversion = {}; + const models2 = Object.keys(graph); + for (let len = models2.length, i = 0; i < len; i++) { + const toModel = models2[i]; + const node = graph[toModel]; + if (node.parent === null) { + continue; + } + conversion[toModel] = wrapConversion(toModel, graph); + } + return conversion; +}; +const conversions = conversions$2; +const route = route$1; +const convert$1 = {}; +const models = Object.keys(conversions); +function wrapRaw(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + return fn(args); + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; +} +function wrapRounded(fn) { + const wrappedFn = function(...args) { + const arg0 = args[0]; + if (arg0 === void 0 || arg0 === null) { + return arg0; + } + if (arg0.length > 1) { + args = arg0; + } + const result = fn(args); + if (typeof result === "object") { + for (let len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + return result; + }; + if ("conversion" in fn) { + wrappedFn.conversion = fn.conversion; + } + return wrappedFn; +} +models.forEach((fromModel) => { + convert$1[fromModel] = {}; + Object.defineProperty(convert$1[fromModel], "channels", { value: conversions[fromModel].channels }); + Object.defineProperty(convert$1[fromModel], "labels", { value: conversions[fromModel].labels }); + const routes = route(fromModel); + const routeModels = Object.keys(routes); + routeModels.forEach((toModel) => { + const fn = routes[toModel]; + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); +}); +var colorConvert = convert$1; +const colorString = colorStringExports; +const convert = colorConvert; +const skippedModels = [ + // To be honest, I don't really feel like keyword belongs in color convert, but eh. + "keyword", + // Gray conflicts with some method names, and has its own method defined. + "gray", + // Shouldn't really be in color-convert either... + "hex" +]; +const hashedModelKeys = {}; +for (const model of Object.keys(convert)) { + hashedModelKeys[[...convert[model].labels].sort().join("")] = model; +} +const limiters = {}; +function Color(object, model) { + if (!(this instanceof Color)) { + return new Color(object, model); + } + if (model && model in skippedModels) { + model = null; + } + if (model && !(model in convert)) { + throw new Error("Unknown model: " + model); + } + let i; + let channels; + if (object == null) { + this.model = "rgb"; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (object instanceof Color) { + this.model = object.model; + this.color = [...object.color]; + this.valpha = object.valpha; + } else if (typeof object === "string") { + const result = colorString.get(object); + if (result === null) { + throw new Error("Unable to parse color from string: " + object); + } + this.model = result.model; + channels = convert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === "number" ? result.value[channels] : 1; + } else if (object.length > 0) { + this.model = model || "rgb"; + channels = convert[this.model].channels; + const newArray = Array.prototype.slice.call(object, 0, channels); + this.color = zeroArray(newArray, channels); + this.valpha = typeof object[channels] === "number" ? object[channels] : 1; + } else if (typeof object === "number") { + this.model = "rgb"; + this.color = [ + object >> 16 & 255, + object >> 8 & 255, + object & 255 + ]; + this.valpha = 1; + } else { + this.valpha = 1; + const keys2 = Object.keys(object); + if ("alpha" in object) { + keys2.splice(keys2.indexOf("alpha"), 1); + this.valpha = typeof object.alpha === "number" ? object.alpha : 0; + } + const hashedKeys = keys2.sort().join(""); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error("Unable to parse color from object: " + JSON.stringify(object)); + } + this.model = hashedModelKeys[hashedKeys]; + const { labels } = convert[this.model]; + const color2 = []; + for (i = 0; i < labels.length; i++) { + color2.push(object[labels[i]]); + } + this.color = zeroArray(color2); + } + if (limiters[this.model]) { + channels = convert[this.model].channels; + for (i = 0; i < channels; i++) { + const limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + this.valpha = Math.max(0, Math.min(1, this.valpha)); + if (Object.freeze) { + Object.freeze(this); + } +} +Color.prototype = { + toString() { + return this.string(); + }, + toJSON() { + return this[this.model](); + }, + string(places) { + let self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === "number" ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to[self.model](args); + }, + percentString(places) { + const self = this.rgb().round(typeof places === "number" ? places : 1); + const args = self.valpha === 1 ? self.color : [...self.color, this.valpha]; + return colorString.to.rgb.percent(args); + }, + array() { + return this.valpha === 1 ? [...this.color] : [...this.color, this.valpha]; + }, + object() { + const result = {}; + const { channels } = convert[this.model]; + const { labels } = convert[this.model]; + for (let i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + return result; + }, + unitArray() { + const rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + return rgb; + }, + unitObject() { + const rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + return rgb; + }, + round(places) { + places = Math.max(places || 0, 0); + return new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model); + }, + alpha(value) { + if (value !== void 0) { + return new Color([...this.color, Math.max(0, Math.min(1, value))], this.model); + } + return this.valpha; + }, + // Rgb + red: getset("rgb", 0, maxfn(255)), + green: getset("rgb", 1, maxfn(255)), + blue: getset("rgb", 2, maxfn(255)), + hue: getset(["hsl", "hsv", "hsl", "hwb", "hcg"], 0, (value) => (value % 360 + 360) % 360), + saturationl: getset("hsl", 1, maxfn(100)), + lightness: getset("hsl", 2, maxfn(100)), + saturationv: getset("hsv", 1, maxfn(100)), + value: getset("hsv", 2, maxfn(100)), + chroma: getset("hcg", 1, maxfn(100)), + gray: getset("hcg", 2, maxfn(100)), + white: getset("hwb", 1, maxfn(100)), + wblack: getset("hwb", 2, maxfn(100)), + cyan: getset("cmyk", 0, maxfn(100)), + magenta: getset("cmyk", 1, maxfn(100)), + yellow: getset("cmyk", 2, maxfn(100)), + black: getset("cmyk", 3, maxfn(100)), + x: getset("xyz", 0, maxfn(95.047)), + y: getset("xyz", 1, maxfn(100)), + z: getset("xyz", 2, maxfn(108.833)), + l: getset("lab", 0, maxfn(100)), + a: getset("lab", 1), + b: getset("lab", 2), + keyword(value) { + if (value !== void 0) { + return new Color(value); + } + return convert[this.model].keyword(this.color); + }, + hex(value) { + if (value !== void 0) { + return new Color(value); + } + return colorString.to.hex(this.rgb().round().color); + }, + hexa(value) { + if (value !== void 0) { + return new Color(value); + } + const rgbArray = this.rgb().round().color; + let alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase(); + if (alphaHex.length === 1) { + alphaHex = "0" + alphaHex; + } + return colorString.to.hex(rgbArray) + alphaHex; + }, + rgbNumber() { + const rgb = this.rgb().color; + return (rgb[0] & 255) << 16 | (rgb[1] & 255) << 8 | rgb[2] & 255; + }, + luminosity() { + const rgb = this.rgb().color; + const lum = []; + for (const [i, element] of rgb.entries()) { + const chan = element / 255; + lum[i] = chan <= 0.04045 ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4; + } + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + contrast(color2) { + const lum1 = this.luminosity(); + const lum2 = color2.luminosity(); + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + return (lum2 + 0.05) / (lum1 + 0.05); + }, + level(color2) { + const contrastRatio = this.contrast(color2); + if (contrastRatio >= 7) { + return "AAA"; + } + return contrastRatio >= 4.5 ? "AA" : ""; + }, + isDark() { + const rgb = this.rgb().color; + const yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 1e4; + return yiq < 128; + }, + isLight() { + return !this.isDark(); + }, + negate() { + const rgb = this.rgb(); + for (let i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + lighten(ratio) { + const hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + darken(ratio) { + const hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + saturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + desaturate(ratio) { + const hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + whiten(ratio) { + const hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + blacken(ratio) { + const hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + grayscale() { + const rgb = this.rgb().color; + const value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(value, value, value); + }, + fade(ratio) { + return this.alpha(this.valpha - this.valpha * ratio); + }, + opaquer(ratio) { + return this.alpha(this.valpha + this.valpha * ratio); + }, + rotate(degrees) { + const hsl = this.hsl(); + let hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + mix(mixinColor, weight) { + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + const color1 = mixinColor.rgb(); + const color2 = this.rgb(); + const p = weight === void 0 ? 0.5 : weight; + const w = 2 * p - 1; + const a = color1.alpha() - color2.alpha(); + const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2; + const w2 = 1 - w1; + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p) + ); + } +}; +for (const model of Object.keys(convert)) { + if (skippedModels.includes(model)) { + continue; + } + const { channels } = convert[model]; + Color.prototype[model] = function(...args) { + if (this.model === model) { + return new Color(this); + } + if (args.length > 0) { + return new Color(args, model); + } + return new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model); + }; + Color[model] = function(...args) { + let color2 = args[0]; + if (typeof color2 === "number") { + color2 = zeroArray(args, channels); + } + return new Color(color2, model); + }; +} +function roundTo(number, places) { + return Number(number.toFixed(places)); +} +function roundToPlace(places) { + return function(number) { + return roundTo(number, places); + }; +} +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + for (const m of model) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + } + model = model[0]; + return function(value) { + let result; + if (value !== void 0) { + if (modifier) { + value = modifier(value); + } + result = this[model](); + result.color[channel] = value; + return result; + } + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + return result; + }; +} +function maxfn(max) { + return function(v) { + return Math.max(0, Math.min(max, v)); + }; +} +function assertArray(value) { + return Array.isArray(value) ? value : [value]; +} +function zeroArray(array, length) { + for (let i = 0; i < length; i++) { + if (typeof array[i] !== "number") { + array[i] = 0; + } + } + return array; +} +var color = Color; +const Color2 = /* @__PURE__ */ getDefaultExportFromCjs(color); +var macros = { + cref: { signature: "s m" }, + Cref: { signature: "s m" }, + crefrange: { signature: "s m m" }, + Crefrange: { signature: "s m m" }, + cpageref: { signature: "s m" }, + Cpageref: { signature: "s m" }, + ref: { signature: "m" }, + pageref: { signature: "m" }, + namecref: { signature: "m" }, + nameCref: { signature: "m" }, + lcnamecref: { signature: "m" }, + namecrefs: { signature: "m" }, + nameCrefs: { signature: "m" }, + lcnamecrefs: { signature: "m" }, + labelcref: { signature: "m" }, + labelcpageref: { signature: "m" }, + crefalias: { signature: "m m" }, + crefname: { signature: "m m m" }, + // XXX there are many more obscure commands to add here + // https://ctan.org/pkg/cleveref + crefdefaultlabelformat: { signature: "m" }, + crefrangeconjunction: { signature: "m" } +}; +var environments = {}; +function cleanEnumerateBody(ast, itemName = "item") { + let { segments, macros: macros17 } = splitOnMacro(ast, itemName); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + if (i === 0) { + trimEnd(segment); + } else { + trim$1(segment); + } + if (segment.length > 0 && i > 0) { + segment.unshift({ type: "whitespace" }); + } + } + let insertParbreakBefore = /* @__PURE__ */ new WeakSet(); + let body = macros17.flatMap((node, i) => { + var _a; + const segment = segments[i + 1]; + const trailingComments = popTrailingComments(segment); + node.args = node.args || []; + node.args.push(arg(segment, { openMark: "", closeMark: "" })); + updateRenderInfo(node, { inParMode: true }); + if (i > 0 || ((_a = segments[0]) == null ? void 0 : _a.length) > 0) { + insertParbreakBefore.add(node); + } + return [node, ...trailingComments]; + }); + body = body.flatMap( + (node) => insertParbreakBefore.has(node) ? [{ type: "parbreak" }, node] : node + ); + body.unshift(...segments[0]); + for (let i = 0; i < body.length - 1; i++) { + const node = body[i]; + const nextNode = body[i + 1]; + if (!match.parbreak(nextNode)) { + continue; + } + if (match.comment(node)) { + node.suffixParbreak = true; + } + if (match.macro(node) && node.args && node.args[node.args.length - 1].closeMark === "") { + const args = node.args[node.args.length - 1].content; + const lastArg = args[args.length - 1]; + if (match.comment(lastArg)) { + lastArg.suffixParbreak = true; + } + } + } + return body; +} +function popTrailingComments(nodes) { + let lastNodeIndex = lastSignificantNodeIndex(nodes, true); + if (lastNodeIndex === nodes.length - 1 || lastNodeIndex == null && nodes.length === 0) { + return []; + } + if (lastNodeIndex == null) { + lastNodeIndex = -1; + } + return nodes.splice(lastNodeIndex + 1); +} +var macros2 = { + answerline: { signature: "o" }, + fillin: { signature: "o o" }, + fullwidth: { signature: "m" }, + fillwidthlines: { signature: "m" }, + fillwidthdottedlines: { signature: "m" }, + fillwidthgrid: { signature: "m" }, + makeemptybox: { signature: "m" }, + CorrectChoiceEmphasis: { + signature: "m", + renderInfo: { breakAround: true } + }, + SolutionEmphasis: { signature: "m", renderInfo: { breakAround: true } }, + uplevel: { signature: "m", renderInfo: { breakAround: true } }, + checkboxchar: { signature: "m", renderInfo: { breakAround: true } }, + checkedchar: { signature: "m", renderInfo: { breakAround: true } }, + pointname: { signature: "m", renderInfo: { breakAround: true } }, + marginpointname: { signature: "m", renderInfo: { breakAround: true } }, + extrawidth: { signature: "m", renderInfo: { breakAround: true } }, + pointformat: { signature: "m", renderInfo: { breakAround: true } }, + bonuspointformat: { signature: "m", renderInfo: { breakAround: true } }, + totalformat: { signature: "m", renderInfo: { breakAround: true } }, + qformat: { signature: "m", renderInfo: { breakAround: true } }, + titledquestion: { signature: "m o", renderInfo: { breakAround: true } }, + pointpoints: { signature: "m m", renderInfo: { breakAround: true } }, + bonuspointpoints: { signature: "m m", renderInfo: { breakAround: true } } +}; +var environments2 = { + choices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + checkboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparchoices: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + oneparcheckboxes: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "choice") + }, + parts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "part") + }, + subparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subpart") + }, + subsubparts: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "subsubpart") + }, + questions: { + signature: "o", + processContent: (nodes) => cleanEnumerateBody(nodes, "question") + } +}; +var macros3 = { + geometry: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + } +}; +var environments3 = {}; +var macros4 = { + hypersetup: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + href: { signature: "o m m" }, + url: { signature: "m" }, + nolinkurl: { signature: "m" }, + hyperbaseurl: { signature: "m" }, + hyperimage: { signature: "m m" }, + hyperdef: { signature: "m m m" }, + hyperref: { signature: "o m" }, + hyperlink: { signature: "m m" }, + hypertarget: { signature: "m m" }, + autoref: { signature: "s m" }, + pageref: { signature: "s m" }, + autopageref: { signature: "s m" }, + pdfstringdef: { signature: "m m" }, + pdfbookmark: { signature: "o m m" }, + currentpdfbookmark: { signature: "m m" }, + subpdfbookmark: { signature: "m m" }, + belowpdfbookmark: { signature: "m m" }, + texorpdfstring: { signature: "m m" }, + thispdfpagelabel: { signature: "m" }, + hypercalcbp: { signature: "m" } +}; +var environments4 = {}; +var macros5 = { + // Special + "\\": { signature: "!s !o" }, + _: { signature: "m", escapeToken: "" }, + "^": { signature: "m", escapeToken: "" }, + // \newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands + // List can be found in latex2e.pdf "An unofficial reference manual" + newcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + renewcommand: { + signature: "s +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", "name", "numArgs", "default", "body"] + } + }, + providecommand: { + signature: "s +m o +o +m", + renderInfo: { breakAround: true } + }, + // Counters + newcounter: { + signature: "m o", + renderInfo: { breakAround: true } + }, + usecounter: { + signature: "m" + }, + setcounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + addtocounter: { + signature: "m m", + renderInfo: { breakAround: true } + }, + stepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + refstepcounter: { + signature: "m", + renderInfo: { breakAround: true } + }, + // Lengths + newlength: { + signature: "m", + renderInfo: { breakAround: true } + }, + addtolength: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settodepth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settoheight: { + signature: "m m", + renderInfo: { breakAround: true } + }, + settowidth: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Spaces + stretch: { signature: "m" }, + hspace: { signature: "s m" }, + vspace: { signature: "s m", renderInfo: { breakAround: true } }, + vfill: { renderInfo: { breakAround: true } }, + indent: { renderInfo: { breakAround: true } }, + phantom: { signature: "m" }, + vphantom: { signature: "m" }, + hphantom: { signature: "m" }, + noindent: { renderInfo: { breakAround: true } }, + smallskip: { renderInfo: { breakAround: true } }, + medskip: { renderInfo: { breakAround: true } }, + bigskip: { renderInfo: { breakAround: true } }, + smallbreak: { renderInfo: { breakAround: true } }, + medbreak: { renderInfo: { breakAround: true } }, + bigbreak: { renderInfo: { breakAround: true } }, + newline: { renderInfo: { breakAround: true } }, + linebreak: { signature: "o", renderInfo: { breakAround: true } }, + nolinebreak: { signature: "o", renderInfo: { breakAround: true } }, + clearpage: { renderInfo: { breakAround: true } }, + cleardoublepage: { renderInfo: { breakAround: true } }, + newpage: { renderInfo: { breakAround: true } }, + enlargethispage: { signature: "s", renderInfo: { breakAround: true } }, + pagebreak: { signature: "o", renderInfo: { breakAround: true } }, + nopagebreak: { signature: "o", renderInfo: { breakAround: true } }, + // Boxes + newsavebox: { + signature: "m", + renderInfo: { breakAround: true } + }, + sbox: { + signature: "m m", + renderInfo: { breakAround: true } + }, + savebox: { + signature: "m o o m", + renderInfo: { breakAround: true } + }, + mbox: { signature: "m" }, + makebox: { signature: "d() o o m", renderInfo: { breakAround: true } }, + fbox: { signature: "m" }, + framebox: { signature: "o o m", renderInfo: { breakAround: true } }, + frame: { signature: "m", renderInfo: { breakAround: true } }, + parbox: { signature: "o o o m m", renderInfo: { breakAround: true } }, + raisebox: { signature: "m o o m" }, + marginpar: { signature: "o m", renderInfo: { breakAround: true } }, + colorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + fcolorbox: { signature: "o m m", renderInfo: { breakAround: true } }, + rotatebox: { signature: "o m m" }, + scalebox: { signature: "m o m" }, + reflectbox: { signature: "m" }, + resizebox: { signature: "s m m m" }, + // Define environments + newenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s m o o m m", + renderInfo: { breakAround: true } + }, + newtheorem: { + signature: "s m o m o", + renderInfo: { breakAround: true } + }, + newfont: { + signature: "m m", + renderInfo: { breakAround: true } + }, + // Counters + alph: { signature: "m" }, + Alph: { signature: "m" }, + arabic: { signature: "m" }, + roman: { signature: "m" }, + Roman: { signature: "m" }, + fnsymbol: { signature: "m" }, + // Other + documentclass: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepackage: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + item: { + signature: "o", + renderInfo: { hangingIndent: true, namedArguments: ["label"] } + }, + value: { signature: "m" }, + centering: { renderInfo: { breakAround: true } }, + input: { signature: "m", renderInfo: { breakAround: true } }, + include: { signature: "m", renderInfo: { breakAround: true } }, + includeonly: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + discretionary: { signature: "m m m" }, + hyphenation: { signature: "m m m" }, + footnote: { signature: "o m", renderInfo: { inParMode: true } }, + footnotemark: { signature: "o" }, + footnotetext: { signature: "o m", renderInfo: { inParMode: true } }, + caption: { + signature: "o m", + renderInfo: { inParMode: true, breakAround: true } + }, + // Math Commands + sqrt: { signature: "o m", renderInfo: { inMathMode: true } }, + frac: { signature: "m m", renderInfo: { inMathMode: true } }, + stackrel: { signature: "m m" }, + ensuremath: { signature: "m", renderInfo: { inMathMode: true } }, + // Layout commands + abstract: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + maketitle: { renderInfo: { breakAround: true } }, + doublespacing: { renderInfo: { breakAround: true } }, + singlespacing: { renderInfo: { breakAround: true } }, + author: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + date: { signature: "o m", renderInfo: { breakAround: true } }, + thanks: { + signature: "m", + renderInfo: { breakAround: true, inParMode: true } + }, + // amsart document class adds an optional argument + title: { + signature: "o m", + renderInfo: { breakAround: true, inParMode: true } + }, + pagenumbering: { signature: "m", renderInfo: { breakAround: true } }, + pagestyle: { signature: "m", renderInfo: { breakAround: true } }, + thispagestyle: { signature: "m", renderInfo: { breakAround: true } }, + // Colors + definecolor: { signature: "m m m", renderInfo: { breakAround: true } }, + pagecolor: { signature: "o m", renderInfo: { breakAround: true } }, + nopagecolor: { renderInfo: { breakAround: true } }, + multicolumn: { signature: "m m m" }, + // Graphics + includegraphics: { + signature: "s o o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + rule: { signature: "o m m" }, + // Sectioning + part: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + chapter: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + section: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + paragraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + subparagraph: { + signature: "s o m", + renderInfo: { + breakAround: true, + inParMode: true, + namedArguments: ["starred", "tocTitle", "title"] + } + }, + appendix: { renderInfo: { breakAround: true, inParMode: true } }, + frontmatter: { renderInfo: { breakAround: true, inParMode: true } }, + mainmatter: { renderInfo: { breakAround: true, inParMode: true } }, + backmatter: { renderInfo: { breakAround: true, inParMode: true } }, + // Citing and references + bibitem: { signature: "o m", renderInfo: { hangingIndent: true } }, + cite: { signature: "o m" }, + // Fonts + textrm: { signature: "m", renderInfo: { inParMode: true } }, + textit: { signature: "m", renderInfo: { inParMode: true } }, + textmd: { signature: "m", renderInfo: { inParMode: true } }, + textbf: { signature: "m", renderInfo: { inParMode: true } }, + textup: { signature: "m", renderInfo: { inParMode: true } }, + textsl: { signature: "m", renderInfo: { inParMode: true } }, + textsf: { signature: "m", renderInfo: { inParMode: true } }, + textsc: { signature: "m", renderInfo: { inParMode: true } }, + texttt: { signature: "m", renderInfo: { inParMode: true } }, + emph: { signature: "m", renderInfo: { inParMode: true } }, + textnormal: { signature: "m", renderInfo: { inParMode: true } }, + uppercase: { signature: "m", renderInfo: { inParMode: true } }, + mathbf: { signature: "m" }, + mathsf: { signature: "m" }, + mathtt: { signature: "m" }, + mathit: { signature: "m" }, + mathnormal: { signature: "m" }, + mathcal: { signature: "m" }, + mathrm: { signature: "m" }, + // Other + setlength: { signature: "m m", renderInfo: { breakAround: true } }, + ref: { signature: "s m" }, + label: { signature: "o m" }, + // cleveref changes \label to have this signature + printbibliography: { renderInfo: { breakAround: true } }, + addtocontents: { signature: "m m", renderInfo: { breakAround: true } }, + addcontentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + contentsline: { signature: "m m m", renderInfo: { breakAround: true } }, + bibliography: { signature: "m", renderInfo: { breakAround: true } }, + bibliographystyle: { signature: "m", renderInfo: { breakAround: true } } +}; +var environments5 = { + document: { + processContent: (nodes) => { + trim$1(nodes); + return nodes; + } + }, + array: { signature: "o m", renderInfo: { alignContent: true } }, + description: { signature: "o", processContent: cleanEnumerateBody }, + enumerate: { + signature: "o", + processContent: cleanEnumerateBody, + renderInfo: { pgfkeysArgs: true } + }, + itemize: { signature: "o", processContent: cleanEnumerateBody }, + trivlist: { signature: "o", processContent: cleanEnumerateBody }, + list: { signature: "m m", processContent: cleanEnumerateBody }, + figure: { signature: "o" }, + "figure*": { signature: "o" }, + filecontents: { signature: "o m" }, + "filecontents*": { signature: "o m" }, + minipage: { signature: "o o o m" }, + picture: { signature: "r() d()" }, + tabbing: { renderInfo: { alignContent: true } }, + table: { signature: "o" }, + tabular: { signature: "o m", renderInfo: { alignContent: true } }, + "tabular*": { signature: "m o m", renderInfo: { alignContent: true } }, + thebibliography: { + signature: "m", + processContent: (nodes) => cleanEnumerateBody(nodes, "bibitem") + }, + // Math + math: { renderInfo: { inMathMode: true } } +}; +var argSpecM = parse$2("m")[0]; +var argSpecO = parse$2("o")[0]; +var argSpecRDelim = {}; +var argumentParser = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim[delim] = argSpecRDelim[delim] || parse$2(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [optionalArg || arg(null), codeArg || arg(null)], + nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved + }; +}; +var macros6 = { + lstset: { signature: "m" }, + lstinline: { argumentParser }, + lstinputlisting: { signature: "o m" }, + lstdefinestyle: { signature: "m m" }, + lstnewenvironment: { signature: "m o o m m" }, + lstMakeShortInline: { signature: "o m" }, + lstDeleteShortInline: { signature: "m" }, + lstdefineformat: { signature: "m m" }, + lstdefinelanguage: { signature: "o m o m o" }, + lstalias: { signature: "o m o m" }, + lstloadlanguages: { signature: "m" } +}; +var environments6 = {}; +var macros7 = { + see: { signature: "m m" }, + seealso: { signature: "m m" }, + seename: { signature: "m" }, + alsoname: { signature: "m" }, + index: { signature: "m" } +}; +var environments7 = {}; +var macros8 = { + mathtoolsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + mathllap: { + signature: "o m" + }, + mathrlap: { + signature: "o m" + }, + mathclap: { + signature: "o m" + }, + clap: { + signature: "m" + }, + mathmbox: { + signature: "m" + }, + mathmakebox: { + signature: "o o m" + }, + cramped: { + signature: "o m" + }, + crampedllap: { + signature: "o m" + }, + crampedrlap: { + signature: "o m" + }, + crampedclap: { + signature: "o m" + }, + crampedsubstack: { + signature: "o m" + }, + smashoperator: { + signature: "o m" + }, + newtagform: { + signature: "m o m m" + }, + renewtagform: { + signature: "m o m m" + }, + usetagform: { + signature: "m" + }, + xleftrightarrow: { signature: "o m" }, + xLeftarrow: { signature: "o m" }, + xhookleftarrow: { signature: "o m" }, + xmapsto: { signature: "o m" }, + xRightarrow: { signature: "o m" }, + xLeftrightarrow: { signature: "o m" }, + xhookrightarrow: { signature: "o m" }, + underbracket: { signature: "o o m" }, + overbracket: { signature: "o o m" }, + underbrace: { signature: "m" }, + overbrace: { signature: "m" }, + shoveleft: { signature: "o m" }, + shoveright: { signature: "o m" }, + ArrowBetweenLines: { signature: "s o" }, + vdotswithin: { signature: "m" }, + shortdotswithin: { signature: "s m" }, + DeclarePairedDelimiter: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterX: { + signature: "m o m m m", + renderInfo: { breakAround: true } + }, + DeclarePairedDelimiterXPP: { + signature: "m o m m m m m", + renderInfo: { breakAround: true } + }, + prescript: { signature: "m m m" }, + DeclareMathSizes: { signature: "m m m m" }, + newgathered: { signature: "m m m m" }, + renewgathered: { signature: "m m m m" }, + splitfrac: { signature: "m m" }, + splitdfrac: { signature: "m m" }, + xmathstrut: { signature: "o m" }, + // amsthm + newtheorem: { signature: "s m o m o", renderInfo: { breakAround: true } }, + theoremstyle: { signature: "m", renderInfo: { breakAround: true } }, + newtheoremstyle: { + signature: "m m m m m m m m m", + renderInfo: { breakAround: true } + }, + // amsmath + text: { signature: "m", renderInfo: { inMathMode: false } }, + // amsfonts + mathbb: { signature: "m" }, + mathscr: { signature: "m" }, + mathfrak: { signature: "m" }, + frak: { signature: "m" }, + Bdd: { signature: "m" }, + bold: { signature: "m" }, + // amsopn + operatorname: { signature: "s m" }, + DeclareMathOperator: { + signature: "s m m", + renderInfo: { breakAround: true } + } +}; +var environments8 = { + crampedsubarray: { + signature: "m", + renderInfo: { alignContent: true, inMathMode: true } + }, + matrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + pmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } }, + "matrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "pmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "smallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "psmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Bsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + "Vsmallmatrix*": { + signature: "o", + renderInfo: { alignContent: true, inMathMode: true } + }, + multilined: { signature: "o o", renderInfo: { inMathMode: true } }, + cases: { renderInfo: { alignContent: true, inMathMode: true } }, + "cases*": { renderInfo: { alignContent: true, inMathMode: true } }, + dcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "dcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + rcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "rcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + drcases: { renderInfo: { alignContent: true, inMathMode: true } }, + "drcases*": { renderInfo: { alignContent: true, inMathMode: true } }, + spreadlines: { signature: "m", renderInfo: { inMathMode: true } }, + lgathered: { signature: "o", renderInfo: { inMathMode: true } }, + rgathered: { signature: "o", renderInfo: { inMathMode: true } }, + // amsmath + "align*": { renderInfo: { inMathMode: true, alignContent: true } }, + align: { renderInfo: { inMathMode: true, alignContent: true } }, + aligned: { renderInfo: { inMathMode: true, alignContent: true } }, + "alignat*": { renderInfo: { inMathMode: true, alignContent: true } }, + alignat: { renderInfo: { inMathMode: true, alignContent: true } }, + "equation*": { renderInfo: { inMathMode: true } }, + equation: { renderInfo: { inMathMode: true } }, + "gather*": { renderInfo: { inMathMode: true } }, + gather: { renderInfo: { inMathMode: true } }, + "multline*": { renderInfo: { inMathMode: true } }, + multline: { renderInfo: { inMathMode: true } }, + "flalign*": { renderInfo: { inMathMode: true, alignContent: true } }, + flalign: { renderInfo: { inMathMode: true, alignContent: true } }, + split: { renderInfo: { inMathMode: true } }, + // Math environments + displaymath: { renderInfo: { inMathMode: true } }, + // Typical amsthm environments + theorem: { signature: "o" }, + lemma: { signature: "o" }, + definition: { signature: "o" }, + proposition: { signature: "o" }, + corollary: { signature: "o" }, + remark: { signature: "!o" }, + example: { signature: "!o" }, + proof: { signature: "o" } +}; +var argSpecM2 = parse$2("m")[0]; +var argSpecO2 = parse$2("o")[0]; +var argSpecRDelim2 = {}; +var argumentParser2 = (nodes, startPos) => { + const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO2, startPos); + const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecM2, startPos); + let codeArg = null; + let codeArgNodesRemoved = 0; + const nextNode = nodes[startPos]; + if (match.group(nextNode)) { + const mandatoryArg = gobbleSingleArgument(nodes, argSpecM2, startPos); + codeArg = mandatoryArg.argument; + codeArgNodesRemoved = mandatoryArg.nodesRemoved; + } else if (match.string(nextNode) && nextNode.content.length === 1) { + const delim = nextNode.content; + argSpecRDelim2[delim] = argSpecRDelim2[delim] || parse$2(`r${delim}${delim}`)[0]; + const delimArg = gobbleSingleArgument( + nodes, + argSpecRDelim2[delim], + startPos + ); + codeArg = delimArg.argument; + codeArgNodesRemoved = delimArg.nodesRemoved; + } + return { + args: [ + optionalArg || arg(null), + languageArg || arg(null), + codeArg || arg(null) + ], + nodesRemoved: optionalArgNodesRemoved + languageArgNodesRemoved + codeArgNodesRemoved + }; +}; +var macros9 = { + mint: { argumentParser: argumentParser2 }, + mintinline: { argumentParser: argumentParser2 }, + inputminted: { argumentParser: argumentParser2 }, + usemintedstyle: { signature: "m" }, + setminted: { signature: "o m" }, + setmintedinline: { signature: "o m" }, + newmint: { signature: "o m m" }, + newminted: { signature: "o m m" }, + newmintinline: { signature: "o m m" }, + newmintedfile: { signature: "o m m" } +}; +var environments9 = {}; +var macros10 = { + NiceMatrixOptions: { + signature: "m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + } +}; +var environments10 = { + NiceTabular: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrixBlock: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArrayWithDelims: { + signature: "m m o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceArray: { + signature: "o m !o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + NiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + pNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + bNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + BNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + vNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + }, + VNiceMatrix: { + signature: "!o", + renderInfo: { pgfkeysArgs: true, alignContent: true } + } +}; +var macros11 = { + systeme: { + signature: "s o o m", + renderInfo: { inMathMode: true } + }, + sysdelim: { + signature: "m m" + }, + syseqsep: { signature: "m" }, + sysalign: { signature: "m" }, + syssignspace: { signature: "m" }, + syseqspace: { signature: "m" }, + syslineskipcoeff: { signature: "m" }, + syseqivsign: { signature: "m" }, + sysaddeqsign: { signature: "m" }, + sysremoveeqsign: { signature: "m" }, + sysextracolonsign: { signature: "m" }, + syscodeextracol: { signature: "m" }, + sysautonum: { signature: "m" }, + syssubstitute: { signature: "m" } +}; +var environments11 = {}; +(function() { + if (typeof globalThis === "object") + return; + Object.defineProperty(Object.prototype, "__magic__", { + get: function() { + return this; + }, + configurable: true + // This makes it possible to `delete` the getter later. + }); + __magic__.globalThis = __magic__; + delete Object.prototype.__magic__; +})(); +var OPTIONAL_ARGUMENT_ARG_SPEC = parse$2("o")[0]; +function blankArg() { + return arg([], { openMark: "", closeMark: "" }); +} +var tikzCommandArgumentParser = (nodes, startPos) => { + const origStartPos = startPos; + let pos = startPos; + let nodesRemoved = 0; + const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos); + let animationArg = blankArg(); + if (cursorPosAfterAnimations !== pos) { + const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos); + trim$1(argContent); + animationArg = arg(argContent, { + openMark: " ", + closeMark: " " + }); + } + nodesRemoved += cursorPosAfterAnimations - pos; + const { + argument: _optionalArgument, + nodesRemoved: optionalArgumentNodesRemoved + } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos); + nodesRemoved += optionalArgumentNodesRemoved; + const optionalArg = _optionalArgument || blankArg(); + while (match.whitespace(nodes[pos])) { + pos++; + } + const firstNode = nodes[pos]; + if (!firstNode) { + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; + } + if (match.group(firstNode)) { + const args = [animationArg, optionalArg, arg(firstNode.content)]; + nodes.splice(origStartPos, pos - origStartPos + 1); + return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved }; + } + const semicolonPosition = scan(nodes, ";", { startIndex: pos }); + if (semicolonPosition != null) { + const argNodes = nodes.splice( + origStartPos, + semicolonPosition - origStartPos + 1 + ); + trim$1(argNodes); + const args = [animationArg, optionalArg, arg(argNodes)]; + return { + args, + nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved + }; + } + return { + args: [animationArg, optionalArg, blankArg()], + nodesRemoved: 0 + }; +}; +function eatAllAnimationSpecs(nodes, startPos) { + const colonPos = scan(nodes, ":", { + startIndex: startPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (!colonPos) { + return startPos; + } + let lastMatchPos = startPos; + let i = colonPos + 1; + for (; i < nodes.length; i++) { + const node = nodes[i]; + if (match.string(node, "[")) { + break; + } + if (match.string(node, "=")) { + i++; + while (match.whitespace(nodes[i]) || match.comment(nodes[i])) { + i++; + } + if (!match.group(nodes[i])) { + break; + } + lastMatchPos = i + 1; + const colonPos2 = scan(nodes, ":", { + startIndex: lastMatchPos, + allowSubstringMatches: true, + onlySkipWhitespaceAndComments: true + }); + if (colonPos2 == null) { + break; + } + i = colonPos2 + 1; + } + } + return lastMatchPos; +} +var macros12 = { + pgfkeys: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzoption: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikzstyle: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usetikzlibrary: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + usepgfmodule: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + usepgflibrary: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfplotsset: { + signature: "m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + pgfplotstabletypeset: { + signature: "o m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + tikz: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { namedArguments: ["animation", "options", "command"] } + } +}; +var environments12 = { + tikzpicture: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + axis: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + scope: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfonlayer: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgflowlevelscope: { + signature: "m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgfviewboxscope: { + signature: "m m m m m", + renderInfo: { tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + pgftransparencygroup: { + signature: "o", + renderInfo: { pgfkeysArgs: true, tikzEnvironment: true }, + processContent: processTikzEnvironmentContent + }, + behindforegroundpath: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + pgfmetadecoration: { + signature: "m", + processContent: processTikzEnvironmentContent + }, + colormixin: { signature: "m", renderInfo: { pgfkeysArgs: true } } +}; +function processTikzEnvironmentContent(nodes) { + attachMacroArgsInArray(nodes, conditionalMacros); + return nodes; +} +var conditionalMacros = { + pgfextra: { signature: "m" }, + beginpgfgraphicnamed: { signature: "m" }, + pgfrealjobname: { signature: "m" }, + pgfplotstreampoint: { signature: "m" }, + pgfplotstreampointoutlier: { signature: "m" }, + pgfplotstreamspecial: { signature: "m" }, + pgfplotxyfile: { signature: "m" }, + pgfplotxyzfile: { signature: "m" }, + pgfplotfunction: { signature: "mmm" }, + pgfplotgnuplot: { signature: "o m" }, + pgfplothandlerrecord: { signature: "m" }, + pgfdeclareplothandler: { signature: "m m m" }, + pgfdeclarelayer: { signature: "m" }, + pgfsetlayers: { signature: "m", renderInfo: { pgfkeysArgs: true } }, + pgfonlayer: { signature: "m" }, + startpgfonlayer: { signature: "m" }, + pgfdeclarehorizontalshading: { signature: "o m m m " }, + pgfdeclareradialshading: { signature: "o m m m" }, + pgfdeclarefunctionalshading: { signature: "o m m m m m" }, + pgfshadecolortorgb: { signature: "m m" }, + pgfshadecolortocmyk: { signature: "m m" }, + pgfshadecolortogray: { signature: "m m" }, + pgfuseshading: { signature: "m" }, + pgfshadepath: { signature: "m m" }, + pgfsetadditionalshadetransform: { signature: "m" }, + pgfsetstrokeopacity: { signature: "m" }, + pgfsetfillopacity: { signature: "m" }, + pgfsetblendmode: { signature: "m" }, + pgfdeclarefading: { signature: "m m" }, + pgfsetfading: { signature: "m m" }, + pgfsetfadingforcurrentpath: { signature: "m m" }, + pgfsetfadingforcurrentpathstroked: { signature: "m m" }, + pgfanimateattribute: { signature: "m m" }, + pgfsnapshot: { signature: "m" }, + pgfqpoint: { signature: "m m" }, + pgfqpointxy: { signature: "m m" }, + pgfqpointxyz: { signature: "m m m" }, + pgfqpointscale: { signature: "m m" }, + pgfpathqmoveto: { signature: "m m" }, + pgfpathqlineto: { signature: "m m" }, + pgfpathqcurveto: { signature: "m m m m m m" }, + pgfpathqcircle: { signature: "m" }, + pgfqbox: { signature: "m" }, + pgfqboxsynced: { signature: "m" }, + pgfaliasimage: { signature: "m m" }, + pgfuseimage: { signature: "m" }, + pgfimage: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclaremask: { signature: "o m m", renderInfo: { pgfkeysArgs: true } }, + pgfdeclarepatternformonly: { signature: "o m m m m m" }, + pgfdeclarepatterninherentlycolored: { signature: "o m m m m m" }, + pgfsetfillpattern: { signature: "m m" }, + // Coordinate canvas and nonlinear transformations + pgftransformshift: { signature: "m" }, + pgftransformxshift: { signature: "m" }, + pgftransformyshift: { signature: "m" }, + pgftransformscale: { signature: "m" }, + pgftransformxscale: { signature: "m" }, + pgftransformyscale: { signature: "m" }, + pgftransformxslant: { signature: "m" }, + pgftransformyslant: { signature: "m" }, + pgftransformrotate: { signature: "m" }, + pgftransformtriangle: { signature: "m m m" }, + pgftransformcm: { signature: "m m m m m" }, + pgftransformarrow: { signature: "m m" }, + pgftransformlineattime: { signature: "m m m" }, + pgftransformcurveattime: { signature: "m m m m m" }, + pgftransformarcaxesattime: { signature: "m m m m m m" }, + pgfgettransform: { signature: "m" }, + pgfsettransform: { signature: "m" }, + pgfgettransformentries: { signature: "m m m m m m" }, + pgfsettransformentries: { signature: "m m m m m m" }, + pgfpointtransformed: { signature: "m" }, + pgflowlevel: { signature: "m" }, + pgflowlevelobj: { signature: "m m" }, + pgflowlevelscope: { signature: "m" }, + startpgflowlevelscope: { signature: "m" }, + pgfviewboxscope: { signature: "m m m m m" }, + startpgfviewboxscope: { signature: "m m m m m" }, + pgftransformnonlinear: { signature: "m" }, + pgfpointtransformednonlinear: { signature: "m" }, + pgfsetcurvilinearbeziercurve: { signature: "m m m m" }, + pgfcurvilineardistancetotime: { signature: "m" }, + pgfpointcurvilinearbezierorthogonal: { signature: "m m" }, + pgfpointcurvilinearbezierpolar: { signature: "m m" }, + // Matrices + pgfmatrix: { signature: "m m m m m m m" }, + pgfsetmatrixcolumnsep: { signature: "m" }, + pgfmatrixnextcell: { signature: "o" }, + pgfsetmatrixrowsep: { signature: "m" }, + pgfmatrixendrow: { signature: "o" }, + // Nodes and shapes + pgfnode: { signature: "m m m m m" }, + pgfmultipartnode: { signature: "m m m m" }, + pgfcoordinate: { signature: "m m" }, + pgfnodealias: { signature: "m m" }, + pgfnoderename: { signature: "m m" }, + pgfpositionnodelater: { signature: "m" }, + pgfpositionnodenow: { signature: "m" }, + pgfnodepostsetupcode: { signature: "m m" }, + pgfpointanchor: { signature: "m m" }, + pgfpointshapeborder: { signature: "m m" }, + pgfdeclareshape: { signature: "m m" }, + saveddimen: { signature: "m m" }, + savedmacro: { signature: " m" }, + anchor: { signature: "m m" }, + deferredanchor: { signature: "m m" }, + anchorborder: { signature: "m" }, + backgroundpath: { signature: "m" }, + foregroundpath: { signature: "m" }, + behindbackgroundpath: { signature: "m" }, + beforebackgroundpath: { signature: "m" }, + beforeforegroundpath: { signature: "m" }, + behindforegroundpath: { signature: "m" }, + // Arrows + pgfdeclarearrow: { signature: "m" }, + pgfarrowssettipend: { signature: "m" }, + pgfarrowssetbackend: { signature: "m" }, + pgfarrowssetlineend: { signature: "m" }, + pgfarrowssetvisualbackend: { signature: "m" }, + pgfarrowssetvisualtipend: { signature: "m" }, + pgfarrowshullpoint: { signature: "m m" }, + pgfarrowsupperhullpoint: { signature: "m m" }, + pgfarrowssave: { signature: "m" }, + pgfarrowssavethe: { signature: "m" }, + pgfarrowsaddtooptions: { signature: "m" }, + pgfarrowsaddtolateoptions: { signature: "m" }, + pgfarrowsaddtolengthscalelist: { signature: "m" }, + pgfarrowsaddtowidthscalelist: { signature: "m" }, + pgfarrowsthreeparameters: { signature: "m" }, + pgfarrowslinewidthdependent: { signature: "m m m" }, + pgfarrowslengthdependent: { signature: "m" }, + // Path + pgfusepath: { signature: "m" }, + pgfsetlinewidth: { signature: "m" }, + pgfsetmiterlimit: { signature: "m" }, + pgfsetdash: { signature: "m m" }, + pgfsetstrokecolor: { signature: "m" }, + pgfsetcolor: { signature: "m" }, + pgfsetinnerlinewidth: { signature: "m" }, + pgfsetinnerstrokecolor: { signature: "m" }, + pgfsetarrowsstart: { signature: "m" }, + pgfsetarrowsend: { signature: "m" }, + pgfsetarrows: { signature: "m" }, + pgfsetshortenstart: { signature: "m" }, + pgfsetshortenend: { signature: "m" }, + pgfsetfillcolor: { signature: "m" }, + // Decorations + pgfdeclaredecoration: { signature: "m m m" }, + state: { signature: "m o m" }, + pgfdecoratepath: { signature: "m m" }, + startpgfdecoration: { signature: "m" }, + pgfdecoration: { signature: "m" }, + pgfdecoratecurrentpath: { signature: "m" }, + pgfsetdecorationsegmenttransformation: { signature: "m" }, + pgfdeclaremetadecorate: { signature: "m m m" }, + pgfmetadecoration: { signature: "m" }, + startpgfmetadecoration: { signature: "m" }, + // Constructing paths + pgfpathmoveto: { signature: "m" }, + pgfpathlineto: { signature: "m" }, + pgfpathcurveto: { signature: "m m m" }, + pgfpathquadraticcurveto: { signature: "m m" }, + pgfpathcurvebetweentime: { signature: "m m m m m m" }, + pgfpathcurvebetweentimecontinue: { signature: "m m m m m m" }, + pgfpatharc: { signature: "m m m" }, + pgfpatharcaxes: { signature: "m m m m" }, + pgfpatharcto: { signature: "m m m m m m" }, + pgfpatharctoprecomputed: { signature: "m m m m m m m m" }, + pgfpathellipse: { signature: "m m m" }, + pgfpathcircle: { signature: "m m" }, + pgfpathrectangle: { signature: "m m" }, + pgfpathrectanglecorners: { signature: "m m" }, + pgfpathgrid: { signature: " o m m" }, + pgfpathparabola: { signature: "m m" }, + pgfpathsine: { signature: "m" }, + pgfpathcosine: { signature: "m" }, + pgfsetcornersarced: { signature: "m" }, + "pgf@protocolsizes": { signature: "m m" }, + // Specifying coordinates + pgfpoint: { signature: "m m" }, + pgfpointpolar: { signature: "m m m" }, + pgfpointxy: { signature: "m m" }, + pgfsetxvec: { signature: "m" }, + pgfsetyvec: { signature: "m" }, + pgfpointpolarxy: { signature: "m m" }, + pgfpointxyz: { signature: "m m m" }, + pgfsetzvec: { signature: "m" }, + pgfpointcylindrical: { signature: "m m m" }, + pgfpointspherical: { signature: "m m m" }, + pgfpointadd: { signature: "m m" }, + pgfpointscale: { signature: "m m" }, + pgfpointdiff: { signature: "m m" }, + pgfpointnormalised: { signature: "m" }, + pgfpointlineattime: { signature: "m m m" }, + pgfpointlineatdistance: { signature: "m m m" }, + pgfpointarcaxesattime: { signature: "m m m m m m" }, + pgfpointcurveattime: { signature: "m m m m m" }, + pgfpointborderrectangle: { signature: "m m" }, + pgfpointborderellipse: { signature: "m m" }, + pgfpointintersectionoflines: { signature: "m m m m" }, + pgfpointintersectionofcircles: { signature: "m m m m m" }, + pgfintersectionofpaths: { signature: "m m" }, + pgfpointintersectionsolution: { signature: "m" }, + pgfextractx: { signature: "m m" }, + pgfextracty: { signature: "m m" }, + pgfgetlastxy: { signature: "m m" }, + "pgf@process": { signature: "m" }, + // Heirarchical structres ... + pgfsetbaseline: { signature: "m" }, + pgfsetbaselinepointnow: { signature: "m" }, + pgfsetbaselinepointlater: { signature: "m" }, + pgftext: { signature: "o m", renderInfo: { pgfkeysArgs: true } }, + pgfuseid: { signature: "m" }, + pgfusetype: { signature: "m" }, + pgfidrefnextuse: { signature: "m m" }, + pgfidrefprevuse: { signature: "m m" }, + pgfaliasid: { signature: "m m" }, + pgfgaliasid: { signature: "m m" }, + pgfifidreferenced: { signature: "m m m" }, + pgfrdfabout: { signature: "m" }, + pgfrdfcontent: { signature: "m" }, + pgfrdfdatatype: { signature: "m" }, + pgfrdfhref: { signature: "m" }, + pgfrdfprefix: { signature: "m" }, + pgfrdfproperty: { signature: "m" }, + pgfrdfrel: { signature: "m" }, + pgfrdfresource: { signature: "m" }, + pgfrdfrev: { signature: "m" }, + pgfrdfsrc: { signature: "m" }, + pgfrdftypeof: { signature: "m" }, + pgfrdfvocab: { signature: "m" }, + pgferror: { signature: "m" }, + pgfwarning: { signature: "m" }, + path: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + draw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + fill: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + filldraw: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + pattern: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + shade: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + clip: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + useasboundingbox: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + node: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + coordinate: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + graph: { + signature: "u;", + renderInfo: { breakAround: true, tikzPathCommand: true } + }, + scoped: { + signature: "o o m", + argumentParser: tikzCommandArgumentParser, + renderInfo: { + namedArguments: ["animation", "options", "command"], + breakAround: true + } + } +}; +var macros13 = { + substitutecolormodel: { + signature: "m m", + renderInfo: { breakAround: true } + }, + selectcolormodel: { + signature: "m", + renderInfo: { breakAround: true } + }, + definecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + colorlet: { + signature: "o m o m", + renderInfo: { breakAround: true } + }, + definecolorset: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + providecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + preparecolor: { + signature: "o m m m", + renderInfo: { breakAround: true } + }, + preparecolorset: { + signature: "o m m m m", + renderInfo: { breakAround: true } + }, + DefineNamedColor: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + definecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + providecolors: { + signature: "m", + renderInfo: { breakAround: true } + }, + color: { signature: "o m", renderInfo: { breakAround: true } }, + textcolor: { signature: "o m m", renderInfo: { inParMode: true } }, + pagecolor: { signature: "o m" }, + colorbox: { signature: "o m m" }, + fcolorbox: { signature: "o m o m m" }, + boxframe: { signature: "o m" }, + testcolor: { signature: "o m" }, + blendcolors: { signature: "s m" }, + maskcolors: { signature: "o m" }, + definecolorseries: { + signature: "m m m o m o m", + renderInfo: { breakAround: true } + }, + resetcolorseries: { + signature: "o m", + renderInfo: { breakAround: true } + }, + rowcolors: { signature: "s o m m m" }, + extractcolorspec: { signature: "m m" }, + extractcolorspecs: { signature: "m m m" }, + convertcolorspec: { signature: "m m m m" } +}; +var environments13 = { + testcolors: { signature: "o", renderInfo: { pgfkeysArgs: true } } +}; +var fromRgb = ([r, g, b]) => Color2([r * 255, g * 255, b * 255], "rgb"); +var DVI_PS_NAMES = { + Apricot: Color2("#FBB982"), + Aquamarine: Color2("#00B5BE"), + Bittersweet: Color2("#C04F17"), + Black: Color2("#221E1F"), + Blue: Color2("#2D2F92"), + BlueGreen: Color2("#00B3B8"), + BlueViolet: Color2("#473992"), + BrickRed: Color2("#B6321C"), + Brown: Color2("#792500"), + BurntOrange: Color2("#F7921D"), + CadetBlue: Color2("#74729A"), + CarnationPink: Color2("#F282B4"), + Cerulean: Color2("#00A2E3"), + CornflowerBlue: Color2("#41B0E4"), + Cyan: Color2("#00AEEF"), + Dandelion: Color2("#FDBC42"), + DarkOrchid: Color2("#A4538A"), + Emerald: Color2("#00A99D"), + ForestGreen: Color2("#009B55"), + Fuchsia: Color2("#8C368C"), + Goldenrod: Color2("#FFDF42"), + Gray: Color2("#949698"), + Green: Color2("#00A64F"), + GreenYellow: Color2("#DFE674"), + JungleGreen: Color2("#00A99A"), + Lavender: Color2("#F49EC4"), + LimeGreen: Color2("#8DC73E"), + Magenta: Color2("#EC008C"), + Mahogany: Color2("#A9341F"), + Maroon: Color2("#AF3235"), + Melon: Color2("#F89E7B"), + MidnightBlue: Color2("#006795"), + Mulberry: Color2("#A93C93"), + NavyBlue: Color2("#006EB8"), + OliveGreen: Color2("#3C8031"), + Orange: Color2("#F58137"), + OrangeRed: Color2("#ED135A"), + Orchid: Color2("#AF72B0"), + Peach: Color2("#F7965A"), + Periwinkle: Color2("#7977B8"), + PineGreen: Color2("#008B72"), + Plum: Color2("#92268F"), + ProcessBlue: Color2("#00B0F0"), + Purple: Color2("#99479B"), + RawSienna: Color2("#974006"), + Red: Color2("#ED1B23"), + RedOrange: Color2("#F26035"), + RedViolet: Color2("#A1246B"), + Rhodamine: Color2("#EF559F"), + RoyalBlue: Color2("#0071BC"), + RoyalPurple: Color2("#613F99"), + RubineRed: Color2("#ED017D"), + Salmon: Color2("#F69289"), + SeaGreen: Color2("#3FBC9D"), + Sepia: Color2("#671800"), + SkyBlue: Color2("#46C5DD"), + SpringGreen: Color2("#C6DC67"), + Tan: Color2("#DA9D76"), + TealBlue: Color2("#00AEB3"), + Thistle: Color2("#D883B7"), + Turquoise: Color2("#00B4CE"), + Violet: Color2("#58429B"), + VioletRed: Color2("#EF58A0"), + White: Color2("#FFFFFF"), + WildStrawberry: Color2("#EE2967"), + Yellow: Color2("#FFF200"), + YellowGreen: Color2("#98CC70"), + YellowOrange: Color2("#FAA21A") +}; +var SVG_NAMES = { + AliceBlue: fromRgb([0.94, 0.972, 1]), + AntiqueWhite: fromRgb([0.98, 0.92, 0.844]), + Aqua: fromRgb([0, 1, 1]), + Aquamarine: fromRgb([0.498, 1, 0.83]), + Azure: fromRgb([0.94, 1, 1]), + Beige: fromRgb([0.96, 0.96, 0.864]), + Bisque: fromRgb([1, 0.894, 0.77]), + Black: fromRgb([0, 0, 0]), + BlanchedAlmond: fromRgb([1, 0.92, 0.804]), + Blue: fromRgb([0, 0, 1]), + BlueViolet: fromRgb([0.54, 0.17, 0.888]), + Brown: fromRgb([0.648, 0.165, 0.165]), + BurlyWood: fromRgb([0.87, 0.72, 0.53]), + CadetBlue: fromRgb([0.372, 0.62, 0.628]), + Chartreuse: fromRgb([0.498, 1, 0]), + Chocolate: fromRgb([0.824, 0.41, 0.116]), + Coral: fromRgb([1, 0.498, 0.312]), + CornflowerBlue: fromRgb([0.392, 0.585, 0.93]), + Cornsilk: fromRgb([1, 0.972, 0.864]), + Crimson: fromRgb([0.864, 0.08, 0.235]), + Cyan: fromRgb([0, 1, 1]), + DarkBlue: fromRgb([0, 0, 0.545]), + DarkCyan: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]), + DarkGray: fromRgb([0.664, 0.664, 0.664]), + DarkGreen: fromRgb([0, 0.392, 0]), + DarkGrey: fromRgb([0.664, 0.664, 0.664]), + DarkKhaki: fromRgb([0.74, 0.716, 0.42]), + DarkMagenta: fromRgb([0.545, 0, 0.545]), + DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]), + DarkOrange: fromRgb([1, 0.55, 0]), + DarkOrchid: fromRgb([0.6, 0.196, 0.8]), + DarkRed: fromRgb([0.545, 0, 0]), + DarkSalmon: fromRgb([0.912, 0.59, 0.48]), + DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]), + DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]), + DarkSlateGray: fromRgb([0.185, 0.31, 0.31]), + DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]), + DarkTurquoise: fromRgb([0, 0.808, 0.82]), + DarkViolet: fromRgb([0.58, 0, 0.828]), + DeepPink: fromRgb([1, 0.08, 0.576]), + DeepSkyBlue: fromRgb([0, 0.75, 1]), + DimGray: fromRgb([0.41, 0.41, 0.41]), + DimGrey: fromRgb([0.41, 0.41, 0.41]), + DodgerBlue: fromRgb([0.116, 0.565, 1]), + FireBrick: fromRgb([0.698, 0.132, 0.132]), + FloralWhite: fromRgb([1, 0.98, 0.94]), + ForestGreen: fromRgb([0.132, 0.545, 0.132]), + Fuchsia: fromRgb([1, 0, 1]), + Gainsboro: fromRgb([0.864, 0.864, 0.864]), + GhostWhite: fromRgb([0.972, 0.972, 1]), + Gold: fromRgb([1, 0.844, 0]), + Goldenrod: fromRgb([0.855, 0.648, 0.125]), + Gray: fromRgb([0.5, 0.5, 0.5]), + Green: fromRgb([0, 0.5, 0]), + GreenYellow: fromRgb([0.68, 1, 0.185]), + Grey: fromRgb([0.5, 0.5, 0.5]), + Honeydew: fromRgb([0.94, 1, 0.94]), + HotPink: fromRgb([1, 0.41, 0.705]), + IndianRed: fromRgb([0.804, 0.36, 0.36]), + Indigo: fromRgb([0.294, 0, 0.51]), + Ivory: fromRgb([1, 1, 0.94]), + Khaki: fromRgb([0.94, 0.9, 0.55]), + Lavender: fromRgb([0.9, 0.9, 0.98]), + LavenderBlush: fromRgb([1, 0.94, 0.96]), + LawnGreen: fromRgb([0.488, 0.99, 0]), + LemonChiffon: fromRgb([1, 0.98, 0.804]), + LightBlue: fromRgb([0.68, 0.848, 0.9]), + LightCoral: fromRgb([0.94, 0.5, 0.5]), + LightCyan: fromRgb([0.88, 1, 1]), + LightGoldenrod: fromRgb([0.933, 0.867, 0.51]), + LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]), + LightGray: fromRgb([0.828, 0.828, 0.828]), + LightGreen: fromRgb([0.565, 0.932, 0.565]), + LightGrey: fromRgb([0.828, 0.828, 0.828]), + LightPink: fromRgb([1, 0.712, 0.756]), + LightSalmon: fromRgb([1, 0.628, 0.48]), + LightSeaGreen: fromRgb([0.125, 0.698, 0.668]), + LightSkyBlue: fromRgb([0.53, 0.808, 0.98]), + LightSlateBlue: fromRgb([0.518, 0.44, 1]), + LightSlateGray: fromRgb([0.468, 0.532, 0.6]), + LightSlateGrey: fromRgb([0.468, 0.532, 0.6]), + LightSteelBlue: fromRgb([0.69, 0.77, 0.87]), + LightYellow: fromRgb([1, 1, 0.88]), + Lime: fromRgb([0, 1, 0]), + LimeGreen: fromRgb([0.196, 0.804, 0.196]), + Linen: fromRgb([0.98, 0.94, 0.9]), + Magenta: fromRgb([1, 0, 1]), + Maroon: fromRgb([0.5, 0, 0]), + MediumAquamarine: fromRgb([0.4, 0.804, 0.668]), + MediumBlue: fromRgb([0, 0, 0.804]), + MediumOrchid: fromRgb([0.73, 0.332, 0.828]), + MediumPurple: fromRgb([0.576, 0.44, 0.86]), + MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]), + MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]), + MediumSpringGreen: fromRgb([0, 0.98, 0.604]), + MediumTurquoise: fromRgb([0.284, 0.82, 0.8]), + MediumVioletRed: fromRgb([0.78, 0.084, 0.52]), + MidnightBlue: fromRgb([0.098, 0.098, 0.44]), + MintCream: fromRgb([0.96, 1, 0.98]), + MistyRose: fromRgb([1, 0.894, 0.884]), + Moccasin: fromRgb([1, 0.894, 0.71]), + NavajoWhite: fromRgb([1, 0.87, 0.68]), + Navy: fromRgb([0, 0, 0.5]), + NavyBlue: fromRgb([0, 0, 0.5]), + OldLace: fromRgb([0.992, 0.96, 0.9]), + Olive: fromRgb([0.5, 0.5, 0]), + OliveDrab: fromRgb([0.42, 0.556, 0.136]), + Orange: fromRgb([1, 0.648, 0]), + OrangeRed: fromRgb([1, 0.27, 0]), + Orchid: fromRgb([0.855, 0.44, 0.84]), + PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]), + PaleGreen: fromRgb([0.596, 0.985, 0.596]), + PaleTurquoise: fromRgb([0.688, 0.932, 0.932]), + PaleVioletRed: fromRgb([0.86, 0.44, 0.576]), + PapayaWhip: fromRgb([1, 0.936, 0.835]), + PeachPuff: fromRgb([1, 0.855, 0.725]), + Peru: fromRgb([0.804, 0.52, 0.248]), + Pink: fromRgb([1, 0.752, 0.796]), + Plum: fromRgb([0.868, 0.628, 0.868]), + PowderBlue: fromRgb([0.69, 0.88, 0.9]), + Purple: fromRgb([0.5, 0, 0.5]), + Red: fromRgb([1, 0, 0]), + RosyBrown: fromRgb([0.736, 0.56, 0.56]), + RoyalBlue: fromRgb([0.255, 0.41, 0.884]), + SaddleBrown: fromRgb([0.545, 0.27, 0.075]), + Salmon: fromRgb([0.98, 0.5, 0.448]), + SandyBrown: fromRgb([0.956, 0.644, 0.376]), + SeaGreen: fromRgb([0.18, 0.545, 0.34]), + Seashell: fromRgb([1, 0.96, 0.932]), + Sienna: fromRgb([0.628, 0.32, 0.176]), + Silver: fromRgb([0.752, 0.752, 0.752]), + SkyBlue: fromRgb([0.53, 0.808, 0.92]), + SlateBlue: fromRgb([0.415, 0.352, 0.804]), + SlateGray: fromRgb([0.44, 0.5, 0.565]), + SlateGrey: fromRgb([0.44, 0.5, 0.565]), + Snow: fromRgb([1, 0.98, 0.98]), + SpringGreen: fromRgb([0, 1, 0.498]), + SteelBlue: fromRgb([0.275, 0.51, 0.705]), + Tan: fromRgb([0.824, 0.705, 0.55]), + Teal: fromRgb([0, 0.5, 0.5]), + Thistle: fromRgb([0.848, 0.75, 0.848]), + Tomato: fromRgb([1, 0.39, 0.28]), + Turquoise: fromRgb([0.25, 0.88, 0.815]), + Violet: fromRgb([0.932, 0.51, 0.932]), + VioletRed: fromRgb([0.816, 0.125, 0.565]), + Wheat: fromRgb([0.96, 0.87, 0.7]), + White: fromRgb([1, 1, 1]), + WhiteSmoke: fromRgb([0.96, 0.96, 0.96]), + Yellow: fromRgb([1, 1, 0]), + YellowGreen: fromRgb([0.604, 0.804, 0.196]) +}; +var X11_NAMES = { + AntiqueWhite1: fromRgb([1, 0.936, 0.86]), + AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]), + AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]), + AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]), + Aquamarine1: fromRgb([0.498, 1, 0.83]), + Aquamarine2: fromRgb([0.464, 0.932, 0.776]), + Aquamarine3: fromRgb([0.4, 0.804, 0.668]), + Aquamarine4: fromRgb([0.27, 0.545, 0.455]), + Azure1: fromRgb([0.94, 1, 1]), + Azure2: fromRgb([0.88, 0.932, 0.932]), + Azure3: fromRgb([0.756, 0.804, 0.804]), + Azure4: fromRgb([0.512, 0.545, 0.545]), + Bisque1: fromRgb([1, 0.894, 0.77]), + Bisque2: fromRgb([0.932, 0.835, 0.716]), + Bisque3: fromRgb([0.804, 0.716, 0.62]), + Bisque4: fromRgb([0.545, 0.49, 0.42]), + Blue1: fromRgb([0, 0, 1]), + Blue2: fromRgb([0, 0, 0.932]), + Blue3: fromRgb([0, 0, 0.804]), + Blue4: fromRgb([0, 0, 0.545]), + Brown1: fromRgb([1, 0.25, 0.25]), + Brown2: fromRgb([0.932, 0.23, 0.23]), + Brown3: fromRgb([0.804, 0.2, 0.2]), + Brown4: fromRgb([0.545, 0.136, 0.136]), + Burlywood1: fromRgb([1, 0.828, 0.608]), + Burlywood2: fromRgb([0.932, 0.772, 0.57]), + Burlywood3: fromRgb([0.804, 0.668, 0.49]), + Burlywood4: fromRgb([0.545, 0.45, 0.332]), + CadetBlue1: fromRgb([0.596, 0.96, 1]), + CadetBlue2: fromRgb([0.556, 0.898, 0.932]), + CadetBlue3: fromRgb([0.48, 0.772, 0.804]), + CadetBlue4: fromRgb([0.325, 0.525, 0.545]), + Chartreuse1: fromRgb([0.498, 1, 0]), + Chartreuse2: fromRgb([0.464, 0.932, 0]), + Chartreuse3: fromRgb([0.4, 0.804, 0]), + Chartreuse4: fromRgb([0.27, 0.545, 0]), + Chocolate1: fromRgb([1, 0.498, 0.14]), + Chocolate2: fromRgb([0.932, 0.464, 0.13]), + Chocolate3: fromRgb([0.804, 0.4, 0.112]), + Chocolate4: fromRgb([0.545, 0.27, 0.075]), + Coral1: fromRgb([1, 0.448, 0.336]), + Coral2: fromRgb([0.932, 0.415, 0.312]), + Coral3: fromRgb([0.804, 0.356, 0.27]), + Coral4: fromRgb([0.545, 0.244, 0.185]), + Cornsilk1: fromRgb([1, 0.972, 0.864]), + Cornsilk2: fromRgb([0.932, 0.91, 0.804]), + Cornsilk3: fromRgb([0.804, 0.785, 0.694]), + Cornsilk4: fromRgb([0.545, 0.532, 0.47]), + Cyan1: fromRgb([0, 1, 1]), + Cyan2: fromRgb([0, 0.932, 0.932]), + Cyan3: fromRgb([0, 0.804, 0.804]), + Cyan4: fromRgb([0, 0.545, 0.545]), + DarkGoldenrod1: fromRgb([1, 0.725, 0.06]), + DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]), + DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]), + DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]), + DarkOliveGreen1: fromRgb([0.792, 1, 0.44]), + DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]), + DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]), + DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]), + DarkOrange1: fromRgb([1, 0.498, 0]), + DarkOrange2: fromRgb([0.932, 0.464, 0]), + DarkOrange3: fromRgb([0.804, 0.4, 0]), + DarkOrange4: fromRgb([0.545, 0.27, 0]), + DarkOrchid1: fromRgb([0.75, 0.244, 1]), + DarkOrchid2: fromRgb([0.698, 0.228, 0.932]), + DarkOrchid3: fromRgb([0.604, 0.196, 0.804]), + DarkOrchid4: fromRgb([0.408, 0.132, 0.545]), + DarkSeaGreen1: fromRgb([0.756, 1, 0.756]), + DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]), + DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]), + DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]), + DarkSlateGray1: fromRgb([0.592, 1, 1]), + DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]), + DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]), + DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]), + DeepPink1: fromRgb([1, 0.08, 0.576]), + DeepPink2: fromRgb([0.932, 0.07, 0.536]), + DeepPink3: fromRgb([0.804, 0.064, 0.464]), + DeepPink4: fromRgb([0.545, 0.04, 0.312]), + DeepSkyBlue1: fromRgb([0, 0.75, 1]), + DeepSkyBlue2: fromRgb([0, 0.698, 0.932]), + DeepSkyBlue3: fromRgb([0, 0.604, 0.804]), + DeepSkyBlue4: fromRgb([0, 0.408, 0.545]), + DodgerBlue1: fromRgb([0.116, 0.565, 1]), + DodgerBlue2: fromRgb([0.11, 0.525, 0.932]), + DodgerBlue3: fromRgb([0.094, 0.455, 0.804]), + DodgerBlue4: fromRgb([0.064, 0.305, 0.545]), + Firebrick1: fromRgb([1, 0.19, 0.19]), + Firebrick2: fromRgb([0.932, 0.172, 0.172]), + Firebrick3: fromRgb([0.804, 0.15, 0.15]), + Firebrick4: fromRgb([0.545, 0.1, 0.1]), + Gold1: fromRgb([1, 0.844, 0]), + Gold2: fromRgb([0.932, 0.79, 0]), + Gold3: fromRgb([0.804, 0.68, 0]), + Gold4: fromRgb([0.545, 0.46, 0]), + Goldenrod1: fromRgb([1, 0.756, 0.145]), + Goldenrod2: fromRgb([0.932, 0.705, 0.132]), + Goldenrod3: fromRgb([0.804, 0.608, 0.112]), + Goldenrod4: fromRgb([0.545, 0.41, 0.08]), + Green1: fromRgb([0, 1, 0]), + Green2: fromRgb([0, 0.932, 0]), + Green3: fromRgb([0, 0.804, 0]), + Green4: fromRgb([0, 0.545, 0]), + Honeydew1: fromRgb([0.94, 1, 0.94]), + Honeydew2: fromRgb([0.88, 0.932, 0.88]), + Honeydew3: fromRgb([0.756, 0.804, 0.756]), + Honeydew4: fromRgb([0.512, 0.545, 0.512]), + HotPink1: fromRgb([1, 0.43, 0.705]), + HotPink2: fromRgb([0.932, 0.415, 0.655]), + HotPink3: fromRgb([0.804, 0.376, 0.565]), + HotPink4: fromRgb([0.545, 0.228, 0.385]), + IndianRed1: fromRgb([1, 0.415, 0.415]), + IndianRed2: fromRgb([0.932, 0.39, 0.39]), + IndianRed3: fromRgb([0.804, 0.332, 0.332]), + IndianRed4: fromRgb([0.545, 0.228, 0.228]), + Ivory1: fromRgb([1, 1, 0.94]), + Ivory2: fromRgb([0.932, 0.932, 0.88]), + Ivory3: fromRgb([0.804, 0.804, 0.756]), + Ivory4: fromRgb([0.545, 0.545, 0.512]), + Khaki1: fromRgb([1, 0.965, 0.56]), + Khaki2: fromRgb([0.932, 0.9, 0.52]), + Khaki3: fromRgb([0.804, 0.776, 0.45]), + Khaki4: fromRgb([0.545, 0.525, 0.305]), + LavenderBlush1: fromRgb([1, 0.94, 0.96]), + LavenderBlush2: fromRgb([0.932, 0.88, 0.898]), + LavenderBlush3: fromRgb([0.804, 0.756, 0.772]), + LavenderBlush4: fromRgb([0.545, 0.512, 0.525]), + LemonChiffon1: fromRgb([1, 0.98, 0.804]), + LemonChiffon2: fromRgb([0.932, 0.912, 0.75]), + LemonChiffon3: fromRgb([0.804, 0.79, 0.648]), + LemonChiffon4: fromRgb([0.545, 0.536, 0.44]), + LightBlue1: fromRgb([0.75, 0.936, 1]), + LightBlue2: fromRgb([0.698, 0.875, 0.932]), + LightBlue3: fromRgb([0.604, 0.752, 0.804]), + LightBlue4: fromRgb([0.408, 0.512, 0.545]), + LightCyan1: fromRgb([0.88, 1, 1]), + LightCyan2: fromRgb([0.82, 0.932, 0.932]), + LightCyan3: fromRgb([0.705, 0.804, 0.804]), + LightCyan4: fromRgb([0.48, 0.545, 0.545]), + LightGoldenrod1: fromRgb([1, 0.925, 0.545]), + LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]), + LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]), + LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]), + LightPink1: fromRgb([1, 0.684, 0.725]), + LightPink2: fromRgb([0.932, 0.635, 0.68]), + LightPink3: fromRgb([0.804, 0.55, 0.585]), + LightPink4: fromRgb([0.545, 0.372, 0.396]), + LightSalmon1: fromRgb([1, 0.628, 0.48]), + LightSalmon2: fromRgb([0.932, 0.585, 0.448]), + LightSalmon3: fromRgb([0.804, 0.505, 0.385]), + LightSalmon4: fromRgb([0.545, 0.34, 0.26]), + LightSkyBlue1: fromRgb([0.69, 0.888, 1]), + LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]), + LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]), + LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]), + LightSteelBlue1: fromRgb([0.792, 0.884, 1]), + LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]), + LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]), + LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]), + LightYellow1: fromRgb([1, 1, 0.88]), + LightYellow2: fromRgb([0.932, 0.932, 0.82]), + LightYellow3: fromRgb([0.804, 0.804, 0.705]), + LightYellow4: fromRgb([0.545, 0.545, 0.48]), + Magenta1: fromRgb([1, 0, 1]), + Magenta2: fromRgb([0.932, 0, 0.932]), + Magenta3: fromRgb([0.804, 0, 0.804]), + Magenta4: fromRgb([0.545, 0, 0.545]), + Maroon1: fromRgb([1, 0.204, 0.7]), + Maroon2: fromRgb([0.932, 0.19, 0.655]), + Maroon3: fromRgb([0.804, 0.16, 0.565]), + Maroon4: fromRgb([0.545, 0.11, 0.385]), + MediumOrchid1: fromRgb([0.88, 0.4, 1]), + MediumOrchid2: fromRgb([0.82, 0.372, 0.932]), + MediumOrchid3: fromRgb([0.705, 0.32, 0.804]), + MediumOrchid4: fromRgb([0.48, 0.215, 0.545]), + MediumPurple1: fromRgb([0.67, 0.51, 1]), + MediumPurple2: fromRgb([0.624, 0.475, 0.932]), + MediumPurple3: fromRgb([0.536, 0.408, 0.804]), + MediumPurple4: fromRgb([0.365, 0.28, 0.545]), + MistyRose1: fromRgb([1, 0.894, 0.884]), + MistyRose2: fromRgb([0.932, 0.835, 0.824]), + MistyRose3: fromRgb([0.804, 0.716, 0.71]), + MistyRose4: fromRgb([0.545, 0.49, 0.484]), + NavajoWhite1: fromRgb([1, 0.87, 0.68]), + NavajoWhite2: fromRgb([0.932, 0.81, 0.63]), + NavajoWhite3: fromRgb([0.804, 0.7, 0.545]), + NavajoWhite4: fromRgb([0.545, 0.475, 0.37]), + OliveDrab1: fromRgb([0.752, 1, 0.244]), + OliveDrab2: fromRgb([0.7, 0.932, 0.228]), + OliveDrab3: fromRgb([0.604, 0.804, 0.196]), + OliveDrab4: fromRgb([0.41, 0.545, 0.132]), + Orange1: fromRgb([1, 0.648, 0]), + Orange2: fromRgb([0.932, 0.604, 0]), + Orange3: fromRgb([0.804, 0.52, 0]), + Orange4: fromRgb([0.545, 0.352, 0]), + OrangeRed1: fromRgb([1, 0.27, 0]), + OrangeRed2: fromRgb([0.932, 0.25, 0]), + OrangeRed3: fromRgb([0.804, 0.215, 0]), + OrangeRed4: fromRgb([0.545, 0.145, 0]), + Orchid1: fromRgb([1, 0.512, 0.98]), + Orchid2: fromRgb([0.932, 0.48, 0.912]), + Orchid3: fromRgb([0.804, 0.41, 0.79]), + Orchid4: fromRgb([0.545, 0.28, 0.536]), + PaleGreen1: fromRgb([0.604, 1, 0.604]), + PaleGreen2: fromRgb([0.565, 0.932, 0.565]), + PaleGreen3: fromRgb([0.488, 0.804, 0.488]), + PaleGreen4: fromRgb([0.33, 0.545, 0.33]), + PaleTurquoise1: fromRgb([0.732, 1, 1]), + PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]), + PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]), + PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]), + PaleVioletRed1: fromRgb([1, 0.51, 0.67]), + PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]), + PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]), + PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]), + PeachPuff1: fromRgb([1, 0.855, 0.725]), + PeachPuff2: fromRgb([0.932, 0.796, 0.68]), + PeachPuff3: fromRgb([0.804, 0.688, 0.585]), + PeachPuff4: fromRgb([0.545, 0.468, 0.396]), + Pink1: fromRgb([1, 0.71, 0.772]), + Pink2: fromRgb([0.932, 0.664, 0.72]), + Pink3: fromRgb([0.804, 0.57, 0.62]), + Pink4: fromRgb([0.545, 0.39, 0.424]), + Plum1: fromRgb([1, 0.732, 1]), + Plum2: fromRgb([0.932, 0.684, 0.932]), + Plum3: fromRgb([0.804, 0.59, 0.804]), + Plum4: fromRgb([0.545, 0.4, 0.545]), + Purple1: fromRgb([0.608, 0.19, 1]), + Purple2: fromRgb([0.57, 0.172, 0.932]), + Purple3: fromRgb([0.49, 0.15, 0.804]), + Purple4: fromRgb([0.332, 0.1, 0.545]), + Red1: fromRgb([1, 0, 0]), + Red2: fromRgb([0.932, 0, 0]), + Red3: fromRgb([0.804, 0, 0]), + Red4: fromRgb([0.545, 0, 0]), + RosyBrown1: fromRgb([1, 0.756, 0.756]), + RosyBrown2: fromRgb([0.932, 0.705, 0.705]), + RosyBrown3: fromRgb([0.804, 0.608, 0.608]), + RosyBrown4: fromRgb([0.545, 0.41, 0.41]), + RoyalBlue1: fromRgb([0.284, 0.464, 1]), + RoyalBlue2: fromRgb([0.264, 0.43, 0.932]), + RoyalBlue3: fromRgb([0.228, 0.372, 0.804]), + RoyalBlue4: fromRgb([0.152, 0.25, 0.545]), + Salmon1: fromRgb([1, 0.55, 0.41]), + Salmon2: fromRgb([0.932, 0.51, 0.385]), + Salmon3: fromRgb([0.804, 0.44, 0.33]), + Salmon4: fromRgb([0.545, 0.298, 0.224]), + SeaGreen1: fromRgb([0.33, 1, 0.624]), + SeaGreen2: fromRgb([0.305, 0.932, 0.58]), + SeaGreen3: fromRgb([0.264, 0.804, 0.5]), + SeaGreen4: fromRgb([0.18, 0.545, 0.34]), + Seashell1: fromRgb([1, 0.96, 0.932]), + Seashell2: fromRgb([0.932, 0.898, 0.87]), + Seashell3: fromRgb([0.804, 0.772, 0.75]), + Seashell4: fromRgb([0.545, 0.525, 0.51]), + Sienna1: fromRgb([1, 0.51, 0.28]), + Sienna2: fromRgb([0.932, 0.475, 0.26]), + Sienna3: fromRgb([0.804, 0.408, 0.224]), + Sienna4: fromRgb([0.545, 0.28, 0.15]), + SkyBlue1: fromRgb([0.53, 0.808, 1]), + SkyBlue2: fromRgb([0.494, 0.752, 0.932]), + SkyBlue3: fromRgb([0.424, 0.65, 0.804]), + SkyBlue4: fromRgb([0.29, 0.44, 0.545]), + SlateBlue1: fromRgb([0.512, 0.435, 1]), + SlateBlue2: fromRgb([0.48, 0.404, 0.932]), + SlateBlue3: fromRgb([0.41, 0.35, 0.804]), + SlateBlue4: fromRgb([0.28, 0.235, 0.545]), + SlateGray1: fromRgb([0.776, 0.888, 1]), + SlateGray2: fromRgb([0.725, 0.828, 0.932]), + SlateGray3: fromRgb([0.624, 0.712, 0.804]), + SlateGray4: fromRgb([0.424, 0.484, 0.545]), + Snow1: fromRgb([1, 0.98, 0.98]), + Snow2: fromRgb([0.932, 0.912, 0.912]), + Snow3: fromRgb([0.804, 0.79, 0.79]), + Snow4: fromRgb([0.545, 0.536, 0.536]), + SpringGreen1: fromRgb([0, 1, 0.498]), + SpringGreen2: fromRgb([0, 0.932, 0.464]), + SpringGreen3: fromRgb([0, 0.804, 0.4]), + SpringGreen4: fromRgb([0, 0.545, 0.27]), + SteelBlue1: fromRgb([0.39, 0.72, 1]), + SteelBlue2: fromRgb([0.36, 0.675, 0.932]), + SteelBlue3: fromRgb([0.31, 0.58, 0.804]), + SteelBlue4: fromRgb([0.21, 0.392, 0.545]), + Tan1: fromRgb([1, 0.648, 0.31]), + Tan2: fromRgb([0.932, 0.604, 0.288]), + Tan3: fromRgb([0.804, 0.52, 0.248]), + Tan4: fromRgb([0.545, 0.352, 0.17]), + Thistle1: fromRgb([1, 0.884, 1]), + Thistle2: fromRgb([0.932, 0.824, 0.932]), + Thistle3: fromRgb([0.804, 0.71, 0.804]), + Thistle4: fromRgb([0.545, 0.484, 0.545]), + Tomato1: fromRgb([1, 0.39, 0.28]), + Tomato2: fromRgb([0.932, 0.36, 0.26]), + Tomato3: fromRgb([0.804, 0.31, 0.224]), + Tomato4: fromRgb([0.545, 0.21, 0.15]), + Turquoise1: fromRgb([0, 0.96, 1]), + Turquoise2: fromRgb([0, 0.898, 0.932]), + Turquoise3: fromRgb([0, 0.772, 0.804]), + Turquoise4: fromRgb([0, 0.525, 0.545]), + VioletRed1: fromRgb([1, 0.244, 0.59]), + VioletRed2: fromRgb([0.932, 0.228, 0.55]), + VioletRed3: fromRgb([0.804, 0.196, 0.47]), + VioletRed4: fromRgb([0.545, 0.132, 0.32]), + Wheat1: fromRgb([1, 0.905, 0.73]), + Wheat2: fromRgb([0.932, 0.848, 0.684]), + Wheat3: fromRgb([0.804, 0.73, 0.59]), + Wheat4: fromRgb([0.545, 0.494, 0.4]), + Yellow1: fromRgb([1, 1, 0]), + Yellow2: fromRgb([0.932, 0.932, 0]), + Yellow3: fromRgb([0.804, 0.804, 0]), + Yellow4: fromRgb([0.545, 0.545, 0]), + Gray0: fromRgb([0.745, 0.745, 0.745]), + Green0: fromRgb([0, 1, 0]), + Grey0: fromRgb([0.745, 0.745, 0.745]), + Maroon0: fromRgb([0.69, 0.19, 0.376]), + Purple0: fromRgb([0.628, 0.125, 0.94]) +}; +var XColorCoreModelToColor = { + rgb: ([r, g, b]) => Color2([r * 255, g * 255, b * 255], "rgb"), + cmy: ([c, m, y]) => XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]), + cmyk: ([c, m, y, k]) => Color2([c * 255, m * 255, y * 255, k * 100], "cmyk"), + hsb: ([h, s2, b]) => Color2([h * 360, s2 * 100, b * 100], "hsv"), + gray: ([v]) => Color2([v * 255, v * 255, v * 255], "rgb") +}; +({ + // Core colors + red: XColorCoreModelToColor.rgb([1, 0, 0]), + green: XColorCoreModelToColor.rgb([0, 1, 0]), + blue: XColorCoreModelToColor.rgb([0, 0, 1]), + brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]), + lime: XColorCoreModelToColor.rgb([0.75, 1, 0]), + orange: XColorCoreModelToColor.rgb([1, 0.5, 0]), + pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]), + purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]), + teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]), + violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]), + cyan: XColorCoreModelToColor.rgb([0, 1, 1]), + magenta: XColorCoreModelToColor.rgb([1, 0, 1]), + yellow: XColorCoreModelToColor.rgb([1, 1, 0]), + olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]), + black: XColorCoreModelToColor.rgb([0, 0, 0]), + darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]), + gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]), + lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]), + white: XColorCoreModelToColor.rgb([1, 1, 1]), + ...DVI_PS_NAMES, + ...SVG_NAMES, + ...X11_NAMES +}); +var macros14 = { + NewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + NewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + RenewDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + ProvideDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + DeclareDocumentEnvironment: { + signature: "m m m m", + renderInfo: { breakAround: true } + }, + NewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RenewExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + ProvideExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + DeclareExpandableDocumentCommand: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + RequirePackage: { + signature: "o m", + renderInfo: { pgfkeysArgs: true, breakAround: true } + }, + DeclareOption: { signature: "m m", renderInfo: { breakAround: true } } +}; +var environments14 = {}; +var macros15 = { + mode: { signature: "s d<> d{}", renderInfo: { breakAround: true } }, + insertnavigation: { signature: "m", renderInfo: { breakAround: true } }, + insertsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortauthor: { signature: "o", renderInfo: { breakAround: true } }, + insertshortdate: { signature: "o", renderInfo: { breakAround: true } }, + insertshortinstitute: { signature: "o", renderInfo: { breakAround: true } }, + insertshortpart: { signature: "o", renderInfo: { breakAround: true } }, + insertshorttitle: { signature: "o", renderInfo: { breakAround: true } }, + insertsubsectionnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + insertsubsectionnavigationhorizontal: { + signature: "m m m", + renderInfo: { breakAround: true } + }, + insertverticalnavigation: { + signature: "m", + renderInfo: { breakAround: true } + }, + usebeamercolor: { signature: "s m", renderInfo: { breakAround: true } }, + usebeamertemplate: { signature: "s m", renderInfo: { breakAround: true } }, + setbeamercolor: { + signature: "m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamersize: { + signature: "m o o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + setbeamertemplate: { + signature: "m o o d{}", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + newcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + renewcommand: { + signature: "s d<> +m o +o +m", + renderInfo: { + breakAround: true, + namedArguments: [ + "starred", + null, + "name", + "numArgs", + "default", + "body" + ] + } + }, + newenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + renewenvironment: { + signature: "s d<> m o o m m", + renderInfo: { breakAround: true } + }, + resetcounteronoverlays: { + signature: "m", + renderInfo: { breakAround: true } + }, + resetcountonoverlays: { signature: "m", renderInfo: { breakAround: true } }, + logo: { signature: "m", renderInfo: { breakAround: true } }, + frametitle: { signature: "d<> o m", renderInfo: { breakAround: true } }, + framesubtitle: { signature: "d<> m", renderInfo: { breakAround: true } }, + pause: { signature: "o" }, + onslide: { signature: "t+ t* d<> d{}" }, + only: { signature: "d<> m d<>" }, + uncover: { signature: "d<> m" }, + visible: { signature: "d<> m" }, + invisible: { signature: "d<> m" }, + alt: { signature: "d<> m m d<>" }, + temporal: { signature: "r<> m m m" }, + item: { + signature: "d<> o d<>", + renderInfo: { + hangingIndent: true, + namedArguments: [null, "label", null] + } + }, + label: { signature: "d<> o m" }, + // cleveref adds an optional argument to label; this gives maximum compatibility. + action: { signature: "d<> m" }, + beamerdefaultoverlayspecification: { signature: "m" }, + titlegraphic: { signature: "m", renderInfo: { breakAround: true } }, + subject: { signature: "m", renderInfo: { breakAround: true } }, + keywords: { signature: "m", renderInfo: { breakAround: true } }, + lecture: { signature: "o m m", renderInfo: { breakAround: true } }, + partpage: { renderInfo: { breakAround: true } }, + sectionpage: { renderInfo: { breakAround: true } }, + subsectionpage: { renderInfo: { breakAround: true } }, + AtBeginLecture: { signature: "m", renderInfo: { breakAround: true } }, + AtBeginPart: { signature: "m", renderInfo: { breakAround: true } }, + tableofcontents: { + signature: "o", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + againframe: { signature: "d<> o o m", renderInfo: { breakAround: true } }, + framezoom: { + signature: "r<> r<> o r() r()", + renderInfo: { breakAround: true } + }, + column: { signature: "d<> o m", renderInfo: { breakAround: true } }, + animate: { signature: "r<>", renderInfo: { breakAround: true } }, + animatevalue: { signature: "r<> m m m", renderInfo: { breakAround: true } }, + sound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinksound: { + signature: "o m m", + renderInfo: { breakAround: true, pgfkeysArgs: true } + }, + hyperlinkmute: { signature: "m", renderInfo: { breakAround: true } }, + // These signatures conflict with the default signatures. + // Care must be taken when processing an AST. + section: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + subsubsection: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + part: { + signature: "s d<> o m", + renderInfo: { + breakAround: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + }, + bibitem: { + signature: "s d<> o m", + renderInfo: { + hangingIndent: true, + namedArguments: ["starred", null, "tocTitle", "title"] + } + } +}; +var environments15 = { + frame: { + signature: "!d<> !o !o !d{} !d{}" + }, + block: { + signature: "!d<> !d{} !d<>" + }, + alertblock: { + signature: "!d<> !d{} !d<>" + }, + exampleblock: { + signature: "!d<> !d{} !d<>" + }, + onlyenv: { + signature: "!d<>" + }, + altenv: { + signature: "!d<> m m m m !d<>" + }, + overlayarea: { signature: "m m" }, + overprint: { signature: "o" }, + actionenv: { signature: "!d<>" }, + columns: { signature: "d<> o" }, + column: { signature: "d<> o m" } +}; +var macros16 = { + columnbreak: { renderInfo: { breakAround: true } } +}; +var environments16 = { + multicols: { + signature: "m o o" + }, + "multicols*": { + signature: "m o o" + } +}; +var macroInfo = { + cleveref: macros, + exam: macros2, + geometry: macros3, + hyperref: macros4, + latex2e: macros5, + listings: macros6, + makeidx: macros7, + mathtools: macros8, + minted: macros9, + nicematrix: macros10, + systeme: macros11, + tikz: macros12, + xcolor: macros13, + xparse: macros14, + beamer: macros15, + multicol: macros16 +}; +var environmentInfo = { + cleveref: environments, + exam: environments2, + geometry: environments3, + hyperref: environments4, + latex2e: environments5, + listings: environments6, + makeidx: environments7, + mathtools: environments8, + minted: environments9, + nicematrix: environments10, + systeme: environments11, + tikz: environments12, + xcolor: environments13, + xparse: environments14, + beamer: environments15, + multicol: environments16 +}; +function processEnvironment(envNode, envInfo) { + if (envInfo.signature && envNode.args == null) { + const { args } = gobbleArguments(envNode.content, envInfo.signature); + envNode.args = args; + } + updateRenderInfo(envNode, envInfo.renderInfo); + if (typeof envInfo.processContent === "function") { + envNode.content = envInfo.processContent(envNode.content); + } +} +function findRegionInArray(tree, start, end) { + const ret = []; + let currRegion = { start: void 0, end: tree.length }; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (start(node)) { + currRegion.start = i; + } + if (end(node)) { + currRegion.end = i + 1; + ret.push(currRegion); + currRegion = { start: void 0, end: tree.length }; + } + } + if (currRegion.start != null) { + ret.push(currRegion); + } + return ret; +} +function refineRegions(regions) { + const _regions = [...regions]; + _regions.sort((a, b) => a.start - b.start); + const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end])); + const cutPoints = Array.from(cutPointsSet); + cutPoints.sort((a, b) => a - b); + const retRegions = []; + const retRegionsContainedIn = []; + let seekIndex = 0; + for (let i = 0; i < cutPoints.length - 1; i++) { + const start = cutPoints[i]; + const end = cutPoints[i + 1]; + const region = { start, end }; + const regionContainedIn = /* @__PURE__ */ new Set(); + let encounteredEndPastStart = false; + for (let j = seekIndex; j < _regions.length; j++) { + const superRegion = _regions[j]; + if (superRegion.end >= region.start) { + encounteredEndPastStart = true; + } + if (!encounteredEndPastStart && superRegion.end < region.start) { + seekIndex = j + 1; + continue; + } + if (superRegion.start > end) { + break; + } + if (superRegion.start <= region.start && superRegion.end >= region.end) { + encounteredEndPastStart = true; + regionContainedIn.add(superRegion); + } + } + if (regionContainedIn.size > 0) { + retRegions.push(region); + retRegionsContainedIn.push(regionContainedIn); + } + } + return { regions: retRegions, regionsContainedIn: retRegionsContainedIn }; +} +function splitByRegions(array, regionsRecord) { + const ret = []; + const indices = [0, array.length]; + const reverseMap = {}; + for (const [key, records] of Object.entries(regionsRecord)) { + indices.push( + ...records.flatMap((r) => { + reverseMap["" + [r.start, r.end]] = key; + return [r.start, r.end]; + }) + ); + } + indices.sort((a, b) => a - b); + for (let i = 0; i < indices.length - 1; i++) { + const start = indices[i]; + const end = indices[i + 1]; + if (start === end) { + continue; + } + const regionKey = reverseMap["" + [start, end]]; + ret.push([regionKey || null, array.slice(start, end)]); + } + return ret; +} +function escapeRegExp(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function buildWordRegex(allowedSet) { + const regexpStr = `^(${["\\p{L}"].concat(Array.from(allowedSet).map(escapeRegExp)).join("|")})*`; + return new RegExp(regexpStr, "u"); +} +function hasReparsableMacroNamesInArray(tree, allowedTokens) { + for (let i = 0; i < tree.length; i++) { + const macro = tree[i]; + const string = tree[i + 1]; + if (match.anyMacro(macro) && match.anyString(string)) { + if (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0))) { + return true; + } + } + } + return false; +} +function hasReparsableMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + let ret = false; + visit( + tree, + (nodes) => { + if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) { + ret = true; + return EXIT; + } + }, + { includeArrays: true, test: Array.isArray } + ); + return ret; +} +function reparseMacroNamesInArray(tree, allowedTokens) { + var _a, _b, _c; + const regex = buildWordRegex(allowedTokens); + let i = 0; + while (i < tree.length) { + const macro = tree[i]; + const string = tree[i + 1]; + if (match.anyMacro(macro) && // The _^ macros in math mode should not be extended no-matter what; + // So we check to make sure that the macro we're dealing with has the default escape token. + (macro.escapeToken == null || macro.escapeToken === "\\") && match.anyString(string) && // There are two options. Either the macro ends with the special character, + // e.g. `\@foo` or the special character starts the next string, e.g. `\foo@`. + (allowedTokens.has( + macro.content.charAt(macro.content.length - 1) + ) || allowedTokens.has(string.content.charAt(0)))) { + const match3 = string.content.match(regex); + const takeable = match3 ? match3[0] : ""; + if (takeable.length > 0) { + if (takeable.length === string.content.length) { + macro.content += string.content; + tree.splice(i + 1, 1); + if (macro.position && ((_a = string.position) == null ? void 0 : _a.end)) { + macro.position.end = string.position.end; + } + } else { + macro.content += takeable; + string.content = string.content.slice(takeable.length); + if ((_b = macro.position) == null ? void 0 : _b.end) { + macro.position.end.offset += takeable.length; + macro.position.end.column += takeable.length; + } + if ((_c = string.position) == null ? void 0 : _c.start) { + string.position.start.offset += takeable.length; + string.position.start.column += takeable.length; + } + } + } else { + i++; + } + } else { + ++i; + } + } +} +function reparseMacroNames(tree, allowedTokens) { + if (typeof allowedTokens === "string") { + allowedTokens = new Set(allowedTokens.split("")); + } + const _allowedTokens = allowedTokens; + for (const v of _allowedTokens) { + if (v.length > 1) { + throw new Error( + `Only single characters are allowed as \`allowedTokens\` when reparsing macro names, not \`${v}\`.` + ); + } + } + visit( + tree, + (nodes) => { + reparseMacroNamesInArray(nodes, _allowedTokens); + }, + { includeArrays: true, test: Array.isArray } + ); +} +var expl3Find = { + start: match.createMacroMatcher(["ExplSyntaxOn"]), + end: match.createMacroMatcher(["ExplSyntaxOff"]) +}; +var atLetterFind = { + start: match.createMacroMatcher(["makeatletter"]), + end: match.createMacroMatcher(["makeatother"]) +}; +function findExpl3AndAtLetterRegionsInArray(tree) { + const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end); + const atLetter = findRegionInArray( + tree, + atLetterFind.start, + atLetterFind.end + ); + const regionMap = new Map([ + ...expl3.map((x) => [x, "expl"]), + ...atLetter.map((x) => [x, "atLetter"]) + ]); + const all = refineRegions([...expl3, ...atLetter]); + const ret = { + explOnly: [], + atLetterOnly: [], + both: [] + }; + for (let i = 0; i < all.regions.length; i++) { + const region = all.regions[i]; + const containedIn = all.regionsContainedIn[i]; + if (containedIn.size === 2) { + ret.both.push(region); + continue; + } + for (const v of containedIn.values()) { + if (regionMap.get(v) === "expl") { + ret.explOnly.push(region); + } + if (regionMap.get(v) === "atLetter") { + ret.atLetterOnly.push(region); + } + } + } + ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1); + ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1); + ret.both = ret.both.filter((r) => r.end - r.start > 1); + return ret; +} +var atLetterSet = /* @__PURE__ */ new Set(["@"]); +var explSet = /* @__PURE__ */ new Set(["_", ":"]); +var bothSet = /* @__PURE__ */ new Set(["_", ":", "@"]); +function reparseExpl3AndAtLetterRegions(tree) { + visit( + tree, + { + leave: (nodes) => { + const regions = findExpl3AndAtLetterRegionsInArray(nodes); + const totalNumRegions = regions.both.length + regions.atLetterOnly.length + regions.explOnly.length; + if (totalNumRegions === 0) { + return; + } + const splits = splitByRegions(nodes, regions); + const processed = []; + for (const [key, slice2] of splits) { + switch (key) { + case null: + processed.push(...slice2); + continue; + case "atLetterOnly": + reparseMacroNames(slice2, atLetterSet); + processed.push(...slice2); + continue; + case "explOnly": + reparseMacroNames(slice2, explSet); + processed.push(...slice2); + continue; + case "both": + reparseMacroNames(slice2, bothSet); + processed.push(...slice2); + continue; + default: + throw new Error( + `Unexpected case when splitting ${key}` + ); + } + } + nodes.length = 0; + nodes.push(...processed); + return SKIP; + } + }, + { includeArrays: true, test: Array.isArray } + ); +} +var unifiedLatexAstComplier = function unifiedLatexAstComplier2() { + Object.assign(this, { Compiler: (x) => x }); +}; +function parseMinimal(str) { + return LatexPegParser.parse(str); +} +function parseMathMinimal(str) { + return LatexPegParser.parse(str, { startRule: "math" }); +} +var unifiedLatexFromStringMinimal = function unifiedLatexFromStringMinimal2(options2) { + const parser2 = (str) => { + if ((options2 == null ? void 0 : options2.mode) === "math") { + return { + type: "root", + content: parseMathMinimal(str), + _renderInfo: { inMathMode: true } + }; + } + return parseMinimal(str); + }; + Object.assign(this, { Parser: parser2 }); +}; +function unifiedLatexReparseMathConstructPlugin({ + mathEnvs, + mathMacros +}) { + const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + const isMathMacro = match.createMacroMatcher(mathMacros); + return (tree) => { + visit( + tree, + (node) => { + if (match.anyMacro(node)) { + for (const arg2 of node.args || []) { + if (arg2.content.length > 0 && !wasParsedInMathMode(arg2.content)) { + arg2.content = parseMathMinimal( + printRaw(arg2.content) + ); + } + } + } + if (match.anyEnvironment(node)) { + if (!wasParsedInMathMode(node.content)) { + node.content = parseMathMinimal(printRaw(node.content)); + } + } + }, + { + test: (node) => isMathEnvironment(node) || isMathMacro(node) + } + ); + }; +} +function wasParsedInMathMode(nodes) { + return !nodes.some( + (node) => ( + // If there are multi-char strings or ^ and _ have been parsed as strings, we know + // that we were not parsed in math mode. + match.anyString(node) && node.content.length > 1 || match.string(node, "^") || match.string(node, "_") + ) + ); +} +var unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse2(options2) { + const { environments: environments17 = {}, macros: macros17 = {} } = options2 || {}; + const mathMacros = Object.fromEntries( + Object.entries(macros17).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathEnvs = Object.fromEntries( + Object.entries(environments17).filter( + ([_, info]) => { + var _a; + return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true; + } + ) + ); + const mathReparser = unifiedLatexReparseMathConstructPlugin({ + mathEnvs: Object.keys(mathEnvs), + mathMacros: Object.keys(mathMacros) + }); + const isRelevantEnvironment = match.createEnvironmentMatcher(environments17); + const isRelevantMathEnvironment = match.createEnvironmentMatcher(mathEnvs); + return (tree) => { + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, mathMacros); + }, + leave: (node) => { + if (!isRelevantMathEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments17[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + mathReparser(tree); + visit( + tree, + { + enter: (nodes) => { + if (!Array.isArray(nodes)) { + return; + } + attachMacroArgsInArray(nodes, macros17); + }, + leave: (node) => { + if (!isRelevantEnvironment(node)) { + return; + } + const envName = printRaw(node.env); + const envInfo = environments17[envName]; + if (!envInfo) { + throw new Error( + `Could not find environment info for environment "${envName}"` + ); + } + processEnvironment(node, envInfo); + } + }, + { includeArrays: true } + ); + }; +}; +var unifiedLatexProcessAtLetterAndExplMacros = function unifiedLatexProcessAtLetterAndExplMacros2(options2) { + let { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = options2 || {}; + return (tree) => { + reparseExpl3AndAtLetterRegions(tree); + if (atLetter || expl3) { + autodetectExpl3AndAtLetter = false; + } + if (autodetectExpl3AndAtLetter) { + atLetter = hasReparsableMacroNames(tree, "@"); + expl3 = hasReparsableMacroNames(tree, "_"); + } + const charSet = /* @__PURE__ */ new Set(); + if (atLetter) { + charSet.add("@"); + } + if (expl3) { + charSet.add(":"); + charSet.add("_"); + } + if (charSet.size > 0) { + reparseMacroNames(tree, charSet); + } + }; +}; +var unifiedLatexFromString = function unifiedLatexFromString2(options2) { + const { + mode = "regular", + macros: macros17 = {}, + environments: environments17 = {}, + flags: { + atLetter = false, + expl3 = false, + autodetectExpl3AndAtLetter = false + } = {} + } = options2 || {}; + const allMacroInfo = Object.assign( + {}, + ...Object.values(macroInfo), + macros17 + ); + const allEnvInfo = Object.assign( + {}, + ...Object.values(environmentInfo), + environments17 + ); + const fullParser = unified().use(unifiedLatexFromStringMinimal, { mode }).use(unifiedLatexProcessAtLetterAndExplMacros, { + atLetter, + expl3, + autodetectExpl3AndAtLetter + }).use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, { + macros: allMacroInfo, + environments: allEnvInfo + }).use(unifiedLatexTrimEnvironmentContents).use(unifiedLatexTrimRoot).use(unifiedLatexAstComplier); + const parser2 = (str) => { + const file = fullParser.processSync({ value: str }); + return file.result; + }; + Object.assign(this, { Parser: parser2 }); +}; +var parser = unified().use(unifiedLatexFromString).freeze(); +function parse(str) { + return parser.parse(str); +} +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; +var __defProp2 = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); +}; +var public_exports = {}; +__export(public_exports, { + builders: () => builders, + printer: () => printer, + utils: () => utils +}); +var DOC_TYPE_STRING = "string"; +var DOC_TYPE_ARRAY = "array"; +var DOC_TYPE_CURSOR = "cursor"; +var DOC_TYPE_INDENT = "indent"; +var DOC_TYPE_ALIGN = "align"; +var DOC_TYPE_TRIM = "trim"; +var DOC_TYPE_GROUP = "group"; +var DOC_TYPE_FILL = "fill"; +var DOC_TYPE_IF_BREAK = "if-break"; +var DOC_TYPE_INDENT_IF_BREAK = "indent-if-break"; +var DOC_TYPE_LINE_SUFFIX = "line-suffix"; +var DOC_TYPE_LINE_SUFFIX_BOUNDARY = "line-suffix-boundary"; +var DOC_TYPE_LINE = "line"; +var DOC_TYPE_LABEL = "label"; +var DOC_TYPE_BREAK_PARENT = "break-parent"; +var VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([ + DOC_TYPE_CURSOR, + DOC_TYPE_INDENT, + DOC_TYPE_ALIGN, + DOC_TYPE_TRIM, + DOC_TYPE_GROUP, + DOC_TYPE_FILL, + DOC_TYPE_IF_BREAK, + DOC_TYPE_INDENT_IF_BREAK, + DOC_TYPE_LINE_SUFFIX, + DOC_TYPE_LINE_SUFFIX_BOUNDARY, + DOC_TYPE_LINE, + DOC_TYPE_LABEL, + DOC_TYPE_BREAK_PARENT +]); +function getDocType(doc) { + if (typeof doc === "string") { + return DOC_TYPE_STRING; + } + if (Array.isArray(doc)) { + return DOC_TYPE_ARRAY; + } + if (!doc) { + return; + } + const { type } = doc; + if (VALID_OBJECT_DOC_TYPES.has(type)) { + return type; + } +} +var get_doc_type_default = getDocType; +var disjunctionListFormat = (list) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(list); +function getDocErrorMessage(doc) { + const type = doc === null ? "null" : typeof doc; + if (type !== "string" && type !== "object") { + return `Unexpected doc '${type}', +Expected it to be 'string' or 'object'.`; + } + if (get_doc_type_default(doc)) { + throw new Error("doc is valid."); + } + const objectType = Object.prototype.toString.call(doc); + if (objectType !== "[object Object]") { + return `Unexpected doc '${objectType}'.`; + } + const EXPECTED_TYPE_VALUES = disjunctionListFormat( + [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`) + ); + return `Unexpected doc.type '${doc.type}'. +Expected it to be ${EXPECTED_TYPE_VALUES}.`; +} +var InvalidDocError = class extends Error { + constructor(doc) { + super(getDocErrorMessage(doc)); + __publicField(this, "name", "InvalidDocError"); + this.doc = doc; + } +}; +var invalid_doc_error_default = InvalidDocError; +var traverseDocOnExitStackMarker = {}; +function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { + const docsStack = [doc]; + while (docsStack.length > 0) { + const doc2 = docsStack.pop(); + if (doc2 === traverseDocOnExitStackMarker) { + onExit(docsStack.pop()); + continue; + } + if (onExit) { + docsStack.push(doc2, traverseDocOnExitStackMarker); + } + const docType = get_doc_type_default(doc2); + if (!docType) { + throw new invalid_doc_error_default(doc2); + } + if ((onEnter == null ? void 0 : onEnter(doc2)) === false) { + continue; + } + switch (docType) { + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts; + for (let ic = parts.length, i = ic - 1; i >= 0; --i) { + docsStack.push(parts[i]); + } + break; + } + case DOC_TYPE_IF_BREAK: + docsStack.push(doc2.flatContents, doc2.breakContents); + break; + case DOC_TYPE_GROUP: + if (shouldTraverseConditionalGroups && doc2.expandedStates) { + for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) { + docsStack.push(doc2.expandedStates[i]); + } + } else { + docsStack.push(doc2.contents); + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + docsStack.push(doc2.contents); + break; + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + } +} +var traverse_doc_default = traverseDoc; +var noop = () => { +}; +var assertDocArray = noop; +function indent(contents) { + return { type: DOC_TYPE_INDENT, contents }; +} +function align(widthOrString, contents) { + return { type: DOC_TYPE_ALIGN, contents, n: widthOrString }; +} +function group(contents, opts = {}) { + assertDocArray( + opts.expandedStates + ); + return { + type: DOC_TYPE_GROUP, + id: opts.id, + contents, + break: Boolean(opts.shouldBreak), + expandedStates: opts.expandedStates + }; +} +function dedentToRoot(contents) { + return align(Number.NEGATIVE_INFINITY, contents); +} +function markAsRoot(contents) { + return align({ type: "root" }, contents); +} +function dedent(contents) { + return align(-1, contents); +} +function conditionalGroup(states, opts) { + return group(states[0], { ...opts, expandedStates: states }); +} +function fill(parts) { + return { type: DOC_TYPE_FILL, parts }; +} +function ifBreak(breakContents, flatContents = "", opts = {}) { + return { + type: DOC_TYPE_IF_BREAK, + breakContents, + flatContents, + groupId: opts.groupId + }; +} +function indentIfBreak(contents, opts) { + return { + type: DOC_TYPE_INDENT_IF_BREAK, + contents, + groupId: opts.groupId, + negate: opts.negate + }; +} +function lineSuffix(contents) { + return { type: DOC_TYPE_LINE_SUFFIX, contents }; +} +var lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY }; +var breakParent = { type: DOC_TYPE_BREAK_PARENT }; +var trim = { type: DOC_TYPE_TRIM }; +var hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true }; +var literallineWithoutBreakParent = { + type: DOC_TYPE_LINE, + hard: true, + literal: true +}; +var line = { type: DOC_TYPE_LINE }; +var softline = { type: DOC_TYPE_LINE, soft: true }; +var hardline = [hardlineWithoutBreakParent, breakParent]; +var literalline = [literallineWithoutBreakParent, breakParent]; +var cursor = { type: DOC_TYPE_CURSOR }; +function join(separator, docs) { + const parts = []; + for (let i = 0; i < docs.length; i++) { + if (i !== 0) { + parts.push(separator); + } + parts.push(docs[i]); + } + return parts; +} +function addAlignmentToDoc(doc, size, tabWidth) { + let aligned = doc; + if (size > 0) { + for (let i = 0; i < Math.floor(size / tabWidth); ++i) { + aligned = indent(aligned); + } + aligned = align(size % tabWidth, aligned); + aligned = align(Number.NEGATIVE_INFINITY, aligned); + } + return aligned; +} +function label(label2, contents) { + return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents; +} +var at = (isOptionalObject, object, index2) => { + if (isOptionalObject && (object === void 0 || object === null)) { + return; + } + if (Array.isArray(object) || typeof object === "string") { + return object[index2 < 0 ? object.length + index2 : index2]; + } + return object.at(index2); +}; +var at_default = at; +var stringReplaceAll = (isOptionalObject, original, pattern, replacement) => { + if (isOptionalObject && (original === void 0 || original === null)) { + return; + } + if (original.replaceAll) { + return original.replaceAll(pattern, replacement); + } + if (pattern.global) { + return original.replace(pattern, replacement); + } + return original.split(pattern).join(replacement); +}; +var string_replace_all_default = stringReplaceAll; +function convertEndOfLineToChars(value) { + switch (value) { + case "cr": + return "\r"; + case "crlf": + return "\r\n"; + default: + return "\n"; + } +} +var emoji_regex_default = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; +}; +var eastasianwidth_default = { + eastAsianWidth(character) { + var x = character.charCodeAt(0); + var y = character.length == 2 ? character.charCodeAt(1) : 0; + var codePoint = x; + if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) { + x &= 1023; + y &= 1023; + codePoint = x << 10 | y; + codePoint += 65536; + } + if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) { + return "F"; + } + if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) { + return "W"; + } + return "N"; + } +}; +var notAsciiRegex = /[^\x20-\x7F]/; +function getStringWidth(text) { + if (!text) { + return 0; + } + if (!notAsciiRegex.test(text)) { + return text.length; + } + text = text.replace(emoji_regex_default(), " "); + let width = 0; + for (const character of text) { + const codePoint = character.codePointAt(0); + if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) { + continue; + } + if (codePoint >= 768 && codePoint <= 879) { + continue; + } + const code = eastasianwidth_default.eastAsianWidth(character); + width += code === "F" || code === "W" ? 2 : 1; + } + return width; +} +var get_string_width_default = getStringWidth; +var getDocParts = (doc) => { + if (Array.isArray(doc)) { + return doc; + } + if (doc.type !== DOC_TYPE_FILL) { + throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`); + } + return doc.parts; +}; +function mapDoc(doc, cb) { + if (typeof doc === "string") { + return cb(doc); + } + const mapped = /* @__PURE__ */ new Map(); + return rec(doc); + function rec(doc2) { + if (mapped.has(doc2)) { + return mapped.get(doc2); + } + const result = process2(doc2); + mapped.set(doc2, result); + return result; + } + function process2(doc2) { + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_ARRAY: + return cb(doc2.map(rec)); + case DOC_TYPE_FILL: + return cb({ + ...doc2, + parts: doc2.parts.map(rec) + }); + case DOC_TYPE_IF_BREAK: + return cb({ + ...doc2, + breakContents: rec(doc2.breakContents), + flatContents: rec(doc2.flatContents) + }); + case DOC_TYPE_GROUP: { + let { + expandedStates, + contents + } = doc2; + if (expandedStates) { + expandedStates = expandedStates.map(rec); + contents = expandedStates[0]; + } else { + contents = rec(contents); + } + return cb({ + ...doc2, + contents, + expandedStates + }); + } + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + return cb({ + ...doc2, + contents: rec(doc2.contents) + }); + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + return cb(doc2); + default: + throw new invalid_doc_error_default(doc2); + } + } +} +function findInDoc(doc, fn, defaultValue) { + let result = defaultValue; + let shouldSkipFurtherProcessing = false; + function findInDocOnEnterFn(doc2) { + if (shouldSkipFurtherProcessing) { + return false; + } + const maybeResult = fn(doc2); + if (maybeResult !== void 0) { + shouldSkipFurtherProcessing = true; + result = maybeResult; + } + } + traverse_doc_default(doc, findInDocOnEnterFn); + return result; +} +function willBreakFn(doc) { + if (doc.type === DOC_TYPE_GROUP && doc.break) { + return true; + } + if (doc.type === DOC_TYPE_LINE && doc.hard) { + return true; + } + if (doc.type === DOC_TYPE_BREAK_PARENT) { + return true; + } +} +function willBreak(doc) { + return findInDoc(doc, willBreakFn, false); +} +function breakParentGroup(groupStack) { + if (groupStack.length > 0) { + const parentGroup = at_default( + /* isOptionalObject*/ + false, + groupStack, + -1 + ); + if (!parentGroup.expandedStates && !parentGroup.break) { + parentGroup.break = "propagated"; + } + } + return null; +} +function propagateBreaks(doc) { + const alreadyVisitedSet = /* @__PURE__ */ new Set(); + const groupStack = []; + function propagateBreaksOnEnterFn(doc2) { + if (doc2.type === DOC_TYPE_BREAK_PARENT) { + breakParentGroup(groupStack); + } + if (doc2.type === DOC_TYPE_GROUP) { + groupStack.push(doc2); + if (alreadyVisitedSet.has(doc2)) { + return false; + } + alreadyVisitedSet.add(doc2); + } + } + function propagateBreaksOnExitFn(doc2) { + if (doc2.type === DOC_TYPE_GROUP) { + const group22 = groupStack.pop(); + if (group22.break) { + breakParentGroup(groupStack); + } + } + } + traverse_doc_default( + doc, + propagateBreaksOnEnterFn, + propagateBreaksOnExitFn, + /* shouldTraverseConditionalGroups */ + true + ); +} +function removeLinesFn(doc) { + if (doc.type === DOC_TYPE_LINE && !doc.hard) { + return doc.soft ? "" : " "; + } + if (doc.type === DOC_TYPE_IF_BREAK) { + return doc.flatContents; + } + return doc; +} +function removeLines(doc) { + return mapDoc(doc, removeLinesFn); +} +function stripTrailingHardlineFromParts(parts) { + parts = [...parts]; + while (parts.length >= 2 && at_default( + /* isOptionalObject*/ + false, + parts, + -2 + ).type === DOC_TYPE_LINE && at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ).type === DOC_TYPE_BREAK_PARENT) { + parts.length -= 2; + } + if (parts.length > 0) { + const lastPart = stripTrailingHardlineFromDoc(at_default( + /* isOptionalObject*/ + false, + parts, + -1 + )); + parts[parts.length - 1] = lastPart; + } + return parts; +} +function stripTrailingHardlineFromDoc(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_GROUP: + case DOC_TYPE_LINE_SUFFIX: + case DOC_TYPE_LABEL: { + const contents = stripTrailingHardlineFromDoc(doc.contents); + return { + ...doc, + contents + }; + } + case DOC_TYPE_IF_BREAK: + return { + ...doc, + breakContents: stripTrailingHardlineFromDoc(doc.breakContents), + flatContents: stripTrailingHardlineFromDoc(doc.flatContents) + }; + case DOC_TYPE_FILL: + return { + ...doc, + parts: stripTrailingHardlineFromParts(doc.parts) + }; + case DOC_TYPE_ARRAY: + return stripTrailingHardlineFromParts(doc); + case DOC_TYPE_STRING: + return doc.replace(/[\n\r]*$/, ""); + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function stripTrailingHardline(doc) { + return stripTrailingHardlineFromDoc(cleanDoc(doc)); +} +function cleanDocFn(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_FILL: + if (doc.parts.every((part) => part === "")) { + return ""; + } + break; + case DOC_TYPE_GROUP: + if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) { + return ""; + } + if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) { + return doc.contents; + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LINE_SUFFIX: + if (!doc.contents) { + return ""; + } + break; + case DOC_TYPE_IF_BREAK: + if (!doc.flatContents && !doc.breakContents) { + return ""; + } + break; + case DOC_TYPE_ARRAY: { + const parts = []; + for (const part of doc) { + if (!part) { + continue; + } + const [currentPart, ...restParts] = Array.isArray(part) ? part : [part]; + if (typeof currentPart === "string" && typeof at_default( + /* isOptionalObject*/ + false, + parts, + -1 + ) === "string") { + parts[parts.length - 1] += currentPart; + } else { + parts.push(currentPart); + } + parts.push(...restParts); + } + if (parts.length === 0) { + return ""; + } + if (parts.length === 1) { + return parts[0]; + } + return parts; + } + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_LABEL: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function cleanDoc(doc) { + return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc)); +} +function replaceEndOfLine(doc, replacement = literalline) { + return mapDoc(doc, (currentDoc) => typeof currentDoc === "string" ? join(replacement, currentDoc.split("\n")) : currentDoc); +} +function canBreakFn(doc) { + if (doc.type === DOC_TYPE_LINE) { + return true; + } +} +function canBreak(doc) { + return findInDoc(doc, canBreakFn, false); +} +var MODE_BREAK = Symbol("MODE_BREAK"); +var MODE_FLAT = Symbol("MODE_FLAT"); +var CURSOR_PLACEHOLDER = Symbol("cursor"); +function rootIndent() { + return { + value: "", + length: 0, + queue: [] + }; +} +function makeIndent(ind, options2) { + return generateInd(ind, { + type: "indent" + }, options2); +} +function makeAlign(indent22, widthOrDoc, options2) { + if (widthOrDoc === Number.NEGATIVE_INFINITY) { + return indent22.root || rootIndent(); + } + if (widthOrDoc < 0) { + return generateInd(indent22, { + type: "dedent" + }, options2); + } + if (!widthOrDoc) { + return indent22; + } + if (widthOrDoc.type === "root") { + return { + ...indent22, + root: indent22 + }; + } + const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign"; + return generateInd(indent22, { + type: alignType, + n: widthOrDoc + }, options2); +} +function generateInd(ind, newPart, options2) { + const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart]; + let value = ""; + let length = 0; + let lastTabs = 0; + let lastSpaces = 0; + for (const part of queue) { + switch (part.type) { + case "indent": + flush(); + if (options2.useTabs) { + addTabs(1); + } else { + addSpaces(options2.tabWidth); + } + break; + case "stringAlign": + flush(); + value += part.n; + length += part.n.length; + break; + case "numberAlign": + lastTabs += 1; + lastSpaces += part.n; + break; + default: + throw new Error(`Unexpected type '${part.type}'`); + } + } + flushSpaces(); + return { + ...ind, + value, + length, + queue + }; + function addTabs(count) { + value += " ".repeat(count); + length += options2.tabWidth * count; + } + function addSpaces(count) { + value += " ".repeat(count); + length += count; + } + function flush() { + if (options2.useTabs) { + flushTabs(); + } else { + flushSpaces(); + } + } + function flushTabs() { + if (lastTabs > 0) { + addTabs(lastTabs); + } + resetLast(); + } + function flushSpaces() { + if (lastSpaces > 0) { + addSpaces(lastSpaces); + } + resetLast(); + } + function resetLast() { + lastTabs = 0; + lastSpaces = 0; + } +} +function trim2(out) { + let trimCount = 0; + let cursorCount = 0; + let outIndex = out.length; + outer: + while (outIndex--) { + const last = out[outIndex]; + if (last === CURSOR_PLACEHOLDER) { + cursorCount++; + continue; + } + for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) { + const char = last[charIndex]; + if (char === " " || char === " ") { + trimCount++; + } else { + out[outIndex] = last.slice(0, charIndex + 1); + break outer; + } + } + } + if (trimCount > 0 || cursorCount > 0) { + out.length = outIndex + 1; + while (cursorCount-- > 0) { + out.push(CURSOR_PLACEHOLDER); + } + } + return trimCount; +} +function fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) { + if (width === Number.POSITIVE_INFINITY) { + return true; + } + let restIdx = restCommands.length; + const cmds = [next]; + const out = []; + while (width >= 0) { + if (cmds.length === 0) { + if (restIdx === 0) { + return true; + } + cmds.push(restCommands[--restIdx]); + continue; + } + const { + mode, + doc + } = cmds.pop(); + switch (get_doc_type_default(doc)) { + case DOC_TYPE_STRING: + out.push(doc); + width -= get_string_width_default(doc); + break; + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = getDocParts(doc); + for (let i = parts.length - 1; i >= 0; i--) { + cmds.push({ + mode, + doc: parts[i] + }); + } + break; + } + case DOC_TYPE_INDENT: + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + cmds.push({ + mode, + doc: doc.contents + }); + break; + case DOC_TYPE_TRIM: + width += trim2(out); + break; + case DOC_TYPE_GROUP: { + if (mustBeFlat && doc.break) { + return false; + } + const groupMode = doc.break ? MODE_BREAK : mode; + const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default( + /* isOptionalObject*/ + false, + doc.expandedStates, + -1 + ) : doc.contents; + cmds.push({ + mode: groupMode, + doc: contents + }); + break; + } + case DOC_TYPE_IF_BREAK: { + const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode; + const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents; + if (contents) { + cmds.push({ + mode, + doc: contents + }); + } + break; + } + case DOC_TYPE_LINE: + if (mode === MODE_BREAK || doc.hard) { + return true; + } + if (!doc.soft) { + out.push(" "); + width--; + } + break; + case DOC_TYPE_LINE_SUFFIX: + hasLineSuffix = true; + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (hasLineSuffix) { + return false; + } + break; + } + } + return false; +} +function printDocToString(doc, options2) { + const groupModeMap = {}; + const width = options2.printWidth; + const newLine = convertEndOfLineToChars(options2.endOfLine); + let pos = 0; + const cmds = [{ + ind: rootIndent(), + mode: MODE_BREAK, + doc + }]; + const out = []; + let shouldRemeasure = false; + const lineSuffix22 = []; + let printedCursorCount = 0; + propagateBreaks(doc); + while (cmds.length > 0) { + const { + ind, + mode, + doc: doc2 + } = cmds.pop(); + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_STRING: { + const formatted = newLine !== "\n" ? string_replace_all_default( + /* isOptionalObject*/ + false, + doc2, + "\n", + newLine + ) : doc2; + out.push(formatted); + if (cmds.length > 0) { + pos += get_string_width_default(formatted); + } + break; + } + case DOC_TYPE_ARRAY: + for (let i = doc2.length - 1; i >= 0; i--) { + cmds.push({ + ind, + mode, + doc: doc2[i] + }); + } + break; + case DOC_TYPE_CURSOR: + if (printedCursorCount >= 2) { + throw new Error("There are too many 'cursor' in doc."); + } + out.push(CURSOR_PLACEHOLDER); + printedCursorCount++; + break; + case DOC_TYPE_INDENT: + cmds.push({ + ind: makeIndent(ind, options2), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_ALIGN: + cmds.push({ + ind: makeAlign(ind, doc2.n, options2), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_TRIM: + pos -= trim2(out); + break; + case DOC_TYPE_GROUP: + switch (mode) { + case MODE_FLAT: + if (!shouldRemeasure) { + cmds.push({ + ind, + mode: doc2.break ? MODE_BREAK : MODE_FLAT, + doc: doc2.contents + }); + break; + } + case MODE_BREAK: { + shouldRemeasure = false; + const next = { + ind, + mode: MODE_FLAT, + doc: doc2.contents + }; + const rem = width - pos; + const hasLineSuffix = lineSuffix22.length > 0; + if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(next); + } else { + if (doc2.expandedStates) { + const mostExpanded = at_default( + /* isOptionalObject*/ + false, + doc2.expandedStates, + -1 + ); + if (doc2.break) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + for (let i = 1; i < doc2.expandedStates.length + 1; i++) { + if (i >= doc2.expandedStates.length) { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: mostExpanded + }); + break; + } else { + const state = doc2.expandedStates[i]; + const cmd = { + ind, + mode: MODE_FLAT, + doc: state + }; + if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(cmd); + break; + } + } + } + } + } else { + cmds.push({ + ind, + mode: MODE_BREAK, + doc: doc2.contents + }); + } + } + break; + } + } + if (doc2.id) { + groupModeMap[doc2.id] = at_default( + /* isOptionalObject*/ + false, + cmds, + -1 + ).mode; + } + break; + case DOC_TYPE_FILL: { + const rem = width - pos; + const { + parts + } = doc2; + if (parts.length === 0) { + break; + } + const [content, whitespace] = parts; + const contentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: content + }; + const contentBreakCmd = { + ind, + mode: MODE_BREAK, + doc: content + }; + const contentFits = fits(contentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (parts.length === 1) { + if (contentFits) { + cmds.push(contentFlatCmd); + } else { + cmds.push(contentBreakCmd); + } + break; + } + const whitespaceFlatCmd = { + ind, + mode: MODE_FLAT, + doc: whitespace + }; + const whitespaceBreakCmd = { + ind, + mode: MODE_BREAK, + doc: whitespace + }; + if (parts.length === 2) { + if (contentFits) { + cmds.push(whitespaceFlatCmd, contentFlatCmd); + } else { + cmds.push(whitespaceBreakCmd, contentBreakCmd); + } + break; + } + parts.splice(0, 2); + const remainingCmd = { + ind, + mode, + doc: fill(parts) + }; + const secondContent = parts[0]; + const firstAndSecondContentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: [content, whitespace, secondContent] + }; + const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true); + if (firstAndSecondContentFits) { + cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd); + } else if (contentFits) { + cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd); + } else { + cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd); + } + break; + } + case DOC_TYPE_IF_BREAK: + case DOC_TYPE_INDENT_IF_BREAK: { + const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode; + if (groupMode === MODE_BREAK) { + const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents); + if (breakContents) { + cmds.push({ + ind, + mode, + doc: breakContents + }); + } + } + if (groupMode === MODE_FLAT) { + const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents; + if (flatContents) { + cmds.push({ + ind, + mode, + doc: flatContents + }); + } + } + break; + } + case DOC_TYPE_LINE_SUFFIX: + lineSuffix22.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: hardlineWithoutBreakParent + }); + } + break; + case DOC_TYPE_LINE: + switch (mode) { + case MODE_FLAT: + if (!doc2.hard) { + if (!doc2.soft) { + out.push(" "); + pos += 1; + } + break; + } else { + shouldRemeasure = true; + } + case MODE_BREAK: + if (lineSuffix22.length > 0) { + cmds.push({ + ind, + mode, + doc: doc2 + }, ...lineSuffix22.reverse()); + lineSuffix22.length = 0; + break; + } + if (doc2.literal) { + if (ind.root) { + out.push(newLine, ind.root.value); + pos = ind.root.length; + } else { + out.push(newLine); + pos = 0; + } + } else { + pos -= trim2(out); + out.push(newLine + ind.value); + pos = ind.length; + } + break; + } + break; + case DOC_TYPE_LABEL: + cmds.push({ + ind, + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + if (cmds.length === 0 && lineSuffix22.length > 0) { + cmds.push(...lineSuffix22.reverse()); + lineSuffix22.length = 0; + } + } + const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER); + if (cursorPlaceholderIndex !== -1) { + const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1); + const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(""); + const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(""); + const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(""); + return { + formatted: beforeCursor + aroundCursor + afterCursor, + cursorNodeStart: beforeCursor.length, + cursorNodeText: aroundCursor + }; + } + return { + formatted: out.join("") + }; +} +var builders = { + join, + line, + softline, + hardline, + literalline, + group, + conditionalGroup, + fill, + lineSuffix, + lineSuffixBoundary, + cursor, + breakParent, + ifBreak, + trim, + indent, + indentIfBreak, + align, + addAlignmentToDoc, + markAsRoot, + dedentToRoot, + dedent, + hardlineWithoutBreakParent, + literallineWithoutBreakParent, + label, + // TODO: Remove this in v4 + concat: (parts) => parts +}; +var printer = { printDocToString }; +var utils = { + willBreak, + traverseDoc: traverse_doc_default, + findInDoc, + mapDoc, + removeLines, + stripTrailingHardline, + replaceEndOfLine, + canBreak +}; +function formatEnvSurround(node) { + const env = printRaw(node.env); + return { + envName: env, + start: ESCAPE + "begin{" + env + "}", + end: ESCAPE + "end{" + env + "}" + }; +} +function isLineType(elm) { + if (elm == null || typeof elm === "string") { + return false; + } + if (Array.isArray(elm)) { + return isLineType(elm[0]); + } + if (elm.type === "concat") { + return isLineType(elm.parts); + } + return elm.type === "line"; +} +function joinWithSoftline(arr) { + if (arr.length === 0 || arr.length === 1) { + return arr; + } + const ret = [arr[0]]; + for (let i = 1; i < arr.length; i++) { + const prevNode = arr[i - 1]; + const nextNode = arr[i]; + if (!isLineType(prevNode) && !isLineType(nextNode)) { + ret.push(softline2); + } + ret.push(nextNode); + } + return ret; +} +function getNodeInfo(node, options2) { + if (!node) { + return { renderInfo: {} }; + } + const renderInfo = node._renderInfo || {}; + const previousNode = options2.referenceMap && options2.referenceMap.getPreviousNode(node); + const nextNode = options2.referenceMap && options2.referenceMap.getNextNode(node); + const renderCache = options2.referenceMap && options2.referenceMap.getRenderCache(node); + return { + renderInfo, + renderCache, + previousNode, + nextNode, + referenceMap: options2.referenceMap + }; +} +var ESCAPE = "\\"; +var { + group: group2, + fill: fill2, + ifBreak: ifBreak2, + line: line2, + softline: softline2, + hardline: hardline2, + lineSuffix: lineSuffix2, + lineSuffixBoundary: lineSuffixBoundary2, + breakParent: breakParent2, + indent: indent2, + markAsRoot: markAsRoot2, + join: join2 +} = builders; +function formatDocArray(nodes, docArray, options2) { + const ret = []; + for (let i = 0; i < nodes.length; i++) { + const rawNode = nodes[i]; + const printedNode = docArray[i]; + const { renderInfo, referenceMap, previousNode, nextNode } = getNodeInfo(rawNode, options2); + const renderCache = referenceMap && referenceMap.getRenderCache(rawNode); + switch (rawNode.type) { + case "comment": + if (!rawNode.sameline && previousNode && !match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + ret.push(printedNode); + if (nextNode && !rawNode.suffixParbreak) { + ret.push(hardline2); + } + break; + case "environment": + case "displaymath": + case "mathenv": + if (previousNode && (previousNode == null ? void 0 : previousNode.type) !== "parbreak") { + if (ret[ret.length - 1] === line2) { + ret.pop(); + } + if (ret[ret.length - 1] !== hardline2) { + ret.push(hardline2); + } + } + ret.push(printedNode); + if ((nextNode == null ? void 0 : nextNode.type) === "whitespace") { + ret.push(hardline2); + i++; + } + break; + case "macro": + if (renderInfo.breakBefore || renderInfo.breakAround) { + if (previousNode) { + if (ret[ret.length - 1] === line2 || ret[ret.length - 1] === hardline2) { + ret.pop(); + ret.push(hardline2); + } else if (!match.comment(previousNode) && !match.parbreak(previousNode)) { + ret.push(hardline2); + } + } + } + if (renderInfo.inParMode && !renderInfo.hangingIndent && renderCache) { + ret.push( + renderCache.content, + ...renderCache.rawArgs || [] + ); + } else { + ret.push(printedNode); + } + if (renderInfo.breakAfter || renderInfo.breakAround) { + if (nextNode) { + if (match.whitespace(nextNode)) { + ret.push(hardline2); + i++; + } else if (match.parbreak(nextNode)) + ; + else if (!match.comment(nextNode)) { + ret.push(hardline2); + } + } + } + break; + case "parbreak": + ret.push(hardline2, hardline2); + break; + default: + ret.push(printedNode); + break; + } + } + return ret; +} +function zip(array1, array2) { + const ret = []; + const len = Math.min(array1.length, array2.length); + for (let i = 0; i < len; i++) { + ret.push([array1[i], array2[i]]); + } + return ret; +} +function printMacro(path2, print, options2) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options2 + ); + const content = (node.escapeToken != null ? node.escapeToken : ESCAPE) + node.content; + const args = node.args ? path2.map(print, "args") : []; + const rawArgs = []; + for (const [arg2, printedArg] of zip(node.args || [], args)) { + const renderCache = referenceMap && referenceMap.getRenderCache(arg2); + if (renderInfo.inParMode && renderCache) { + rawArgs.push(...renderCache); + } else { + rawArgs.push(printedArg); + } + } + if (referenceMap) { + referenceMap.setRenderCache(node, { rawArgs, content }); + } + if (renderInfo.hangingIndent) { + return indent2(fill2([content, ...rawArgs])); + } + return group2([content, ...rawArgs]); +} +function printArgumentPgfkeys(nodes, options2) { + const { allowParenGroups = false } = options2; + const parsed = parsePgfkeys(nodes, { allowParenGroups }); + const content = []; + for (const part of parsed) { + const isLastItem = part === parsed[parsed.length - 1]; + if (part.itemParts) { + const parts = part.itemParts.map( + (node) => printRaw(node, { asArray: true }).map( + (token) => token === linebreak ? hardline2 : token + ) + ); + const row = join2("=", parts); + content.push(row); + if (part.trailingComma) { + content.push(","); + } + } + if (part.trailingComment) { + const leadingContent = part.itemParts ? [" "] : []; + if (part.leadingParbreak) { + leadingContent.push(hardline2); + } + content.push( + ...leadingContent, + // We're carefully and manually controlling the newlines, + // so print the comment directly without any newlines + "%", + part.trailingComment.content, + breakParent2 + ); + } + if (!isLastItem) { + content.push(line2); + } + } + let leadingComment = [""]; + if (options2.leadingComment) { + if (options2.leadingComment.leadingWhitespace) { + leadingComment.push(" "); + } + leadingComment.push("%" + options2.leadingComment.content, breakParent2); + } + return group2([ + options2.openMark, + ...leadingComment, + // If there is no content, we don't want to push an extra `softline`. + // This matters because the braces group could still be broken by `leadingComment` + content.length > 0 ? indent2([softline2, ...content]) : "", + softline2, + options2.closeMark + ]); +} +function printTikzArgument(path2, print, options2) { + const node = path2.getNode(); + getNodeInfo( + node, + options2 + ); + const content = []; + const nodes = [...node.content]; + trim$1(nodes); + try { + const tikzAst = parse$1(nodes); + if (tikzAst.content.length === 0) { + content.push(";"); + return content; + } + const printer2 = new TikzArgumentPrinter(tikzAst, path2, print); + return printer2.toDoc(); + } catch (e) { + console.warn("Encountered error when trying to parse tikz argument", e); + } + content.push(";"); + return content; +} +function printFragment(fragment, path2, print) { + const tmpKey = Symbol(); + const currNode = path2.getNode(); + if (!currNode) { + throw new Error( + "tried to print a fragment, but the current node is `null`" + ); + } + currNode[tmpKey] = fragment; + const ret = print(tmpKey); + delete currNode[tmpKey]; + return ret; +} +function printTikzPathSpecNode(node, path2, print) { + switch (node.type) { + case "comment": + return printFragment(node, path2, print); + case "unknown": + return printFragment(node.content, path2, print); + case "coordinate": + return [printRaw(node.prefix), "(", printRaw(node.content), ")"]; + case "line_to": + return node.command; + case "square_brace_group": + return printOptionalArgs(node.content); + case "operation": + return node.content.content; + case "svg_operation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const options2 = node.options ? printOptionalArgs(node.options) : []; + const rest = node.options ? [group2(indent2([line2, printRaw(node.content)]))] : [" ", printRaw(node.content)]; + return [...comments, "svg", options2, ...rest]; + } + case "curve_to": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const printedControls = node.controls.length > 1 ? [ + printTikzPathSpecNode(node.controls[0], path2, print), + " ", + "and", + line2, + printTikzPathSpecNode(node.controls[1], path2, print) + ] : [printTikzPathSpecNode(node.controls[0], path2, print)]; + return [ + ...comments, + "..", + " ", + group2( + indent2(["controls", line2, ...printedControls, " ", ".."]) + ) + ]; + } + case "animation": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + return [ + ...comments, + ":", + node.attribute, + " ", + "=", + " ", + group2( + indent2([ + printArgumentPgfkeys(node.content, { + openMark: "{", + closeMark: "}" + }) + ]) + ) + ]; + } + case "foreach": { + const comments = node.comments.map( + (n) => printTikzPathSpecNode(n, path2, print) + ); + const variables = [...node.variables]; + trim$1(variables); + const list = node.list.type === "macro" ? printFragment(node.list, path2, print) : printArgumentPgfkeys(node.list.content, { + openMark: "{", + closeMark: "}", + allowParenGroups: true + }); + const doc = [ + ...comments, + printRaw(node.start), + " ", + printRaw(variables) + ]; + if (node.options) { + doc.push(" ", indent2(printOptionalArgs(node.options))); + } + doc.push(" ", "in", " ", group2(indent2(list))); + const commandType = node.command.type; + switch (commandType) { + case "foreach": + doc.push( + indent2([ + line2, + printTikzPathSpecNode(node.command, path2, print) + ]) + ); + break; + case "macro": + doc.push( + indent2([line2, printFragment(node.command, path2, print)]) + ); + break; + case "group": { + const groupContent = [...node.command.content]; + trim$1(groupContent); + doc.push( + " ", + indent2( + group2([ + "{", + indent2([ + softline2, + ...groupContent.map( + (n) => printFragment(n, path2, print) + ) + ]), + softline2, + "}" + ]) + ) + ); + break; + } + default: + const invalidType = commandType; + console.warn( + `Unhandled command type when printing "foreach": ${invalidType}` + ); + } + return indent2(doc); + } + } + console.warn( + `Encountered unknown type when trying to print tikz PathSpec: "${node.type}"` + ); + return []; +} +function printOptionalArgs(nodes) { + return printArgumentPgfkeys(nodes, { + openMark: "[", + closeMark: "]" + }); +} +var _path, _print; +var TikzArgumentPrinter = class { + constructor(spec, path2, print) { + __privateAdd(this, _path, void 0); + __privateAdd(this, _print, void 0); + __privateSet(this, _path, path2); + __privateSet(this, _print, print); + this.nodes = [...spec.content]; + } + nodeToDoc(node) { + return printTikzPathSpecNode(node, __privateGet(this, _path), __privateGet(this, _print)); + } + toDoc() { + const doc = []; + const startArg = this.eatOptionalArg(); + if (startArg.optionalArg) { + doc.push( + ...startArg.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ) + ); + doc.push(printOptionalArgs(startArg.optionalArg.content)); + } + const innerDoc = []; + doc.push(group2([indent2(innerDoc), ";"])); + let cycle = -1; + while (this.nodes.length > 0) { + cycle++; + const firstSep = cycle === 0 && !startArg.optionalArg ? " " : line2; + const comingUp = this.peek(); + switch (comingUp) { + case "short_path": { + const [n0, n1, n2] = this.nodes.splice(0, 3); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1), + " ", + this.nodeToDoc(n2) + ); + continue; + } + case "long_path": { + const [n0, n1] = this.nodes.splice(0, 2); + if (n1.type === "operation") { + this.nodes.unshift(n1); + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.eatOperation() + ); + } else { + innerDoc.push( + firstSep, + this.nodeToDoc(n0), + " ", + this.nodeToDoc(n1) + ); + } + continue; + } + case "node": + { + const eatenNode = this.eatNode(); + if (eatenNode) { + innerDoc.push(line2, ...eatenNode); + continue; + } + console.warn( + "Expected to print a tikz `node` PathSpec but couldn't find the text `node`" + ); + } + continue; + case "operation": + innerDoc.push(firstSep, this.eatOperation()); + continue; + case "unknown": { + const node = this.nodes.shift(); + innerDoc.push(firstSep, this.nodeToDoc(node)); + continue; + } + } + this.nodes.shift(); + } + return doc; + } + /** + * Look at the current node and the nodes that follow. Return what + * "type" is recognized. + */ + peek() { + const [n0, n1, n2, n3] = [ + this.nodes[0], + this.nodes[1], + this.nodes[2], + this.nodes[3] + ]; + if ((n0 == null ? void 0 : n0.type) === "coordinate" && isPathJoinOperation(n1)) { + if ((n2 == null ? void 0 : n2.type) === "coordinate" && !((n3 == null ? void 0 : n3.type) === "coordinate" || isPathJoinOperation(n3))) { + return "short_path"; + } + return "long_path"; + } + if ((n0 == null ? void 0 : n0.type) === "operation") { + if (n0.content.content === "node") { + return "node"; + } + return "operation"; + } + return "unknown"; + } + /** + * Eat comments and an optional arg if present. If no optional + * arg is present, do nothing. + */ + eatOptionalArg() { + let i = 0; + const comments = []; + let optionalArg = null; + for (; i < this.nodes.length; i++) { + const node = this.nodes[i]; + if (node.type === "square_brace_group") { + optionalArg = node; + i++; + break; + } + if (node.type === "comment") { + comments.push(node); + continue; + } + break; + } + if (optionalArg) { + this.nodes.splice(0, i); + } + return { optionalArg, comments }; + } + /** + * Eat a `type === "operation"` node whose contents is `"node"`. I.e., + * the type of thing that shows up in `\path node at (1,1) {foo};` + */ + eatNode() { + const firstNode = this.nodes[0]; + if ((firstNode == null ? void 0 : firstNode.type) === "operation" && firstNode.content.content === "node") { + this.nodes.shift(); + } else { + return null; + } + const innerDoc = []; + const commentBlock = []; + const doc = [commentBlock, "node", group2(indent2(innerDoc))]; + let hasNodeArgument = false; + let shouldBail = false; + let i = 0; + const comments = []; + const options2 = []; + const name = []; + const atLocations = []; + const animations = []; + let content = []; + for (; i < this.nodes.length && !shouldBail; i++) { + const node = this.nodes[i]; + switch (node.type) { + case "animation": + animations.push(this.nodeToDoc(node)); + continue; + case "comment": { + const comment = { + ...node, + leadingWhitespace: false + }; + comments.push(this.nodeToDoc(comment)); + continue; + } + case "square_brace_group": + options2.push(printOptionalArgs(node.content)); + continue; + case "coordinate": + name.push(this.nodeToDoc(node)); + continue; + case "operation": { + if (node.content.content === "at") { + const nextNode = this.nodes[i + 1]; + if (!nextNode || !(nextNode.type === "coordinate" || nextNode.type === "unknown" && match.anyMacro(nextNode.content))) { + shouldBail = true; + continue; + } + atLocations.push(["at", " ", this.nodeToDoc(nextNode)]); + i++; + continue; + } + shouldBail = true; + continue; + } + case "unknown": { + if (match.group(node.content)) { + hasNodeArgument = true; + content = this.nodeToDoc(node); + } + } + } + break; + } + if (!hasNodeArgument) { + return innerDoc; + } + this.nodes.splice(0, i + 1); + let isFirstElement = true; + let isNamed = !(Array.isArray(name) && name.length === 0); + for (const comment of comments) { + commentBlock.push(comment, hardline2); + } + if (options2.length > 0) { + innerDoc.push(join2(" ", options2)); + isFirstElement = false; + } + if (animations.length > 0) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(join2(line2, animations)); + isFirstElement = false; + } + if (isNamed) { + innerDoc.push(isFirstElement ? " " : line2); + innerDoc.push(name); + isFirstElement = false; + } + if (atLocations.length > 0) { + innerDoc.push(isFirstElement || isNamed ? " " : line2); + innerDoc.push(join2(line2, atLocations)); + isFirstElement = false; + } + innerDoc.push(line2, content); + return doc; + } + /** + * Eat a `type === "operation"` node, including its optional arguments. + */ + eatOperation() { + const node = this.nodes[0]; + if ((node == null ? void 0 : node.type) === "operation") { + this.nodes.shift(); + } else { + return []; + } + const doc = []; + if ((node == null ? void 0 : node.type) !== "operation") { + throw new Error("Expecting `operation` node."); + } + const options2 = this.eatOptionalArg(); + doc.push( + ...options2.comments.map( + (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print)) + ), + node.content.content + ); + if (options2.optionalArg) { + doc.push(indent2(printOptionalArgs(options2.optionalArg.content))); + } + return doc; + } +}; +_path = /* @__PURE__ */ new WeakMap(); +_print = /* @__PURE__ */ new WeakMap(); +var PATH_JOIN_OPERATIONS = /* @__PURE__ */ new Set(["rectangle", "grid", "sin", "cos", "to"]); +function isPathJoinOperation(node) { + if (!node) { + return false; + } + switch (node.type) { + case "line_to": + case "curve_to": + return true; + case "operation": + return PATH_JOIN_OPERATIONS.has(node.content.content); + } + return false; +} +function printArgument(path2, print, options2) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options2 + ); + if (node.openMark === "" && node.closeMark === "" && node.content.length === 0) { + return []; + } + const parentNode = path2.getParentNode(); + const { renderInfo: parentRenderInfo } = getNodeInfo(parentNode, options2); + if (parentRenderInfo.pgfkeysArgs) { + const leadingComment = node.content.length > 0 && match.comment(node.content[0]) && node.content[0].sameline ? node.content[0] : null; + const content2 = leadingComment ? node.content.slice(1) : node.content; + trim$1(content2); + return printArgumentPgfkeys(content2, { + openMark: node.openMark, + closeMark: node.closeMark, + leadingComment + }); + } + if (parentRenderInfo.tikzPathCommand) { + return printTikzArgument(path2, print, options2); + } + const openMark = node.openMark; + const closeMark = node.closeMark; + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + if (match.comment(node.content[node.content.length - 1])) { + content.push(hardline2); + } + let rawRet = [openMark, fill2(content), closeMark]; + if (renderInfo.inParMode) { + rawRet = [openMark, ...content, closeMark]; + } + if (referenceMap) { + referenceMap.setRenderCache(node, rawRet); + } + return rawRet; +} +function hasPreambleCode(nodes) { + return nodes.some((node) => match.macro(node, "documentclass")); +} +function printRoot(path2, print, options2) { + const node = path2.getNode(); + getNodeInfo( + node, + options2 + ); + const content = path2.map(print, "content"); + const rawContent = formatDocArray(node.content, content, options2); + const concatFunction = hasPreambleCode(node.content) ? (x) => x : fill2; + return concatFunction(rawContent); +} +function printComment(path2, _print2, _options) { + const node = path2.getNode(); + let leadingWhitespace = ""; + if (node.leadingWhitespace && node.sameline) { + leadingWhitespace = " "; + } + const content = [leadingWhitespace, "%" + printRaw(node.content)]; + return content; +} +function printInlineMath(path2, print, options2) { + const node = path2.getNode(); + if (node.content.length === 0) { + return ["$", " ", "$"]; + } + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + content = joinWithSoftline(content); + if (node.content[node.content.length - 1].type === "comment") { + content.push(hardline2); + } + return fill2(["$", ...content, "$"]); +} +function printDisplayMath(path2, print, options2) { + const node = path2.getNode(); + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + content = joinWithSoftline(content); + const bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + ESCAPE + "[", + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + ESCAPE + "]" + ]; +} +function printVerbatimEnvironment(path2, print, options2) { + const node = path2.getNode(); + const env = formatEnvSurround(node); + return [env.start, node.content, env.end]; +} +function printEnvironment(path2, print, options2) { + const node = path2.getNode(); + const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo( + node, + options2 + ); + const args = node.args ? path2.map(print, "args") : []; + const env = formatEnvSurround(node); + let content = path2.map(print, "content"); + content = formatDocArray(node.content, content, options2); + if (renderInfo.inMathMode) { + content = joinWithSoftline(content); + } + let bodyStartToken = [hardline2]; + if (node.content.length === 0 || node.content[0].type === "comment" && node.content[0].sameline) { + bodyStartToken.pop(); + } + return [ + env.start, + ...args, + indent2(fill2(bodyStartToken.concat(content))), + hardline2, + env.end + ]; +} +function printAlignedEnvironment(path2, print, options2) { + const node = path2.getNode(); + getNodeInfo( + node, + options2 + ); + const args = node.args ? path2.map(print, "args") : []; + const env = formatEnvSurround(node); + const leadingComment = node.content[0] && node.content[0].type === "comment" && node.content[0].sameline ? node.content[0] : null; + const { rows, rowSeps, trailingComments } = formatAlignedContent( + leadingComment ? node.content.slice(1) : node.content + ); + const content = []; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + const rowSep = rowSeps[i]; + const trailingComment = trailingComments[i]; + content.push(row); + if (rowSep) { + content.push(printRaw(rowSep)); + } + if (rowSep && trailingComment) { + content.push(" "); + } + if (trailingComment) { + content.push(["%", printRaw(trailingComment.content)]); + } + if (rowSep || trailingComment) { + content.push(hardline2); + } + } + if (content[content.length - 1] === hardline2) { + content.pop(); + } + if (leadingComment) { + content.unshift( + leadingComment.leadingWhitespace ? " " : "", + "%" + printRaw(leadingComment.content), + hardline2 + ); + return [env.start, ...args, indent2(content), hardline2, env.end]; + } + return [ + env.start, + ...args, + indent2([hardline2, ...content]), + hardline2, + env.end + ]; +} +function formatAlignedContent(nodes) { + function getSpace(len = 1) { + return " ".repeat(len); + } + const rows = parseAlignEnvironment(nodes); + const numCols = Math.max(...rows.map((r) => r.cells.length)); + const rowSeps = rows.map(({ rowSep }) => printRaw(rowSep || [])); + const trailingComments = rows.map(({ trailingComment }) => trailingComment); + const renderedRows = rows.map(({ cells, colSeps }) => ({ + cells: cells.map((nodes2) => { + trim$1(nodes2); + return printRaw(nodes2); + }), + seps: colSeps.map((nodes2) => printRaw(nodes2)) + })); + const colWidths = []; + for (let i = 0; i < numCols; i++) { + colWidths.push( + Math.max( + ...renderedRows.map( + ({ cells, seps }) => ((cells[i] || "") + (seps[i] || "")).length + ) + ) + ); + } + const joinedRows = renderedRows.map(({ cells, seps }) => { + if (cells.length === 1 && cells[0] === "") { + return ""; + } + let ret = ""; + for (let i = 0; i < cells.length; i++) { + const width = colWidths[i] - (seps[i] || "").length; + ret += (i === 0 ? "" : " ") + cells[i] + getSpace(width - cells[i].length + 1) + (seps[i] || ""); + } + return ret; + }); + return { rows: joinedRows, rowSeps, trailingComments }; +} +var ReferenceMap = class { + constructor(ast) { + this.ast = ast; + this.map = /* @__PURE__ */ new Map(); + visit( + this.ast, + (nodeList) => { + for (let i = 0; i < nodeList.length; i++) { + this.map.set(nodeList[i], { + previous: nodeList[i - 1], + next: nodeList[i + 1] + }); + } + }, + { includeArrays: true, test: Array.isArray } + ); + } + /** + * Associate render-specific data with this node. This data + * will be overwritten if `setRenderCache` is called twice. + * + * @param {Ast.Ast} node + * @param {*} data + * @memberof ReferenceMap + */ + setRenderCache(node, data) { + const currData = this.map.get(node) || {}; + this.map.set(node, { ...currData, renderCache: data }); + } + /** + * Retrieve data associated with `node` via `setRenderCache` + * + * @param {Ast.Ast} node + * @returns {(object | undefined)} + * @memberof ReferenceMap + */ + getRenderCache(node) { + var _a; + return (_a = this.map.get(node)) == null ? void 0 : _a.renderCache; + } + getPreviousNode(node) { + return (this.map.get(node) || {}).previous; + } + getNextNode(node) { + return (this.map.get(node) || {}).next; + } +}; +function printLatexAst(path2, options2, print) { + const node = path2.getValue(); + const { renderInfo } = getNodeInfo(node, options2); + if (node == null) { + return node; + } + if (typeof node === "string") { + return node; + } + switch (node.type) { + case "root": + if (options2.referenceMap) { + console.warn( + "Processing root node, but ReferenceMap already exists. Are there multiple nodes of type 'root'?" + ); + } + options2.referenceMap = new ReferenceMap(node); + return printRoot(path2, print, options2); + case "argument": + return printArgument(path2, print, options2); + case "comment": + return printComment(path2); + case "environment": + case "mathenv": + if (renderInfo.alignContent) { + return printAlignedEnvironment(path2, print, options2); + } + return printEnvironment(path2, print, options2); + case "displaymath": + return printDisplayMath(path2, print, options2); + case "group": + const content = printRaw(node.content, { + asArray: true + }).map((token) => token === linebreak ? hardline2 : token); + return ["{", ...content, "}"]; + case "inlinemath": + return printInlineMath(path2, print, options2); + case "macro": + return printMacro(path2, print, options2); + case "parbreak": + return [hardline2, hardline2]; + case "string": + return node.content; + case "verb": + return [ + ESCAPE, + node.env, + node.escape, + printRaw(node.content), + node.escape + ]; + case "verbatim": + return printVerbatimEnvironment(path2); + case "whitespace": + return line2; + default: + console.warn("Printing unknown type", node); + return printRaw(node); + } +} +var languages$1 = [ + { + name: "latex", + extensions: [".tex"], + parsers: ["latex-parser"] + } +]; +var parsers$1 = { + "latex-parser": { + parse, + astFormat: "latex-ast", + locStart: (node) => node.position ? node.position.start.offset : 0, + locEnd: (node) => node.position ? node.position.end.offset : 1 + } +}; +var printers$1 = { + "latex-ast": { + print: printLatexAst + } +}; +var prettierPluginLatex$1 = { languages: languages$1, parsers: parsers$1, printers: printers$1 }; +const options = {}; +const defaultOptions = { + useTabs: true +}; +const languages = prettierPluginLatex$1.languages; +const parsers = prettierPluginLatex$1.parsers; +const printers = prettierPluginLatex$1.printers; +const prettierPluginLatex = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + defaultOptions, + languages, + options, + parsers, + printers +}, Symbol.toStringTag, { value: "Module" })); +exports.defaultOptions = defaultOptions; +exports.languages = languages; +exports.options = options; +exports.parsers = parsers; +exports.prettierPluginLatex = prettierPluginLatex; +exports.printers = printers; +//# sourceMappingURL=prettier-plugin-latex-f9d12326.js.map diff --git a/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js.map b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js.map new file mode 100644 index 0000000..d3cf703 --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex-f9d12326.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prettier-plugin-latex-f9d12326.js","sources":["../node_modules/@unified-latex/unified-latex-util-print-raw/index.js","../node_modules/@unified-latex/unified-latex-util-match/index.js","../node_modules/@unified-latex/unified-latex-util-visit/index.js","../node_modules/@unified-latex/unified-latex-util-trim/index.js","../node_modules/@unified-latex/unified-latex-util-pegjs/index.js","../node_modules/@unified-latex/unified-latex-util-argspec/index.js","../node_modules/@unified-latex/unified-latex-builder/index.js","../node_modules/trie-prefix-tree/dist/config.js","../node_modules/trie-prefix-tree/dist/append.js","../node_modules/trie-prefix-tree/dist/create.js","../node_modules/trie-prefix-tree/dist/utils.js","../node_modules/trie-prefix-tree/dist/checkPrefix.js","../node_modules/trie-prefix-tree/dist/recursePrefix.js","../node_modules/trie-prefix-tree/dist/recurseRandomWord.js","../node_modules/trie-prefix-tree/dist/permutations.js","../node_modules/trie-prefix-tree/dist/index.js","../node_modules/@unified-latex/unified-latex-util-scan/index.js","../node_modules/@unified-latex/unified-latex-util-render-info/index.js","../node_modules/@unified-latex/unified-latex-util-arguments/index.js","../node_modules/@unified-latex/unified-latex-ctan/package/tikz/index.js","../node_modules/@unified-latex/unified-latex-util-pgfkeys/index.js","../node_modules/@unified-latex/unified-latex-util-align/index.js","../node_modules/bail/index.js","../node_modules/is-buffer/index.js","../node_modules/extend/index.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/index.js","../node_modules/@unified-latex/unified-latex-util-split/index.js","../node_modules/@unified-latex/unified-latex-util-replace/index.js","../node_modules/color-name/index.js","../node_modules/is-arrayish/index.js","../node_modules/simple-swizzle/index.js","../node_modules/color-string/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/color/index.js","../node_modules/@unified-latex/unified-latex-ctan/index.js","../node_modules/@unified-latex/unified-latex-util-environments/index.js","../node_modules/@unified-latex/unified-latex-util-catcode/index.js","../node_modules/@unified-latex/unified-latex-util-parse/index.js","../node_modules/@unified-latex/unified-latex-prettier/index.js","../src/prettier-plugin-latex.ts"],"sourcesContent":["// libs/print-raw.ts\nvar linebreak = Symbol(\"linebreak\");\nvar ESCAPE = \"\\\\\";\nfunction _printRaw(node) {\n if (typeof node === \"string\") {\n return [node];\n }\n if (Array.isArray(node)) {\n return [].concat(\n ...node.map((n) => _printRaw(n))\n );\n }\n let argsString, escape;\n switch (node.type) {\n case \"root\":\n return _printRaw(node.content);\n case \"argument\":\n return [node.openMark, ..._printRaw(node.content), node.closeMark];\n case \"comment\":\n var suffix = node.suffixParbreak ? \"\" : linebreak;\n var leadingWhitespace = \"\";\n if (node.sameline && node.leadingWhitespace) {\n leadingWhitespace = \" \";\n }\n if (node.sameline) {\n return [\n leadingWhitespace,\n \"%\",\n ..._printRaw(node.content),\n suffix\n ];\n }\n return [linebreak, \"%\", ..._printRaw(node.content), suffix];\n case \"environment\":\n case \"mathenv\":\n case \"verbatim\":\n var env = _printRaw(node.env);\n var envStart = [ESCAPE + \"begin{\", ...env, \"}\"];\n var envEnd = [ESCAPE + \"end{\", ...env, \"}\"];\n argsString = node.args == null ? [] : _printRaw(node.args);\n return [\n ...envStart,\n ...argsString,\n ..._printRaw(node.content),\n ...envEnd\n ];\n case \"displaymath\":\n return [ESCAPE + \"[\", ..._printRaw(node.content), ESCAPE + \"]\"];\n case \"group\":\n return [\"{\", ..._printRaw(node.content), \"}\"];\n case \"inlinemath\":\n return [\"$\", ..._printRaw(node.content), \"$\"];\n case \"macro\":\n argsString = node.args == null ? [] : _printRaw(node.args);\n escape = node.escapeToken == null ? ESCAPE : node.escapeToken;\n return [escape, ..._printRaw(node.content), ...argsString];\n case \"parbreak\":\n return [linebreak, linebreak];\n case \"string\":\n return [node.content];\n case \"verb\":\n return [\n ESCAPE,\n node.env,\n node.escape,\n ..._printRaw(node.content),\n node.escape\n ];\n case \"whitespace\":\n return [\" \"];\n default:\n console.warn(\n \"Cannot find render for node \",\n node,\n `(of type ${typeof node})`\n );\n return [\"\" + node];\n }\n}\nfunction printRaw(node, options) {\n const asArray = options != null ? options.asArray : false;\n const printedTokens = _printRaw(node);\n if (asArray) {\n return printedTokens;\n }\n return printedTokens.map((x) => x === linebreak ? \"\\n\" : x).join(\"\");\n}\nexport {\n linebreak,\n printRaw\n};\n//# sourceMappingURL=index.js.map\n","// libs/match.ts\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nfunction createMacroMatcher(macros) {\n const macrosHash = Array.isArray(macros) ? macros.length > 0 ? typeof macros[0] === \"string\" ? Object.fromEntries(\n macros.map((macro2) => {\n if (typeof macro2 !== \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n return [macro2, {}];\n })\n ) : Object.fromEntries(\n macros.map((macro2) => {\n if (typeof macro2 === \"string\") {\n throw new Error(\"Wrong branch of map function\");\n }\n if (macro2.escapeToken != null) {\n return [\n macro2.content,\n { escapeToken: macro2.escapeToken }\n ];\n }\n return [macro2.content, {}];\n })\n ) : {} : macros;\n return function matchAgainstMacros(node) {\n if (node == null || node.type !== \"macro\") {\n return false;\n }\n const spec = macrosHash[node.content];\n if (!spec) {\n return false;\n }\n if (typeof spec === \"object\" && \"escapeToken\" in spec) {\n return spec.escapeToken == null || spec.escapeToken === node.escapeToken;\n }\n return true;\n };\n}\nfunction createEnvironmentMatcher(macros) {\n const environmentsHash = Array.isArray(macros) ? Object.fromEntries(\n macros.map((str) => {\n return [str, {}];\n })\n ) : macros;\n return function matchAgainstEnvironments(node) {\n if (!match.anyEnvironment(node)) {\n return false;\n }\n const envName = printRaw(node.env);\n const spec = environmentsHash[envName];\n if (!spec) {\n return false;\n }\n return true;\n };\n}\nvar match = {\n macro(node, macroName) {\n if (node == null) {\n return false;\n }\n return node.type === \"macro\" && (macroName == null || node.content === macroName);\n },\n anyMacro(node) {\n return match.macro(node);\n },\n environment(node, envName) {\n if (node == null) {\n return false;\n }\n return (node.type === \"environment\" || node.type === \"mathenv\") && (envName == null || printRaw(node.env) === envName);\n },\n anyEnvironment(node) {\n return match.environment(node);\n },\n comment(node) {\n if (node == null) {\n return false;\n }\n return node.type === \"comment\";\n },\n parbreak(node) {\n if (node == null) {\n return false;\n }\n return node.type === \"parbreak\";\n },\n whitespace(node) {\n if (node == null) {\n return false;\n }\n return node.type === \"whitespace\";\n },\n /**\n * Matches whitespace or a comment with leading whitespace.\n */\n whitespaceLike(node) {\n if (node == null) {\n return false;\n }\n return node.type === \"whitespace\" || node.type === \"whitespace\" && node.leadingWhitespace === true;\n },\n string(node, value) {\n if (node == null) {\n return false;\n }\n return node.type === \"string\" && (value == null || node.content === value);\n },\n anyString(node) {\n return match.string(node);\n },\n group(node) {\n if (node == null) {\n return false;\n }\n return node.type === \"group\";\n },\n argument(node) {\n if (node == null) {\n return false;\n }\n return node.type === \"argument\";\n },\n blankArgument(node) {\n if (!match.argument(node)) {\n return false;\n }\n return node.openMark === \"\" && node.closeMark === \"\" && node.content.length === 0;\n },\n math(node) {\n if (node == null) {\n return false;\n }\n return node.type === \"displaymath\" || node.type === \"inlinemath\";\n },\n createMacroMatcher,\n createEnvironmentMatcher\n};\nvar {\n anyEnvironment,\n anyMacro,\n anyString,\n argument,\n blankArgument,\n comment,\n environment,\n group,\n macro,\n math,\n parbreak,\n string,\n whitespace\n} = match;\nexport {\n anyEnvironment,\n anyMacro,\n anyString,\n argument,\n blankArgument,\n comment,\n environment,\n group,\n macro,\n match,\n math,\n parbreak,\n string,\n whitespace\n};\n//# sourceMappingURL=index.js.map\n","// libs/list-math-children.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nfunction listMathChildren(node) {\n const NULL_RETURN = { enter: [], leave: [] };\n if (Array.isArray(node)) {\n return NULL_RETURN;\n }\n if (match.math(node)) {\n return { enter: [\"content\"], leave: [] };\n }\n const renderInfo = node._renderInfo || {};\n if (renderInfo.inMathMode == null) {\n return NULL_RETURN;\n }\n if (match.macro(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"args\"], leave: [] };\n } else if (renderInfo.inMathMode === false) {\n return { enter: [], leave: [\"args\"] };\n }\n }\n if (match.environment(node)) {\n if (renderInfo.inMathMode === true) {\n return { enter: [\"content\"], leave: [] };\n } else {\n return { enter: [], leave: [\"content\"] };\n }\n }\n return NULL_RETURN;\n}\n\n// libs/visit.ts\nvar CONTINUE = Symbol(\"continue\");\nvar SKIP = Symbol(\"skip\");\nvar EXIT = Symbol(\"exit\");\nvar DEFAULT_CONTEXT = {\n inMathMode: false,\n hasMathModeAncestor: false\n};\nfunction visit(tree, visitor, options) {\n const {\n startingContext = DEFAULT_CONTEXT,\n test = () => true,\n includeArrays = false\n } = options || {};\n let enter;\n let leave;\n if (typeof visitor === \"function\") {\n enter = visitor;\n } else if (visitor && typeof visitor === \"object\") {\n enter = visitor.enter;\n leave = visitor.leave;\n }\n walk(tree, {\n key: void 0,\n index: void 0,\n parents: [],\n containingArray: void 0,\n context: { ...startingContext }\n });\n function walk(node, { key, index, parents, context, containingArray }) {\n const nodePassesTest = includeArrays ? test(node, { key, index, parents, context, containingArray }) : !Array.isArray(node) && test(node, { key, index, parents, context, containingArray });\n const result = enter && nodePassesTest ? toResult(\n enter(node, {\n key,\n index,\n parents,\n context,\n containingArray\n })\n ) : [CONTINUE];\n if (result[0] === EXIT) {\n return result;\n }\n if (result[0] === SKIP) {\n return leave && nodePassesTest ? toResult(\n leave(node, {\n key,\n index,\n parents,\n context,\n containingArray\n })\n ) : result;\n }\n if (Array.isArray(node)) {\n for (let index2 = 0; index2 > -1 && index2 < node.length; index2++) {\n const item = node[index2];\n const result2 = walk(item, {\n key,\n index: index2,\n parents,\n context,\n containingArray: node\n });\n if (result2[0] === EXIT) {\n return result2;\n }\n if (typeof result2[1] === \"number\") {\n index2 = result2[1] - 1;\n }\n }\n } else {\n let childProps = [\"content\", \"args\"];\n switch (node.type) {\n case \"macro\":\n childProps = [\"args\"];\n break;\n case \"comment\":\n case \"string\":\n case \"verb\":\n case \"verbatim\":\n childProps = [];\n break;\n default:\n break;\n }\n const mathModeProps = listMathChildren(node);\n for (const key2 of childProps) {\n const value = node[key2];\n const grandparents = [node].concat(parents);\n if (value == null) {\n continue;\n }\n const newContext = { ...context };\n if (mathModeProps.enter.includes(key2)) {\n newContext.inMathMode = true;\n newContext.hasMathModeAncestor = true;\n } else if (mathModeProps.leave.includes(key2)) {\n newContext.inMathMode = false;\n }\n const result2 = walk(value, {\n key: key2,\n index: void 0,\n parents: grandparents,\n context: newContext,\n containingArray: void 0\n });\n if (result2[0] === EXIT) {\n return result2;\n }\n }\n }\n return leave && nodePassesTest ? toResult(\n leave(node, {\n key,\n index,\n parents,\n context,\n containingArray\n })\n ) : result;\n }\n}\nfunction toResult(value) {\n if (value == null) {\n return [CONTINUE];\n }\n if (Array.isArray(value)) {\n return value;\n }\n if (typeof value === \"number\") {\n return [CONTINUE, value];\n }\n return [value];\n}\nexport {\n CONTINUE,\n EXIT,\n SKIP,\n visit\n};\n//# sourceMappingURL=index.js.map\n","// libs/trim.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nfunction trim(nodes) {\n if (!Array.isArray(nodes)) {\n console.warn(\"Trying to trim a non-array ast\", nodes);\n return nodes;\n }\n const { trimmedStart } = trimStart(nodes);\n const { trimmedEnd } = trimEnd(nodes);\n return { trimmedStart, trimmedEnd };\n}\nfunction trimStart(nodes) {\n const { start } = amountOfLeadingAndTrailingWhitespace(nodes);\n nodes.splice(0, start);\n for (const leadingToken of nodes) {\n if (!match.comment(leadingToken)) {\n break;\n }\n if (leadingToken.leadingWhitespace || leadingToken.sameline) {\n leadingToken.leadingWhitespace = false;\n delete leadingToken.position;\n }\n if (start > 0 && leadingToken.sameline) {\n leadingToken.sameline = false;\n delete leadingToken.position;\n }\n }\n return { trimmedStart: start };\n}\nfunction trimEnd(nodes) {\n const { end } = amountOfLeadingAndTrailingWhitespace(nodes);\n nodes.splice(nodes.length - end, end);\n for (let i = nodes.length - 1; i >= 0; i--) {\n const trailingToken = nodes[i];\n if (!match.comment(trailingToken)) {\n break;\n }\n delete trailingToken.suffixParbreak;\n if (match.comment(trailingToken) && trailingToken.leadingWhitespace && !trailingToken.sameline) {\n trailingToken.leadingWhitespace = false;\n delete trailingToken.position;\n }\n }\n return { trimmedEnd: end };\n}\nfunction amountOfLeadingAndTrailingWhitespace(ast) {\n let start = 0;\n let end = 0;\n for (const node of ast) {\n if (match.whitespace(node) || match.parbreak(node)) {\n start++;\n } else {\n break;\n }\n }\n if (start === ast.length) {\n return { start, end: 0 };\n }\n for (let i = ast.length - 1; i >= 0; i--) {\n const node = ast[i];\n if (match.whitespace(node) || match.parbreak(node)) {\n end++;\n } else {\n break;\n }\n }\n return { start, end };\n}\n\n// libs/unified-latex-trim-environment-contents.ts\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nvar unifiedLatexTrimEnvironmentContents = function unifiedLatexTrimEnvironmentContents2() {\n return (tree) => {\n visit(tree, (node) => {\n if (!(match2.math(node) || match2.anyEnvironment(node))) {\n return;\n }\n let firstNode = node.content[0];\n if (match2.comment(firstNode) && firstNode.sameline) {\n firstNode.suffixParbreak = false;\n trimEnd(node.content);\n const { trimmedStart } = trimStart(node.content.slice(1));\n node.content.splice(1, trimmedStart);\n } else {\n trim(node.content);\n }\n });\n };\n};\n\n// libs/unified-latex-trim-root.ts\nvar unifiedLatexTrimRoot = function unifiedLatexTrimRoot2() {\n return (tree) => {\n trim(tree.content);\n };\n};\n\n// libs/has-whitespace-equivalent.ts\nimport { match as match3 } from \"@unified-latex/unified-latex-util-match\";\nfunction hasWhitespaceEquivalent(nodes) {\n let start = false;\n let end = false;\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (match3.comment(node)) {\n if (node.leadingWhitespace) {\n start = true;\n break;\n }\n continue;\n }\n if (match3.whitespace(node)) {\n start = true;\n }\n break;\n }\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j];\n if (match3.comment(node)) {\n if (node.leadingWhitespace) {\n end = true;\n break;\n }\n continue;\n }\n if (match3.whitespace(node)) {\n end = true;\n }\n break;\n }\n return { start, end };\n}\nexport {\n hasWhitespaceEquivalent,\n trim,\n trimEnd,\n trimStart,\n unifiedLatexTrimEnvironmentContents,\n unifiedLatexTrimRoot\n};\n//# sourceMappingURL=index.js.map\n","// libs/decorate-array-for-pegjs.ts\nfunction decorateArrayForPegjs(array) {\n array.charAt = function(i) {\n return this[i];\n };\n array.charCodeAt = () => 0;\n array.substring = function(i, j) {\n return this.slice(i, j);\n };\n array.replace = function(a, b) {\n const ret = JSON.stringify(this);\n return ret.replace(a, b);\n };\n return array;\n}\n\n// libs/split-strings.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nfunction splitStringsIntoSingleChars(nodes) {\n return nodes.flatMap(\n (node) => match.anyString(node) ? Array.from(node.content).map((c) => ({\n type: \"string\",\n content: c\n })) : node\n );\n}\n\n// grammars/latex.pegjs\nvar latex_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { document: peg$parsedocument, math: peg$parsemath };\n var peg$startRuleFunction = peg$parsedocument;\n var peg$c0 = \"%\";\n var peg$c1 = \".\";\n var peg$c2 = \"verb*\";\n var peg$c3 = \"verb\";\n var peg$c4 = \"[\";\n var peg$c5 = \"]\";\n var peg$c6 = \"lstinline\";\n var peg$c7 = \"mintinline\";\n var peg$c8 = \"mint\";\n var peg$c9 = \"minted\";\n var peg$c10 = \"verbatim*\";\n var peg$c11 = \"verbatim\";\n var peg$c12 = \"filecontents*\";\n var peg$c13 = \"filecontents\";\n var peg$c14 = \"comment\";\n var peg$c15 = \"lstlisting\";\n var peg$c16 = \"(\";\n var peg$c17 = \")\";\n var peg$c18 = \"begin\";\n var peg$c19 = \"end\";\n var peg$c20 = \"equation*\";\n var peg$c21 = \"equation\";\n var peg$c22 = \"align*\";\n var peg$c23 = \"align\";\n var peg$c24 = \"alignat*\";\n var peg$c25 = \"alignat\";\n var peg$c26 = \"gather*\";\n var peg$c27 = \"gather\";\n var peg$c28 = \"multline*\";\n var peg$c29 = \"multline\";\n var peg$c30 = \"flalign*\";\n var peg$c31 = \"flalign\";\n var peg$c32 = \"split\";\n var peg$c33 = \"math\";\n var peg$c34 = \"displaymath\";\n var peg$c35 = \"\\\\\";\n var peg$c36 = \"{\";\n var peg$c37 = \"}\";\n var peg$c38 = \"$\";\n var peg$c39 = \"&\";\n var peg$c40 = \"\\r\";\n var peg$c41 = \"\\n\";\n var peg$c42 = \"\\r\\n\";\n var peg$c43 = \"#\";\n var peg$c44 = \"^\";\n var peg$c45 = \"_\";\n var peg$c46 = \"\\0\";\n var peg$r0 = /^[^ \\t\\n\\r]/;\n var peg$r1 = /^[ \\t]/;\n var peg$r2 = /^[a-zA-Z]/;\n var peg$r3 = /^[0-9]/;\n var peg$r4 = /^[.,;:\\-*\\/()!?=+<>[\\]`'\"~]/;\n var peg$e0 = peg$otherExpectation(\"document\");\n var peg$e1 = peg$otherExpectation(\"math\");\n var peg$e2 = peg$otherExpectation(\"token\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"parbreak\");\n var peg$e5 = peg$otherExpectation(\"math token\");\n var peg$e6 = peg$otherExpectation(\"nonchar token\");\n var peg$e7 = peg$literalExpectation(\"%\", false);\n var peg$e8 = peg$otherExpectation(\"whitespace\");\n var peg$e9 = peg$otherExpectation(\"number\");\n var peg$e10 = peg$literalExpectation(\".\", false);\n var peg$e11 = peg$otherExpectation(\"special macro\");\n var peg$e12 = peg$literalExpectation(\"verb*\", false);\n var peg$e13 = peg$literalExpectation(\"verb\", false);\n var peg$e14 = peg$literalExpectation(\"[\", false);\n var peg$e15 = peg$literalExpectation(\"]\", false);\n var peg$e16 = peg$classExpectation([\" \", \"\t\", \"\\n\", \"\\r\"], true, false);\n var peg$e17 = peg$otherExpectation(\"verbatim listings\");\n var peg$e18 = peg$literalExpectation(\"lstinline\", false);\n var peg$e19 = peg$otherExpectation(\"verbatim minted\");\n var peg$e20 = peg$literalExpectation(\"mintinline\", false);\n var peg$e21 = peg$literalExpectation(\"mint\", false);\n var peg$e22 = peg$otherExpectation(\"verbatim minted environment\");\n var peg$e23 = peg$literalExpectation(\"minted\", false);\n var peg$e24 = peg$otherExpectation(\"verbatim environment\");\n var peg$e25 = peg$literalExpectation(\"verbatim*\", false);\n var peg$e26 = peg$literalExpectation(\"verbatim\", false);\n var peg$e27 = peg$literalExpectation(\"filecontents*\", false);\n var peg$e28 = peg$literalExpectation(\"filecontents\", false);\n var peg$e29 = peg$literalExpectation(\"comment\", false);\n var peg$e30 = peg$literalExpectation(\"lstlisting\", false);\n var peg$e31 = peg$otherExpectation(\"macro\");\n var peg$e32 = peg$otherExpectation(\"group\");\n var peg$e33 = peg$otherExpectation(\"environment\");\n var peg$e34 = peg$otherExpectation(\"math environment\");\n var peg$e35 = peg$otherExpectation(\"math group\");\n var peg$e36 = peg$literalExpectation(\"(\", false);\n var peg$e37 = peg$literalExpectation(\")\", false);\n var peg$e38 = peg$literalExpectation(\"begin\", false);\n var peg$e39 = peg$literalExpectation(\"end\", false);\n var peg$e40 = peg$literalExpectation(\"equation*\", false);\n var peg$e41 = peg$literalExpectation(\"equation\", false);\n var peg$e42 = peg$literalExpectation(\"align*\", false);\n var peg$e43 = peg$literalExpectation(\"align\", false);\n var peg$e44 = peg$literalExpectation(\"alignat*\", false);\n var peg$e45 = peg$literalExpectation(\"alignat\", false);\n var peg$e46 = peg$literalExpectation(\"gather*\", false);\n var peg$e47 = peg$literalExpectation(\"gather\", false);\n var peg$e48 = peg$literalExpectation(\"multline*\", false);\n var peg$e49 = peg$literalExpectation(\"multline\", false);\n var peg$e50 = peg$literalExpectation(\"flalign*\", false);\n var peg$e51 = peg$literalExpectation(\"flalign\", false);\n var peg$e52 = peg$literalExpectation(\"split\", false);\n var peg$e53 = peg$literalExpectation(\"math\", false);\n var peg$e54 = peg$literalExpectation(\"displaymath\", false);\n var peg$e55 = peg$otherExpectation(\"escape\");\n var peg$e56 = peg$literalExpectation(\"\\\\\", false);\n var peg$e57 = peg$literalExpectation(\"{\", false);\n var peg$e58 = peg$literalExpectation(\"}\", false);\n var peg$e59 = peg$literalExpectation(\"$\", false);\n var peg$e60 = peg$literalExpectation(\"&\", false);\n var peg$e61 = peg$otherExpectation(\"newline\");\n var peg$e62 = peg$literalExpectation(\"\\r\", false);\n var peg$e63 = peg$literalExpectation(\"\\n\", false);\n var peg$e64 = peg$literalExpectation(\"\\r\\n\", false);\n var peg$e65 = peg$literalExpectation(\"#\", false);\n var peg$e66 = peg$literalExpectation(\"^\", false);\n var peg$e67 = peg$literalExpectation(\"_\", false);\n var peg$e68 = peg$literalExpectation(\"\\0\", false);\n var peg$e69 = peg$classExpectation([\" \", \"\t\"], false, false);\n var peg$e70 = peg$otherExpectation(\"letter\");\n var peg$e71 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n var peg$e72 = peg$otherExpectation(\"digit\");\n var peg$e73 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e74 = peg$otherExpectation(\"punctuation\");\n var peg$e75 = peg$classExpectation([\".\", \",\", \";\", \":\", \"-\", \"*\", \"/\", \"(\", \")\", \"!\", \"?\", \"=\", \"+\", \"<\", \">\", \"[\", \"]\", \"`\", \"'\", '\"', \"~\"], false, false);\n var peg$e76 = peg$otherExpectation(\"full comment\");\n var peg$e77 = peg$otherExpectation(\"comment\");\n var peg$f0 = function(content) {\n return createNode(\"root\", { content: content.flatMap((x) => x) });\n };\n var peg$f1 = function(t) {\n return t;\n };\n var peg$f2 = function(eq) {\n return createNode(\"inlinemath\", { content: eq.flatMap((x) => x) });\n };\n var peg$f3 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f4 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f5 = function() {\n return createNode(\"parbreak\");\n };\n var peg$f6 = function(x) {\n return x;\n };\n var peg$f7 = function(x) {\n return x;\n };\n var peg$f8 = function() {\n return createNode(\"macro\", { content: \"^\", escapeToken: \"\" });\n };\n var peg$f9 = function() {\n return createNode(\"macro\", { content: \"_\", escapeToken: \"\" });\n };\n var peg$f10 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f11 = function() {\n return createNode(\"whitespace\");\n };\n var peg$f12 = function(a, b) {\n return a.join(\"\") + \".\" + b.join(\"\");\n };\n var peg$f13 = function(b) {\n return \".\" + b.join(\"\");\n };\n var peg$f14 = function(a) {\n return a.join(\"\") + \".\";\n };\n var peg$f15 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f16 = function(env, e, end) {\n return end == e;\n };\n var peg$f17 = function(env, e, x) {\n return x;\n };\n var peg$f18 = function(env, e, x, end) {\n return end == e;\n };\n var peg$f19 = function(env, e, x) {\n return createNode(\"verb\", {\n env,\n escape: e,\n content: x.join(\"\")\n });\n };\n var peg$f20 = function(x) {\n return x;\n };\n var peg$f21 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f22 = function(x) {\n return x;\n };\n var peg$f23 = function(x) {\n return createNode(\"inlinemath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f24 = function(x) {\n return x;\n };\n var peg$f25 = function(x) {\n return createNode(\"displaymath\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f26 = function(end) {\n return end.type === \"string\" && end.content === \"]\";\n };\n var peg$f27 = function(x) {\n return x;\n };\n var peg$f28 = function(o) {\n return [\n createNode(\"string\", { content: \"[\" }),\n ...o,\n createNode(\"string\", { content: \"]\" })\n ];\n };\n var peg$f29 = function(x) {\n return x;\n };\n var peg$f30 = function(v) {\n return createNode(\"group\", {\n content: createNode(\"string\", { content: v.join(\"\") })\n });\n };\n var peg$f31 = function(d, end) {\n return end == d;\n };\n var peg$f32 = function(d, x) {\n return x;\n };\n var peg$f33 = function(d, v, end) {\n return end == d;\n };\n var peg$f34 = function(d, v) {\n return [\n createNode(\"string\", { content: d }),\n createNode(\"string\", { content: v.join(\"\") }),\n createNode(\"string\", { content: d })\n ];\n };\n var peg$f35 = function(macro, option, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...option || [],\n ...[].concat(verbatim)\n ];\n };\n var peg$f36 = function(macro, option, language, verbatim) {\n return [\n createNode(\"macro\", { content: macro }),\n ...option || [],\n language,\n ...[].concat(verbatim)\n ];\n };\n var peg$f37 = function(env, lang, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f38 = function(env, lang, x) {\n return x;\n };\n var peg$f39 = function(env, lang, body) {\n return createNode(\"verbatim\", {\n env: `${env}{${lang.content.content}}`,\n content: body.join(\"\")\n });\n };\n var peg$f40 = function(env, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f41 = function(env, x) {\n return x;\n };\n var peg$f42 = function(env, body) {\n return createNode(\"verbatim\", {\n env,\n content: body.join(\"\")\n });\n };\n var peg$f43 = function(n) {\n return n.join(\"\");\n };\n var peg$f44 = function(n) {\n return n;\n };\n var peg$f45 = function(m) {\n return createNode(\"macro\", { content: m });\n };\n var peg$f46 = function(c) {\n return c;\n };\n var peg$f47 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f48 = function(g) {\n return text().slice(1, -1);\n };\n var peg$f49 = function(env, env_comment, end_env) {\n return compare_env(env, end_env);\n };\n var peg$f50 = function(env, env_comment, x) {\n return x;\n };\n var peg$f51 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"environment\", {\n env,\n content: env_comment ? [env_comment, ...body] : body\n });\n };\n var peg$f52 = function(env, env_comment, end_env) {\n return compare_env({ content: [env] }, end_env);\n };\n var peg$f53 = function(env, env_comment, x) {\n return x;\n };\n var peg$f54 = function(env, env_comment, body) {\n body = body.flatMap((x) => x);\n return createNode(\"mathenv\", {\n env,\n content: env_comment ? [env_comment, ...body] : body\n });\n };\n var peg$f55 = function(c) {\n return c;\n };\n var peg$f56 = function(x) {\n return createNode(\"group\", { content: x.flatMap((x2) => x2) });\n };\n var peg$f57 = function(e) {\n return createNode(\"string\", { content: e });\n };\n var peg$f58 = function() {\n return createNode(\"string\", { content: \"\\\\\" });\n };\n var peg$f59 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f60 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f61 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f62 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f63 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f64 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f65 = function(s) {\n return createNode(\"string\", { content: s });\n };\n var peg$f66 = function() {\n return \" \";\n };\n var peg$f67 = function(p) {\n return createNode(\"string\", { content: p });\n };\n var peg$f68 = function(leading_sp, comment) {\n return createNode(\"comment\", {\n ...comment,\n sameline: false,\n leadingWhitespace: leading_sp.length > 0\n });\n };\n var peg$f69 = function(spaces, x) {\n return createNode(\"comment\", {\n ...x,\n sameline: true,\n leadingWhitespace: spaces.length > 0\n });\n };\n var peg$f70 = function(c) {\n return c;\n };\n var peg$f71 = function(c) {\n return { content: c.join(\"\"), suffixParbreak: true };\n };\n var peg$f72 = function(c) {\n return c;\n };\n var peg$f73 = function(c) {\n return { content: c.join(\"\") };\n };\n var peg$f74 = function() {\n var loc = location();\n return loc.start.column === 1;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsedocument() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n s0 = s1;\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n return s0;\n }\n function peg$parsemath() {\n var s0, s1;\n peg$silentFails++;\n s0 = [];\n s1 = peg$parsemath_token();\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemath_token();\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsegroup();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsemath_shift();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f1(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_shift();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parseparbreak();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenumber();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenonchar_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n return s0;\n }\n function peg$parseparbreak() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = [];\n s7 = peg$parsesp();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsesp();\n }\n s7 = peg$parsenl();\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n return s0;\n }\n function peg$parsemath_token() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$parsespecial_macro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefull_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsealignment_tab();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesuperscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f8();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesubscript();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsewhitespace();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parsenonchar_token() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parseescape();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsebegin_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parseend_group();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_shift();\n if (s0 === peg$FAILED) {\n s0 = peg$parsealignment_tab();\n if (s0 === peg$FAILED) {\n s0 = peg$parsenl();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemacro_parameter();\n if (s0 === peg$FAILED) {\n s0 = peg$parseignore();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesp();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepunctuation();\n if (s0 === peg$FAILED) {\n s0 = peg$parseEOF();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsenl();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsecomment_start();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsenl();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = [];\n s2 = peg$parsesp();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n } else {\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsenum();\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsenum();\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f12(s2, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenum();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenum();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f13(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsenum();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenum();\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c1;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f14(s2);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parsespecial_macro() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c2) {\n s2 = peg$c2;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c3) {\n s2 = peg$c3;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = void 0;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s9 = peg$f16(s2, s3, s8);\n if (s9) {\n s9 = void 0;\n } else {\n s9 = peg$FAILED;\n }\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f17(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f18(s2, s3, s4, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_listings();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_minted();\n if (s0 === peg$FAILED) {\n s0 = peg$parseverbatim_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_display_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_display_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f20(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_display_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebegin_inline_math();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_inline_math();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f22(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_inline_math();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemath_shift();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemath_shift();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$currPos;\n s7 = peg$parsemath_shift();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsemath_shift();\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemath_token();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f24(s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s4 = peg$parsemath_shift();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_shift();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parsemath_environment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseenvironment();\n }\n }\n }\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n return s0;\n }\n function peg$parsesquare_bracket_argument() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n s6 = peg$parsetoken();\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f26(s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f27(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseverbatim_group() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f29(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseverbatim_delimited_by_char() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$currPos;\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s7 = peg$f31(s1, s6);\n if (s7) {\n s7 = void 0;\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f32(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$f33(s1, s2, s4);\n if (s5) {\n s5 = void 0;\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseverbatim_listings() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c6) {\n s2 = peg$c6;\n peg$currPos += 9;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseverbatim_group();\n if (s4 === peg$FAILED) {\n s4 = peg$parseverbatim_delimited_by_char();\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n return s0;\n }\n function peg$parseverbatim_minted() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c7) {\n s2 = peg$c7;\n peg$currPos += 10;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c8) {\n s2 = peg$c8;\n peg$currPos += 4;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesquare_bracket_argument();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseverbatim_group();\n if (s5 === peg$FAILED) {\n s5 = peg$parseverbatim_delimited_by_char();\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n return s0;\n }\n function peg$parseverbatim_minted_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c9) {\n s3 = peg$c9;\n peg$currPos += 6;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f37(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f38(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f37(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f38(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s7 = peg$parseend_env();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsebegin_group();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseverbatim_env_name();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseend_group();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f39(s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n return s0;\n }\n function peg$parseverbatim_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseverbatim_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$currPos;\n s9 = peg$parseend_env();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsegroup();\n if (s10 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s11 = peg$f40(s3, s10);\n if (s11) {\n s11 = void 0;\n } else {\n s11 = peg$FAILED;\n }\n if (s11 !== peg$FAILED) {\n s9 = [s9, s10, s11];\n s8 = s9;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s6;\n s6 = peg$f41(s3, s8);\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$currPos;\n s9 = peg$parseend_env();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsegroup();\n if (s10 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s11 = peg$f40(s3, s10);\n if (s11) {\n s11 = void 0;\n } else {\n s11 = peg$FAILED;\n }\n if (s11 !== peg$FAILED) {\n s9 = [s9, s10, s11];\n s8 = s9;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s6;\n s6 = peg$f41(s3, s8);\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n s6 = peg$parseend_env();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsebegin_group();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseverbatim_env_name();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseend_group();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f42(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n return s0;\n }\n function peg$parseverbatim_env_name() {\n var s0;\n if (input.substr(peg$currPos, 9) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e26);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 13;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 12;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e28);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e30);\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsechar();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsechar();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f43(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseescape();\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s1;\n s1 = peg$f44(s3);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f45(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f46(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsetoken();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f46(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f47(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e32);\n }\n }\n return s0;\n }\n function peg$parsegroup_contents_as_string() {\n var s0, s1;\n s0 = peg$currPos;\n s1 = peg$parsegroup();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f48(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseenvironment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup_contents_as_string();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsesameline_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f49(s2, s3, s9);\n if (s10) {\n s10 = void 0;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f50(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = peg$parseend_env();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsegroup_contents_as_string();\n if (s9 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s10 = peg$f49(s2, s3, s9);\n if (s10) {\n s10 = void 0;\n } else {\n s10 = peg$FAILED;\n }\n if (s10 !== peg$FAILED) {\n s8 = [s8, s9, s10];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parsetoken();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s5;\n s5 = peg$f50(s2, s3, s7);\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s5 = peg$parseend_env();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsegroup_contents_as_string();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f51(s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e33);\n }\n }\n return s0;\n }\n function peg$parsemath_environment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_env();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebegin_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemath_env_name();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseend_group();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsesameline_comment();\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s6 = [];\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f52(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f53(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$currPos;\n s8 = peg$currPos;\n peg$silentFails++;\n s9 = peg$currPos;\n s10 = peg$parseend_env();\n if (s10 !== peg$FAILED) {\n s11 = peg$parsegroup();\n if (s11 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s12 = peg$f52(s3, s5, s11);\n if (s12) {\n s12 = void 0;\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n peg$silentFails--;\n if (s9 === peg$FAILED) {\n s8 = void 0;\n } else {\n peg$currPos = s8;\n s8 = peg$FAILED;\n }\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_token();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f53(s3, s5, s9);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n }\n s7 = peg$parseend_env();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsebegin_group();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsemath_env_name();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseend_group();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f54(s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e34);\n }\n }\n return s0;\n }\n function peg$parsemath_group() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsebegin_group();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f55(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseend_group();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemath_token();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f55(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$parseend_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f56(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e35);\n }\n }\n return s0;\n }\n function peg$parsebegin_display_math() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 91) {\n s2 = peg$c4;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseend_display_math() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s2 = peg$c5;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebegin_inline_math() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s2 = peg$c16;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseend_inline_math() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s2 = peg$c17;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e37);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebegin_env() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c18) {\n s2 = peg$c18;\n peg$currPos += 5;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e38);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseend_env() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseescape();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c19) {\n s2 = peg$c19;\n peg$currPos += 3;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e39);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemath_env_name() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c20) {\n s1 = peg$c20;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e40);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c21) {\n s1 = peg$c21;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e41);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e42);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c23) {\n s1 = peg$c23;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e43);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c24) {\n s1 = peg$c24;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e44);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c25) {\n s1 = peg$c25;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e45);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c26) {\n s1 = peg$c26;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e46);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c27) {\n s1 = peg$c27;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e47);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e48);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c29) {\n s1 = peg$c29;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e49);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c30) {\n s1 = peg$c30;\n peg$currPos += 8;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e50);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c31) {\n s1 = peg$c31;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e51);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c32) {\n s1 = peg$c32;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e52);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c33) {\n s1 = peg$c33;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e53);\n }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c34) {\n s1 = peg$c34;\n peg$currPos += 11;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e54);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f57(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseescape() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e56);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f58();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e55);\n }\n }\n return s0;\n }\n function peg$parsebegin_group() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e57);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f59(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseend_group() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s1 = peg$c37;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e58);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f60(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsemath_shift() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 36) {\n s1 = peg$c38;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e59);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f61(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsealignment_tab() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 38) {\n s1 = peg$c39;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e60);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f62(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsenl() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 13) {\n s2 = peg$c40;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e62);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s2 = peg$c41;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e63);\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c40;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e62);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c42) {\n s0 = peg$c42;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e64);\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e61);\n }\n }\n return s0;\n }\n function peg$parsemacro_parameter() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c43;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e65);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f63(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsesuperscript() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 94) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e66);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f64(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsesubscript() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 95) {\n s1 = peg$c45;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e67);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f65(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseignore() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 0) {\n s0 = peg$c46;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e68);\n }\n }\n return s0;\n }\n function peg$parsesp() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e69);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e69);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f66();\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parsechar() {\n var s0, s1;\n peg$silentFails++;\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e71);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e70);\n }\n }\n return s0;\n }\n function peg$parsenum() {\n var s0, s1;\n peg$silentFails++;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e73);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e72);\n }\n }\n return s0;\n }\n function peg$parsepunctuation() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n if (peg$r4.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e75);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f67(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e74);\n }\n }\n return s0;\n }\n function peg$parsecomment_start() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 37) {\n s0 = peg$c0;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsefull_comment() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parseownline_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesameline_comment();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e76);\n }\n }\n return s0;\n }\n function peg$parseownline_comment() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsesp();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsesp();\n }\n s3 = peg$parsenl();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseleading_sp();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f68(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesameline_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsesp();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsesp();\n }\n s2 = peg$parsecomment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f69(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecomment() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f70(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f70(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseparbreak();\n peg$silentFails--;\n if (s4 !== peg$FAILED) {\n peg$currPos = s3;\n s3 = void 0;\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f71(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecomment_start();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f72(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsenl();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f72(s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n s3 = peg$currPos;\n s4 = peg$parsenl();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsesp();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsesp();\n }\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsecomment_start();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsenl();\n if (s3 === peg$FAILED) {\n s3 = peg$parseEOF();\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f73(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e77);\n }\n }\n return s0;\n }\n function peg$parseleading_sp() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsestart_of_line();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsesp();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsesp();\n }\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parsestart_of_line() {\n var s0;\n peg$savedPos = peg$currPos;\n s0 = peg$f74();\n if (s0) {\n s0 = void 0;\n } else {\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOF() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function toString(e) {\n if (typeof e === \"string\") {\n return e;\n }\n if (typeof e.content === \"string\") {\n return e.content;\n }\n if (e && e.type === \"whitespace\") {\n return \" \";\n }\n return e;\n }\n function compare_env(g1, g2) {\n const g1Name = typeof g1 === \"string\" ? g1 : g1.content.map(toString).join(\"\");\n const g2Name = typeof g2 === \"string\" ? g2 : g2.content.map(toString).join(\"\");\n return g1Name === g2Name;\n }\n function createNode(type, extra = {}) {\n return { type, ...extra, position: location() };\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/align-environment.pegjs\nvar align_environment_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function() {\n return [];\n };\n var peg$f1 = function(x) {\n return { cells: [], colSeps: [], ...x };\n };\n var peg$f2 = function(rowItems, rowSep, trailingComment) {\n return { ...rowItems, rowSep, trailingComment };\n };\n var peg$f3 = function(rowItems, trailingComment) {\n return { ...rowItems, rowSep: null, trailingComment };\n };\n var peg$f4 = function(x) {\n return x;\n };\n var peg$f5 = function(x) {\n return {\n cells: [],\n colSeps: [],\n rowSep: null,\n trailingComment: x\n };\n };\n var peg$f6 = function(x) {\n return x;\n };\n var peg$f7 = function(colSep, cell) {\n return { colSep, cell };\n };\n var peg$f8 = function(colSep) {\n return { colSep };\n };\n var peg$f9 = function(a, b) {\n return processRow(a, b);\n };\n var peg$f10 = function(b) {\n return processRow(null, b);\n };\n var peg$f11 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f12 = function(tok) {\n return tok;\n };\n var peg$f13 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f14 = function(tok) {\n return tok;\n };\n var peg$f15 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f16 = function(tok) {\n return tok;\n };\n var peg$f17 = function(tok) {\n return options.isRowSep(tok);\n };\n var peg$f18 = function(tok) {\n return tok;\n };\n var peg$f19 = function(tok) {\n return options.isColSep(tok);\n };\n var peg$f20 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parserow_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parserow_with_end() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s1;\n s2 = peg$f1(s2);\n s1 = s2;\n s2 = peg$parserow_sep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_without_end() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parserow_items();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parserow_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsecol_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecell() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetoken();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parseseparated_cell() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsecell();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecol_sep();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsecell();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_cell();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_cell();\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_cell();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_cell();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f11(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f13(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecol_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function processRow(leadCell, otherCells) {\n const cells = [leadCell || []];\n const seps = [];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n seps.push(x.colSep);\n }\n return { cells, colSeps: seps };\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(\n options,\n createMatchers([\"\\\\\", \"hline\", \"cr\"], [\"&\"])\n );\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/xparse-argspec.pegjs\nvar xparse_argspec_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { args_spec_list: peg$parseargs_spec_list };\n var peg$startRuleFunction = peg$parseargs_spec_list;\n var peg$c0 = \"+\";\n var peg$c1 = \"v\";\n var peg$c2 = \"b\";\n var peg$c3 = \"!\";\n var peg$c4 = \"D\";\n var peg$c5 = \"d\";\n var peg$c6 = \"s\";\n var peg$c7 = \"O\";\n var peg$c8 = \"o\";\n var peg$c9 = \"e\";\n var peg$c10 = \"E\";\n var peg$c11 = \"t\";\n var peg$c12 = \"R\";\n var peg$c13 = \"r\";\n var peg$c14 = \"u\";\n var peg$c15 = \"m\";\n var peg$c16 = \"{\";\n var peg$c17 = \"}\";\n var peg$c18 = \" \";\n var peg$c19 = \"\\n\";\n var peg$c20 = \"\\r\";\n var peg$r0 = /^[{ ]/;\n var peg$e0 = peg$literalExpectation(\"+\", false);\n var peg$e1 = peg$literalExpectation(\"v\", false);\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$literalExpectation(\"b\", false);\n var peg$e4 = peg$literalExpectation(\"!\", false);\n var peg$e5 = peg$literalExpectation(\"D\", false);\n var peg$e6 = peg$literalExpectation(\"d\", false);\n var peg$e7 = peg$literalExpectation(\"s\", false);\n var peg$e8 = peg$literalExpectation(\"O\", false);\n var peg$e9 = peg$literalExpectation(\"o\", false);\n var peg$e10 = peg$literalExpectation(\"e\", false);\n var peg$e11 = peg$literalExpectation(\"E\", false);\n var peg$e12 = peg$literalExpectation(\"t\", false);\n var peg$e13 = peg$literalExpectation(\"R\", false);\n var peg$e14 = peg$literalExpectation(\"r\", false);\n var peg$e15 = peg$literalExpectation(\"u\", false);\n var peg$e16 = peg$classExpectation([\"{\", \" \"], false, false);\n var peg$e17 = peg$literalExpectation(\"m\", false);\n var peg$e18 = peg$literalExpectation(\"{\", false);\n var peg$e19 = peg$literalExpectation(\"}\", false);\n var peg$e20 = peg$literalExpectation(\" \", false);\n var peg$e21 = peg$literalExpectation(\"\\n\", false);\n var peg$e22 = peg$literalExpectation(\"\\r\", false);\n var peg$f0 = function(x) {\n return x;\n };\n var peg$f1 = function(spec) {\n return spec;\n };\n var peg$f2 = function(spec) {\n return spec;\n };\n var peg$f3 = function(openBrace) {\n return createNode(\"verbatim\", { openBrace, closeBrace: openBrace });\n };\n var peg$f4 = function() {\n return createNode(\"body\");\n };\n var peg$f5 = function(leading_bang, spec) {\n return leading_bang ? { ...spec, noLeadingWhitespace: true } : spec;\n };\n var peg$f6 = function(braceSpec, defaultArg) {\n return createNode(\"optional\", { ...braceSpec, defaultArg });\n };\n var peg$f7 = function(braceSpec) {\n return createNode(\"optional\", braceSpec);\n };\n var peg$f8 = function() {\n return createNode(\"optionalStar\");\n };\n var peg$f9 = function(g) {\n return createNode(\"optional\", { defaultArg: g });\n };\n var peg$f10 = function() {\n return createNode(\"optional\");\n };\n var peg$f11 = function(args) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args.content\n });\n };\n var peg$f12 = function(args, g) {\n return createNode(\"embellishment\", {\n embellishmentTokens: args.content,\n defaultArg: g\n });\n };\n var peg$f13 = function(tok) {\n return createNode(\"optionalToken\", { token: tok });\n };\n var peg$f14 = function(braceSpec, defaultArg) {\n return createNode(\"mandatory\", { ...braceSpec, defaultArg });\n };\n var peg$f15 = function(braceSpec) {\n return createNode(\"mandatory\", braceSpec);\n };\n var peg$f16 = function(stopTokens) {\n return createNode(\"until\", { stopTokens });\n };\n var peg$f17 = function(x) {\n return [x];\n };\n var peg$f18 = function(g) {\n return g.content;\n };\n var peg$f19 = function() {\n return createNode(\"mandatory\");\n };\n var peg$f20 = function(openBrace, closeBrace) {\n return { openBrace, closeBrace };\n };\n var peg$f21 = function(content) {\n return { type: \"group\", content };\n };\n var peg$f22 = function() {\n return \"\";\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parseargs_spec_list() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsewhitespace();\n s4 = peg$parsearg_spec();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f0(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n s2 = peg$parsewhitespace();\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n return s0;\n }\n function peg$parsearg_spec() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemandatory();\n if (s2 === peg$FAILED) {\n s2 = peg$parseverbatim();\n if (s2 === peg$FAILED) {\n s2 = peg$parserequired();\n if (s2 === peg$FAILED) {\n s2 = peg$parsebody();\n if (s2 === peg$FAILED) {\n s2 = peg$parseuntil();\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseverbatim() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 118) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebody() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 98) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseoptional() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parseoptional_star();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_standard();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_delimited();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_embellishment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoptional_token();\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseoptional_delimited() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 68) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsebraced_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 100) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseoptional_star() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 115) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f8();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseoptional_standard() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 79) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebraced_group();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 111) {\n s1 = peg$c8;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseoptional_embellishment() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 101) {\n s1 = peg$c9;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebraced_group();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 69) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebraced_group();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsebraced_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseoptional_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 116) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserequired() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 82) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n s3 = peg$parsebraced_group();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 114) {\n s1 = peg$c13;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsebrace_spec();\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseuntil() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 117) {\n s1 = peg$c14;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseuntil_stop_token();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseuntil_stop_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsebraced_group();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f18(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsemandatory() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 109) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f19();\n }\n s0 = s1;\n return s0;\n }\n function peg$parsebrace_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = void 0;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parsewhitespace_token();\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = void 0;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s2 = input.substring(s2, peg$currPos);\n peg$savedPos = s0;\n s0 = peg$f20(s1, s2);\n return s0;\n }\n function peg$parsebraced_group() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c17;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parsebraced_group();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$parsebraced_group();\n }\n }\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c17;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace_token();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace_token();\n }\n peg$savedPos = s0;\n s1 = peg$f22();\n s0 = s1;\n return s0;\n }\n function peg$parsewhitespace_token() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 32) {\n s0 = peg$c18;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n }\n }\n return s0;\n }\n const DEFAULT_OPTIONS = {\n optional: { openBrace: \"[\", closeBrace: \"]\" },\n mandatory: { openBrace: \"{\", closeBrace: \"}\" }\n };\n function createNode(type, options2) {\n const computedOptions = DEFAULT_OPTIONS[type] || {};\n return { type, ...computedOptions, ...options2 };\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/pgfkeys.pegjs\nvar pgfkeys_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function() {\n return [];\n };\n var peg$f1 = function(rowItems, trailingComment) {\n return {\n itemParts: [],\n ...rowItems,\n trailingComment,\n trailingComma: true\n };\n };\n var peg$f2 = function(rowItems, trailingComment) {\n return { ...rowItems, trailingComment };\n };\n var peg$f3 = function(a, b) {\n return processItem(a, b);\n };\n var peg$f4 = function(b) {\n return processItem(null, b);\n };\n var peg$f5 = function(cell) {\n return { cell };\n };\n var peg$f6 = function() {\n return {};\n };\n var peg$f7 = function(part) {\n return part;\n };\n var peg$f8 = function(x) {\n return x;\n };\n var peg$f9 = function(space, x) {\n return {\n trailingComment: x,\n leadingParbreak: space.parbreak > 0\n };\n };\n var peg$f10 = function(list) {\n return {\n whitespace: list.filter((x) => options.isWhitespace(x)).length,\n parbreak: list.filter((x) => options.isParbreak(x)).length\n };\n };\n var peg$f11 = function() {\n return !options.allowParenGroups;\n };\n var peg$f12 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f13 = function(tok) {\n return tok;\n };\n var peg$f14 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f15 = function(tok) {\n return tok;\n };\n var peg$f16 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$f18 = function(tok) {\n return options.isParbreak(tok);\n };\n var peg$f19 = function(tok) {\n return tok;\n };\n var peg$f20 = function(tok) {\n return options.isComma(tok);\n };\n var peg$f21 = function(tok) {\n return tok;\n };\n var peg$f22 = function(tok) {\n return options.isEquals(tok);\n };\n var peg$f23 = function(tok) {\n return tok;\n };\n var peg$f24 = function(tok) {\n return options.isChar(tok, \"(\");\n };\n var peg$f25 = function(tok) {\n return tok;\n };\n var peg$f26 = function(tok) {\n return options.isChar(tok, \")\");\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = [];\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsecomment_only_line();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_with_end();\n if (s1 === peg$FAILED) {\n s1 = peg$parseitem_without_end();\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseitem_with_end() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsewhitespace_or_parbreaks();\n s4 = peg$parseitem_sep();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsewhitespace();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsewhitespace();\n }\n s6 = peg$parsetrailing_comment();\n if (s6 === peg$FAILED) {\n s6 = null;\n }\n s7 = [];\n s8 = peg$parsewhitespace();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f1(s2, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseitem_without_end() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parserow_items();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parserow_items() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseitem_part();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseseparated_part();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseseparated_part();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseseparated_part();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseseparated_part();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f4(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseseparated_part() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseparbreak();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseparbreak();\n }\n s4 = peg$parseitem_part();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparbreak();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparbreak();\n }\n s2 = peg$parseequals();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseitem_part() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = void 0;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_whitespace_non_parbreak_token();\n if (s4 === peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$parsewhitespace();\n if (s5 === peg$FAILED) {\n s5 = peg$parseparbreak();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$currPos;\n s8 = [];\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parsewhitespace();\n if (s9 === peg$FAILED) {\n s9 = peg$parseparbreak();\n }\n }\n s9 = peg$parsenon_whitespace_non_parbreak_token();\n if (s9 !== peg$FAILED) {\n s8 = [s8, s9];\n s7 = s8;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n peg$silentFails--;\n if (s7 !== peg$FAILED) {\n peg$currPos = s6;\n s6 = void 0;\n } else {\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsewhitespace();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsewhitespace();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsewhitespace_or_parbreaks();\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsenon_token();\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parsenon_whitespace_non_parbreak_token() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$parsewhitespace();\n if (s3 === peg$FAILED) {\n s3 = peg$parseparbreak();\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) {\n s2 = void 0;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseparen_block();\n if (s3 === peg$FAILED) {\n s3 = peg$parsetoken();\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n return s0;\n }\n function peg$parsenon_token() {\n var s0;\n s0 = peg$parseitem_sep();\n if (s0 === peg$FAILED) {\n s0 = peg$parseequals();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetrailing_comment();\n if (s0 === peg$FAILED) {\n s0 = peg$parseown_line_comment();\n }\n }\n }\n return s0;\n }\n function peg$parsewhitespace_or_parbreaks() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhitespace();\n if (s2 === peg$FAILED) {\n s2 = peg$parseparbreak();\n }\n }\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n s0 = s1;\n return s0;\n }\n function peg$parseparen_block() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$f11();\n if (s1) {\n s1 = peg$FAILED;\n } else {\n s1 = void 0;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parseopen_paren();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$currPos;\n s7 = peg$currPos;\n peg$silentFails++;\n s8 = peg$parseclose_paren();\n peg$silentFails--;\n if (s8 === peg$FAILED) {\n s7 = void 0;\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s8 !== peg$FAILED) {\n s7 = [s7, s8];\n s6 = s7;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n }\n s6 = peg$parseclose_paren();\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseparbreak() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseitem_sep() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseopen_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function processItem(leadCell, otherCells) {\n const cells = [leadCell || []];\n for (const x of otherCells) {\n cells.push(x.cell || []);\n }\n return { itemParts: cells };\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) => node.type === \"string\" && node.content === char,\n isComma(node) {\n return node.type === \"string\" && node.content === \",\";\n },\n isEquals(node) {\n return node.type === \"string\" && node.content === \"=\";\n },\n isParbreak(node) {\n return node.type === \"parbreak\";\n },\n isWhitespace(node) {\n return node.type === \"whitespace\";\n },\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n allowParenGroups: true\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/macro-substitutions.pegjs\nvar macro_substitutions_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function(e) {\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(tok) {\n return options.isHash(tok);\n };\n var peg$f3 = function(tok) {\n return tok;\n };\n var peg$f4 = function(tok) {\n return options.isNumber(tok);\n };\n var peg$f5 = function(tok) {\n return tok;\n };\n var peg$f6 = function() {\n return { type: \"string\", content: \"#\" };\n };\n var peg$f7 = function(num) {\n const split = options.splitNumber(num);\n return [{ type: \"hash_number\", number: split.number }, split.rest];\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedouble_hash();\n if (s2 === peg$FAILED) {\n s2 = peg$parsehash_number();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsehash() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f4(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_hash() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehash();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsehash_number() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsehash();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isHash) {\n try {\n Object.assign(options, {\n isHash: (node) => node.type === \"string\" && node.content === \"#\",\n isNumber: (node) => node.type === \"string\" && 0 < +node.content.charAt(0),\n splitNumber: (node) => {\n const number = +node.content.charAt(0);\n if (node.content.length > 1) {\n return {\n number,\n rest: {\n type: \"string\",\n content: node.content.slice(1)\n }\n };\n }\n return { number };\n }\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/ligatures.pegjs\nvar ligatures_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$anyExpectation();\n var peg$f0 = function(e) {\n return [].concat(...e).filter((n) => !!n);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f3 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f4 = function(tok1, tok2) {\n const split = options.split(tok2);\n return options.isRecognized([tok1, split[0]]);\n };\n var peg$f5 = function(tok1, tok2) {\n const split = options.split(tok2);\n return [options.isRecognized([tok1, split[0]]), split[1]];\n };\n var peg$f6 = function(tok1, tok2) {\n return options.isRecognized([tok1, tok2]);\n };\n var peg$f7 = function(tok1, tok2) {\n return options.isRecognized([tok1, tok2]);\n };\n var peg$f8 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f9 = function(toks) {\n return options.isRecognized(toks);\n };\n var peg$f10 = function(tok) {\n return options.isRecognized([tok]);\n };\n var peg$f11 = function(tok) {\n return options.isRecognized([tok]);\n };\n var peg$f12 = function(tok) {\n return options.isMacro(tok);\n };\n var peg$f13 = function(tok) {\n return tok;\n };\n var peg$f14 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f15 = function(tok) {\n return tok;\n };\n var peg$f16 = function(tok) {\n return options.isSplitable(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsetriple_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsedouble_ligature();\n if (s2 === peg$FAILED) {\n s2 = peg$parsemono_ligature();\n if (s2 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f0(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsetriple_ligature() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s4 !== peg$FAILED) {\n s2 = [s2, s3, s4];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f2(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_ligature() {\n var s0;\n s0 = peg$parsedouble_macro_ligature();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_macro_ligature_extracted();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_char_ligature();\n }\n }\n return s0;\n }\n function peg$parsedouble_macro_ligature_extracted() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n s3 = peg$parsesplitable();\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f4(s1, s3);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_macro_ligature() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parsemacro();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsewhitespace();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsewhitespace();\n }\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s4 = peg$f6(s1, s3);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f7(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedouble_char_ligature() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s2 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f8(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemono_ligature() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f10(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f12(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsewhitespace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f14(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesplitable() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isMacro: (node) => node.type === \"macro\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isRecognized: (nodes) => {\n if (nodes.length == 2 && nodes[0].content === \"^\" && nodes[1].content === \"o\") {\n return { type: \"string\", content: \"\\xF4\" };\n }\n return null;\n },\n isSplitable: (node) => node.type === \"string\" && node.content.length > 1,\n split: (node) => [\n { type: \"string\", content: node.content.charAt(0) },\n { type: \"string\", content: node.content.slice(1) }\n ]\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/xcolor-expressions.pegjs\nvar xcolor_expressions_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { start: peg$parsestart };\n var peg$startRuleFunction = peg$parsestart;\n var peg$c0 = \";\";\n var peg$c1 = \",\";\n var peg$c2 = \":\";\n var peg$c3 = \"/\";\n var peg$c4 = \">\";\n var peg$c5 = \"!\";\n var peg$c6 = \".\";\n var peg$c7 = \"!![\";\n var peg$c8 = \"]\";\n var peg$c9 = \"!!\";\n var peg$c10 = \"+\";\n var peg$c11 = \"-\";\n var peg$r0 = /^[a-zA-Z0-9]/;\n var peg$r1 = /^[0-9]/;\n var peg$r2 = /^[ \\t\\n\\r]/;\n var peg$r3 = /^[0-9a-fA-F]/;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\";\", false);\n var peg$e2 = peg$literalExpectation(\",\", false);\n var peg$e3 = peg$otherExpectation(\"model list\");\n var peg$e4 = peg$literalExpectation(\":\", false);\n var peg$e5 = peg$literalExpectation(\"/\", false);\n var peg$e6 = peg$otherExpectation(\"model\");\n var peg$e7 = peg$otherExpectation(\"color spec list\");\n var peg$e8 = peg$otherExpectation(\"color spec\");\n var peg$e9 = peg$otherExpectation(\"color\");\n var peg$e10 = peg$otherExpectation(\"function expression\");\n var peg$e11 = peg$literalExpectation(\">\", false);\n var peg$e12 = peg$otherExpectation(\"function\");\n var peg$e13 = peg$otherExpectation(\"extended expression\");\n var peg$e14 = peg$otherExpectation(\"core model\");\n var peg$e15 = peg$otherExpectation(\"expr\");\n var peg$e16 = peg$literalExpectation(\"!\", false);\n var peg$e17 = peg$otherExpectation(\"mix expr\");\n var peg$e18 = peg$otherExpectation(\"name\");\n var peg$e19 = peg$literalExpectation(\".\", false);\n var peg$e20 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"]], false, false);\n var peg$e21 = peg$otherExpectation(\"postfix\");\n var peg$e22 = peg$literalExpectation(\"!![\", false);\n var peg$e23 = peg$literalExpectation(\"]\", false);\n var peg$e24 = peg$literalExpectation(\"!!\", false);\n var peg$e25 = peg$otherExpectation(\"prefix\");\n var peg$e26 = peg$otherExpectation(\"plus\");\n var peg$e27 = peg$literalExpectation(\"+\", false);\n var peg$e28 = peg$otherExpectation(\"minus\");\n var peg$e29 = peg$literalExpectation(\"-\", false);\n var peg$e30 = peg$otherExpectation(\"num\");\n var peg$e31 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e32 = peg$otherExpectation(\"positive float\");\n var peg$e33 = peg$otherExpectation(\"divisor\");\n var peg$e34 = peg$otherExpectation(\"int\");\n var peg$e35 = peg$otherExpectation(\"whitespace\");\n var peg$e36 = peg$classExpectation([\" \", \"\t\", \"\\n\", \"\\r\"], false, false);\n var peg$e37 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"], [\"A\", \"F\"]], false, false);\n var peg$f0 = function(m) {\n return m;\n };\n var peg$f1 = function(m) {\n return m;\n };\n var peg$f2 = function(m) {\n return m;\n };\n var peg$f3 = function(m) {\n return m;\n };\n var peg$f4 = function(m) {\n return m;\n };\n var peg$f5 = function(a) {\n return { type: \"invalid_spec\", content: a };\n };\n var peg$f6 = function(f, c) {\n return c;\n };\n var peg$f7 = function(f, r) {\n return { type: \"color_set\", content: [f].concat(r) };\n };\n var peg$f8 = function(n, s) {\n return { type: \"color_set_item\", name: n, spec_list: s };\n };\n var peg$f9 = function(c, m) {\n return { type: \"model_list\", contents: m, core_model: c };\n };\n var peg$f10 = function(m) {\n return { type: \"model_list\", contents: m, core_model: null };\n };\n var peg$f11 = function(m, a) {\n return a;\n };\n var peg$f12 = function(m, r) {\n return [m].concat(r);\n };\n var peg$f13 = function(s, a) {\n return a;\n };\n var peg$f14 = function(s, r) {\n return { type: \"spec_list\", content: [s].concat(r) };\n };\n var peg$f15 = function(c) {\n return { type: \"hex_spec\", content: [c] };\n };\n var peg$f16 = function(c, d) {\n return d;\n };\n var peg$f17 = function(c, d) {\n return d;\n };\n var peg$f18 = function(c, r) {\n return { type: \"num_spec\", content: r ? [c].concat(r) : [c] };\n };\n var peg$f19 = function(c, fs) {\n return { type: \"color\", color: c, functions: fs };\n };\n var peg$f20 = function(f, n) {\n return n;\n };\n var peg$f21 = function(f, args) {\n return { type: \"function\", name: f, args };\n };\n var peg$f22 = function(core, d, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: d,\n expressions: [e].concat(es)\n };\n };\n var peg$f23 = function(core, e, es) {\n return {\n type: \"extended_expr\",\n core_model: core,\n div: null,\n expressions: [e].concat(es)\n };\n };\n var peg$f24 = function(e, d) {\n return { type: \"weighted_expr\", color: e, weight: d };\n };\n var peg$f25 = function(e) {\n return e;\n };\n var peg$f26 = function(p, n, e, po) {\n return {\n type: \"expr\",\n prefix: p,\n name: n,\n mix_expr: e,\n postfix: po\n };\n };\n var peg$f27 = function(p, n) {\n return { type: \"complete_mix\", mix_percent: p, name: n };\n };\n var peg$f28 = function(p) {\n return { type: \"partial_mix\", mix_percent: p };\n };\n var peg$f29 = function(c, p) {\n return c.concat(p || []);\n };\n var peg$f30 = function(n) {\n return { type: \"postfix\", num: n };\n };\n var peg$f31 = function(p) {\n return { type: \"postfix\", plusses: p };\n };\n var peg$f32 = function(n) {\n return parseInt(n, 10);\n };\n var peg$f33 = function(n) {\n return parseFloat(n);\n };\n var peg$f34 = function(n) {\n return n;\n };\n var peg$f35 = function(n) {\n return -n;\n };\n var peg$f36 = function(m, n) {\n return m ? -n : n;\n };\n var peg$f37 = function(h) {\n return h.toUpperCase();\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsestart() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsespec_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_spec();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseEOL();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n s1 = input.substring(s1, peg$currPos);\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n s0 = s1;\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsecolor_set_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsecolor_set_item();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s4 = peg$c0;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsecolor_set_item();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f6(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f7(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolor_set_item() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsename();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsespec_list();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemodel_list() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemodel_list_tail();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsemodel_list_tail();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10(s1);\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n return s0;\n }\n function peg$parsemodel_list_tail() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsemodel();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsemodel();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f11(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemodel() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsecore_model();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsespec_list() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsespec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s4 = peg$c3;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsespec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f13(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f14(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsespec() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsehex();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehex();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehex();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsehex();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsehex();\n if (s7 !== peg$FAILED) {\n s8 = peg$parsehex();\n if (s8 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6, s7, s8];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f15(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedec();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c1;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f16(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parsesp();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsedec();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s3;\n s3 = peg$f17(s1, s5);\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f18(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parsecolor() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecolor_expr();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsefunc_expr();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsefunc_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f19(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parsecolor_expr() {\n var s0;\n s0 = peg$parseext_expr();\n if (s0 === peg$FAILED) {\n s0 = peg$parseexpr();\n if (s0 === peg$FAILED) {\n s0 = peg$parsename();\n }\n }\n return s0;\n }\n function peg$parsefunc_expr() {\n var s0, s1, s2, s3, s4, s5, s6;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 62) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsefunction();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c1;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parseint();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s4;\n s4 = peg$f20(s2, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n peg$savedPos = s0;\n s0 = peg$f21(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parsefunction() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parseext_expr() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsediv();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c2;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseweighted_expr();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parseadditional_weighted_expr();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f22(s1, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsecore_model();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c2;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseweighted_expr();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseadditional_weighted_expr();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseadditional_weighted_expr();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s1, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseweighted_expr() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseexpr();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c1;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsedec();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f24(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseadditional_weighted_expr() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 59) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseweighted_expr();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecore_model() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsename();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parseexpr() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseprefix();\n s2 = peg$parsename();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsemix_expr();\n s4 = peg$parsepostfix();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f26(s1, s2, s3, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n return s0;\n }\n function peg$parsecomplete_mix() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 33) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsename();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s2, s4);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepartial_mix() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c5;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f28(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemix_expr() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomplete_mix();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomplete_mix();\n }\n s2 = peg$parsepartial_mix();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f29(s1, s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n return s0;\n }\n function peg$parsename() {\n var s0, s1, s2;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 46) {\n s0 = peg$c6;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n return s0;\n }\n function peg$parsepostfix() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c7) {\n s1 = peg$c7;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f30(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s1 = peg$c9;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e24);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parseplus();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseplus();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s2 = input.substring(s2, peg$currPos);\n } else {\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n return s0;\n }\n function peg$parseprefix() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parseminus();\n if (s0 === peg$FAILED) {\n s0 = null;\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e25);\n }\n return s0;\n }\n function peg$parseplus() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c10;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e26);\n }\n }\n return s0;\n }\n function peg$parseminus() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (input.charCodeAt(peg$currPos) === 45) {\n s2 = peg$c11;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e28);\n }\n }\n return s0;\n }\n function peg$parsenum() {\n var s0, s1, s2, s3;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f32(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e30);\n }\n }\n return s0;\n }\n function peg$parsepct() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c6;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$currPos;\n s8 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s9 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n s7 = input.substring(s7, peg$currPos);\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 === peg$FAILED) {\n s5 = null;\n }\n s4 = input.substring(s4, peg$currPos);\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c6;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n s5 = [];\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r1.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e31);\n }\n }\n }\n } else {\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n s4 = input.substring(s4, peg$currPos);\n } else {\n s4 = s5;\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f33(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e32);\n }\n }\n return s0;\n }\n function peg$parsediv() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$parsepct();\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e33);\n }\n }\n return s0;\n }\n function peg$parsedec() {\n var s0, s1, s2;\n s0 = peg$parsepct();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c10;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e27);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f34(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c11;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e29);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepct();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n return s0;\n }\n function peg$parseint() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = peg$parsenum();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f36(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e34);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1;\n peg$silentFails++;\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n }\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e35);\n }\n return s0;\n }\n function peg$parsesp() {\n var s0, s1;\n s0 = [];\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$r2.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e36);\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsehex() {\n var s0, s1;\n s0 = peg$currPos;\n if (peg$r3.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e37);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f37(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/tabular-spec.pegjs\nvar tabular_spec_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$otherExpectation(\"decl_start\");\n var peg$e1 = peg$otherExpectation(\"decl_end\");\n var peg$e2 = peg$otherExpectation(\"vert\");\n var peg$e3 = peg$anyExpectation();\n var peg$e4 = peg$otherExpectation(\"l\");\n var peg$e5 = peg$otherExpectation(\"r\");\n var peg$e6 = peg$otherExpectation(\"c\");\n var peg$e7 = peg$otherExpectation(\"p\");\n var peg$e8 = peg$otherExpectation(\"m\");\n var peg$e9 = peg$otherExpectation(\"b\");\n var peg$e10 = peg$otherExpectation(\"w\");\n var peg$e11 = peg$otherExpectation(\"W\");\n var peg$e12 = peg$otherExpectation(\"X\");\n var peg$e13 = peg$otherExpectation(\"!\");\n var peg$e14 = peg$otherExpectation(\"@\");\n var peg$e15 = peg$otherExpectation(\"<\");\n var peg$e16 = peg$otherExpectation(\">\");\n var peg$e17 = peg$otherExpectation(\"group\");\n var peg$e18 = peg$otherExpectation(\"whitespace\");\n var peg$f0 = function(c) {\n return c;\n };\n var peg$f1 = function(cols) {\n return cols;\n };\n var peg$f2 = function() {\n return [];\n };\n var peg$f3 = function(divs1, start, a, end, divs2) {\n return {\n type: \"column\",\n pre_dividers: divs1,\n post_dividers: divs2,\n before_start_code: start,\n before_end_code: end,\n alignment: a\n };\n };\n var peg$f4 = function() {\n return {\n type: \"vert_divider\"\n };\n };\n var peg$f5 = function(b, g) {\n return {\n type: \"bang_divider\",\n content: g[0].content\n };\n };\n var peg$f6 = function(g) {\n return {\n type: \"at_divider\",\n content: g[0].content\n };\n };\n var peg$f7 = function(div) {\n return div;\n };\n var peg$f8 = function(g) {\n return { type: \"decl_code\", code: g[0].content };\n };\n var peg$f9 = function(g) {\n return { type: \"decl_code\", code: g[0].content };\n };\n var peg$f10 = function() {\n return { type: \"alignment\", alignment: \"left\" };\n };\n var peg$f11 = function() {\n return { type: \"alignment\", alignment: \"center\" };\n };\n var peg$f12 = function() {\n return { type: \"alignment\", alignment: \"right\" };\n };\n var peg$f13 = function() {\n return { type: \"alignment\", alignment: \"X\" };\n };\n var peg$f14 = function() {\n return \"top\";\n };\n var peg$f15 = function() {\n return \"default\";\n };\n var peg$f16 = function() {\n return \"bottom\";\n };\n var peg$f17 = function(a, g) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: a,\n size: g[0].content\n };\n };\n var peg$f18 = function(g1, g2) {\n return {\n type: \"alignment\",\n alignment: \"parbox\",\n baseline: g1[0].content,\n size: g2[0].content\n };\n };\n var peg$f19 = function(tok) {\n return options.matchChar(tok, \"|\");\n };\n var peg$f20 = function(tok) {\n return options.matchChar(tok, \"l\");\n };\n var peg$f21 = function(tok) {\n return options.matchChar(tok, \"r\");\n };\n var peg$f22 = function(tok) {\n return options.matchChar(tok, \"c\");\n };\n var peg$f23 = function(tok) {\n return options.matchChar(tok, \"p\");\n };\n var peg$f24 = function(tok) {\n return options.matchChar(tok, \"m\");\n };\n var peg$f25 = function(tok) {\n return options.matchChar(tok, \"b\");\n };\n var peg$f26 = function(tok) {\n return options.matchChar(tok, \"w\");\n };\n var peg$f27 = function(tok) {\n return options.matchChar(tok, \"W\");\n };\n var peg$f28 = function(tok) {\n return options.matchChar(tok, \"X\");\n };\n var peg$f29 = function(tok) {\n return options.matchChar(tok, \"!\");\n };\n var peg$f30 = function(tok) {\n return options.matchChar(tok, \"@\");\n };\n var peg$f31 = function(tok) {\n return options.matchChar(tok, \"<\");\n };\n var peg$f32 = function(tok) {\n return options.matchChar(tok, \">\");\n };\n var peg$f33 = function(tok) {\n return options.isGroup(tok);\n };\n var peg$f34 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsecolumn();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f2();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsecolumn() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecolumn_divider();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecolumn_divider();\n }\n s2 = peg$parsedecl_start();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = peg$parsealignment();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsedecl_end();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s5 = [];\n s6 = peg$parsecolumn_divider();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsecolumn_divider();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolumn_divider() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$currPos;\n s3 = peg$parsevert();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$f4();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parsebang();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f5(s3, s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseat();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsegroup();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s2;\n s2 = peg$f6(s4);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedecl_start() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parsegreater();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n return s0;\n }\n function peg$parsedecl_end() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseless();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsegroup();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parsealignment() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsel();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f10();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsec();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f11();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parser();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f12();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseX();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f13();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsep();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f14();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parsem();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f15();\n }\n s1 = s2;\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$parseb();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s1;\n s2 = peg$f16();\n }\n s1 = s2;\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsew();\n if (s1 === peg$FAILED) {\n s1 = peg$parseW();\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsegroup();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s3, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsevert() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n return s0;\n }\n function peg$parsel() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n return s0;\n }\n function peg$parser() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parsec() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsep() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f23(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsem() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parseb() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f25(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parsew() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parseW() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f27(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n return s0;\n }\n function peg$parseX() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parsebang() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f29(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseat() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parseless() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f31(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n return s0;\n }\n function peg$parsegreater() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f33(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isHash) {\n try {\n Object.assign(options, {\n matchChar: (node, char) => node.type === \"string\" && node.content === char,\n isGroup: (node) => node.type === \"group\",\n isWhitespace: (node) => node.type === \"whitespace\"\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/systeme-environment.pegjs\nvar systeme_environment_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { body: peg$parsebody };\n var peg$startRuleFunction = peg$parsebody;\n var peg$e0 = peg$otherExpectation(\"partial item\");\n var peg$e1 = peg$otherExpectation(\"item\");\n var peg$e2 = peg$anyExpectation();\n var peg$e3 = peg$otherExpectation(\"equation\");\n var peg$e4 = peg$otherExpectation(\"trailing comment\");\n var peg$e5 = peg$otherExpectation(\"comment only line\");\n var peg$e6 = peg$otherExpectation(\"non-var token\");\n var peg$e7 = peg$otherExpectation(\"token\");\n var peg$e8 = peg$otherExpectation(\"same line comment\");\n var peg$e9 = peg$otherExpectation(\"own line comment\");\n var peg$e10 = peg$otherExpectation(\",\");\n var peg$e11 = peg$otherExpectation(\"@\");\n var peg$e12 = peg$otherExpectation(\"variable token\");\n var peg$e13 = peg$otherExpectation(\"+/-\");\n var peg$e14 = peg$otherExpectation(\"=\");\n var peg$f0 = function(a, b) {\n return a.concat(b ? b : []);\n };\n var peg$f1 = function() {\n return [];\n };\n var peg$f2 = function(a, b, c) {\n return a.concat(b, c);\n };\n var peg$f3 = function(op, a, b, c) {\n return { type: \"item\", op, variable: b, content: a.concat(b, c) };\n };\n var peg$f4 = function(op, a) {\n return { type: \"item\", op, variable: null, content: a };\n };\n var peg$f5 = function(line, sep, comment) {\n return { ...line, sep: [].concat(sep), trailingComment: comment };\n };\n var peg$f6 = function(line, comment) {\n return { ...line, trailingComment: comment };\n };\n var peg$f7 = function(eq, ann) {\n return {\n type: \"line\",\n equation: eq,\n annotation: ann,\n sep: null\n };\n };\n var peg$f8 = function(at, ann) {\n return at ? { type: \"annotation\", marker: at, content: ann } : null;\n };\n var peg$f9 = function(left, eq, right) {\n return { type: \"equation\", left, right, equals: eq };\n };\n var peg$f10 = function(x) {\n return x;\n };\n var peg$f11 = function(x) {\n return {\n type: \"line\",\n trailingComment: x\n };\n };\n var peg$f12 = function(v, s) {\n return [v].concat(s ? s : []);\n };\n var peg$f13 = function(t) {\n return t;\n };\n var peg$f14 = function(x) {\n return x;\n };\n var peg$f15 = function(x) {\n return x;\n };\n var peg$f16 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f17 = function(tok) {\n return tok;\n };\n var peg$f18 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f19 = function(tok) {\n return tok;\n };\n var peg$f20 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f21 = function(tok) {\n return tok;\n };\n var peg$f22 = function(tok) {\n return options.isSep(tok);\n };\n var peg$f23 = function(tok) {\n return tok;\n };\n var peg$f24 = function(tok) {\n return options.isAt(tok);\n };\n var peg$f25 = function(tok) {\n return tok;\n };\n var peg$f26 = function(tok) {\n return options.isVar(tok);\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$f28 = function(tok) {\n return options.isOperation(tok);\n };\n var peg$f29 = function(tok) {\n return tok;\n };\n var peg$f30 = function(tok) {\n return options.isEquals(tok);\n };\n var peg$f31 = function(tok) {\n return tok;\n };\n var peg$f32 = function(tok) {\n return options.isSubscript(tok);\n };\n var peg$f33 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsebody() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsecomment_only_line();\n if (s2 === peg$FAILED) {\n s2 = peg$parseline_with_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsepartial_line_with_comment();\n }\n }\n }\n s2 = peg$parseline_without_sep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseEOL();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f0(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEOL();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1();\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parsepartial_item() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = [];\n s3 = peg$parsenon_var_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_var_token();\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n s4 = peg$parsevar();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parse_();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parse_();\n }\n s6 = [];\n s7 = peg$parsetoken();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parsetoken();\n }\n s7 = [];\n s8 = peg$parse_();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f2(s2, s4, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n return s0;\n }\n function peg$parseitem() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n s5 = peg$parsevar();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parse_();\n while (s7 !== peg$FAILED) {\n s6.push(s7);\n s7 = peg$parse_();\n }\n s7 = [];\n s8 = peg$parsetoken();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parsetoken();\n }\n s8 = [];\n s9 = peg$parse_();\n while (s9 !== peg$FAILED) {\n s8.push(s9);\n s9 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f3(s1, s3, s5, s7);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseoperation();\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = [];\n s4 = peg$parsenon_var_token();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenon_var_token();\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f4(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parseline_with_sep() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsesep();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetrailing_comment();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepartial_line_with_comment() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseline_without_sep();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseline_without_sep() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$silentFails--;\n if (s2 !== peg$FAILED) {\n peg$currPos = s1;\n s1 = void 0;\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseequation();\n s3 = peg$parseannotation();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f7(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseannotation() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseat();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsenon_sep_token();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsenon_sep_token();\n }\n peg$savedPos = s0;\n s0 = peg$f8(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseequation() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseitem();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseitem();\n }\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsetoken();\n if (s4 === peg$FAILED) {\n s4 = peg$parseoperation();\n }\n }\n peg$savedPos = s0;\n s0 = peg$f9(s1, s2, s3);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n return s0;\n }\n function peg$parsetrailing_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsesame_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n return s0;\n }\n function peg$parsecomment_only_line() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parseown_line_comment();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parsevar() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parsevar_token();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parse_();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parse_();\n }\n s3 = peg$parsesubscript();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsenon_var_token() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsevar();\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetoken();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parsenon_sep_token() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f14(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsetoken() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parsesep();\n if (s2 === peg$FAILED) {\n s2 = peg$parseat();\n if (s2 === peg$FAILED) {\n s2 = peg$parseoperation();\n if (s2 === peg$FAILED) {\n s2 = peg$parseequals();\n if (s2 === peg$FAILED) {\n s2 = peg$parsetrailing_comment();\n if (s2 === peg$FAILED) {\n s2 = peg$parseown_line_comment();\n }\n }\n }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = void 0;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f15(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f16(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f17(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f18(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f19(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f20(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f21(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesep() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f22(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f23(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n return s0;\n }\n function peg$parseat() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n return s0;\n }\n function peg$parsevar_token() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n return s0;\n }\n function peg$parseoperation() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = peg$currPos;\n s4 = peg$f28(s2);\n if (s4) {\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n return s0;\n }\n function peg$parsesubscript() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isSep: (node) => node.type === \"string\" && node.content === \",\",\n isVar: (node) => node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isOperation: (node) => node.type === \"string\" && node.content.match(/[+-]/),\n isEquals: (node) => node.type === \"string\" && node.content === \"=\",\n isAt: (node) => node.type === \"string\" && node.content === \"@\",\n isSubscript: (node) => node.content === \"_\",\n isWhitespace: (node) => node.type === \"whitespace\",\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/tex-glue.pegjs\nvar tex_glue_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { root: peg$parseroot };\n var peg$startRuleFunction = peg$parseroot;\n var peg$c0 = \"plus\";\n var peg$c1 = \"minus\";\n var peg$c2 = \"pt\";\n var peg$c3 = \"mm\";\n var peg$c4 = \"cm\";\n var peg$c5 = \"in\";\n var peg$c6 = \"ex\";\n var peg$c7 = \"em\";\n var peg$c8 = \"bp\";\n var peg$c9 = \"pc\";\n var peg$c10 = \"dd\";\n var peg$c11 = \"cc\";\n var peg$c12 = \"nd\";\n var peg$c13 = \"nc\";\n var peg$c14 = \"sp\";\n var peg$c15 = \"filll\";\n var peg$c16 = \"fill\";\n var peg$c17 = \"fil\";\n var peg$c18 = \".\";\n var peg$c19 = \"+\";\n var peg$c20 = \"-\";\n var peg$r0 = /^[0-9]/;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$literalExpectation(\"plus\", false);\n var peg$e2 = peg$literalExpectation(\"minus\", false);\n var peg$e3 = peg$literalExpectation(\"pt\", false);\n var peg$e4 = peg$literalExpectation(\"mm\", false);\n var peg$e5 = peg$literalExpectation(\"cm\", false);\n var peg$e6 = peg$literalExpectation(\"in\", false);\n var peg$e7 = peg$literalExpectation(\"ex\", false);\n var peg$e8 = peg$literalExpectation(\"em\", false);\n var peg$e9 = peg$literalExpectation(\"bp\", false);\n var peg$e10 = peg$literalExpectation(\"pc\", false);\n var peg$e11 = peg$literalExpectation(\"dd\", false);\n var peg$e12 = peg$literalExpectation(\"cc\", false);\n var peg$e13 = peg$literalExpectation(\"nd\", false);\n var peg$e14 = peg$literalExpectation(\"nc\", false);\n var peg$e15 = peg$literalExpectation(\"sp\", false);\n var peg$e16 = peg$literalExpectation(\"filll\", false);\n var peg$e17 = peg$literalExpectation(\"fill\", false);\n var peg$e18 = peg$literalExpectation(\"fil\", false);\n var peg$e19 = peg$otherExpectation(\"number\");\n var peg$e20 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n var peg$e21 = peg$literalExpectation(\".\", false);\n var peg$e22 = peg$literalExpectation(\"+\", false);\n var peg$e23 = peg$literalExpectation(\"-\", false);\n var peg$f0 = function(b, st, sh) {\n return {\n type: \"glue\",\n fixed: b,\n stretchable: st,\n shrinkable: sh,\n position: location()\n };\n };\n var peg$f1 = function(glue) {\n return glue;\n };\n var peg$f2 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f3 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f4 = function(n, u) {\n return { type: \"dim\", value: n, unit: u };\n };\n var peg$f5 = function(n) {\n return parseFloat(n);\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parseroot() {\n var s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parsebase();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsestretchable();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parseshrinkable();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n peg$savedPos = s1;\n s1 = peg$f0(s2, s3, s4);\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (input.length > peg$currPos) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n }\n peg$savedPos = s0;\n s0 = peg$f1(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsebase() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseunit();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f2(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsestretchable() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c0) {\n s1 = peg$c0;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseshrinkable() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c1) {\n s1 = peg$c1;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n s3 = peg$parserubber_unit();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s2, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseunit() {\n var s0;\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s0 = peg$c2;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c3) {\n s0 = peg$c3;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s0 = peg$c4;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c5) {\n s0 = peg$c5;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c6) {\n s0 = peg$c6;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e7);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c7) {\n s0 = peg$c7;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e8);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s0 = peg$c8;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e9);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s0 = peg$c9;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e10);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s0 = peg$c10;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e11);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c11) {\n s0 = peg$c11;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e12);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c12) {\n s0 = peg$c12;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e13);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s0 = peg$c13;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e14);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c14) {\n s0 = peg$c14;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e15);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parserubber_unit() {\n var s0;\n s0 = peg$parseunit();\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c15) {\n s0 = peg$c15;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e16);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c16) {\n s0 = peg$c16;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e17);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c17) {\n s0 = peg$c17;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e18);\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parsesign();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$currPos;\n s5 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n if (input.charCodeAt(peg$currPos) === 46) {\n s6 = peg$c18;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e21);\n }\n }\n if (s6 !== peg$FAILED) {\n s7 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s8 !== peg$FAILED) {\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s8 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s7 = peg$FAILED;\n }\n if (s7 !== peg$FAILED) {\n s5 = [s5, s6, s7];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 === peg$FAILED) {\n s4 = [];\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n if (peg$r0.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e20);\n }\n }\n }\n } else {\n s4 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f5(s1);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e19);\n }\n }\n return s0;\n }\n function peg$parsesign() {\n var s0;\n if (input.charCodeAt(peg$currPos) === 43) {\n s0 = peg$c19;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e22);\n }\n }\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s0 = peg$c20;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e23);\n }\n }\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// grammars/tikz.pegjs\nvar tikz_default = (\n // Generated by Peggy 2.0.1.\n //\n // https://peggyjs.org/\n function() {\n \"use strict\";\n function peg$subclass(child, parent) {\n function C() {\n this.constructor = child;\n }\n C.prototype = parent.prototype;\n child.prototype = new C();\n }\n function peg$SyntaxError(message, expected, found, location) {\n var self = Error.call(this, message);\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n }\n self.expected = expected;\n self.found = found;\n self.location = location;\n self.name = \"SyntaxError\";\n return self;\n }\n peg$subclass(peg$SyntaxError, Error);\n function peg$padEnd(str, targetLength, padString) {\n padString = padString || \" \";\n if (str.length > targetLength) {\n return str;\n }\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n }\n peg$SyntaxError.prototype.format = function(sources) {\n var str = \"Error: \" + this.message;\n if (this.location) {\n var src = null;\n var k;\n for (k = 0; k < sources.length; k++) {\n if (sources[k].source === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n }\n var s = this.location.start;\n var loc = this.location.source + \":\" + s.line + \":\" + s.column;\n if (src) {\n var e = this.location.end;\n var filler = peg$padEnd(\"\", s.line.toString().length, \" \");\n var line = src[s.line - 1];\n var last = s.line === e.line ? e.column : line.length + 1;\n var hatLen = last - s.column || 1;\n str += \"\\n --> \" + loc + \"\\n\" + filler + \" |\\n\" + s.line + \" | \" + line + \"\\n\" + filler + \" | \" + peg$padEnd(\"\", s.column - 1, \" \") + peg$padEnd(\"\", hatLen, \"^\");\n } else {\n str += \"\\n at \" + loc;\n }\n }\n return str;\n };\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return '\"' + literalEscape(expectation.text) + '\"';\n },\n class: function(expectation) {\n var escapedParts = expectation.parts.map(function(part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n },\n any: function() {\n return \"any character\";\n },\n end: function() {\n return \"end of input\";\n },\n other: function(expectation) {\n return expectation.description;\n }\n };\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function(ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n function describeExpected(expected2) {\n var descriptions = expected2.map(describeExpectation);\n var i, j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found2) {\n return found2 ? '\"' + literalEscape(found2) + '\"' : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n var peg$FAILED = {};\n var peg$source = options.grammarSource;\n var peg$startRuleFunctions = { path_spec: peg$parsepath_spec, foreach_body: peg$parseforeach_body };\n var peg$startRuleFunction = peg$parsepath_spec;\n var peg$e0 = peg$anyExpectation();\n var peg$e1 = peg$otherExpectation(\"same line comment\");\n var peg$e2 = peg$otherExpectation(\"own line comment\");\n var peg$e3 = peg$otherExpectation(\"comment\");\n var peg$e4 = peg$otherExpectation(\"floating comment\");\n var peg$e5 = peg$otherExpectation(\"operation\");\n var peg$e6 = peg$otherExpectation(\"=\");\n var peg$f0 = function(v) {\n return v;\n };\n var peg$f1 = function(ops) {\n return { type: \"path_spec\", content: ops };\n };\n var peg$f2 = function(c1, op, comment) {\n return { op, comment };\n };\n var peg$f3 = function(c1, ops, c2, body) {\n const comments = [c1, ...ops.map((x) => x.comment), c2].filter(\n (x) => x\n );\n const attribute = ops.map((x) => x.op.content.content).join(\" \");\n return {\n type: \"animation\",\n comments,\n attribute,\n content: body.content\n };\n };\n var peg$f4 = function(start, b) {\n return { ...b, start, type: \"foreach\" };\n };\n var peg$f5 = function(c1, variables, options2, c2, c3, list, c4, command) {\n const comments = [c1, c2, c3, c4].filter((x) => x);\n return {\n type: \"foreach_body\",\n variables,\n options: options2 && options2.content,\n list,\n command,\n comments\n };\n };\n var peg$f6 = function(c1, options2, c2, body) {\n const comments = [c1, c2].filter((x) => x);\n return {\n type: \"svg_operation\",\n options: options2 && options2.content,\n content: body,\n comments\n };\n };\n var peg$f7 = function(c1, c2, coord, c3, c4, x) {\n return { coord: x, comment: c4 };\n };\n var peg$f8 = function(c1, c2, coord, c3, a, c5) {\n const comments = [c1, c2, c3, a && a.comment, c5].filter((x) => x);\n return {\n type: \"curve_to\",\n controls: a ? [coord, a.coord] : [coord],\n comments\n };\n };\n var peg$f9 = function() {\n return { type: \"line_to\", command: \"|-\" };\n };\n var peg$f10 = function() {\n return { type: \"line_to\", command: \"-|\" };\n };\n var peg$f11 = function() {\n return { type: \"line_to\", command: \"--\" };\n };\n var peg$f12 = function(prefix, content) {\n return { type: \"coordinate\", content, prefix };\n };\n var peg$f13 = function(content) {\n return { type: \"square_brace_group\", content };\n };\n var peg$f14 = function(v) {\n return { type: \"unknown\", content: v };\n };\n var peg$f15 = function(tok) {\n return options.isSameLineComment(tok);\n };\n var peg$f16 = function(tok) {\n return tok;\n };\n var peg$f17 = function(tok) {\n return options.isOwnLineComment(tok);\n };\n var peg$f18 = function(tok) {\n return tok;\n };\n var peg$f19 = function(tok) {\n return options.isComment(tok);\n };\n var peg$f20 = function(tok) {\n return tok;\n };\n var peg$f21 = function(tok) {\n return options.isWhitespace(tok);\n };\n var peg$f22 = function(tok) {\n return tok;\n };\n var peg$f23 = function(c) {\n return c;\n };\n var peg$f24 = function(tok) {\n return options.isOperation(tok);\n };\n var peg$f25 = function(tok) {\n return { type: \"operation\", content: tok };\n };\n var peg$f26 = function(tok) {\n return options.isChar(tok, \"=\");\n };\n var peg$f27 = function(tok) {\n return tok;\n };\n var peg$f28 = function(tok) {\n return options.isChar(tok, \"[\");\n };\n var peg$f29 = function(tok) {\n return tok;\n };\n var peg$f30 = function(tok) {\n return options.isChar(tok, \"]\");\n };\n var peg$f31 = function(tok) {\n return tok;\n };\n var peg$f32 = function(tok) {\n return options.isChar(tok, \"(\");\n };\n var peg$f33 = function(tok) {\n return tok;\n };\n var peg$f34 = function(tok) {\n return options.isChar(tok, \")\");\n };\n var peg$f35 = function(tok) {\n return tok;\n };\n var peg$f36 = function(tok) {\n return options.isChar(tok, \"+\");\n };\n var peg$f37 = function(tok) {\n return tok;\n };\n var peg$f38 = function(tok) {\n return options.isChar(tok, \"-\");\n };\n var peg$f39 = function(tok) {\n return tok;\n };\n var peg$f40 = function(tok) {\n return options.isChar(tok, \"|\");\n };\n var peg$f41 = function(tok) {\n return tok;\n };\n var peg$f42 = function(tok) {\n return options.isChar(tok, \".\");\n };\n var peg$f43 = function(tok) {\n return tok;\n };\n var peg$f44 = function(tok) {\n return options.isChar(tok, \"controls\");\n };\n var peg$f45 = function(tok) {\n return tok;\n };\n var peg$f46 = function(tok) {\n return options.isChar(tok, \"and\");\n };\n var peg$f47 = function(tok) {\n return tok;\n };\n var peg$f48 = function(tok) {\n return options.isChar(tok, \"svg\");\n };\n var peg$f49 = function(tok) {\n return tok;\n };\n var peg$f50 = function(tok) {\n return options.isGroup(tok);\n };\n var peg$f51 = function(tok) {\n return tok;\n };\n var peg$f52 = function(tok) {\n return options.isAnyMacro(tok);\n };\n var peg$f53 = function(tok) {\n return tok;\n };\n var peg$f54 = function(tok) {\n return options.isChar(tok, \"foreach\");\n };\n var peg$f55 = function(tok) {\n return tok;\n };\n var peg$f56 = function(tok) {\n return options.isMacro(tok, \"foreach\");\n };\n var peg$f57 = function(tok) {\n return tok;\n };\n var peg$f58 = function(tok) {\n return options.isChar(tok, \"in\");\n };\n var peg$f59 = function(tok) {\n return tok;\n };\n var peg$f60 = function(tok) {\n return options.isChar(tok, \":\");\n };\n var peg$f61 = function(tok) {\n return tok;\n };\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{ line: 1, column: 1 }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(`Can't start parsing from rule \"` + options.startRule + '\".');\n }\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function offset() {\n return peg$savedPos;\n }\n function range() {\n return {\n source: peg$source,\n start: peg$savedPos,\n end: peg$currPos\n };\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location2\n );\n }\n function error(message, location2) {\n location2 = location2 !== void 0 ? location2 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location2);\n }\n function peg$literalExpectation(text2, ignoreCase) {\n return { type: \"literal\", text: text2, ignoreCase };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts, inverted, ignoreCase };\n }\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n function peg$otherExpectation(description) {\n return { type: \"other\", description };\n }\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected2) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected2);\n }\n function peg$buildSimpleError(message, location2) {\n return new peg$SyntaxError(message, null, null, location2);\n }\n function peg$buildStructuredError(expected2, found, location2) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected2, found),\n expected2,\n found,\n location2\n );\n }\n function peg$parsepath_spec() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecoordinate();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecurve_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parseline_to();\n if (s3 === peg$FAILED) {\n s3 = peg$parsesvg();\n if (s3 === peg$FAILED) {\n s3 = peg$parseforeach();\n if (s3 === peg$FAILED) {\n s3 = peg$parseoperation();\n if (s3 === peg$FAILED) {\n s3 = peg$parsecomment();\n if (s3 === peg$FAILED) {\n s3 = peg$parseanimation();\n if (s3 === peg$FAILED) {\n s3 = peg$parseunknown();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parse_();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parse_();\n }\n peg$savedPos = s2;\n s2 = peg$f0(s3);\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f1(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseanimation() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parsecolon();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$parseoperation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n peg$savedPos = s4;\n s4 = peg$f2(s2, s5, s6);\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n } else {\n s3 = peg$FAILED;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseequals();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_comment_();\n s6 = peg$parsegroup();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f3(s2, s3, s5, s6);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseforeach_keyword();\n if (s1 === peg$FAILED) {\n s1 = peg$parseforeach_macro();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseforeach_body();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f4(s1, s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_body() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n s0 = peg$currPos;\n s1 = peg$parse_comment_();\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parsein_keyword();\n if (s6 === peg$FAILED) {\n s6 = peg$parsesquare_brace_group();\n }\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsein_keyword();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$parsegroup();\n if (s7 === peg$FAILED) {\n s7 = peg$parsemacro();\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_comment_();\n s9 = peg$parseforeach();\n if (s9 === peg$FAILED) {\n s9 = peg$parsegroup();\n if (s9 === peg$FAILED) {\n s9 = peg$parsemacro();\n }\n }\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f5(s1, s2, s3, s4, s6, s7, s8, s9);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesvg() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parsesvg_keyword();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsesquare_brace_group();\n if (s3 === peg$FAILED) {\n s3 = null;\n }\n s4 = peg$parse_comment_();\n s5 = peg$parsegroup();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f6(s2, s3, s4, s5);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecurve_to() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n s0 = peg$currPos;\n s1 = peg$parsedotdot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_comment_();\n s3 = peg$parsecontrols_keyword();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_comment_();\n s5 = peg$parsecoordinate();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_comment_();\n s7 = peg$currPos;\n s8 = peg$parseand_keyword();\n if (s8 !== peg$FAILED) {\n s9 = peg$parse_comment_();\n s10 = peg$parsecoordinate();\n if (s10 !== peg$FAILED) {\n peg$savedPos = s7;\n s7 = peg$f7(s2, s4, s5, s6, s9, s10);\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n } else {\n peg$currPos = s7;\n s7 = peg$FAILED;\n }\n if (s7 === peg$FAILED) {\n s7 = null;\n }\n s8 = peg$parse_comment_();\n s9 = peg$parsedotdot();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f8(s2, s4, s5, s6, s7, s8);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseline_to() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsepipe();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f9();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepipe();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f10();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseminus();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseminus();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f11();\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n return s0;\n }\n function peg$parsecoordinate() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parseplus();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseplus();\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s1 = input.substring(s1, peg$currPos);\n s2 = peg$parseopen_paren();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseclose_paren();\n peg$silentFails--;\n if (s7 === peg$FAILED) {\n s6 = void 0;\n } else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s7 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s7 !== peg$FAILED) {\n s6 = [s6, s7];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n s3 = input.substring(s3, peg$currPos);\n s4 = peg$parseclose_paren();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f12(s1, s3);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesquare_brace_group() {\n var s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parseopen_square_brace();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$currPos;\n s5 = peg$currPos;\n peg$silentFails++;\n s6 = peg$parseclose_square_brace();\n peg$silentFails--;\n if (s6 === peg$FAILED) {\n s5 = void 0;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n if (s5 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s6 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s6 !== peg$FAILED) {\n s5 = [s5, s6];\n s4 = s5;\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n } else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n }\n s2 = input.substring(s2, peg$currPos);\n s3 = peg$parseclose_square_brace();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f13(s2);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedotdot() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parsedot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedot();\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseunknown() {\n var s0, s1;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$f14(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parsesame_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f15(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f16(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e1);\n }\n }\n return s0;\n }\n function peg$parseown_line_comment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f17(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f18(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e2);\n }\n }\n return s0;\n }\n function peg$parsecomment() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f19(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f20(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e3);\n }\n }\n return s0;\n }\n function peg$parse_() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f21(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f22(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parse_comment_() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parse_();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parse_();\n }\n s2 = peg$parsecomment();\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n s3 = [];\n s4 = peg$parse_();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parse_();\n }\n peg$savedPos = s0;\n s0 = peg$f23(s2);\n peg$silentFails--;\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e4);\n }\n return s0;\n }\n function peg$parseoperation() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f24(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f25(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e5);\n }\n }\n return s0;\n }\n function peg$parseequals() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f26(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f27(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e6);\n }\n }\n return s0;\n }\n function peg$parseopen_square_brace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f28(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f29(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_square_brace() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f30(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f31(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseopen_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f32(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f33(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseclose_paren() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f34(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f35(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseplus() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f36(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f37(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseminus() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f38(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f39(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsepipe() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f40(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f41(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsedot() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f42(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f43(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecontrols_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f44(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f45(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseand_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f46(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f47(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsesvg_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f48(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f49(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsegroup() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f50(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f51(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsemacro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f52(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f53(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f54(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f55(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseforeach_macro() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f56(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f57(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsein_keyword() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f58(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f59(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parsecolon() {\n var s0, s1, s2;\n s0 = peg$currPos;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$f60(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s0 = peg$f61(s1);\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseEOL() {\n var s0, s1;\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) {\n peg$fail(peg$e0);\n }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = void 0;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n if (!options.isWhitespace) {\n try {\n Object.assign(options, {\n isChar: (node, char) => node.type === \"string\" && node.content === char,\n isOperation: (node) => node.type === \"string\" && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node) => node.type === \"whitespace\" || node.type === \"parbreak\",\n isSameLineComment: (node) => node.type === \"comment\" && node.sameline,\n isOwnLineComment: (node) => node.type === \"comment\" && !node.sameline,\n isComment: (node) => node.type === \"comment\",\n isGroup: (node) => node.type === \"group\",\n isMacro: (node, name) => node.type === \"macro\" && node.content === name,\n isAnyMacro: (node) => node.type === \"macro\"\n });\n } catch (e) {\n console.warn(\"Error when initializing parser\", e);\n }\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n }()\n);\n\n// libs/pegjs-parsers.ts\nvar LatexPegParser = latex_default;\nvar AlignEnvironmentPegParser = align_environment_default;\nvar ArgSpecPegParser = xparse_argspec_default;\nvar PgfkeysPegParser = pgfkeys_default;\nvar MacroSubstitutionPegParser = macro_substitutions_default;\nvar LigaturesPegParser = ligatures_default;\nvar XColorPegParser = xcolor_expressions_default;\nvar TabularPegParser = tabular_spec_default;\nvar SystemePegParser = systeme_environment_default;\nvar GluePegParser = tex_glue_default;\nvar TikzPegParser = tikz_default;\nexport {\n AlignEnvironmentPegParser,\n ArgSpecPegParser,\n GluePegParser,\n LatexPegParser,\n LigaturesPegParser,\n MacroSubstitutionPegParser,\n PgfkeysPegParser,\n SystemePegParser,\n TabularPegParser,\n TikzPegParser,\n XColorPegParser,\n decorateArrayForPegjs,\n splitStringsIntoSingleChars\n};\n//# sourceMappingURL=index.js.map\n","// libs/argspec-parser.ts\nimport { ArgSpecPegParser as PegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nfunction getDecorators(node) {\n let ret = \"\";\n if (node.noLeadingWhitespace) {\n ret += \"!\";\n }\n return ret;\n}\nfunction printRaw(node, root = false) {\n if (typeof node === \"string\") {\n return node;\n }\n if (Array.isArray(node)) {\n const sepToken = root ? \" \" : \"\";\n return node.map((tok) => printRaw(tok)).join(sepToken);\n }\n const decorators = getDecorators(node);\n const defaultArg = node.defaultArg ? printRaw(node.defaultArg) : \"\";\n let spec = decorators;\n const type = node.type;\n switch (type) {\n case \"body\":\n return decorators + \"b\";\n case \"optionalStar\":\n return decorators + \"s\";\n case \"optionalToken\":\n return spec + \"t\" + node.token;\n case \"optional\":\n if (node.openBrace === \"[\" && node.closeBrace === \"]\") {\n spec += node.defaultArg ? \"O\" : \"o\";\n } else {\n spec += node.defaultArg ? \"D\" : \"d\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"mandatory\":\n if (node.openBrace === \"{\" && node.closeBrace === \"}\") {\n spec += \"m\";\n } else {\n spec += node.defaultArg ? \"R\" : \"r\";\n spec += node.openBrace + node.closeBrace;\n }\n return spec + defaultArg;\n case \"embellishment\":\n spec += node.defaultArg ? \"E\" : \"e\";\n return spec + \"{\" + printRaw(node.embellishmentTokens) + \"}\" + defaultArg;\n case \"verbatim\":\n return spec + \"v\" + node.openBrace;\n case \"group\":\n return spec + \"{\" + printRaw(node.content) + \"}\";\n case \"until\": {\n const stopTokens = printRaw(node.stopTokens);\n return stopTokens.length > 1 || stopTokens[0] === \" \" ? `u{${stopTokens}}` : `u${stopTokens}`;\n }\n default:\n const neverType = type;\n console.warn(`Unknown node type \"${neverType}\" for node`, node);\n return \"\";\n }\n}\nvar parseCache = {};\nfunction parse(str = \"\") {\n parseCache[str] = parseCache[str] || PegParser.parse(str);\n return parseCache[str];\n}\n\n// libs/argspec-types.ts\nvar argspec_types_exports = {};\nexport {\n argspec_types_exports as ArgSpecAst,\n parse,\n printRaw\n};\n//# sourceMappingURL=index.js.map\n","// libs/builders.ts\nfunction normalizeNode(node) {\n if (typeof node === \"string\") {\n return s(node);\n }\n return node;\n}\nfunction normalizeArgument(arg2, openMark = \"{\", closeMark = \"}\") {\n if (arg2 == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof arg2 === \"string\") {\n return {\n type: \"argument\",\n openMark,\n closeMark,\n content: [s(arg2)]\n };\n }\n if (arg2.type === \"argument\") {\n return arg2;\n }\n return { type: \"argument\", openMark, closeMark, content: [arg2] };\n}\nfunction normalizeArgumentsList(args2, openMark = \"{\", closeMark = \"}\") {\n if (args2 == null) {\n return [];\n }\n if (Array.isArray(args2)) {\n return args2.map((arg2) => normalizeArgument(arg2, openMark, closeMark));\n }\n return [normalizeArgument(args2, openMark, closeMark)];\n}\nvar BRACES_MAP = {\n \"*\": { openMark: \"\", closeMark: \"\" },\n \"{\": { openMark: \"{\", closeMark: \"}\" },\n \"[\": { openMark: \"[\", closeMark: \"]\" },\n \"(\": { openMark: \"(\", closeMark: \")\" },\n \"<\": { openMark: \"<\", closeMark: \">\" }\n};\nvar CLOSE_BRACES = new Set(\n Object.values(BRACES_MAP).map((x) => x.closeMark).filter((x) => x)\n);\nfunction bracesToOpenAndCloseMarks(braces) {\n const ret = [];\n for (const char of braces.split(\"\")) {\n if (CLOSE_BRACES.has(char)) {\n continue;\n }\n const braces2 = BRACES_MAP[char];\n if (braces2 == null) {\n throw new Error(`Unknown open/close mark type \"${char}\"`);\n }\n braces2;\n ret.push(braces2);\n }\n return ret;\n}\nfunction args(args2, special) {\n if (!Array.isArray(args2)) {\n args2 = [args2];\n }\n if (special == null ? void 0 : special.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces.length !== args2.length) {\n throw new Error(\n `There is a difference between the number of supplied braces and the number of supplied arguments. ${args2.length} supplied with braces signature ${special.braces}`\n );\n }\n return args2.map(\n (arg2, i) => normalizeArgument(arg2, braces[i].openMark, braces[i].closeMark)\n );\n }\n const openMark = (special == null ? void 0 : special.defaultOpenMark) ?? \"{\";\n const closeMark = (special == null ? void 0 : special.defaultCloseMark) ?? \"}\";\n return normalizeArgumentsList(args2, openMark, closeMark);\n}\nfunction arg(args2, special) {\n if (args2 == null) {\n return { type: \"argument\", content: [], openMark: \"\", closeMark: \"\" };\n }\n if (typeof args2 === \"string\") {\n args2 = s(args2);\n }\n if (!Array.isArray(args2) && args2.type === \"argument\") {\n return args2;\n }\n let openMark = (special == null ? void 0 : special.openMark) ?? \"{\";\n let closeMark = (special == null ? void 0 : special.closeMark) ?? \"}\";\n if (special == null ? void 0 : special.braces) {\n const braces = bracesToOpenAndCloseMarks(special.braces);\n if (braces[0]) {\n openMark = braces[0].openMark;\n closeMark = braces[0].closeMark;\n }\n }\n if (!Array.isArray(args2)) {\n args2 = [args2];\n }\n return { type: \"argument\", content: args2, openMark, closeMark };\n}\nfunction m(name, marcoArgs, special) {\n const args2 = normalizeArgumentsList(marcoArgs);\n const escapeToken = special == null ? void 0 : special.escapeToken;\n const ret = { type: \"macro\", content: name };\n if (args2.length > 0) {\n ret.args = args2;\n }\n if (escapeToken != null) {\n ret.escapeToken = escapeToken;\n }\n return ret;\n}\nfunction s(value) {\n if (typeof value === \"string\") {\n return { type: \"string\", content: value };\n }\n return value;\n}\nfunction env(name, body, envArgs, special) {\n if (!Array.isArray(body)) {\n body = [body];\n }\n const args2 = normalizeArgumentsList(envArgs, \"[\", \"]\");\n const ret = {\n type: \"environment\",\n env: name,\n content: body.map(normalizeNode)\n };\n if (args2.length > 0) {\n ret.args = args2;\n }\n return ret;\n}\nvar SP = { type: \"whitespace\" };\nexport {\n SP,\n arg,\n args,\n env,\n m,\n s\n};\n//# sourceMappingURL=index.js.map\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n END_WORD: '$',\n END_WORD_REPLACER: '9a219a89-91cd-42e2-abd5-eb113af08ca8',\n PERMS_MIN_LEN: 2\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = append;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction append(trie, letter, index, array) {\n var isEndWordLetter = letter === _config2.default.END_WORD;\n var isLastLetter = index === array.length - 1;\n\n if (isEndWordLetter && !isLastLetter) {\n trie[_config2.default.END_WORD] = 1;\n trie[_config2.default.END_WORD_REPLACER] = {};\n trie = trie[_config2.default.END_WORD_REPLACER];\n } else {\n trie[letter] = trie[letter] || {};\n trie = trie[letter];\n }\n\n if (isLastLetter) {\n trie[_config2.default.END_WORD] = 1;\n }\n\n return trie;\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = create;\n\nvar _append = require('./append');\n\nvar _append2 = _interopRequireDefault(_append);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction create(input) {\n if (!Array.isArray(input)) {\n throw 'Expected parameter Array, received ' + (typeof input === 'undefined' ? 'undefined' : _typeof(input));\n }\n\n var trie = input.reduce(function (accumulator, item) {\n item.toLowerCase().split('').reduce(_append2.default, accumulator);\n\n return accumulator;\n }, {});\n\n return trie;\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n objectCopy: function objectCopy(obj) {\n if (typeof obj === 'undefined') {\n return {};\n }\n return JSON.parse(JSON.stringify(obj));\n },\n stringify: function stringify(obj) {\n var spacer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n\n if (typeof obj === 'undefined') {\n return '';\n }\n return JSON.stringify(obj, null, spacer);\n }\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = checkPrefix;\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction checkPrefix(prefixNode, prefix) {\n var input = prefix.toLowerCase().split('');\n var prefixFound = input.every(function (letter, index) {\n if (!prefixNode[letter]) {\n return false;\n }\n return prefixNode = prefixNode[letter];\n });\n\n return {\n prefixFound: prefixFound,\n prefixNode: prefixNode\n };\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = recursePrefix;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// sort items as they're being found\n// to prevent slow .sort() in NodeJs\nvar pushInOrder = function pushInOrder(word, prefixes) {\n var i = 0;\n\n while (i < prefixes.length) {\n if (word < prefixes[i]) {\n break;\n }\n i += 1;\n }\n\n prefixes.splice(i, 0, word);\n\n return prefixes;\n};\n\nfunction recursePrefix(node, prefix, sorted) {\n var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n var word = prefix;\n\n for (var branch in node) {\n var currentLetter = branch;\n if (branch === _config2.default.END_WORD && typeof node[branch] === 'number') {\n if (sorted) {\n pushInOrder(word, prefixes);\n } else {\n prefixes.push(word);\n }\n word = '';\n } else if (branch === _config2.default.END_WORD_REPLACER) {\n currentLetter = _config2.default.END_WORD;\n }\n recursePrefix(node[branch], prefix + currentLetter, sorted, prefixes);\n }\n\n return prefixes;\n}\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = recurseRandomWord;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction recurseRandomWord(node, prefix) {\n var word = prefix;\n var branches = Object.keys(node);\n var branch = branches[Math.floor(Math.random() * branches.length)];\n\n if (branch === _config2.default.END_WORD) {\n return word;\n }\n return recurseRandomWord(node[branch], prefix + branch);\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = permutations;\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction permutations(letters, trie) {\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n type: 'anagram'\n };\n\n if (typeof letters !== 'string') {\n throw 'Permutations expects string letters, received ' + (typeof letters === 'undefined' ? 'undefined' : _typeof(letters));\n }\n\n var words = [];\n\n var permute = function permute(word, node) {\n var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n var wordIsEmpty = word.length === 0;\n var wordFound = words.indexOf(prefix) !== -1;\n var endWordFound = node[_config2.default.END_WORD] === 1;\n\n if (wordIsEmpty && endWordFound && !wordFound) {\n words.push(prefix);\n }\n\n for (var i = 0, len = word.length; i < len; i++) {\n var letter = word[i];\n\n if (opts.type === 'sub-anagram') {\n if (endWordFound && !(words.indexOf(prefix) !== -1)) {\n words.push(prefix);\n }\n }\n\n if (node[letter]) {\n var remaining = word.substring(0, i) + word.substring(i + 1, len);\n permute(remaining, node[letter], prefix + letter, words);\n }\n }\n\n return words.sort();\n };\n\n return permute(letters, trie);\n};\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = function (input) {\n if (!Array.isArray(input)) {\n throw 'Expected parameter Array, received ' + (typeof input === 'undefined' ? 'undefined' : _typeof(input));\n }\n\n var trie = (0, _create2.default)([].concat(_toConsumableArray(input)));\n\n return {\n /**\n * Get the generated raw trie object\n */\n tree: function tree() {\n return trie;\n },\n\n\n /**\n * Get a string representation of the trie\n */\n dump: function dump() {\n var spacer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n return _utils2.default.stringify(trie, spacer);\n },\n\n\n /**\n * Add a new word to the trie\n */\n addWord: function addWord(word) {\n if (typeof word !== 'string' || word === '') {\n throw 'Expected parameter string, received ' + (typeof word === 'undefined' ? 'undefined' : _typeof(word));\n }\n\n var reducer = function reducer() {\n return _append2.default.apply(undefined, arguments);\n };\n\n var input = word.toLowerCase().split('');\n input.reduce(reducer, trie);\n\n return this;\n },\n\n\n /**\n * Remove an existing word from the trie\n */\n removeWord: function removeWord(word) {\n if (typeof word !== 'string' || word === '') {\n throw 'Expected parameter string, received ' + (typeof word === 'undefined' ? 'undefined' : _typeof(word));\n }\n\n var _checkPrefix = (0, _checkPrefix6.default)(trie, word),\n prefixFound = _checkPrefix.prefixFound,\n prefixNode = _checkPrefix.prefixNode;\n\n if (prefixFound) {\n delete prefixNode[_config2.default.END_WORD];\n }\n\n return this;\n },\n\n\n /**\n * Check a prefix is valid\n * @returns Boolean\n */\n isPrefix: function isPrefix(prefix) {\n if (typeof prefix !== 'string') {\n throw 'Expected string prefix, received ' + (typeof prefix === 'undefined' ? 'undefined' : _typeof(prefix));\n }\n\n var _checkPrefix2 = (0, _checkPrefix6.default)(trie, prefix),\n prefixFound = _checkPrefix2.prefixFound;\n\n return prefixFound;\n },\n\n\n /**\n * Get a list of all words in the trie with the given prefix\n * @returns Array\n */\n getPrefix: function getPrefix(strPrefix) {\n var sorted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (typeof strPrefix !== 'string') {\n throw 'Expected string prefix, received ' + (typeof strPrefix === 'undefined' ? 'undefined' : _typeof(strPrefix));\n }\n\n if (typeof sorted !== 'boolean') {\n throw 'Expected sort parameter as boolean, received ' + (typeof sorted === 'undefined' ? 'undefined' : _typeof(sorted));\n }\n\n if (!this.isPrefix(strPrefix)) {\n return [];\n }\n\n var prefixNode = strPrefix.length ? (0, _checkPrefix6.default)(trie, strPrefix).prefixNode : trie;\n\n return (0, _recursePrefix2.default)(prefixNode, strPrefix, sorted);\n },\n\n\n /**\n * Get a random word in the trie with the given prefix\n * @returns Array\n */\n getRandomWordWithPrefix: function getRandomWordWithPrefix(strPrefix) {\n if (typeof strPrefix !== 'string') {\n throw 'Expected string prefix, received ' + (typeof strPrefix === 'undefined' ? 'undefined' : _typeof(strPrefix));\n }\n\n if (!this.isPrefix(strPrefix)) {\n return '';\n }\n\n var _checkPrefix3 = (0, _checkPrefix6.default)(trie, strPrefix),\n prefixNode = _checkPrefix3.prefixNode;\n\n return (0, _recurseRandomWord2.default)(prefixNode, strPrefix);\n },\n\n\n /**\n * Count the number of words with the given prefixSearch\n * @returns Number\n */\n countPrefix: function countPrefix(strPrefix) {\n var prefixes = this.getPrefix(strPrefix);\n\n return prefixes.length;\n },\n\n\n /**\n * Get all words in the trie\n * @returns Array\n */\n getWords: function getWords() {\n var sorted = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n return this.getPrefix('', sorted);\n },\n\n\n /**\n * Check the existence of a word in the trie\n * @returns Boolean\n */\n hasWord: function hasWord(word) {\n if (typeof word !== 'string') {\n throw 'Expected string word, received ' + (typeof word === 'undefined' ? 'undefined' : _typeof(word));\n }\n\n var _checkPrefix4 = (0, _checkPrefix6.default)(trie, word),\n prefixFound = _checkPrefix4.prefixFound,\n prefixNode = _checkPrefix4.prefixNode;\n\n if (prefixFound) {\n return prefixNode[_config2.default.END_WORD] === 1;\n }\n\n return false;\n },\n\n\n /**\n * Get a list of valid anagrams that can be made from the given letters\n * @returns Array\n */\n getAnagrams: function getAnagrams(letters) {\n if (typeof letters !== 'string') {\n throw 'Anagrams expected string letters, received ' + (typeof letters === 'undefined' ? 'undefined' : _typeof(letters));\n }\n\n if (letters.length < PERMS_MIN_LEN) {\n throw 'getAnagrams expects at least ' + PERMS_MIN_LEN + ' letters';\n }\n\n return (0, _permutations2.default)(letters, trie, {\n type: 'anagram'\n });\n },\n\n\n /**\n * Get a list of all sub-anagrams that can be made from the given letters\n * @returns Array\n */\n getSubAnagrams: function getSubAnagrams(letters) {\n if (typeof letters !== 'string') {\n throw 'Expected string letters, received ' + (typeof letters === 'undefined' ? 'undefined' : _typeof(letters));\n }\n\n if (letters.length < PERMS_MIN_LEN) {\n throw 'getSubAnagrams expects at least ' + PERMS_MIN_LEN + ' letters';\n }\n\n return (0, _permutations2.default)(letters, trie, {\n type: 'sub-anagram'\n });\n }\n };\n};\n\nvar _create = require('./create');\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _append = require('./append');\n\nvar _append2 = _interopRequireDefault(_append);\n\nvar _checkPrefix5 = require('./checkPrefix');\n\nvar _checkPrefix6 = _interopRequireDefault(_checkPrefix5);\n\nvar _recursePrefix = require('./recursePrefix');\n\nvar _recursePrefix2 = _interopRequireDefault(_recursePrefix);\n\nvar _recurseRandomWord = require('./recurseRandomWord');\n\nvar _recurseRandomWord2 = _interopRequireDefault(_recurseRandomWord);\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _config = require('./config');\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _permutations = require('./permutations');\n\nvar _permutations2 = _interopRequireDefault(_permutations);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar PERMS_MIN_LEN = _config2.default.PERMS_MIN_LEN;\n\n;\nmodule.exports = exports['default'];","// libs/scan.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nfunction scan(nodes, token, options) {\n const { startIndex, onlySkipWhitespaceAndComments, allowSubstringMatches } = options || {};\n if (typeof token === \"string\") {\n token = { type: \"string\", content: token };\n }\n for (let i = startIndex || 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (node.type === token.type) {\n switch (node.type) {\n case \"comment\":\n case \"displaymath\":\n case \"inlinemath\":\n case \"root\":\n case \"parbreak\":\n case \"whitespace\":\n case \"verb\":\n case \"verbatim\":\n case \"group\":\n return i;\n case \"macro\":\n if (node.content === token.content) {\n return i;\n }\n break;\n case \"environment\":\n case \"mathenv\":\n if (printRaw(node.env) === printRaw(token.env)) {\n return i;\n }\n break;\n case \"string\":\n if (node.content === token.content) {\n return i;\n }\n if (allowSubstringMatches && node.content.indexOf(token.content) >= 0) {\n return i;\n }\n break;\n }\n }\n if (onlySkipWhitespaceAndComments && !match.whitespace(node) && !match.comment(node)) {\n return null;\n }\n }\n return null;\n}\n\n// libs/prefix-match.ts\nimport Trie from \"trie-prefix-tree\";\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nfunction prefixMatch(nodes, prefixes, options) {\n const {\n startIndex = 0,\n matchSubstrings = false,\n assumeOneCharStrings = false\n } = options || {};\n if (typeof prefixes === \"string\") {\n prefixes = [prefixes];\n }\n if (Array.isArray(prefixes)) {\n prefixes = Trie(prefixes);\n }\n const prefixTree = prefixes;\n const history = {\n lastPrefix: \"\",\n lastWord: \"\",\n index: startIndex,\n partialMatch: \"\"\n };\n function tryToMatchNextChar(char, index) {\n let ret = false;\n if (prefixTree.isPrefix(history.lastPrefix + char)) {\n history.lastPrefix += char;\n history.index = index;\n ret = true;\n }\n if (prefixTree.hasWord(history.lastPrefix)) {\n history.lastWord = history.lastPrefix;\n }\n return ret;\n }\n for (let i = 0; startIndex + i < nodes.length; i++) {\n const node = nodes[startIndex + i];\n if (!match2.string(node)) {\n break;\n }\n if (assumeOneCharStrings && node.content.length !== 1) {\n break;\n }\n if (matchSubstrings) {\n let fullMatch = true;\n history.partialMatch = \"\";\n for (let j = 0; j < node.content.length; j++) {\n const char = node.content[j];\n if (tryToMatchNextChar(char, startIndex + i)) {\n history.partialMatch += char;\n } else {\n fullMatch = false;\n break;\n }\n }\n if (fullMatch) {\n history.partialMatch = \"\";\n } else {\n break;\n }\n } else {\n if (!tryToMatchNextChar(node.content, startIndex + i)) {\n break;\n }\n }\n }\n return history.lastWord ? {\n match: history.lastWord,\n endNodeIndex: history.index,\n endNodePartialMatch: history.partialMatch ? history.partialMatch : null\n } : null;\n}\nexport {\n Trie,\n prefixMatch,\n scan\n};\n//# sourceMappingURL=index.js.map\n","// index.ts\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nfunction updateRenderInfo(node, renderInfo) {\n if (renderInfo != null) {\n node._renderInfo = { ...node._renderInfo || {}, ...renderInfo };\n }\n return node;\n}\nfunction trimRenderInfo(ast) {\n visit(ast, (node) => {\n delete node._renderInfo;\n delete node.position;\n });\n return ast;\n}\nexport {\n trimRenderInfo,\n updateRenderInfo\n};\n//# sourceMappingURL=index.js.map\n","// libs/gobble-arguments.ts\nimport {\n parse as parseArgspec\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { arg as arg2 } from \"@unified-latex/unified-latex-builder\";\n\n// libs/gobble-single-argument.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { arg } from \"@unified-latex/unified-latex-builder\";\nfunction gobbleSingleArgument(nodes, argSpec, startPos = 0) {\n if (typeof argSpec === \"string\" || !argSpec.type) {\n throw new Error(\n `argSpec must be an already-parsed argument specification, not \"${JSON.stringify(\n argSpec\n )}\"`\n );\n }\n let argument = null;\n let currPos = startPos;\n const gobbleWhitespace = argSpec.noLeadingWhitespace ? () => {\n } : () => {\n while (currPos < nodes.length) {\n if (!match.whitespace(nodes[currPos])) {\n break;\n }\n currPos++;\n }\n };\n const openMark = argSpec.openBrace || \"\";\n const closeMark = argSpec.closeBrace || \"\";\n const acceptGroup = (argSpec.type === \"mandatory\" || argSpec.type === \"optional\") && openMark === \"{\" && closeMark === \"}\";\n function findBracePositions() {\n let openMarkPos = null;\n if (openMark) {\n openMarkPos = nodes.findIndex(\n (node, i) => i >= currPos && match.string(node, openMark)\n );\n if (openMarkPos < currPos) {\n openMarkPos = null;\n }\n }\n let closeMarkPos = null;\n if (openMarkPos != null) {\n closeMarkPos = nodes.findIndex(\n (node, i) => i >= openMarkPos + 1 && match.string(node, closeMark)\n );\n if (closeMarkPos < openMarkPos + 1) {\n closeMarkPos = null;\n }\n }\n return [openMarkPos, closeMarkPos];\n }\n gobbleWhitespace();\n const currNode = nodes[currPos];\n if (currNode == null || match.comment(currNode) || match.parbreak(currNode)) {\n return { argument, nodesRemoved: 0 };\n }\n switch (argSpec.type) {\n case \"mandatory\":\n if (acceptGroup) {\n let content = [currNode];\n if (match.group(currNode)) {\n content = currNode.content;\n }\n argument = arg(content, {\n openMark,\n closeMark\n });\n currPos++;\n break;\n }\n case \"optional\":\n if (acceptGroup && match.group(currNode)) {\n argument = arg(currNode.content, {\n openMark,\n closeMark\n });\n currPos++;\n break;\n }\n if (match.string(currNode, openMark)) {\n const [openMarkPos, closeMarkPos] = findBracePositions();\n if (openMarkPos != null && closeMarkPos != null) {\n argument = arg(nodes.slice(openMarkPos + 1, closeMarkPos), {\n openMark,\n closeMark\n });\n currPos = closeMarkPos + 1;\n break;\n }\n }\n break;\n case \"optionalStar\":\n case \"optionalToken\":\n if (match.string(\n currNode,\n argSpec.type === \"optionalStar\" ? \"*\" : argSpec.token\n )) {\n argument = arg([currNode], { openMark: \"\", closeMark: \"\" });\n currPos++;\n break;\n }\n break;\n case \"until\": {\n if (argSpec.stopTokens.length > 1) {\n console.warn(\n `\"until\" matches with multi-token stop conditions are not yet implemented`\n );\n break;\n }\n const rawToken = argSpec.stopTokens[0];\n const stopToken = rawToken === \" \" ? { type: \"whitespace\" } : { type: \"string\", content: argSpec.stopTokens[0] };\n let matchPos = scan(nodes, stopToken, {\n startIndex: startPos,\n allowSubstringMatches: true\n });\n if (matchPos != null && partialStringMatch(nodes[matchPos], stopToken)) {\n console.warn(\n `\"until\" arguments that stop at non-punctuation symbols is not yet implemented`\n );\n break;\n }\n if (matchPos == null) {\n break;\n }\n argument = arg(nodes.slice(startPos, matchPos), {\n openMark: \"\",\n closeMark: rawToken\n });\n currPos = matchPos;\n if (currPos < nodes.length) {\n currPos++;\n }\n break;\n }\n default:\n console.warn(\n `Don't know how to find an argument of argspec type \"${argSpec.type}\"`\n );\n }\n const nodesRemoved = argument ? currPos - startPos : 0;\n nodes.splice(startPos, nodesRemoved);\n return { argument, nodesRemoved };\n}\nfunction partialStringMatch(node, token) {\n return match.anyString(node) && match.anyString(token) && node.content.length > token.content.length;\n}\n\n// libs/gobble-arguments.ts\nfunction gobbleArguments(nodes, argSpec, startPos = 0) {\n if (typeof argSpec === \"function\") {\n return argSpec(nodes, startPos);\n }\n if (typeof argSpec === \"string\") {\n argSpec = parseArgspec(argSpec);\n }\n const args = [];\n let nodesRemoved = 0;\n for (const spec of argSpec) {\n const { argument, nodesRemoved: removed } = gobbleSingleArgument(\n nodes,\n spec,\n startPos\n );\n if (argument) {\n args.push(argument);\n nodesRemoved += removed;\n } else {\n args.push(arg2([], { openMark: \"\", closeMark: \"\" }));\n }\n }\n return { args, nodesRemoved };\n}\n\n// libs/attach-arguments.ts\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nfunction attachMacroArgsInArray(nodes, macros) {\n let currIndex;\n const isRelevantMacro = match2.createMacroMatcher(macros);\n function gobbleUntilMacro() {\n while (currIndex >= 0 && !isRelevantMacro(nodes[currIndex])) {\n currIndex--;\n }\n }\n currIndex = nodes.length - 1;\n while (currIndex >= 0) {\n gobbleUntilMacro();\n if (currIndex < 0) {\n return;\n }\n const macroIndex = currIndex;\n const macro = nodes[macroIndex];\n const macroName = macro.content;\n const macroInfo = macros[macroName];\n updateRenderInfo(macro, macroInfo.renderInfo);\n const signatureOrParser = macroInfo.argumentParser || macroInfo.signature;\n if (signatureOrParser == null) {\n currIndex--;\n continue;\n }\n if (macro.args != null) {\n currIndex = macroIndex - 1;\n continue;\n }\n currIndex++;\n const { args } = gobbleArguments(nodes, signatureOrParser, currIndex);\n macro.args = args;\n currIndex = macroIndex - 1;\n }\n}\nfunction attachMacroArgs(tree, macros) {\n visit(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n\n// libs/unified-latex-attach-macro-arguments.ts\nimport { visit as visit2 } from \"@unified-latex/unified-latex-util-visit\";\nvar unifiedLatexAttachMacroArguments = function unifiedLatexAttachMacroArguments2(options) {\n return (tree) => {\n const { macros = {} } = options || {};\n if (Object.keys(macros).length === 0) {\n console.warn(\n \"Attempting to attach macro arguments but no macros are specified.\"\n );\n }\n visit2(\n tree,\n (nodes) => {\n attachMacroArgsInArray(nodes, macros);\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\n\n// libs/get-args-content.ts\nfunction getArgsContent(node) {\n if (!Array.isArray(node.args)) {\n return [];\n }\n return node.args.map((arg3) => {\n if (arg3.openMark === \"\" && arg3.content.length === 0) {\n return null;\n }\n return arg3.content;\n });\n}\nfunction getNamedArgsContent(node, namedArgumentsFallback = []) {\n var _a;\n const names = ((_a = node._renderInfo) == null ? void 0 : _a.namedArguments) || namedArgumentsFallback;\n if (!Array.isArray(node.args) || !Array.isArray(names) || names.length === 0) {\n return {};\n }\n const ret = {};\n node.args.forEach((arg3, i) => {\n const name = names[i];\n if (name == null) {\n return;\n }\n let val = arg3.content;\n if (arg3.openMark === \"\" && arg3.content.length === 0) {\n val = null;\n }\n ret[name] = val;\n });\n return ret;\n}\nexport {\n attachMacroArgs,\n attachMacroArgsInArray,\n getArgsContent,\n getNamedArgsContent,\n gobbleArguments,\n gobbleSingleArgument,\n unifiedLatexAttachMacroArguments\n};\n//# sourceMappingURL=index.js.map\n","// package/tikz/provides.ts\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\n\n// package/tikz/libs/tikz-command-argument-parser.ts\nimport { arg } from \"@unified-latex/unified-latex-builder\";\nimport {\n parse as parseArgspec\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { trim } from \"@unified-latex/unified-latex-util-trim\";\nvar OPTIONAL_ARGUMENT_ARG_SPEC = parseArgspec(\"o\")[0];\nfunction blankArg() {\n return arg([], { openMark: \"\", closeMark: \"\" });\n}\nvar tikzCommandArgumentParser = (nodes, startPos) => {\n const origStartPos = startPos;\n let pos = startPos;\n let nodesRemoved = 0;\n const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos);\n let animationArg = blankArg();\n if (cursorPosAfterAnimations !== pos) {\n const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos);\n trim(argContent);\n animationArg = arg(argContent, {\n openMark: \" \",\n closeMark: \" \"\n });\n }\n nodesRemoved += cursorPosAfterAnimations - pos;\n const {\n argument: _optionalArgument,\n nodesRemoved: optionalArgumentNodesRemoved\n } = gobbleSingleArgument(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos);\n nodesRemoved += optionalArgumentNodesRemoved;\n const optionalArg = _optionalArgument || blankArg();\n while (match.whitespace(nodes[pos])) {\n pos++;\n }\n const firstNode = nodes[pos];\n if (!firstNode) {\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0\n };\n }\n if (match.group(firstNode)) {\n const args = [animationArg, optionalArg, arg(firstNode.content)];\n nodes.splice(origStartPos, pos - origStartPos + 1);\n return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved };\n }\n const semicolonPosition = scan(nodes, \";\", { startIndex: pos });\n if (semicolonPosition != null) {\n const argNodes = nodes.splice(\n origStartPos,\n semicolonPosition - origStartPos + 1\n );\n trim(argNodes);\n const args = [animationArg, optionalArg, arg(argNodes)];\n return {\n args,\n nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved\n };\n }\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0\n };\n};\nfunction eatAllAnimationSpecs(nodes, startPos) {\n const colonPos = scan(nodes, \":\", {\n startIndex: startPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true\n });\n if (!colonPos) {\n return startPos;\n }\n let lastMatchPos = startPos;\n let i = colonPos + 1;\n for (; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.string(node, \"[\")) {\n break;\n }\n if (match.string(node, \"=\")) {\n i++;\n while (match.whitespace(nodes[i]) || match.comment(nodes[i])) {\n i++;\n }\n if (!match.group(nodes[i])) {\n break;\n }\n lastMatchPos = i + 1;\n const colonPos2 = scan(nodes, \":\", {\n startIndex: lastMatchPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true\n });\n if (colonPos2 == null) {\n break;\n }\n i = colonPos2 + 1;\n }\n }\n return lastMatchPos;\n}\n\n// package/tikz/provides.ts\nvar macros = {\n pgfkeys: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n tikzoption: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n tikzstyle: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n usetikzlibrary: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n usepgfmodule: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n usepgflibrary: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfplotsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n pgfplotstabletypeset: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n tikz: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: { namedArguments: [\"animation\", \"options\", \"command\"] }\n }\n};\nvar environments = {\n tikzpicture: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n axis: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n scope: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgfonlayer: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgflowlevelscope: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgfviewboxscope: {\n signature: \"m m m m m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgftransparencygroup: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n behindforegroundpath: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent\n },\n pgfmetadecoration: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent\n },\n colormixin: { signature: \"m\", renderInfo: { pgfkeysArgs: true } }\n};\nfunction processTikzEnvironmentContent(nodes) {\n attachMacroArgsInArray(nodes, conditionalMacros);\n return nodes;\n}\nvar conditionalMacros = {\n pgfextra: { signature: \"m\" },\n beginpgfgraphicnamed: { signature: \"m\" },\n pgfrealjobname: { signature: \"m\" },\n pgfplotstreampoint: { signature: \"m\" },\n pgfplotstreampointoutlier: { signature: \"m\" },\n pgfplotstreamspecial: { signature: \"m\" },\n pgfplotxyfile: { signature: \"m\" },\n pgfplotxyzfile: { signature: \"m\" },\n pgfplotfunction: { signature: \"mmm\" },\n pgfplotgnuplot: { signature: \"o m\" },\n pgfplothandlerrecord: { signature: \"m\" },\n pgfdeclareplothandler: { signature: \"m m m\" },\n pgfdeclarelayer: { signature: \"m\" },\n pgfsetlayers: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfonlayer: { signature: \"m\" },\n startpgfonlayer: { signature: \"m\" },\n pgfdeclarehorizontalshading: { signature: \"o m m m \" },\n pgfdeclareradialshading: { signature: \"o m m m\" },\n pgfdeclarefunctionalshading: { signature: \"o m m m m m\" },\n pgfshadecolortorgb: { signature: \"m m\" },\n pgfshadecolortocmyk: { signature: \"m m\" },\n pgfshadecolortogray: { signature: \"m m\" },\n pgfuseshading: { signature: \"m\" },\n pgfshadepath: { signature: \"m m\" },\n pgfsetadditionalshadetransform: { signature: \"m\" },\n pgfsetstrokeopacity: { signature: \"m\" },\n pgfsetfillopacity: { signature: \"m\" },\n pgfsetblendmode: { signature: \"m\" },\n pgfdeclarefading: { signature: \"m m\" },\n pgfsetfading: { signature: \"m m\" },\n pgfsetfadingforcurrentpath: { signature: \"m m\" },\n pgfsetfadingforcurrentpathstroked: { signature: \"m m\" },\n pgfanimateattribute: { signature: \"m m\" },\n pgfsnapshot: { signature: \"m\" },\n pgfqpoint: { signature: \"m m\" },\n pgfqpointxy: { signature: \"m m\" },\n pgfqpointxyz: { signature: \"m m m\" },\n pgfqpointscale: { signature: \"m m\" },\n pgfpathqmoveto: { signature: \"m m\" },\n pgfpathqlineto: { signature: \"m m\" },\n pgfpathqcurveto: { signature: \"m m m m m m\" },\n pgfpathqcircle: { signature: \"m\" },\n pgfqbox: { signature: \"m\" },\n pgfqboxsynced: { signature: \"m\" },\n pgfaliasimage: { signature: \"m m\" },\n pgfuseimage: { signature: \"m\" },\n pgfimage: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclaremask: { signature: \"o m m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclarepatternformonly: { signature: \"o m m m m m\" },\n pgfdeclarepatterninherentlycolored: { signature: \"o m m m m m\" },\n pgfsetfillpattern: { signature: \"m m\" },\n // Coordinate canvas and nonlinear transformations\n pgftransformshift: { signature: \"m\" },\n pgftransformxshift: { signature: \"m\" },\n pgftransformyshift: { signature: \"m\" },\n pgftransformscale: { signature: \"m\" },\n pgftransformxscale: { signature: \"m\" },\n pgftransformyscale: { signature: \"m\" },\n pgftransformxslant: { signature: \"m\" },\n pgftransformyslant: { signature: \"m\" },\n pgftransformrotate: { signature: \"m\" },\n pgftransformtriangle: { signature: \"m m m\" },\n pgftransformcm: { signature: \"m m m m m\" },\n pgftransformarrow: { signature: \"m m\" },\n pgftransformlineattime: { signature: \"m m m\" },\n pgftransformcurveattime: { signature: \"m m m m m\" },\n pgftransformarcaxesattime: { signature: \"m m m m m m\" },\n pgfgettransform: { signature: \"m\" },\n pgfsettransform: { signature: \"m\" },\n pgfgettransformentries: { signature: \"m m m m m m\" },\n pgfsettransformentries: { signature: \"m m m m m m\" },\n pgfpointtransformed: { signature: \"m\" },\n pgflowlevel: { signature: \"m\" },\n pgflowlevelobj: { signature: \"m m\" },\n pgflowlevelscope: { signature: \"m\" },\n startpgflowlevelscope: { signature: \"m\" },\n pgfviewboxscope: { signature: \"m m m m m\" },\n startpgfviewboxscope: { signature: \"m m m m m\" },\n pgftransformnonlinear: { signature: \"m\" },\n pgfpointtransformednonlinear: { signature: \"m\" },\n pgfsetcurvilinearbeziercurve: { signature: \"m m m m\" },\n pgfcurvilineardistancetotime: { signature: \"m\" },\n pgfpointcurvilinearbezierorthogonal: { signature: \"m m\" },\n pgfpointcurvilinearbezierpolar: { signature: \"m m\" },\n // Matrices\n pgfmatrix: { signature: \"m m m m m m m\" },\n pgfsetmatrixcolumnsep: { signature: \"m\" },\n pgfmatrixnextcell: { signature: \"o\" },\n pgfsetmatrixrowsep: { signature: \"m\" },\n pgfmatrixendrow: { signature: \"o\" },\n // Nodes and shapes\n pgfnode: { signature: \"m m m m m\" },\n pgfmultipartnode: { signature: \"m m m m\" },\n pgfcoordinate: { signature: \"m m\" },\n pgfnodealias: { signature: \"m m\" },\n pgfnoderename: { signature: \"m m\" },\n pgfpositionnodelater: { signature: \"m\" },\n pgfpositionnodenow: { signature: \"m\" },\n pgfnodepostsetupcode: { signature: \"m m\" },\n pgfpointanchor: { signature: \"m m\" },\n pgfpointshapeborder: { signature: \"m m\" },\n pgfdeclareshape: { signature: \"m m\" },\n saveddimen: { signature: \"m m\" },\n savedmacro: { signature: \" m\" },\n anchor: { signature: \"m m\" },\n deferredanchor: { signature: \"m m\" },\n anchorborder: { signature: \"m\" },\n backgroundpath: { signature: \"m\" },\n foregroundpath: { signature: \"m\" },\n behindbackgroundpath: { signature: \"m\" },\n beforebackgroundpath: { signature: \"m\" },\n beforeforegroundpath: { signature: \"m\" },\n behindforegroundpath: { signature: \"m\" },\n // Arrows\n pgfdeclarearrow: { signature: \"m\" },\n pgfarrowssettipend: { signature: \"m\" },\n pgfarrowssetbackend: { signature: \"m\" },\n pgfarrowssetlineend: { signature: \"m\" },\n pgfarrowssetvisualbackend: { signature: \"m\" },\n pgfarrowssetvisualtipend: { signature: \"m\" },\n pgfarrowshullpoint: { signature: \"m m\" },\n pgfarrowsupperhullpoint: { signature: \"m m\" },\n pgfarrowssave: { signature: \"m\" },\n pgfarrowssavethe: { signature: \"m\" },\n pgfarrowsaddtooptions: { signature: \"m\" },\n pgfarrowsaddtolateoptions: { signature: \"m\" },\n pgfarrowsaddtolengthscalelist: { signature: \"m\" },\n pgfarrowsaddtowidthscalelist: { signature: \"m\" },\n pgfarrowsthreeparameters: { signature: \"m\" },\n pgfarrowslinewidthdependent: { signature: \"m m m\" },\n pgfarrowslengthdependent: { signature: \"m\" },\n // Path\n pgfusepath: { signature: \"m\" },\n pgfsetlinewidth: { signature: \"m\" },\n pgfsetmiterlimit: { signature: \"m\" },\n pgfsetdash: { signature: \"m m\" },\n pgfsetstrokecolor: { signature: \"m\" },\n pgfsetcolor: { signature: \"m\" },\n pgfsetinnerlinewidth: { signature: \"m\" },\n pgfsetinnerstrokecolor: { signature: \"m\" },\n pgfsetarrowsstart: { signature: \"m\" },\n pgfsetarrowsend: { signature: \"m\" },\n pgfsetarrows: { signature: \"m\" },\n pgfsetshortenstart: { signature: \"m\" },\n pgfsetshortenend: { signature: \"m\" },\n pgfsetfillcolor: { signature: \"m\" },\n // Decorations\n pgfdeclaredecoration: { signature: \"m m m\" },\n state: { signature: \"m o m\" },\n pgfdecoratepath: { signature: \"m m\" },\n startpgfdecoration: { signature: \"m\" },\n pgfdecoration: { signature: \"m\" },\n pgfdecoratecurrentpath: { signature: \"m\" },\n pgfsetdecorationsegmenttransformation: { signature: \"m\" },\n pgfdeclaremetadecorate: { signature: \"m m m\" },\n pgfmetadecoration: { signature: \"m\" },\n startpgfmetadecoration: { signature: \"m\" },\n // Constructing paths\n pgfpathmoveto: { signature: \"m\" },\n pgfpathlineto: { signature: \"m\" },\n pgfpathcurveto: { signature: \"m m m\" },\n pgfpathquadraticcurveto: { signature: \"m m\" },\n pgfpathcurvebetweentime: { signature: \"m m m m m m\" },\n pgfpathcurvebetweentimecontinue: { signature: \"m m m m m m\" },\n pgfpatharc: { signature: \"m m m\" },\n pgfpatharcaxes: { signature: \"m m m m\" },\n pgfpatharcto: { signature: \"m m m m m m\" },\n pgfpatharctoprecomputed: { signature: \"m m m m m m m m\" },\n pgfpathellipse: { signature: \"m m m\" },\n pgfpathcircle: { signature: \"m m\" },\n pgfpathrectangle: { signature: \"m m\" },\n pgfpathrectanglecorners: { signature: \"m m\" },\n pgfpathgrid: { signature: \" o m m\" },\n pgfpathparabola: { signature: \"m m\" },\n pgfpathsine: { signature: \"m\" },\n pgfpathcosine: { signature: \"m\" },\n pgfsetcornersarced: { signature: \"m\" },\n \"pgf@protocolsizes\": { signature: \"m m\" },\n // Specifying coordinates\n pgfpoint: { signature: \"m m\" },\n pgfpointpolar: { signature: \"m m m\" },\n pgfpointxy: { signature: \"m m\" },\n pgfsetxvec: { signature: \"m\" },\n pgfsetyvec: { signature: \"m\" },\n pgfpointpolarxy: { signature: \"m m\" },\n pgfpointxyz: { signature: \"m m m\" },\n pgfsetzvec: { signature: \"m\" },\n pgfpointcylindrical: { signature: \"m m m\" },\n pgfpointspherical: { signature: \"m m m\" },\n pgfpointadd: { signature: \"m m\" },\n pgfpointscale: { signature: \"m m\" },\n pgfpointdiff: { signature: \"m m\" },\n pgfpointnormalised: { signature: \"m\" },\n pgfpointlineattime: { signature: \"m m m\" },\n pgfpointlineatdistance: { signature: \"m m m\" },\n pgfpointarcaxesattime: { signature: \"m m m m m m\" },\n pgfpointcurveattime: { signature: \"m m m m m\" },\n pgfpointborderrectangle: { signature: \"m m\" },\n pgfpointborderellipse: { signature: \"m m\" },\n pgfpointintersectionoflines: { signature: \"m m m m\" },\n pgfpointintersectionofcircles: { signature: \"m m m m m\" },\n pgfintersectionofpaths: { signature: \"m m\" },\n pgfpointintersectionsolution: { signature: \"m\" },\n pgfextractx: { signature: \"m m\" },\n pgfextracty: { signature: \"m m\" },\n pgfgetlastxy: { signature: \"m m\" },\n \"pgf@process\": { signature: \"m\" },\n // Heirarchical structres ...\n pgfsetbaseline: { signature: \"m\" },\n pgfsetbaselinepointnow: { signature: \"m\" },\n pgfsetbaselinepointlater: { signature: \"m\" },\n pgftext: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfuseid: { signature: \"m\" },\n pgfusetype: { signature: \"m\" },\n pgfidrefnextuse: { signature: \"m m\" },\n pgfidrefprevuse: { signature: \"m m\" },\n pgfaliasid: { signature: \"m m\" },\n pgfgaliasid: { signature: \"m m\" },\n pgfifidreferenced: { signature: \"m m m\" },\n pgfrdfabout: { signature: \"m\" },\n pgfrdfcontent: { signature: \"m\" },\n pgfrdfdatatype: { signature: \"m\" },\n pgfrdfhref: { signature: \"m\" },\n pgfrdfprefix: { signature: \"m\" },\n pgfrdfproperty: { signature: \"m\" },\n pgfrdfrel: { signature: \"m\" },\n pgfrdfresource: { signature: \"m\" },\n pgfrdfrev: { signature: \"m\" },\n pgfrdfsrc: { signature: \"m\" },\n pgfrdftypeof: { signature: \"m\" },\n pgfrdfvocab: { signature: \"m\" },\n pgferror: { signature: \"m\" },\n pgfwarning: { signature: \"m\" },\n path: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n draw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n fill: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n filldraw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n pattern: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n shade: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n clip: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n useasboundingbox: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n node: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n coordinate: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n graph: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n scoped: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: {\n namedArguments: [\"animation\", \"options\", \"command\"],\n breakAround: true\n }\n }\n};\n\n// package/tikz/libs/print-raw.ts\nimport { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { trim as trim2 } from \"@unified-latex/unified-latex-util-trim\";\nfunction printRaw(node, root = false) {\n if (typeof node === \"string\") {\n return node;\n }\n if (Array.isArray(node)) {\n const sepToken = root ? \" \" : \"\";\n const printed = [];\n for (let i = 0; i < node.length; i++) {\n const tok = node[i];\n const prevTok = node[i - 1];\n if (!prevTok) {\n printed.push(printRaw(tok));\n continue;\n }\n if (prevTok.type === \"comment\") {\n printed.push(printRaw(tok));\n continue;\n }\n if (tok.type !== \"comment\") {\n printed.push(sepToken);\n }\n printed.push(printRaw(tok));\n }\n return printed.join(\"\");\n }\n const type = node.type;\n switch (type) {\n case \"path_spec\":\n return printRaw(node.content, root = true);\n case \"coordinate\":\n return `${latexPrintRaw(node.prefix)}(${latexPrintRaw(\n node.content\n )})`;\n case \"operation\":\n return latexPrintRaw(node.content);\n case \"comment\":\n return latexPrintRaw(node);\n case \"line_to\":\n return node.command;\n case \"curve_to\": {\n const comments = node.comments.map((c) => latexPrintRaw({ ...c, leadingWhitespace: false })).join(\"\");\n if (node.controls.length === 1) {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} ..`;\n } else {\n return `${comments}.. controls ${printRaw(\n node.controls[0]\n )} and ${printRaw(node.controls[1])} ..`;\n }\n }\n case \"unknown\":\n return latexPrintRaw(node.content);\n case \"square_brace_group\":\n return `[${latexPrintRaw(node.content)}]`;\n case \"foreach\": {\n const comments = node.comments.map((c) => latexPrintRaw({ ...c, leadingWhitespace: false })).join(\"\");\n let options = \"\";\n if (node.options) {\n options = ` [${latexPrintRaw(node.options)}]`;\n }\n const start = latexPrintRaw(node.start);\n const variables = [...node.variables];\n trim2(variables);\n let printedVariables = latexPrintRaw(variables);\n if (printedVariables.length > 0) {\n printedVariables = \" \" + printedVariables;\n }\n const command = node.command.type === \"foreach\" ? printRaw(node.command) : latexPrintRaw(node.command);\n return `${comments}${start}${printedVariables}${options} in ${latexPrintRaw(\n node.list\n )} ${command}`;\n }\n case \"svg_operation\": {\n const comments = node.comments.map((c) => latexPrintRaw({ ...c, leadingWhitespace: false })).join(\"\");\n let options = \"\";\n if (node.options) {\n options = `[${latexPrintRaw(node.options)}]`;\n }\n return `${comments}svg${options} ${latexPrintRaw(node.content)}`;\n }\n case \"animation\": {\n const comments = node.comments.map((c) => latexPrintRaw({ ...c, leadingWhitespace: false })).join(\"\");\n return `${comments}:${node.attribute} = {${latexPrintRaw(\n node.content\n )}}`;\n }\n default:\n const unprintedType = type;\n console.warn(`Unknown node type \"${unprintedType}\" for node`, node);\n return \"\";\n }\n}\n\n// package/tikz/libs/parser.ts\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { TikzPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nfunction createMatchers() {\n return {\n isChar: match2.string,\n isTerminal: (node) => match2.string(node, \";\"),\n isOperation: (node) => match2.anyString(node) && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node) => match2.whitespace(node) || match2.parbreak(node),\n isComment: match2.comment,\n isGroup: match2.group,\n isMacro: match2.macro,\n isAnyMacro: match2.anyMacro\n };\n}\nvar matchers = createMatchers();\nfunction parse(ast, options) {\n const { startRule = \"path_spec\" } = options || {};\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\n ast = decorateArrayForPegjs([...ast]);\n return TikzPegParser.parse(ast, {\n ...matchers,\n startRule\n });\n}\nexport {\n conditionalMacros,\n environments,\n macros,\n parse,\n printRaw\n};\n//# sourceMappingURL=index.js.map\n","// libs/pgfkeys-parser.ts\nimport { PgfkeysPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nfunction createMatchers() {\n return {\n isChar: (node, char) => match.string(node, char),\n isComma: (node) => match.string(node, \",\"),\n isEquals: (node) => match.string(node, \"=\"),\n isWhitespace: (node) => match.whitespace(node),\n isParbreak: (node) => match.parbreak(node),\n isSameLineComment: (node) => match.comment(node) && node.sameline,\n isOwnLineComment: (node) => match.comment(node) && !node.sameline\n };\n}\nfunction parsePgfkeys(ast, options) {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\n const { allowParenGroups = false } = options || {};\n ast = decorateArrayForPegjs([...ast]);\n return PgfkeysPegParser.parse(ast, {\n ...createMatchers(),\n allowParenGroups\n });\n}\n\n// libs/pgfkeys-to-object.ts\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nfunction pgfkeysArgToObject(arg) {\n function parseFront(nodes) {\n return printRaw(nodes);\n }\n function parseBack(nodes) {\n if (!nodes) {\n return [];\n }\n if (nodes.length === 1 && match2.group(nodes[0])) {\n return nodes[0].content;\n }\n return nodes;\n }\n let nodeList;\n if (match2.argument(arg)) {\n nodeList = arg.content;\n } else {\n nodeList = arg;\n }\n const parsedArgs = parsePgfkeys(nodeList);\n return Object.fromEntries(\n parsedArgs.filter((part) => part.itemParts).map((part) => [\n parseFront(part.itemParts[0]),\n parseBack(part.itemParts[1])\n ])\n );\n}\nexport {\n createMatchers,\n parsePgfkeys,\n pgfkeysArgToObject\n};\n//# sourceMappingURL=index.js.map\n","// libs/parse-align-environment.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport {\n AlignEnvironmentPegParser,\n decorateArrayForPegjs\n} from \"@unified-latex/unified-latex-util-pegjs\";\nfunction createMatchers(rowSepMacros, colSep) {\n const isRowSep = match.createMacroMatcher(rowSepMacros);\n return {\n isRowSep,\n isColSep: (node) => colSep.some((sep) => match.string(node, sep)),\n isWhitespace: (node) => match.whitespace(node),\n isSameLineComment: (node) => match.comment(node) && node.sameline,\n isOwnLineComment: (node) => match.comment(node) && !node.sameline\n };\n}\nfunction parseAlignEnvironment(ast, colSep = [\"&\"], rowSepMacros = [\"\\\\\", \"hline\", \"cr\"]) {\n if (!Array.isArray(ast)) {\n throw new Error(\"You must pass an array of nodes\");\n }\n ast = decorateArrayForPegjs([...ast]);\n return AlignEnvironmentPegParser.parse(\n ast,\n createMatchers(rowSepMacros, colSep)\n );\n}\nexport {\n createMatchers,\n parseAlignEnvironment\n};\n//# sourceMappingURL=index.js.map\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","/**\n * @typedef {(error?: Error|null|undefined, ...output: Array) => void} Callback\n * @typedef {(...input: Array) => any} Middleware\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add `fn` (middleware) to the list.\n * @typedef {{run: Run, use: Use}} Pipeline\n * Middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error|null|undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware`.\n * Can be sync or async; return a promise, receive a callback, or return new\n * values and errors.\n *\n * @param {Middleware} middleware\n * @param {Callback} callback\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result instanceof Promise) {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason` at `place` from `origin`.\n *\n * When an error is passed in as `reason`, the `stack` is copied.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n *\n * > 👉 **Note**: you should use markdown.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // To do: next major: expose `undefined` everywhere instead of `null`.\n constructor(reason, place, origin) {\n /** @type {[string | null, string | null]} */\n const parts = [null, null]\n /** @type {Position} */\n let position = {\n // @ts-expect-error: we always follows the structure of `position`.\n start: {line: null, column: null},\n // @ts-expect-error: \"\n end: {line: null, column: null}\n }\n\n super()\n\n if (typeof place === 'string') {\n origin = place\n place = undefined\n }\n\n if (typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n parts[1] = origin\n } else {\n parts[0] = origin.slice(0, index)\n parts[1] = origin.slice(index + 1)\n }\n }\n\n if (place) {\n // Node.\n if ('type' in place || 'position' in place) {\n if (place.position) {\n // To do: next major: deep clone.\n // @ts-expect-error: looks like a position.\n position = place.position\n }\n }\n // Position.\n else if ('start' in place || 'end' in place) {\n // @ts-expect-error: looks like a position.\n // To do: next major: deep clone.\n position = place\n }\n // Point.\n else if ('line' in place || 'column' in place) {\n // To do: next major: deep clone.\n position.start = place\n }\n }\n\n // Fields from `Error`.\n /**\n * Serialized positional info of error.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(place) || '1:1'\n\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = typeof reason === 'object' ? reason.message : reason\n\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack = ''\n\n if (typeof reason === 'object' && reason.stack) {\n this.stack = reason.stack\n }\n\n /**\n * Reason for message.\n *\n * > 👉 **Note**: you should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /* eslint-disable no-unused-expressions */\n /**\n * State of problem.\n *\n * * `true` — marks associated file as no longer processable (error)\n * * `false` — necessitates a (potential) change (warning)\n * * `null | undefined` — for things that might not need changing (info)\n *\n * @type {boolean | null | undefined}\n */\n this.fatal\n\n /**\n * Starting line of error.\n *\n * @type {number | null}\n */\n this.line = position.start.line\n\n /**\n * Starting column of error.\n *\n * @type {number | null}\n */\n this.column = position.start.column\n\n /**\n * Full unist position.\n *\n * @type {Position | null}\n */\n this.position = position\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | null}\n */\n this.source = parts[0]\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | null}\n */\n this.ruleId = parts[1]\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | null}\n */\n this.file\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | null}\n */\n this.actual\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array | null}\n */\n this.expected\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | null}\n */\n this.url\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | null}\n */\n this.note\n /* eslint-enable no-unused-expressions */\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.fatal = null\nVFileMessage.prototype.column = null\nVFileMessage.prototype.line = null\nVFileMessage.prototype.source = null\nVFileMessage.prototype.ruleId = null\nVFileMessage.prototype.position = null\n","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | undefined} [ext]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (ext === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extIndex = ext.length - 1\n\n while (index--) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extIndex > -1) {\n // Try to match the explicit extension.\n if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) {\n if (extIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.charCodeAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.charCodeAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.charCodeAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.charCodeAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.charCodeAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.charCodeAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.charCodeAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.charCodeAt(result.length - 1) !== 46 /* `.` */ ||\n result.charCodeAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const proc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * @typedef URL\n * @property {string} hash\n * @property {string} host\n * @property {string} hostname\n * @property {string} href\n * @property {string} origin\n * @property {string} password\n * @property {string} pathname\n * @property {string} port\n * @property {string} protocol\n * @property {string} search\n * @property {any} searchParams\n * @property {string} username\n * @property {() => string} toString\n * @property {() => string} toJSON\n */\n\n/**\n * Check if `fileUrlOrPath` looks like a URL.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return (\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n // @ts-expect-error: indexable.\n fileUrlOrPath.href &&\n // @ts-expect-error: indexable.\n fileUrlOrPath.origin\n )\n}\n","/// \n\nimport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {string | URL} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.charCodeAt(index) === 37 /* `%` */ &&\n pathname.charCodeAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.charCodeAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n\nexport {isUrl} from './minurl.shared.js'\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {import('./minurl.shared.js').URL} URL\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {Record & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'} BufferEncoding\n * Encodings supported by the buffer class.\n *\n * This is a copy of the types from Node, copied to prevent Node globals from\n * being needed.\n * Copied from: \n *\n * @typedef {Options | URL | Value | VFile} Compatible\n * Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n * Set multiple values.\n * @property {Value | null | undefined} [value]\n * Set `value`.\n * @property {string | null | undefined} [cwd]\n * Set `cwd`.\n * @property {Array | null | undefined} [history]\n * Set `history`.\n * @property {URL | string | null | undefined} [path]\n * Set `path`.\n * @property {string | null | undefined} [basename]\n * Set `basename`.\n * @property {string | null | undefined} [stem]\n * Set `stem`.\n * @property {string | null | undefined} [extname]\n * Set `extname`.\n * @property {string | null | undefined} [dirname]\n * Set `dirname`.\n * @property {Data | null | undefined} [data]\n * Set `data`.\n *\n * @typedef Map\n * Raw source map.\n *\n * See:\n * .\n * @property {number} version\n * Which version of the source map spec this map is following.\n * @property {Array} sources\n * An array of URLs to the original source files.\n * @property {Array} names\n * An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n * The URL root from which all sources are relative.\n * @property {Array | undefined} [sourcesContent]\n * An array of contents of the original source files.\n * @property {string} mappings\n * A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n * The generated file this source map is associated with.\n *\n * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options\n * Configuration.\n *\n * A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record} ReporterSettings\n * Configuration for reporters.\n */\n\n/**\n * @template {ReporterSettings} Settings\n * Options type.\n * @callback Reporter\n * Type for a reporter.\n * @param {Array} files\n * Files to report.\n * @param {Settings} options\n * Configuration.\n * @returns {string}\n * Report.\n */\n\nimport bufferLike from 'is-buffer'\nimport {VFileMessage} from 'vfile-message'\nimport {path} from './minpath.js'\nimport {proc} from './minproc.js'\nimport {urlToPath, isUrl} from './minurl.js'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n *\n * @type {Array<'basename' | 'dirname' | 'extname' | 'history' | 'path' | 'stem'>}\n */\nconst order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Buffer` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (typeof value === 'string' || buffer(value)) {\n options = {value}\n } else if (isUrl(value)) {\n options = {path: value}\n } else {\n options = value\n }\n\n /**\n * Place to store custom information (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n this.messages = []\n\n /**\n * List of filepaths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n this.history = []\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n this.cwd = proc.cwd()\n\n /* eslint-disable no-unused-expressions */\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const prop = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n prop in options &&\n options[prop] !== undefined &&\n options[prop] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n }\n }\n\n /** @type {string} */\n let prop\n\n // Set non-path related properties.\n for (prop in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(prop)) {\n // @ts-expect-error: fine to set other things.\n this[prop] = options[prop]\n }\n }\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {string | URL} path\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the parent path (example: `'~'`).\n */\n get dirname() {\n return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = path.join(dirname || '', this.basename)\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n */\n get basename() {\n return typeof this.path === 'string' ? path.basename(this.path) : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = path.join(this.dirname || '', basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n */\n get extname() {\n return typeof this.path === 'string' ? path.extname(this.path) : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.charCodeAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = path.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n */\n get stem() {\n return typeof this.path === 'string'\n ? path.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n /**\n * Serialize the file.\n *\n * @param {BufferEncoding | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Buffer`\n * (default: `'utf8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n return (this.value || '').toString(encoding || undefined)\n }\n\n /**\n * Create a warning message associated with the file.\n *\n * Its `fatal` is set to `false` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(reason, place, origin) {\n const message = new VFileMessage(reason, place, origin)\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Create an info message associated with the file.\n *\n * Its `fatal` is set to `null` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(reason, place, origin) {\n const message = this.message(reason, place, origin)\n\n message.fatal = null\n\n return message\n }\n\n /**\n * Create a fatal error associated with the file.\n *\n * Its `fatal` is set to `true` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * > 👉 **Note**: a fatal error means that a file is no longer processable.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Message.\n * @throws {VFileMessage}\n * Message.\n */\n fail(reason, place, origin) {\n const message = this.message(reason, place, origin)\n\n message.fatal = true\n\n throw message\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {void}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(path.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is a buffer.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Buffer}\n * Whether `value` is a Node.js buffer.\n */\nfunction buffer(value) {\n return bufferLike(value)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('vfile').VFileCompatible} VFileCompatible\n * @typedef {import('vfile').VFileValue} VFileValue\n * @typedef {import('..').Processor} Processor\n * @typedef {import('..').Plugin} Plugin\n * @typedef {import('..').Preset} Preset\n * @typedef {import('..').Pluggable} Pluggable\n * @typedef {import('..').PluggableList} PluggableList\n * @typedef {import('..').Transformer} Transformer\n * @typedef {import('..').Parser} Parser\n * @typedef {import('..').Compiler} Compiler\n * @typedef {import('..').RunCallback} RunCallback\n * @typedef {import('..').ProcessCallback} ProcessCallback\n *\n * @typedef Context\n * @property {Node} tree\n * @property {VFile} file\n */\n\nimport {bail} from 'bail'\nimport isBuffer from 'is-buffer'\nimport extend from 'extend'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\n\n// Expose a frozen processor.\nexport const unified = base().freeze()\n\nconst own = {}.hasOwnProperty\n\n// Function to create the first processor.\n/**\n * @returns {Processor}\n */\nfunction base() {\n const transformers = trough()\n /** @type {Processor['attachers']} */\n const attachers = []\n /** @type {Record} */\n let namespace = {}\n /** @type {boolean|undefined} */\n let frozen\n let freezeIndex = -1\n\n // Data management.\n // @ts-expect-error: overloads are handled.\n processor.data = data\n processor.Parser = undefined\n processor.Compiler = undefined\n\n // Lock.\n processor.freeze = freeze\n\n // Plugins.\n processor.attachers = attachers\n // @ts-expect-error: overloads are handled.\n processor.use = use\n\n // API.\n processor.parse = parse\n processor.stringify = stringify\n // @ts-expect-error: overloads are handled.\n processor.run = run\n processor.runSync = runSync\n // @ts-expect-error: overloads are handled.\n processor.process = process\n processor.processSync = processSync\n\n // Expose.\n return processor\n\n // Create a new processor based on the processor in the current scope.\n /** @type {Processor} */\n function processor() {\n const destination = base()\n let index = -1\n\n while (++index < attachers.length) {\n destination.use(...attachers[index])\n }\n\n destination.data(extend(true, {}, namespace))\n\n return destination\n }\n\n /**\n * @param {string|Record} [key]\n * @param {unknown} [value]\n * @returns {unknown}\n */\n function data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', frozen)\n namespace[key] = value\n return processor\n }\n\n // Get `key`.\n return (own.call(namespace, key) && namespace[key]) || null\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', frozen)\n namespace = key\n return processor\n }\n\n // Get space.\n return namespace\n }\n\n /** @type {Processor['freeze']} */\n function freeze() {\n if (frozen) {\n return processor\n }\n\n while (++freezeIndex < attachers.length) {\n const [attacher, ...options] = attachers[freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n /** @type {Transformer|void} */\n const transformer = attacher.call(processor, ...options)\n\n if (typeof transformer === 'function') {\n transformers.use(transformer)\n }\n }\n\n frozen = true\n freezeIndex = Number.POSITIVE_INFINITY\n\n return processor\n }\n\n /**\n * @param {Pluggable|null|undefined} [value]\n * @param {...unknown} options\n * @returns {Processor}\n */\n function use(value, ...options) {\n /** @type {Record|undefined} */\n let settings\n\n assertUnfrozen('use', frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, ...options)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n if (settings) {\n namespace.settings = Object.assign(namespace.settings || {}, settings)\n }\n\n return processor\n\n /**\n * @param {import('..').Pluggable} value\n * @returns {void}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...options] = value\n addPlugin(plugin, ...options)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {void}\n */\n function addPreset(result) {\n addList(result.plugins)\n\n if (result.settings) {\n settings = Object.assign(settings || {}, result.settings)\n }\n }\n\n /**\n * @param {PluggableList|null|undefined} [plugins]\n * @returns {void}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {...unknown} [value]\n * @returns {void}\n */\n function addPlugin(plugin, value) {\n let index = -1\n /** @type {Processor['attachers'][number]|undefined} */\n let entry\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entry = attachers[index]\n break\n }\n }\n\n if (entry) {\n if (isPlainObj(entry[1]) && isPlainObj(value)) {\n value = extend(true, entry[1], value)\n }\n\n entry[1] = value\n } else {\n // @ts-expect-error: fine.\n attachers.push([...arguments])\n }\n }\n }\n\n /** @type {Processor['parse']} */\n function parse(doc) {\n processor.freeze()\n const file = vfile(doc)\n const Parser = processor.Parser\n assertParser('parse', Parser)\n\n if (newable(Parser, 'parse')) {\n // @ts-expect-error: `newable` checks this.\n return new Parser(String(file), file).parse()\n }\n\n // @ts-expect-error: `newable` checks this.\n return Parser(String(file), file) // eslint-disable-line new-cap\n }\n\n /** @type {Processor['stringify']} */\n function stringify(node, doc) {\n processor.freeze()\n const file = vfile(doc)\n const Compiler = processor.Compiler\n assertCompiler('stringify', Compiler)\n assertNode(node)\n\n if (newable(Compiler, 'compile')) {\n // @ts-expect-error: `newable` checks this.\n return new Compiler(node, file).compile()\n }\n\n // @ts-expect-error: `newable` checks this.\n return Compiler(node, file) // eslint-disable-line new-cap\n }\n\n /**\n * @param {Node} node\n * @param {VFileCompatible|RunCallback} [doc]\n * @param {RunCallback} [callback]\n * @returns {Promise|void}\n */\n function run(node, doc, callback) {\n assertNode(node)\n processor.freeze()\n\n if (!callback && typeof doc === 'function') {\n callback = doc\n doc = undefined\n }\n\n if (!callback) {\n return new Promise(executor)\n }\n\n executor(null, callback)\n\n /**\n * @param {null|((node: Node) => void)} resolve\n * @param {(error: Error) => void} reject\n * @returns {void}\n */\n function executor(resolve, reject) {\n // @ts-expect-error: `doc` can’t be a callback anymore, we checked.\n transformers.run(node, vfile(doc), done)\n\n /**\n * @param {Error|null} error\n * @param {Node} tree\n * @param {VFile} file\n * @returns {void}\n */\n function done(error, tree, file) {\n tree = tree || node\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(tree)\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, tree, file)\n }\n }\n }\n }\n\n /** @type {Processor['runSync']} */\n function runSync(node, file) {\n /** @type {Node|undefined} */\n let result\n /** @type {boolean|undefined} */\n let complete\n\n processor.run(node, file, done)\n\n assertDone('runSync', 'run', complete)\n\n // @ts-expect-error: we either bailed on an error or have a tree.\n return result\n\n /**\n * @param {Error|null} [error]\n * @param {Node} [tree]\n * @returns {void}\n */\n function done(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * @param {VFileCompatible} doc\n * @param {ProcessCallback} [callback]\n * @returns {Promise|undefined}\n */\n function process(doc, callback) {\n processor.freeze()\n assertParser('process', processor.Parser)\n assertCompiler('process', processor.Compiler)\n\n if (!callback) {\n return new Promise(executor)\n }\n\n executor(null, callback)\n\n /**\n * @param {null|((file: VFile) => void)} resolve\n * @param {(error?: Error|null|undefined) => void} reject\n * @returns {void}\n */\n function executor(resolve, reject) {\n const file = vfile(doc)\n\n processor.run(processor.parse(file), file, (error, tree, file) => {\n if (error || !tree || !file) {\n done(error)\n } else {\n /** @type {unknown} */\n const result = processor.stringify(tree, file)\n\n if (result === undefined || result === null) {\n // Empty.\n } else if (looksLikeAVFileValue(result)) {\n file.value = result\n } else {\n file.result = result\n }\n\n done(error, file)\n }\n })\n\n /**\n * @param {Error|null|undefined} [error]\n * @param {VFile|undefined} [file]\n * @returns {void}\n */\n function done(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, file)\n }\n }\n }\n }\n\n /** @type {Processor['processSync']} */\n function processSync(doc) {\n /** @type {boolean|undefined} */\n let complete\n\n processor.freeze()\n assertParser('processSync', processor.Parser)\n assertCompiler('processSync', processor.Compiler)\n\n const file = vfile(doc)\n\n processor.process(file, done)\n\n assertDone('processSync', 'process', complete)\n\n return file\n\n /**\n * @param {Error|null|undefined} [error]\n * @returns {void}\n */\n function done(error) {\n complete = true\n bail(error)\n }\n }\n}\n\n/**\n * Check if `value` is a constructor.\n *\n * @param {unknown} value\n * @param {string} name\n * @returns {boolean}\n */\nfunction newable(value, name) {\n return (\n typeof value === 'function' &&\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n value.prototype &&\n // A function with keys in its prototype is probably a constructor.\n // Classes’ prototype methods are not enumerable, so we check if some value\n // exists in the prototype.\n // type-coverage:ignore-next-line\n (keys(value.prototype) || name in value.prototype)\n )\n}\n\n/**\n * Check if `value` is an object with keys.\n *\n * @param {Record} value\n * @returns {boolean}\n */\nfunction keys(value) {\n /** @type {string} */\n let key\n\n for (key in value) {\n if (own.call(value, key)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {VFileCompatible} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is VFileValue}\n */\nfunction looksLikeAVFileValue(value) {\n return typeof value === 'string' || isBuffer(value)\n}\n","// libs/split-on-macro.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\n\n// libs/split-on-condition.ts\nfunction splitOnCondition(nodes, splitFunc = () => false, options) {\n if (!Array.isArray(nodes)) {\n throw new Error(`Can only split an Array, not ${nodes}`);\n }\n const { onlySplitOnFirstOccurrence = false } = options || {};\n const splitIndices = [];\n for (let i = 0; i < nodes.length; i++) {\n if (splitFunc(nodes[i])) {\n splitIndices.push(i);\n if (onlySplitOnFirstOccurrence) {\n break;\n }\n }\n }\n if (splitIndices.length === 0) {\n return { segments: [nodes], separators: [] };\n }\n let separators = splitIndices.map((i) => nodes[i]);\n let segments = splitIndices.map((splitEnd, i) => {\n const splitStart = i === 0 ? 0 : splitIndices[i - 1] + 1;\n return nodes.slice(splitStart, splitEnd);\n });\n segments.push(\n nodes.slice(splitIndices[splitIndices.length - 1] + 1, nodes.length)\n );\n return { segments, separators };\n}\n\n// libs/split-on-macro.ts\nfunction splitOnMacro(ast, macroName) {\n if (typeof macroName === \"string\") {\n macroName = [macroName];\n }\n if (!Array.isArray(macroName)) {\n throw new Error(\"Type coercion failed\");\n }\n const isSeparator = match.createMacroMatcher(macroName);\n const { segments, separators } = splitOnCondition(ast, isSeparator);\n return { segments, macros: separators };\n}\n\n// libs/unsplit-on-macro.ts\nfunction unsplitOnMacro({\n segments,\n macros\n}) {\n if (segments.length === 0) {\n console.warn(\"Trying to join zero segments\");\n return [];\n }\n if (segments.length !== macros.length + 1) {\n console.warn(\n \"Mismatch between lengths of macros and segments when trying to unsplit\"\n );\n }\n let ret = segments[0];\n for (let i = 0; i < macros.length; i++) {\n ret = ret.concat(macros[i]).concat(segments[i + 1]);\n }\n return ret;\n}\n\n// libs/array-join.ts\nfunction arrayJoin(array, sep) {\n return array.flatMap((item, i) => {\n if (i === 0) {\n return item;\n }\n if (Array.isArray(sep)) {\n return [...sep, ...item];\n } else {\n return [sep, ...item];\n }\n });\n}\nexport {\n arrayJoin,\n splitOnCondition,\n splitOnMacro,\n unsplitOnMacro\n};\n//# sourceMappingURL=index.js.map\n","// libs/replace-node.ts\nimport {\n visit\n} from \"@unified-latex/unified-latex-util-visit\";\nfunction replaceNode(ast, visitor) {\n visit(ast, {\n leave: (node, info) => {\n let replacement = visitor(node, info);\n if (typeof replacement === \"undefined\" || replacement === node) {\n return;\n }\n if (!info.containingArray || info.index == null) {\n throw new Error(\n \"Trying to replace node, but cannot find containing array\"\n );\n }\n if (replacement === null || Array.isArray(replacement) && replacement.length === 0) {\n info.containingArray.splice(info.index, 1);\n return info.index;\n }\n if (!Array.isArray(replacement)) {\n replacement = [replacement];\n }\n info.containingArray.splice(info.index, 1, ...replacement);\n return info.index + replacement.length;\n }\n });\n}\n\n// libs/unified-latex-streaming-command.ts\nimport { match as match5 } from \"@unified-latex/unified-latex-util-match\";\nimport { trimEnd as trimEnd3, trimStart as trimStart4 } from \"@unified-latex/unified-latex-util-trim\";\nimport { visit as visit2 } from \"@unified-latex/unified-latex-util-visit\";\n\n// libs/replace-streaming-command.ts\nimport { match as match4 } from \"@unified-latex/unified-latex-util-match\";\nimport {\n splitOnCondition,\n unsplitOnMacro\n} from \"@unified-latex/unified-latex-util-split\";\nimport {\n trim,\n trimEnd as trimEnd2,\n trimStart as trimStart3\n} from \"@unified-latex/unified-latex-util-trim\";\n\n// libs/utils/significant-node.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nfunction firstSignificantNode(nodes, parbreaksAreInsignificant) {\n const index = firstSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\nfunction lastSignificantNode(nodes, parbreaksAreInsignificant) {\n const index = lastSignificantNodeIndex(nodes, parbreaksAreInsignificant);\n if (index == null) {\n return null;\n }\n return nodes[index];\n}\nfunction lastSignificantNodeIndex(nodes, parbreaksAreInsignificant) {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (match.whitespace(node) || match.comment(node) || parbreaksAreInsignificant && match.parbreak(node)) {\n continue;\n }\n return i;\n }\n return void 0;\n}\nfunction firstSignificantNodeIndex(nodes, parbreaksAreInsignificant) {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (match.whitespace(node) || match.comment(node) || parbreaksAreInsignificant && match.parbreak(node)) {\n continue;\n }\n return i;\n }\n return void 0;\n}\n\n// libs/utils/replace-streaming-command-in-array.ts\nimport { trimEnd, trimStart as trimStart2 } from \"@unified-latex/unified-latex-util-trim\";\n\n// libs/utils/join-without-excess-whitespace.ts\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { trimStart } from \"@unified-latex/unified-latex-util-trim\";\nfunction isSpaceLike(node) {\n return match2.whitespace(node) || match2.comment(node) && Boolean(node.leadingWhitespace);\n}\nfunction joinWithoutExcessWhitespace(head, tail) {\n if (tail.length === 0) {\n return;\n }\n if (head.length === 0) {\n head.push(...tail);\n return;\n }\n const headEnd = head[head.length - 1];\n const tailStart = tail[0];\n if (match2.whitespace(headEnd) && match2.whitespace(tailStart)) {\n head.push(...tail.slice(1));\n return;\n }\n if (!isSpaceLike(headEnd) || !isSpaceLike(tailStart)) {\n if (match2.whitespace(headEnd) && match2.comment(tailStart)) {\n const comment2 = {\n type: \"comment\",\n content: tailStart.content,\n sameline: true,\n leadingWhitespace: true\n };\n tail = tail.slice(1);\n trimStart(tail);\n head.pop();\n head.push(comment2, ...tail);\n return;\n }\n head.push(...tail);\n return;\n }\n if (match2.comment(headEnd) && match2.comment(tailStart)) {\n if (tailStart.leadingWhitespace || tailStart.sameline) {\n head.push(\n { type: \"comment\", content: tailStart.content },\n ...tail.slice(1)\n );\n return;\n }\n head.push(...tail);\n return;\n }\n let comment = match2.comment(headEnd) ? headEnd : tailStart;\n if (!match2.comment(comment)) {\n throw new Error(\n `Expected a comment but found ${JSON.stringify(comment)}`\n );\n }\n if (!comment.leadingWhitespace || !comment.sameline) {\n comment = {\n type: \"comment\",\n content: comment.content,\n leadingWhitespace: true,\n sameline: true\n };\n }\n head.pop();\n head.push(comment, ...tail.slice(1));\n}\n\n// libs/utils/wrap-significant-content.ts\nimport { match as match3 } from \"@unified-latex/unified-latex-util-match\";\nfunction wrapSignificantContent(content, wrapper) {\n let hoistUntil = 0;\n let hoistAfter = content.length;\n for (let i = 0; i < content.length; i++) {\n if (match3.whitespace(content[i]) || match3.comment(content[i])) {\n hoistUntil = i + 1;\n continue;\n }\n break;\n }\n for (let j = content.length - 1; j >= 0; j--) {\n if (match3.whitespace(content[j]) || match3.comment(content[j])) {\n hoistAfter = j;\n continue;\n }\n break;\n }\n if (hoistUntil === 0 && hoistAfter === content.length) {\n return ensureArray(wrapper(content));\n }\n const frontMatter = content.slice(0, hoistUntil);\n const middle = content.slice(hoistUntil, hoistAfter);\n const backMatter = content.slice(hoistAfter, content.length);\n return frontMatter.concat(wrapper(middle), backMatter);\n}\nfunction ensureArray(x) {\n if (!Array.isArray(x)) {\n return [x];\n }\n return x;\n}\n\n// libs/utils/replace-streaming-command-in-array.ts\nfunction replaceStreamingCommandInArray(nodes, isStreamingCommand, replacer) {\n while (nodes.length > 0 && isStreamingCommand(nodes[nodes.length - 1])) {\n nodes.pop();\n trimEnd(nodes);\n }\n const foundStreamingCommands = [];\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n if (isStreamingCommand(node)) {\n const wrapper = (content) => replacer(content, node);\n let tail = nodes.slice(i + 1);\n trimStart2(tail);\n tail = wrapSignificantContent(tail, wrapper);\n foundStreamingCommands.push(node);\n nodes.splice(i);\n joinWithoutExcessWhitespace(nodes, tail);\n }\n }\n return { foundStreamingCommands };\n}\n\n// libs/replace-streaming-command.ts\nfunction replaceStreamingCommandInGroup(group, isStreamingCommand, replacer, options) {\n const content = group.content;\n let popFromGroup = isStreamingCommand(firstSignificantNode(content));\n let innerProcessed = replaceStreamingCommand(\n content,\n isStreamingCommand,\n replacer,\n options\n );\n if (innerProcessed.length === 0) {\n return [];\n }\n if (popFromGroup) {\n return innerProcessed;\n } else {\n return [{ type: \"group\", content: innerProcessed }];\n }\n}\nfunction replaceStreamingCommand(ast, isStreamingCommand, replacer, options) {\n if (typeof isStreamingCommand !== \"function\") {\n throw new Error(\n `'isStreamingCommand' must be a function, not '${typeof isStreamingCommand}'`\n );\n }\n const {\n macrosThatBreakPars = [\n \"part\",\n \"chapter\",\n \"section\",\n \"subsection\",\n \"subsubsection\",\n \"vspace\",\n \"smallskip\",\n \"medskip\",\n \"bigskip\",\n \"hfill\"\n ],\n environmentsThatDontBreakPars = []\n } = options || {};\n let processedContent = [];\n if (match4.group(ast)) {\n processedContent = replaceStreamingCommandInGroup(\n ast,\n isStreamingCommand,\n replacer\n );\n }\n if (Array.isArray(ast)) {\n const nodes = ast;\n let scanIndex = nodes.length;\n let sliceIndex = scanIndex;\n while (scanIndex > 0 && (isStreamingCommand(nodes[scanIndex - 1]) || match4.whitespace(nodes[scanIndex - 1]))) {\n scanIndex--;\n if (isStreamingCommand(nodes[scanIndex])) {\n sliceIndex = scanIndex;\n }\n }\n if (sliceIndex !== nodes.length) {\n nodes.splice(sliceIndex);\n }\n const macroThatBreaks = match4.createMacroMatcher(macrosThatBreakPars);\n const envThatDoesntBreak = match4.createEnvironmentMatcher(\n environmentsThatDontBreakPars\n );\n const isPar = (node) => match4.parbreak(node) || match4.macro(node, \"par\") || macroThatBreaks(node) || match4.environment(node) && !envThatDoesntBreak(node) || node.type === \"displaymath\";\n const splitByPar = splitOnCondition(nodes, isPar);\n splitByPar.separators = splitByPar.separators.map(\n (sep) => match4.macro(sep, \"par\") ? { type: \"parbreak\" } : sep\n );\n const replacers = [];\n let segments = splitByPar.segments.map((segment) => {\n if (segment.length === 0) {\n return segment;\n }\n function applyAccumulatedReplacers(nodes2) {\n if (replacers.length === 0) {\n return nodes2;\n }\n return wrapSignificantContent(\n nodes2,\n composeReplacers(replacers)\n );\n }\n const { foundStreamingCommands } = replaceStreamingCommandInArray(\n segment,\n isStreamingCommand,\n replacer\n );\n const ret = applyAccumulatedReplacers(segment);\n foundStreamingCommands.forEach((macro) => {\n replacers.push((nodes2) => {\n const ret2 = replacer(nodes2, macro);\n if (!Array.isArray(ret2)) {\n return [ret2];\n }\n return ret2;\n });\n });\n return ret;\n });\n if (segments.length > 1) {\n segments.forEach((segment, i) => {\n if (i === 0) {\n trimEnd2(segment);\n } else if (i === segments.length - 1) {\n trimStart3(segment);\n } else {\n trim(segment);\n }\n });\n }\n processedContent = unsplitOnMacro({\n segments,\n macros: splitByPar.separators\n });\n }\n return processedContent;\n}\nfunction composeReplacers(replacers) {\n if (replacers.length === 0) {\n throw new Error(\"Cannot compose zero replacement functions\");\n }\n return (nodes) => {\n let ret = nodes;\n for (let i = 0; i < replacers.length; i++) {\n const func = replacers[i];\n ret = func(ret);\n }\n return ret;\n };\n}\n\n// libs/replace-node-during-visit.ts\nfunction replaceNodeDuringVisit(replacement, info) {\n const parent = info.parents[0];\n if (!parent) {\n throw new Error(`Cannot replace node: parent not found`);\n }\n const container = parent[info.key];\n if (!Array.isArray(container)) {\n throw new Error(`Cannot replace node: containing array not found`);\n }\n if (info.index == null) {\n throw new Error(`Cannot replace node: node index undefined`);\n }\n if (!Array.isArray(replacement)) {\n container[info.index] = replacement;\n } else {\n container.splice(info.index, 1, ...replacement);\n }\n}\n\n// libs/unified-latex-streaming-command.ts\nvar unifiedLatexReplaceStreamingCommands = function unifiedLatexReplaceStreamingCommands2(options) {\n const { replacers = {} } = options || {};\n const isReplaceable = match5.createMacroMatcher(replacers);\n return (tree) => {\n visit2(\n tree,\n (group, info) => {\n if (info.context.hasMathModeAncestor || !group.content.some(isReplaceable)) {\n return;\n }\n let fixed = replaceStreamingCommand(\n group,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n if (!info.containingArray || info.index == null) {\n return;\n }\n const prevToken = info.containingArray[info.index - 1];\n const nextToken = info.containingArray[info.index + 1];\n if (match5.whitespaceLike(prevToken) && match5.whitespaceLike(fixed[0])) {\n trimStart4(fixed);\n }\n if (match5.whitespaceLike(nextToken) && match5.whitespaceLike(fixed[fixed.length - 1])) {\n trimEnd3(fixed);\n }\n replaceNodeDuringVisit(fixed, info);\n },\n { test: match5.group }\n );\n visit2(\n tree,\n (nodes, info) => {\n if (info.context.hasMathModeAncestor || !nodes.some(isReplaceable)) {\n return;\n }\n const replaced = replaceStreamingCommand(\n nodes,\n isReplaceable,\n (content, command) => {\n return replacers[command.content](content, command);\n }\n );\n if (replaced !== nodes) {\n nodes.length = 0;\n nodes.push(...replaced);\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n };\n};\nexport {\n firstSignificantNode,\n firstSignificantNodeIndex,\n lastSignificantNode,\n lastSignificantNodeIndex,\n replaceNode,\n replaceNodeDuringVisit,\n replaceStreamingCommand,\n replaceStreamingCommandInGroup,\n unifiedLatexReplaceStreamingCommands\n};\n//# sourceMappingURL=index.js.map\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","module.exports = function isArrayish(obj) {\n\tif (!obj || typeof obj === 'string') {\n\t\treturn false;\n\t}\n\n\treturn obj instanceof Array || Array.isArray(obj) ||\n\t\t(obj.length >= 0 && (obj.splice instanceof Function ||\n\t\t\t(Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String')));\n};\n","'use strict';\n\nvar isArrayish = require('is-arrayish');\n\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\n\nvar swizzle = module.exports = function swizzle(args) {\n\tvar results = [];\n\n\tfor (var i = 0, len = args.length; i < len; i++) {\n\t\tvar arg = args[i];\n\n\t\tif (isArrayish(arg)) {\n\t\t\t// http://jsperf.com/javascript-array-concat-vs-push/98\n\t\t\tresults = concat.call(results, slice.call(arg));\n\t\t} else {\n\t\t\tresults.push(arg);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nswizzle.wrap = function (fn) {\n\treturn function () {\n\t\treturn fn(swizzle(arguments));\n\t};\n};\n","/* MIT license */\nvar colorNames = require('color-name');\nvar swizzle = require('simple-swizzle');\nvar hasOwnProperty = Object.hasOwnProperty;\n\nvar reverseNames = Object.create(null);\n\n// create a list of reverse color names\nfor (var name in colorNames) {\n\tif (hasOwnProperty.call(colorNames, name)) {\n\t\treverseNames[colorNames[name]] = name;\n\t}\n}\n\nvar cs = module.exports = {\n\tto: {},\n\tget: {}\n};\n\ncs.get = function (string) {\n\tvar prefix = string.substring(0, 3).toLowerCase();\n\tvar val;\n\tvar model;\n\tswitch (prefix) {\n\t\tcase 'hsl':\n\t\t\tval = cs.get.hsl(string);\n\t\t\tmodel = 'hsl';\n\t\t\tbreak;\n\t\tcase 'hwb':\n\t\t\tval = cs.get.hwb(string);\n\t\t\tmodel = 'hwb';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tval = cs.get.rgb(string);\n\t\t\tmodel = 'rgb';\n\t\t\tbreak;\n\t}\n\n\tif (!val) {\n\t\treturn null;\n\t}\n\n\treturn {model: model, value: val};\n};\n\ncs.get.rgb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar abbr = /^#([a-f0-9]{3,4})$/i;\n\tvar hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i;\n\tvar rgba = /^rgba?\\(\\s*([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)(?=[\\s,])\\s*(?:,\\s*)?([+-]?\\d+)\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*,?\\s*([+-]?[\\d\\.]+)\\%\\s*(?:[,|\\/]\\s*([+-]?[\\d\\.]+)(%?)\\s*)?\\)$/;\n\tvar keyword = /^(\\w+)$/;\n\n\tvar rgb = [0, 0, 0, 1];\n\tvar match;\n\tvar i;\n\tvar hexAlpha;\n\n\tif (match = string.match(hex)) {\n\t\thexAlpha = match[2];\n\t\tmatch = match[1];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\t// https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19\n\t\t\tvar i2 = i * 2;\n\t\t\trgb[i] = parseInt(match.slice(i2, i2 + 2), 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(abbr)) {\n\t\tmatch = match[1];\n\t\thexAlpha = match[3];\n\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i] + match[i], 16);\n\t\t}\n\n\t\tif (hexAlpha) {\n\t\t\trgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255;\n\t\t}\n\t} else if (match = string.match(rgba)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = parseInt(match[i + 1], 0);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(per)) {\n\t\tfor (i = 0; i < 3; i++) {\n\t\t\trgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n\t\t}\n\n\t\tif (match[4]) {\n\t\t\tif (match[5]) {\n\t\t\t\trgb[3] = parseFloat(match[4]) * 0.01;\n\t\t\t} else {\n\t\t\t\trgb[3] = parseFloat(match[4]);\n\t\t\t}\n\t\t}\n\t} else if (match = string.match(keyword)) {\n\t\tif (match[1] === 'transparent') {\n\t\t\treturn [0, 0, 0, 0];\n\t\t}\n\n\t\tif (!hasOwnProperty.call(colorNames, match[1])) {\n\t\t\treturn null;\n\t\t}\n\n\t\trgb = colorNames[match[1]];\n\t\trgb[3] = 1;\n\n\t\treturn rgb;\n\t} else {\n\t\treturn null;\n\t}\n\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] = clamp(rgb[i], 0, 255);\n\t}\n\trgb[3] = clamp(rgb[3], 0, 1);\n\n\treturn rgb;\n};\n\ncs.get.hsl = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hsl = /^hsla?\\(\\s*([+-]?(?:\\d{0,3}\\.)?\\d+)(?:deg)?\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*,?\\s*([+-]?[\\d\\.]+)%\\s*(?:[,|\\/]\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hsl);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar s = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar l = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\n\t\treturn [h, s, l, a];\n\t}\n\n\treturn null;\n};\n\ncs.get.hwb = function (string) {\n\tif (!string) {\n\t\treturn null;\n\t}\n\n\tvar hwb = /^hwb\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?(?=\\.\\d|\\d)(?:0|[1-9]\\d*)?(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)\\s*)?\\)$/;\n\tvar match = string.match(hwb);\n\n\tif (match) {\n\t\tvar alpha = parseFloat(match[4]);\n\t\tvar h = ((parseFloat(match[1]) % 360) + 360) % 360;\n\t\tvar w = clamp(parseFloat(match[2]), 0, 100);\n\t\tvar b = clamp(parseFloat(match[3]), 0, 100);\n\t\tvar a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1);\n\t\treturn [h, w, b, a];\n\t}\n\n\treturn null;\n};\n\ncs.to.hex = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn (\n\t\t'#' +\n\t\thexDouble(rgba[0]) +\n\t\thexDouble(rgba[1]) +\n\t\thexDouble(rgba[2]) +\n\t\t(rgba[3] < 1\n\t\t\t? (hexDouble(Math.round(rgba[3] * 255)))\n\t\t\t: '')\n\t);\n};\n\ncs.to.rgb = function () {\n\tvar rgba = swizzle(arguments);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')'\n\t\t: 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')';\n};\n\ncs.to.rgb.percent = function () {\n\tvar rgba = swizzle(arguments);\n\n\tvar r = Math.round(rgba[0] / 255 * 100);\n\tvar g = Math.round(rgba[1] / 255 * 100);\n\tvar b = Math.round(rgba[2] / 255 * 100);\n\n\treturn rgba.length < 4 || rgba[3] === 1\n\t\t? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)'\n\t\t: 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')';\n};\n\ncs.to.hsl = function () {\n\tvar hsla = swizzle(arguments);\n\treturn hsla.length < 4 || hsla[3] === 1\n\t\t? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)'\n\t\t: 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')';\n};\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\ncs.to.hwb = function () {\n\tvar hwba = swizzle(arguments);\n\n\tvar a = '';\n\tif (hwba.length >= 4 && hwba[3] !== 1) {\n\t\ta = ', ' + hwba[3];\n\t}\n\n\treturn 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')';\n};\n\ncs.to.keyword = function (rgb) {\n\treturn reverseNames[rgb.slice(0, 3)];\n};\n\n// helpers\nfunction clamp(num, min, max) {\n\treturn Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n\tvar str = Math.round(num).toString(16).toUpperCase();\n\treturn (str.length < 2) ? '0' + str : str;\n}\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","const colorString = require('color-string');\nconst convert = require('color-convert');\n\nconst skippedModels = [\n\t// To be honest, I don't really feel like keyword belongs in color convert, but eh.\n\t'keyword',\n\n\t// Gray conflicts with some method names, and has its own method defined.\n\t'gray',\n\n\t// Shouldn't really be in color-convert either...\n\t'hex',\n];\n\nconst hashedModelKeys = {};\nfor (const model of Object.keys(convert)) {\n\thashedModelKeys[[...convert[model].labels].sort().join('')] = model;\n}\n\nconst limiters = {};\n\nfunction Color(object, model) {\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(object, model);\n\t}\n\n\tif (model && model in skippedModels) {\n\t\tmodel = null;\n\t}\n\n\tif (model && !(model in convert)) {\n\t\tthrow new Error('Unknown model: ' + model);\n\t}\n\n\tlet i;\n\tlet channels;\n\n\tif (object == null) { // eslint-disable-line no-eq-null,eqeqeq\n\t\tthis.model = 'rgb';\n\t\tthis.color = [0, 0, 0];\n\t\tthis.valpha = 1;\n\t} else if (object instanceof Color) {\n\t\tthis.model = object.model;\n\t\tthis.color = [...object.color];\n\t\tthis.valpha = object.valpha;\n\t} else if (typeof object === 'string') {\n\t\tconst result = colorString.get(object);\n\t\tif (result === null) {\n\t\t\tthrow new Error('Unable to parse color from string: ' + object);\n\t\t}\n\n\t\tthis.model = result.model;\n\t\tchannels = convert[this.model].channels;\n\t\tthis.color = result.value.slice(0, channels);\n\t\tthis.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1;\n\t} else if (object.length > 0) {\n\t\tthis.model = model || 'rgb';\n\t\tchannels = convert[this.model].channels;\n\t\tconst newArray = Array.prototype.slice.call(object, 0, channels);\n\t\tthis.color = zeroArray(newArray, channels);\n\t\tthis.valpha = typeof object[channels] === 'number' ? object[channels] : 1;\n\t} else if (typeof object === 'number') {\n\t\t// This is always RGB - can be converted later on.\n\t\tthis.model = 'rgb';\n\t\tthis.color = [\n\t\t\t(object >> 16) & 0xFF,\n\t\t\t(object >> 8) & 0xFF,\n\t\t\tobject & 0xFF,\n\t\t];\n\t\tthis.valpha = 1;\n\t} else {\n\t\tthis.valpha = 1;\n\n\t\tconst keys = Object.keys(object);\n\t\tif ('alpha' in object) {\n\t\t\tkeys.splice(keys.indexOf('alpha'), 1);\n\t\t\tthis.valpha = typeof object.alpha === 'number' ? object.alpha : 0;\n\t\t}\n\n\t\tconst hashedKeys = keys.sort().join('');\n\t\tif (!(hashedKeys in hashedModelKeys)) {\n\t\t\tthrow new Error('Unable to parse color from object: ' + JSON.stringify(object));\n\t\t}\n\n\t\tthis.model = hashedModelKeys[hashedKeys];\n\n\t\tconst {labels} = convert[this.model];\n\t\tconst color = [];\n\t\tfor (i = 0; i < labels.length; i++) {\n\t\t\tcolor.push(object[labels[i]]);\n\t\t}\n\n\t\tthis.color = zeroArray(color);\n\t}\n\n\t// Perform limitations (clamping, etc.)\n\tif (limiters[this.model]) {\n\t\tchannels = convert[this.model].channels;\n\t\tfor (i = 0; i < channels; i++) {\n\t\t\tconst limit = limiters[this.model][i];\n\t\t\tif (limit) {\n\t\t\t\tthis.color[i] = limit(this.color[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.valpha = Math.max(0, Math.min(1, this.valpha));\n\n\tif (Object.freeze) {\n\t\tObject.freeze(this);\n\t}\n}\n\nColor.prototype = {\n\ttoString() {\n\t\treturn this.string();\n\t},\n\n\ttoJSON() {\n\t\treturn this[this.model]();\n\t},\n\n\tstring(places) {\n\t\tlet self = this.model in colorString.to ? this : this.rgb();\n\t\tself = self.round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to[self.model](args);\n\t},\n\n\tpercentString(places) {\n\t\tconst self = this.rgb().round(typeof places === 'number' ? places : 1);\n\t\tconst args = self.valpha === 1 ? self.color : [...self.color, this.valpha];\n\t\treturn colorString.to.rgb.percent(args);\n\t},\n\n\tarray() {\n\t\treturn this.valpha === 1 ? [...this.color] : [...this.color, this.valpha];\n\t},\n\n\tobject() {\n\t\tconst result = {};\n\t\tconst {channels} = convert[this.model];\n\t\tconst {labels} = convert[this.model];\n\n\t\tfor (let i = 0; i < channels; i++) {\n\t\t\tresult[labels[i]] = this.color[i];\n\t\t}\n\n\t\tif (this.valpha !== 1) {\n\t\t\tresult.alpha = this.valpha;\n\t\t}\n\n\t\treturn result;\n\t},\n\n\tunitArray() {\n\t\tconst rgb = this.rgb().color;\n\t\trgb[0] /= 255;\n\t\trgb[1] /= 255;\n\t\trgb[2] /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.push(this.valpha);\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tunitObject() {\n\t\tconst rgb = this.rgb().object();\n\t\trgb.r /= 255;\n\t\trgb.g /= 255;\n\t\trgb.b /= 255;\n\n\t\tif (this.valpha !== 1) {\n\t\t\trgb.alpha = this.valpha;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tround(places) {\n\t\tplaces = Math.max(places || 0, 0);\n\t\treturn new Color([...this.color.map(roundToPlace(places)), this.valpha], this.model);\n\t},\n\n\talpha(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color([...this.color, Math.max(0, Math.min(1, value))], this.model);\n\t\t}\n\n\t\treturn this.valpha;\n\t},\n\n\t// Rgb\n\tred: getset('rgb', 0, maxfn(255)),\n\tgreen: getset('rgb', 1, maxfn(255)),\n\tblue: getset('rgb', 2, maxfn(255)),\n\n\thue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, value => ((value % 360) + 360) % 360),\n\n\tsaturationl: getset('hsl', 1, maxfn(100)),\n\tlightness: getset('hsl', 2, maxfn(100)),\n\n\tsaturationv: getset('hsv', 1, maxfn(100)),\n\tvalue: getset('hsv', 2, maxfn(100)),\n\n\tchroma: getset('hcg', 1, maxfn(100)),\n\tgray: getset('hcg', 2, maxfn(100)),\n\n\twhite: getset('hwb', 1, maxfn(100)),\n\twblack: getset('hwb', 2, maxfn(100)),\n\n\tcyan: getset('cmyk', 0, maxfn(100)),\n\tmagenta: getset('cmyk', 1, maxfn(100)),\n\tyellow: getset('cmyk', 2, maxfn(100)),\n\tblack: getset('cmyk', 3, maxfn(100)),\n\n\tx: getset('xyz', 0, maxfn(95.047)),\n\ty: getset('xyz', 1, maxfn(100)),\n\tz: getset('xyz', 2, maxfn(108.833)),\n\n\tl: getset('lab', 0, maxfn(100)),\n\ta: getset('lab', 1),\n\tb: getset('lab', 2),\n\n\tkeyword(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn convert[this.model].keyword(this.color);\n\t},\n\n\thex(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\treturn colorString.to.hex(this.rgb().round().color);\n\t},\n\n\thexa(value) {\n\t\tif (value !== undefined) {\n\t\t\treturn new Color(value);\n\t\t}\n\n\t\tconst rgbArray = this.rgb().round().color;\n\n\t\tlet alphaHex = Math.round(this.valpha * 255).toString(16).toUpperCase();\n\t\tif (alphaHex.length === 1) {\n\t\t\talphaHex = '0' + alphaHex;\n\t\t}\n\n\t\treturn colorString.to.hex(rgbArray) + alphaHex;\n\t},\n\n\trgbNumber() {\n\t\tconst rgb = this.rgb().color;\n\t\treturn ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF);\n\t},\n\n\tluminosity() {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tconst rgb = this.rgb().color;\n\n\t\tconst lum = [];\n\t\tfor (const [i, element] of rgb.entries()) {\n\t\t\tconst chan = element / 255;\n\t\t\tlum[i] = (chan <= 0.04045) ? chan / 12.92 : ((chan + 0.055) / 1.055) ** 2.4;\n\t\t}\n\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast(color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tconst lum1 = this.luminosity();\n\t\tconst lum2 = color2.luminosity();\n\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel(color2) {\n\t\t// https://www.w3.org/TR/WCAG/#contrast-enhanced\n\t\tconst contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tisDark() {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tconst rgb = this.rgb().color;\n\t\tconst yiq = (rgb[0] * 2126 + rgb[1] * 7152 + rgb[2] * 722) / 10000;\n\t\treturn yiq < 128;\n\t},\n\n\tisLight() {\n\t\treturn !this.isDark();\n\t},\n\n\tnegate() {\n\t\tconst rgb = this.rgb();\n\t\tfor (let i = 0; i < 3; i++) {\n\t\t\trgb.color[i] = 255 - rgb.color[i];\n\t\t}\n\n\t\treturn rgb;\n\t},\n\n\tlighten(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] += hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdarken(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[2] -= hsl.color[2] * ratio;\n\t\treturn hsl;\n\t},\n\n\tsaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] += hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\tdesaturate(ratio) {\n\t\tconst hsl = this.hsl();\n\t\thsl.color[1] -= hsl.color[1] * ratio;\n\t\treturn hsl;\n\t},\n\n\twhiten(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[1] += hwb.color[1] * ratio;\n\t\treturn hwb;\n\t},\n\n\tblacken(ratio) {\n\t\tconst hwb = this.hwb();\n\t\thwb.color[2] += hwb.color[2] * ratio;\n\t\treturn hwb;\n\t},\n\n\tgrayscale() {\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tconst rgb = this.rgb().color;\n\t\tconst value = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\treturn Color.rgb(value, value, value);\n\t},\n\n\tfade(ratio) {\n\t\treturn this.alpha(this.valpha - (this.valpha * ratio));\n\t},\n\n\topaquer(ratio) {\n\t\treturn this.alpha(this.valpha + (this.valpha * ratio));\n\t},\n\n\trotate(degrees) {\n\t\tconst hsl = this.hsl();\n\t\tlet hue = hsl.color[0];\n\t\thue = (hue + degrees) % 360;\n\t\thue = hue < 0 ? 360 + hue : hue;\n\t\thsl.color[0] = hue;\n\t\treturn hsl;\n\t},\n\n\tmix(mixinColor, weight) {\n\t\t// Ported from sass implementation in C\n\t\t// https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t\tif (!mixinColor || !mixinColor.rgb) {\n\t\t\tthrow new Error('Argument to \"mix\" was not a Color instance, but rather an instance of ' + typeof mixinColor);\n\t\t}\n\n\t\tconst color1 = mixinColor.rgb();\n\t\tconst color2 = this.rgb();\n\t\tconst p = weight === undefined ? 0.5 : weight;\n\n\t\tconst w = 2 * p - 1;\n\t\tconst a = color1.alpha() - color2.alpha();\n\n\t\tconst w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2;\n\t\tconst w2 = 1 - w1;\n\n\t\treturn Color.rgb(\n\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\tw1 * color1.blue() + w2 * color2.blue(),\n\t\t\tcolor1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n};\n\n// Model conversion methods and static constructors\nfor (const model of Object.keys(convert)) {\n\tif (skippedModels.includes(model)) {\n\t\tcontinue;\n\t}\n\n\tconst {channels} = convert[model];\n\n\t// Conversion methods\n\tColor.prototype[model] = function (...args) {\n\t\tif (this.model === model) {\n\t\t\treturn new Color(this);\n\t\t}\n\n\t\tif (args.length > 0) {\n\t\t\treturn new Color(args, model);\n\t\t}\n\n\t\treturn new Color([...assertArray(convert[this.model][model].raw(this.color)), this.valpha], model);\n\t};\n\n\t// 'static' construction methods\n\tColor[model] = function (...args) {\n\t\tlet color = args[0];\n\t\tif (typeof color === 'number') {\n\t\t\tcolor = zeroArray(args, channels);\n\t\t}\n\n\t\treturn new Color(color, model);\n\t};\n}\n\nfunction roundTo(number, places) {\n\treturn Number(number.toFixed(places));\n}\n\nfunction roundToPlace(places) {\n\treturn function (number) {\n\t\treturn roundTo(number, places);\n\t};\n}\n\nfunction getset(model, channel, modifier) {\n\tmodel = Array.isArray(model) ? model : [model];\n\n\tfor (const m of model) {\n\t\t(limiters[m] || (limiters[m] = []))[channel] = modifier;\n\t}\n\n\tmodel = model[0];\n\n\treturn function (value) {\n\t\tlet result;\n\n\t\tif (value !== undefined) {\n\t\t\tif (modifier) {\n\t\t\t\tvalue = modifier(value);\n\t\t\t}\n\n\t\t\tresult = this[model]();\n\t\t\tresult.color[channel] = value;\n\t\t\treturn result;\n\t\t}\n\n\t\tresult = this[model]().color[channel];\n\t\tif (modifier) {\n\t\t\tresult = modifier(result);\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nfunction maxfn(max) {\n\treturn function (v) {\n\t\treturn Math.max(0, Math.min(max, v));\n\t};\n}\n\nfunction assertArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\nfunction zeroArray(array, length) {\n\tfor (let i = 0; i < length; i++) {\n\t\tif (typeof array[i] !== 'number') {\n\t\t\tarray[i] = 0;\n\t\t}\n\t}\n\n\treturn array;\n}\n\nmodule.exports = Color;\n","// package/cleveref/provides.ts\nvar macros = {\n cref: { signature: \"s m\" },\n Cref: { signature: \"s m\" },\n crefrange: { signature: \"s m m\" },\n Crefrange: { signature: \"s m m\" },\n cpageref: { signature: \"s m\" },\n Cpageref: { signature: \"s m\" },\n ref: { signature: \"m\" },\n pageref: { signature: \"m\" },\n namecref: { signature: \"m\" },\n nameCref: { signature: \"m\" },\n lcnamecref: { signature: \"m\" },\n namecrefs: { signature: \"m\" },\n nameCrefs: { signature: \"m\" },\n lcnamecrefs: { signature: \"m\" },\n labelcref: { signature: \"m\" },\n labelcpageref: { signature: \"m\" },\n crefalias: { signature: \"m m\" },\n crefname: { signature: \"m m m\" },\n // XXX there are many more obscure commands to add here\n // https://ctan.org/pkg/cleveref\n crefdefaultlabelformat: { signature: \"m\" },\n crefrangeconjunction: { signature: \"m\" }\n};\nvar environments = {};\n\n// utils/enumerate.ts\nimport { arg } from \"@unified-latex/unified-latex-builder\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { updateRenderInfo } from \"@unified-latex/unified-latex-util-render-info\";\nimport {\n lastSignificantNodeIndex\n} from \"@unified-latex/unified-latex-util-replace\";\nimport { splitOnMacro } from \"@unified-latex/unified-latex-util-split\";\nimport { trim, trimEnd } from \"@unified-latex/unified-latex-util-trim\";\nfunction cleanEnumerateBody(ast, itemName = \"item\") {\n let { segments, macros: macros17 } = splitOnMacro(ast, itemName);\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (i === 0) {\n trimEnd(segment);\n } else {\n trim(segment);\n }\n if (segment.length > 0 && i > 0) {\n segment.unshift({ type: \"whitespace\" });\n }\n }\n let insertParbreakBefore = /* @__PURE__ */ new WeakSet();\n let body = macros17.flatMap((node, i) => {\n var _a;\n const segment = segments[i + 1];\n const trailingComments = popTrailingComments(segment);\n node.args = node.args || [];\n node.args.push(arg(segment, { openMark: \"\", closeMark: \"\" }));\n updateRenderInfo(node, { inParMode: true });\n if (i > 0 || ((_a = segments[0]) == null ? void 0 : _a.length) > 0) {\n insertParbreakBefore.add(node);\n }\n return [node, ...trailingComments];\n });\n body = body.flatMap(\n (node) => insertParbreakBefore.has(node) ? [{ type: \"parbreak\" }, node] : node\n );\n body.unshift(...segments[0]);\n for (let i = 0; i < body.length - 1; i++) {\n const node = body[i];\n const nextNode = body[i + 1];\n if (!match.parbreak(nextNode)) {\n continue;\n }\n if (match.comment(node)) {\n node.suffixParbreak = true;\n }\n if (match.macro(node) && node.args && node.args[node.args.length - 1].closeMark === \"\") {\n const args = node.args[node.args.length - 1].content;\n const lastArg = args[args.length - 1];\n if (match.comment(lastArg)) {\n lastArg.suffixParbreak = true;\n }\n }\n }\n return body;\n}\nfunction popTrailingComments(nodes) {\n let lastNodeIndex = lastSignificantNodeIndex(nodes, true);\n if (lastNodeIndex === nodes.length - 1 || lastNodeIndex == null && nodes.length === 0) {\n return [];\n }\n if (lastNodeIndex == null) {\n lastNodeIndex = -1;\n }\n return nodes.splice(lastNodeIndex + 1);\n}\n\n// package/exam/provides.ts\nvar macros2 = {\n answerline: { signature: \"o\" },\n fillin: { signature: \"o o\" },\n fullwidth: { signature: \"m\" },\n fillwidthlines: { signature: \"m\" },\n fillwidthdottedlines: { signature: \"m\" },\n fillwidthgrid: { signature: \"m\" },\n makeemptybox: { signature: \"m\" },\n CorrectChoiceEmphasis: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n SolutionEmphasis: { signature: \"m\", renderInfo: { breakAround: true } },\n uplevel: { signature: \"m\", renderInfo: { breakAround: true } },\n checkboxchar: { signature: \"m\", renderInfo: { breakAround: true } },\n checkedchar: { signature: \"m\", renderInfo: { breakAround: true } },\n pointname: { signature: \"m\", renderInfo: { breakAround: true } },\n marginpointname: { signature: \"m\", renderInfo: { breakAround: true } },\n extrawidth: { signature: \"m\", renderInfo: { breakAround: true } },\n pointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n bonuspointformat: { signature: \"m\", renderInfo: { breakAround: true } },\n totalformat: { signature: \"m\", renderInfo: { breakAround: true } },\n qformat: { signature: \"m\", renderInfo: { breakAround: true } },\n titledquestion: { signature: \"m o\", renderInfo: { breakAround: true } },\n pointpoints: { signature: \"m m\", renderInfo: { breakAround: true } },\n bonuspointpoints: { signature: \"m m\", renderInfo: { breakAround: true } }\n};\nvar environments2 = {\n choices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\")\n },\n checkboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\")\n },\n oneparchoices: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\")\n },\n oneparcheckboxes: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"choice\")\n },\n parts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"part\")\n },\n subparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subpart\")\n },\n subsubparts: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"subsubpart\")\n },\n questions: {\n signature: \"o\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"question\")\n }\n};\n\n// package/geometry/provides.ts\nvar macros3 = {\n geometry: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n }\n};\nvar environments3 = {};\n\n// package/hyperref/provides.ts\nvar macros4 = {\n hypersetup: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n href: { signature: \"o m m\" },\n url: { signature: \"m\" },\n nolinkurl: { signature: \"m\" },\n hyperbaseurl: { signature: \"m\" },\n hyperimage: { signature: \"m m\" },\n hyperdef: { signature: \"m m m\" },\n hyperref: { signature: \"o m\" },\n hyperlink: { signature: \"m m\" },\n hypertarget: { signature: \"m m\" },\n autoref: { signature: \"s m\" },\n pageref: { signature: \"s m\" },\n autopageref: { signature: \"s m\" },\n pdfstringdef: { signature: \"m m\" },\n pdfbookmark: { signature: \"o m m\" },\n currentpdfbookmark: { signature: \"m m\" },\n subpdfbookmark: { signature: \"m m\" },\n belowpdfbookmark: { signature: \"m m\" },\n texorpdfstring: { signature: \"m m\" },\n thispdfpagelabel: { signature: \"m\" },\n hypercalcbp: { signature: \"m\" }\n};\nvar environments4 = {};\n\n// package/latex2e/provides.ts\nimport { trim as trim2 } from \"@unified-latex/unified-latex-util-trim\";\nvar macros5 = {\n // Special\n \"\\\\\": { signature: \"!s !o\" },\n _: { signature: \"m\", escapeToken: \"\" },\n \"^\": { signature: \"m\", escapeToken: \"\" },\n // \\newcommand arg signature from https://www.texdev.net/2020/08/19/the-good-the-bad-and-the-ugly-creating-document-commands\n // List can be found in latex2e.pdf \"An unofficial reference manual\"\n newcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"]\n }\n },\n renewcommand: {\n signature: \"s +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", \"name\", \"numArgs\", \"default\", \"body\"]\n }\n },\n providecommand: {\n signature: \"s +m o +o +m\",\n renderInfo: { breakAround: true }\n },\n // Counters\n newcounter: {\n signature: \"m o\",\n renderInfo: { breakAround: true }\n },\n usecounter: {\n signature: \"m\"\n },\n setcounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n addtocounter: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n stepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n refstepcounter: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n // Lengths\n newlength: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n addtolength: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n settodepth: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n settoheight: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n settowidth: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n // Spaces\n stretch: { signature: \"m\" },\n hspace: { signature: \"s m\" },\n vspace: { signature: \"s m\", renderInfo: { breakAround: true } },\n vfill: { renderInfo: { breakAround: true } },\n indent: { renderInfo: { breakAround: true } },\n phantom: { signature: \"m\" },\n vphantom: { signature: \"m\" },\n hphantom: { signature: \"m\" },\n noindent: { renderInfo: { breakAround: true } },\n smallskip: { renderInfo: { breakAround: true } },\n medskip: { renderInfo: { breakAround: true } },\n bigskip: { renderInfo: { breakAround: true } },\n smallbreak: { renderInfo: { breakAround: true } },\n medbreak: { renderInfo: { breakAround: true } },\n bigbreak: { renderInfo: { breakAround: true } },\n newline: { renderInfo: { breakAround: true } },\n linebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nolinebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n clearpage: { renderInfo: { breakAround: true } },\n cleardoublepage: { renderInfo: { breakAround: true } },\n newpage: { renderInfo: { breakAround: true } },\n enlargethispage: { signature: \"s\", renderInfo: { breakAround: true } },\n pagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n nopagebreak: { signature: \"o\", renderInfo: { breakAround: true } },\n // Boxes\n newsavebox: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n sbox: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n savebox: {\n signature: \"m o o m\",\n renderInfo: { breakAround: true }\n },\n mbox: { signature: \"m\" },\n makebox: { signature: \"d() o o m\", renderInfo: { breakAround: true } },\n fbox: { signature: \"m\" },\n framebox: { signature: \"o o m\", renderInfo: { breakAround: true } },\n frame: { signature: \"m\", renderInfo: { breakAround: true } },\n parbox: { signature: \"o o o m m\", renderInfo: { breakAround: true } },\n raisebox: { signature: \"m o o m\" },\n marginpar: { signature: \"o m\", renderInfo: { breakAround: true } },\n colorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n fcolorbox: { signature: \"o m m\", renderInfo: { breakAround: true } },\n rotatebox: { signature: \"o m m\" },\n scalebox: { signature: \"m o m\" },\n reflectbox: { signature: \"m\" },\n resizebox: { signature: \"s m m m\" },\n // Define environments\n newenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true }\n },\n renewenvironment: {\n signature: \"s m o o m m\",\n renderInfo: { breakAround: true }\n },\n newtheorem: {\n signature: \"s m o m o\",\n renderInfo: { breakAround: true }\n },\n newfont: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n // Counters\n alph: { signature: \"m\" },\n Alph: { signature: \"m\" },\n arabic: { signature: \"m\" },\n roman: { signature: \"m\" },\n Roman: { signature: \"m\" },\n fnsymbol: { signature: \"m\" },\n // Other\n documentclass: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n usepackage: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n item: {\n signature: \"o\",\n renderInfo: { hangingIndent: true, namedArguments: [\"label\"] }\n },\n value: { signature: \"m\" },\n centering: { renderInfo: { breakAround: true } },\n input: { signature: \"m\", renderInfo: { breakAround: true } },\n include: { signature: \"m\", renderInfo: { breakAround: true } },\n includeonly: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n discretionary: { signature: \"m m m\" },\n hyphenation: { signature: \"m m m\" },\n footnote: { signature: \"o m\", renderInfo: { inParMode: true } },\n footnotemark: { signature: \"o\" },\n footnotetext: { signature: \"o m\", renderInfo: { inParMode: true } },\n caption: {\n signature: \"o m\",\n renderInfo: { inParMode: true, breakAround: true }\n },\n // Math Commands\n sqrt: { signature: \"o m\", renderInfo: { inMathMode: true } },\n frac: { signature: \"m m\", renderInfo: { inMathMode: true } },\n stackrel: { signature: \"m m\" },\n ensuremath: { signature: \"m\", renderInfo: { inMathMode: true } },\n // Layout commands\n abstract: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true }\n },\n maketitle: { renderInfo: { breakAround: true } },\n doublespacing: { renderInfo: { breakAround: true } },\n singlespacing: { renderInfo: { breakAround: true } },\n author: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true }\n },\n date: { signature: \"o m\", renderInfo: { breakAround: true } },\n thanks: {\n signature: \"m\",\n renderInfo: { breakAround: true, inParMode: true }\n },\n // amsart document class adds an optional argument\n title: {\n signature: \"o m\",\n renderInfo: { breakAround: true, inParMode: true }\n },\n pagenumbering: { signature: \"m\", renderInfo: { breakAround: true } },\n pagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n thispagestyle: { signature: \"m\", renderInfo: { breakAround: true } },\n // Colors\n definecolor: { signature: \"m m m\", renderInfo: { breakAround: true } },\n pagecolor: { signature: \"o m\", renderInfo: { breakAround: true } },\n nopagecolor: { renderInfo: { breakAround: true } },\n multicolumn: { signature: \"m m m\" },\n // Graphics\n includegraphics: {\n signature: \"s o o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n rule: { signature: \"o m m\" },\n // Sectioning\n part: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"]\n }\n },\n chapter: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"]\n }\n },\n section: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"]\n }\n },\n subsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"]\n }\n },\n subsubsection: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"]\n }\n },\n paragraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"]\n }\n },\n subparagraph: {\n signature: \"s o m\",\n renderInfo: {\n breakAround: true,\n inParMode: true,\n namedArguments: [\"starred\", \"tocTitle\", \"title\"]\n }\n },\n appendix: { renderInfo: { breakAround: true, inParMode: true } },\n frontmatter: { renderInfo: { breakAround: true, inParMode: true } },\n mainmatter: { renderInfo: { breakAround: true, inParMode: true } },\n backmatter: { renderInfo: { breakAround: true, inParMode: true } },\n // Citing and references\n bibitem: { signature: \"o m\", renderInfo: { hangingIndent: true } },\n cite: { signature: \"o m\" },\n // Fonts\n textrm: { signature: \"m\", renderInfo: { inParMode: true } },\n textit: { signature: \"m\", renderInfo: { inParMode: true } },\n textmd: { signature: \"m\", renderInfo: { inParMode: true } },\n textbf: { signature: \"m\", renderInfo: { inParMode: true } },\n textup: { signature: \"m\", renderInfo: { inParMode: true } },\n textsl: { signature: \"m\", renderInfo: { inParMode: true } },\n textsf: { signature: \"m\", renderInfo: { inParMode: true } },\n textsc: { signature: \"m\", renderInfo: { inParMode: true } },\n texttt: { signature: \"m\", renderInfo: { inParMode: true } },\n emph: { signature: \"m\", renderInfo: { inParMode: true } },\n textnormal: { signature: \"m\", renderInfo: { inParMode: true } },\n uppercase: { signature: \"m\", renderInfo: { inParMode: true } },\n mathbf: { signature: \"m\" },\n mathsf: { signature: \"m\" },\n mathtt: { signature: \"m\" },\n mathit: { signature: \"m\" },\n mathnormal: { signature: \"m\" },\n mathcal: { signature: \"m\" },\n mathrm: { signature: \"m\" },\n // Other\n setlength: { signature: \"m m\", renderInfo: { breakAround: true } },\n ref: { signature: \"s m\" },\n label: { signature: \"o m\" },\n // cleveref changes \\label to have this signature\n printbibliography: { renderInfo: { breakAround: true } },\n addtocontents: { signature: \"m m\", renderInfo: { breakAround: true } },\n addcontentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n contentsline: { signature: \"m m m\", renderInfo: { breakAround: true } },\n bibliography: { signature: \"m\", renderInfo: { breakAround: true } },\n bibliographystyle: { signature: \"m\", renderInfo: { breakAround: true } }\n};\nvar environments5 = {\n document: {\n processContent: (nodes) => {\n trim2(nodes);\n return nodes;\n }\n },\n array: { signature: \"o m\", renderInfo: { alignContent: true } },\n description: { signature: \"o\", processContent: cleanEnumerateBody },\n enumerate: {\n signature: \"o\",\n processContent: cleanEnumerateBody,\n renderInfo: { pgfkeysArgs: true }\n },\n itemize: { signature: \"o\", processContent: cleanEnumerateBody },\n trivlist: { signature: \"o\", processContent: cleanEnumerateBody },\n list: { signature: \"m m\", processContent: cleanEnumerateBody },\n figure: { signature: \"o\" },\n \"figure*\": { signature: \"o\" },\n filecontents: { signature: \"o m\" },\n \"filecontents*\": { signature: \"o m\" },\n minipage: { signature: \"o o o m\" },\n picture: { signature: \"r() d()\" },\n tabbing: { renderInfo: { alignContent: true } },\n table: { signature: \"o\" },\n tabular: { signature: \"o m\", renderInfo: { alignContent: true } },\n \"tabular*\": { signature: \"m o m\", renderInfo: { alignContent: true } },\n thebibliography: {\n signature: \"m\",\n processContent: (nodes) => cleanEnumerateBody(nodes, \"bibitem\")\n },\n // Math\n math: { renderInfo: { inMathMode: true } }\n};\n\n// package/listings/libs/argument-parser.ts\nimport { arg as arg2 } from \"@unified-latex/unified-latex-builder\";\nimport { parse as parseArgspec } from \"@unified-latex/unified-latex-util-argspec\";\nimport { gobbleSingleArgument } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nvar argSpecM = parseArgspec(\"m\")[0];\nvar argSpecO = parseArgspec(\"o\")[0];\nvar argSpecRDelim = {};\nvar argumentParser = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument(nodes, argSpecO, startPos);\n let codeArg = null;\n let codeArgNodesRemoved = 0;\n const nextNode = nodes[startPos];\n if (match2.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument(nodes, argSpecM, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match2.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim[delim] = argSpecRDelim[delim] || parseArgspec(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument(\n nodes,\n argSpecRDelim[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n return {\n args: [optionalArg || arg2(null), codeArg || arg2(null)],\n nodesRemoved: optionalArgNodesRemoved + codeArgNodesRemoved\n };\n};\n\n// package/listings/provides.ts\nvar macros6 = {\n lstset: { signature: \"m\" },\n lstinline: { argumentParser },\n lstinputlisting: { signature: \"o m\" },\n lstdefinestyle: { signature: \"m m\" },\n lstnewenvironment: { signature: \"m o o m m\" },\n lstMakeShortInline: { signature: \"o m\" },\n lstDeleteShortInline: { signature: \"m\" },\n lstdefineformat: { signature: \"m m\" },\n lstdefinelanguage: { signature: \"o m o m o\" },\n lstalias: { signature: \"o m o m\" },\n lstloadlanguages: { signature: \"m\" }\n};\nvar environments6 = {};\n\n// package/makeidx/provides.ts\nvar macros7 = {\n see: { signature: \"m m\" },\n seealso: { signature: \"m m\" },\n seename: { signature: \"m\" },\n alsoname: { signature: \"m\" },\n index: { signature: \"m\" }\n};\nvar environments7 = {};\n\n// package/mathtools/provides.ts\nvar macros8 = {\n mathtoolsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n mathllap: {\n signature: \"o m\"\n },\n mathrlap: {\n signature: \"o m\"\n },\n mathclap: {\n signature: \"o m\"\n },\n clap: {\n signature: \"m\"\n },\n mathmbox: {\n signature: \"m\"\n },\n mathmakebox: {\n signature: \"o o m\"\n },\n cramped: {\n signature: \"o m\"\n },\n crampedllap: {\n signature: \"o m\"\n },\n crampedrlap: {\n signature: \"o m\"\n },\n crampedclap: {\n signature: \"o m\"\n },\n crampedsubstack: {\n signature: \"o m\"\n },\n smashoperator: {\n signature: \"o m\"\n },\n newtagform: {\n signature: \"m o m m\"\n },\n renewtagform: {\n signature: \"m o m m\"\n },\n usetagform: {\n signature: \"m\"\n },\n xleftrightarrow: { signature: \"o m\" },\n xLeftarrow: { signature: \"o m\" },\n xhookleftarrow: { signature: \"o m\" },\n xmapsto: { signature: \"o m\" },\n xRightarrow: { signature: \"o m\" },\n xLeftrightarrow: { signature: \"o m\" },\n xhookrightarrow: { signature: \"o m\" },\n underbracket: { signature: \"o o m\" },\n overbracket: { signature: \"o o m\" },\n underbrace: { signature: \"m\" },\n overbrace: { signature: \"m\" },\n shoveleft: { signature: \"o m\" },\n shoveright: { signature: \"o m\" },\n ArrowBetweenLines: { signature: \"s o\" },\n vdotswithin: { signature: \"m\" },\n shortdotswithin: { signature: \"s m\" },\n DeclarePairedDelimiter: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n DeclarePairedDelimiterX: {\n signature: \"m o m m m\",\n renderInfo: { breakAround: true }\n },\n DeclarePairedDelimiterXPP: {\n signature: \"m o m m m m m\",\n renderInfo: { breakAround: true }\n },\n prescript: { signature: \"m m m\" },\n DeclareMathSizes: { signature: \"m m m m\" },\n newgathered: { signature: \"m m m m\" },\n renewgathered: { signature: \"m m m m\" },\n splitfrac: { signature: \"m m\" },\n splitdfrac: { signature: \"m m\" },\n xmathstrut: { signature: \"o m\" },\n // amsthm\n newtheorem: { signature: \"s m o m o\", renderInfo: { breakAround: true } },\n theoremstyle: { signature: \"m\", renderInfo: { breakAround: true } },\n newtheoremstyle: {\n signature: \"m m m m m m m m m\",\n renderInfo: { breakAround: true }\n },\n // amsmath\n text: { signature: \"m\", renderInfo: { inMathMode: false } },\n // amsfonts\n mathbb: { signature: \"m\" },\n mathscr: { signature: \"m\" },\n mathfrak: { signature: \"m\" },\n frak: { signature: \"m\" },\n Bdd: { signature: \"m\" },\n bold: { signature: \"m\" },\n // amsopn\n operatorname: { signature: \"s m\" },\n DeclareMathOperator: {\n signature: \"s m m\",\n renderInfo: { breakAround: true }\n }\n};\nvar environments8 = {\n crampedsubarray: {\n signature: \"m\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n matrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n pmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n smallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n psmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Bsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n Vsmallmatrix: { renderInfo: { alignContent: true, inMathMode: true } },\n \"matrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"pmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"Bmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"Vmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"smallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"psmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"Bsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n \"Vsmallmatrix*\": {\n signature: \"o\",\n renderInfo: { alignContent: true, inMathMode: true }\n },\n multilined: { signature: \"o o\", renderInfo: { inMathMode: true } },\n cases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"cases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n dcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"dcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n rcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"rcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n drcases: { renderInfo: { alignContent: true, inMathMode: true } },\n \"drcases*\": { renderInfo: { alignContent: true, inMathMode: true } },\n spreadlines: { signature: \"m\", renderInfo: { inMathMode: true } },\n lgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n rgathered: { signature: \"o\", renderInfo: { inMathMode: true } },\n // amsmath\n \"align*\": { renderInfo: { inMathMode: true, alignContent: true } },\n align: { renderInfo: { inMathMode: true, alignContent: true } },\n aligned: { renderInfo: { inMathMode: true, alignContent: true } },\n \"alignat*\": { renderInfo: { inMathMode: true, alignContent: true } },\n alignat: { renderInfo: { inMathMode: true, alignContent: true } },\n \"equation*\": { renderInfo: { inMathMode: true } },\n equation: { renderInfo: { inMathMode: true } },\n \"gather*\": { renderInfo: { inMathMode: true } },\n gather: { renderInfo: { inMathMode: true } },\n \"multline*\": { renderInfo: { inMathMode: true } },\n multline: { renderInfo: { inMathMode: true } },\n \"flalign*\": { renderInfo: { inMathMode: true, alignContent: true } },\n flalign: { renderInfo: { inMathMode: true, alignContent: true } },\n split: { renderInfo: { inMathMode: true } },\n // Math environments\n displaymath: { renderInfo: { inMathMode: true } },\n // Typical amsthm environments\n theorem: { signature: \"o\" },\n lemma: { signature: \"o\" },\n definition: { signature: \"o\" },\n proposition: { signature: \"o\" },\n corollary: { signature: \"o\" },\n remark: { signature: \"!o\" },\n example: { signature: \"!o\" },\n proof: { signature: \"o\" }\n};\n\n// package/minted/libs/argument-parser.ts\nimport { arg as arg3 } from \"@unified-latex/unified-latex-builder\";\nimport { parse as parseArgspec2 } from \"@unified-latex/unified-latex-util-argspec\";\nimport { gobbleSingleArgument as gobbleSingleArgument2 } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match as match3 } from \"@unified-latex/unified-latex-util-match\";\nvar argSpecM2 = parseArgspec2(\"m\")[0];\nvar argSpecO2 = parseArgspec2(\"o\")[0];\nvar argSpecRDelim2 = {};\nvar argumentParser2 = (nodes, startPos) => {\n const { argument: optionalArg, nodesRemoved: optionalArgNodesRemoved } = gobbleSingleArgument2(nodes, argSpecO2, startPos);\n const { argument: languageArg, nodesRemoved: languageArgNodesRemoved } = gobbleSingleArgument2(nodes, argSpecM2, startPos);\n let codeArg = null;\n let codeArgNodesRemoved = 0;\n const nextNode = nodes[startPos];\n if (match3.group(nextNode)) {\n const mandatoryArg = gobbleSingleArgument2(nodes, argSpecM2, startPos);\n codeArg = mandatoryArg.argument;\n codeArgNodesRemoved = mandatoryArg.nodesRemoved;\n } else if (match3.string(nextNode) && nextNode.content.length === 1) {\n const delim = nextNode.content;\n argSpecRDelim2[delim] = argSpecRDelim2[delim] || parseArgspec2(`r${delim}${delim}`)[0];\n const delimArg = gobbleSingleArgument2(\n nodes,\n argSpecRDelim2[delim],\n startPos\n );\n codeArg = delimArg.argument;\n codeArgNodesRemoved = delimArg.nodesRemoved;\n }\n return {\n args: [\n optionalArg || arg3(null),\n languageArg || arg3(null),\n codeArg || arg3(null)\n ],\n nodesRemoved: optionalArgNodesRemoved + languageArgNodesRemoved + codeArgNodesRemoved\n };\n};\n\n// package/minted/provides.ts\nvar macros9 = {\n mint: { argumentParser: argumentParser2 },\n mintinline: { argumentParser: argumentParser2 },\n inputminted: { argumentParser: argumentParser2 },\n usemintedstyle: { signature: \"m\" },\n setminted: { signature: \"o m\" },\n setmintedinline: { signature: \"o m\" },\n newmint: { signature: \"o m m\" },\n newminted: { signature: \"o m m\" },\n newmintinline: { signature: \"o m m\" },\n newmintedfile: { signature: \"o m m\" }\n};\nvar environments9 = {};\n\n// package/nicematrix/provides.ts\nvar macros10 = {\n NiceMatrixOptions: {\n signature: \"m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true }\n }\n};\nvar environments10 = {\n NiceTabular: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n NiceMatrixBlock: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n NiceArrayWithDelims: {\n signature: \"m m o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n NiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n pNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n bNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n BNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n vNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n VNiceArray: {\n signature: \"o m !o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n NiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n pNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n bNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n BNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n vNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n },\n VNiceMatrix: {\n signature: \"!o\",\n renderInfo: { pgfkeysArgs: true, alignContent: true }\n }\n};\n\n// package/systeme/provides.ts\nvar macros11 = {\n systeme: {\n signature: \"s o o m\",\n renderInfo: { inMathMode: true }\n },\n sysdelim: {\n signature: \"m m\"\n },\n syseqsep: { signature: \"m\" },\n sysalign: { signature: \"m\" },\n syssignspace: { signature: \"m\" },\n syseqspace: { signature: \"m\" },\n syslineskipcoeff: { signature: \"m\" },\n syseqivsign: { signature: \"m\" },\n sysaddeqsign: { signature: \"m\" },\n sysremoveeqsign: { signature: \"m\" },\n sysextracolonsign: { signature: \"m\" },\n syscodeextracol: { signature: \"m\" },\n sysautonum: { signature: \"m\" },\n syssubstitute: { signature: \"m\" }\n};\nvar environments11 = {};\n\n// package/systeme/libs/parser.ts\nimport { match as match4 } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { SystemePegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\n// package/systeme/libs/print-raw.ts\nimport { printRaw as latexPrintRaw } from \"@unified-latex/unified-latex-util-print-raw\";\n\n// package/systeme/libs/systeme.ts\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match as match5 } from \"@unified-latex/unified-latex-util-match\";\nimport { arrayJoin } from \"@unified-latex/unified-latex-util-split\";\n\n// ../structured-clone/dist/index.js\n(function() {\n if (typeof globalThis === \"object\")\n return;\n Object.defineProperty(Object.prototype, \"__magic__\", {\n get: function() {\n return this;\n },\n configurable: true\n // This makes it possible to `delete` the getter later.\n });\n __magic__.globalThis = __magic__;\n delete Object.prototype.__magic__;\n})();\nvar clone = typeof globalThis.structuredClone === \"function\" ? globalThis.structuredClone : (obj) => JSON.parse(JSON.stringify(obj));\n\n// package/systeme/libs/systeme.ts\nimport { deleteComments } from \"@unified-latex/unified-latex-util-comments\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nimport { updateRenderInfo as updateRenderInfo2 } from \"@unified-latex/unified-latex-util-render-info\";\nimport { getArgsContent } from \"@unified-latex/unified-latex-util-arguments\";\n\n// package/tikz/provides.ts\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\n\n// package/tikz/libs/tikz-command-argument-parser.ts\nimport { arg as arg4 } from \"@unified-latex/unified-latex-builder\";\nimport {\n parse as parseArgspec3\n} from \"@unified-latex/unified-latex-util-argspec\";\nimport { gobbleSingleArgument as gobbleSingleArgument3 } from \"@unified-latex/unified-latex-util-arguments\";\nimport { match as match6 } from \"@unified-latex/unified-latex-util-match\";\nimport { scan } from \"@unified-latex/unified-latex-util-scan\";\nimport { trim as trim3 } from \"@unified-latex/unified-latex-util-trim\";\nvar OPTIONAL_ARGUMENT_ARG_SPEC = parseArgspec3(\"o\")[0];\nfunction blankArg() {\n return arg4([], { openMark: \"\", closeMark: \"\" });\n}\nvar tikzCommandArgumentParser = (nodes, startPos) => {\n const origStartPos = startPos;\n let pos = startPos;\n let nodesRemoved = 0;\n const cursorPosAfterAnimations = eatAllAnimationSpecs(nodes, pos);\n let animationArg = blankArg();\n if (cursorPosAfterAnimations !== pos) {\n const argContent = nodes.splice(pos, cursorPosAfterAnimations - pos);\n trim3(argContent);\n animationArg = arg4(argContent, {\n openMark: \" \",\n closeMark: \" \"\n });\n }\n nodesRemoved += cursorPosAfterAnimations - pos;\n const {\n argument: _optionalArgument,\n nodesRemoved: optionalArgumentNodesRemoved\n } = gobbleSingleArgument3(nodes, OPTIONAL_ARGUMENT_ARG_SPEC, pos);\n nodesRemoved += optionalArgumentNodesRemoved;\n const optionalArg = _optionalArgument || blankArg();\n while (match6.whitespace(nodes[pos])) {\n pos++;\n }\n const firstNode = nodes[pos];\n if (!firstNode) {\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0\n };\n }\n if (match6.group(firstNode)) {\n const args = [animationArg, optionalArg, arg4(firstNode.content)];\n nodes.splice(origStartPos, pos - origStartPos + 1);\n return { args, nodesRemoved: pos - origStartPos + 1 + nodesRemoved };\n }\n const semicolonPosition = scan(nodes, \";\", { startIndex: pos });\n if (semicolonPosition != null) {\n const argNodes = nodes.splice(\n origStartPos,\n semicolonPosition - origStartPos + 1\n );\n trim3(argNodes);\n const args = [animationArg, optionalArg, arg4(argNodes)];\n return {\n args,\n nodesRemoved: origStartPos - semicolonPosition + 1 + nodesRemoved\n };\n }\n return {\n args: [animationArg, optionalArg, blankArg()],\n nodesRemoved: 0\n };\n};\nfunction eatAllAnimationSpecs(nodes, startPos) {\n const colonPos = scan(nodes, \":\", {\n startIndex: startPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true\n });\n if (!colonPos) {\n return startPos;\n }\n let lastMatchPos = startPos;\n let i = colonPos + 1;\n for (; i < nodes.length; i++) {\n const node = nodes[i];\n if (match6.string(node, \"[\")) {\n break;\n }\n if (match6.string(node, \"=\")) {\n i++;\n while (match6.whitespace(nodes[i]) || match6.comment(nodes[i])) {\n i++;\n }\n if (!match6.group(nodes[i])) {\n break;\n }\n lastMatchPos = i + 1;\n const colonPos2 = scan(nodes, \":\", {\n startIndex: lastMatchPos,\n allowSubstringMatches: true,\n onlySkipWhitespaceAndComments: true\n });\n if (colonPos2 == null) {\n break;\n }\n i = colonPos2 + 1;\n }\n }\n return lastMatchPos;\n}\n\n// package/tikz/provides.ts\nvar macros12 = {\n pgfkeys: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n tikzoption: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n tikzstyle: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n usetikzlibrary: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n usepgfmodule: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n usepgflibrary: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfplotsset: {\n signature: \"m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n pgfplotstabletypeset: {\n signature: \"o m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n tikz: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: { namedArguments: [\"animation\", \"options\", \"command\"] }\n }\n};\nvar environments12 = {\n tikzpicture: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n axis: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n scope: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgfonlayer: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgflowlevelscope: {\n signature: \"m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgfviewboxscope: {\n signature: \"m m m m m\",\n renderInfo: { tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n pgftransparencygroup: {\n signature: \"o\",\n renderInfo: { pgfkeysArgs: true, tikzEnvironment: true },\n processContent: processTikzEnvironmentContent\n },\n behindforegroundpath: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent\n },\n pgfmetadecoration: {\n signature: \"m\",\n processContent: processTikzEnvironmentContent\n },\n colormixin: { signature: \"m\", renderInfo: { pgfkeysArgs: true } }\n};\nfunction processTikzEnvironmentContent(nodes) {\n attachMacroArgsInArray(nodes, conditionalMacros);\n return nodes;\n}\nvar conditionalMacros = {\n pgfextra: { signature: \"m\" },\n beginpgfgraphicnamed: { signature: \"m\" },\n pgfrealjobname: { signature: \"m\" },\n pgfplotstreampoint: { signature: \"m\" },\n pgfplotstreampointoutlier: { signature: \"m\" },\n pgfplotstreamspecial: { signature: \"m\" },\n pgfplotxyfile: { signature: \"m\" },\n pgfplotxyzfile: { signature: \"m\" },\n pgfplotfunction: { signature: \"mmm\" },\n pgfplotgnuplot: { signature: \"o m\" },\n pgfplothandlerrecord: { signature: \"m\" },\n pgfdeclareplothandler: { signature: \"m m m\" },\n pgfdeclarelayer: { signature: \"m\" },\n pgfsetlayers: { signature: \"m\", renderInfo: { pgfkeysArgs: true } },\n pgfonlayer: { signature: \"m\" },\n startpgfonlayer: { signature: \"m\" },\n pgfdeclarehorizontalshading: { signature: \"o m m m \" },\n pgfdeclareradialshading: { signature: \"o m m m\" },\n pgfdeclarefunctionalshading: { signature: \"o m m m m m\" },\n pgfshadecolortorgb: { signature: \"m m\" },\n pgfshadecolortocmyk: { signature: \"m m\" },\n pgfshadecolortogray: { signature: \"m m\" },\n pgfuseshading: { signature: \"m\" },\n pgfshadepath: { signature: \"m m\" },\n pgfsetadditionalshadetransform: { signature: \"m\" },\n pgfsetstrokeopacity: { signature: \"m\" },\n pgfsetfillopacity: { signature: \"m\" },\n pgfsetblendmode: { signature: \"m\" },\n pgfdeclarefading: { signature: \"m m\" },\n pgfsetfading: { signature: \"m m\" },\n pgfsetfadingforcurrentpath: { signature: \"m m\" },\n pgfsetfadingforcurrentpathstroked: { signature: \"m m\" },\n pgfanimateattribute: { signature: \"m m\" },\n pgfsnapshot: { signature: \"m\" },\n pgfqpoint: { signature: \"m m\" },\n pgfqpointxy: { signature: \"m m\" },\n pgfqpointxyz: { signature: \"m m m\" },\n pgfqpointscale: { signature: \"m m\" },\n pgfpathqmoveto: { signature: \"m m\" },\n pgfpathqlineto: { signature: \"m m\" },\n pgfpathqcurveto: { signature: \"m m m m m m\" },\n pgfpathqcircle: { signature: \"m\" },\n pgfqbox: { signature: \"m\" },\n pgfqboxsynced: { signature: \"m\" },\n pgfaliasimage: { signature: \"m m\" },\n pgfuseimage: { signature: \"m\" },\n pgfimage: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclaremask: { signature: \"o m m\", renderInfo: { pgfkeysArgs: true } },\n pgfdeclarepatternformonly: { signature: \"o m m m m m\" },\n pgfdeclarepatterninherentlycolored: { signature: \"o m m m m m\" },\n pgfsetfillpattern: { signature: \"m m\" },\n // Coordinate canvas and nonlinear transformations\n pgftransformshift: { signature: \"m\" },\n pgftransformxshift: { signature: \"m\" },\n pgftransformyshift: { signature: \"m\" },\n pgftransformscale: { signature: \"m\" },\n pgftransformxscale: { signature: \"m\" },\n pgftransformyscale: { signature: \"m\" },\n pgftransformxslant: { signature: \"m\" },\n pgftransformyslant: { signature: \"m\" },\n pgftransformrotate: { signature: \"m\" },\n pgftransformtriangle: { signature: \"m m m\" },\n pgftransformcm: { signature: \"m m m m m\" },\n pgftransformarrow: { signature: \"m m\" },\n pgftransformlineattime: { signature: \"m m m\" },\n pgftransformcurveattime: { signature: \"m m m m m\" },\n pgftransformarcaxesattime: { signature: \"m m m m m m\" },\n pgfgettransform: { signature: \"m\" },\n pgfsettransform: { signature: \"m\" },\n pgfgettransformentries: { signature: \"m m m m m m\" },\n pgfsettransformentries: { signature: \"m m m m m m\" },\n pgfpointtransformed: { signature: \"m\" },\n pgflowlevel: { signature: \"m\" },\n pgflowlevelobj: { signature: \"m m\" },\n pgflowlevelscope: { signature: \"m\" },\n startpgflowlevelscope: { signature: \"m\" },\n pgfviewboxscope: { signature: \"m m m m m\" },\n startpgfviewboxscope: { signature: \"m m m m m\" },\n pgftransformnonlinear: { signature: \"m\" },\n pgfpointtransformednonlinear: { signature: \"m\" },\n pgfsetcurvilinearbeziercurve: { signature: \"m m m m\" },\n pgfcurvilineardistancetotime: { signature: \"m\" },\n pgfpointcurvilinearbezierorthogonal: { signature: \"m m\" },\n pgfpointcurvilinearbezierpolar: { signature: \"m m\" },\n // Matrices\n pgfmatrix: { signature: \"m m m m m m m\" },\n pgfsetmatrixcolumnsep: { signature: \"m\" },\n pgfmatrixnextcell: { signature: \"o\" },\n pgfsetmatrixrowsep: { signature: \"m\" },\n pgfmatrixendrow: { signature: \"o\" },\n // Nodes and shapes\n pgfnode: { signature: \"m m m m m\" },\n pgfmultipartnode: { signature: \"m m m m\" },\n pgfcoordinate: { signature: \"m m\" },\n pgfnodealias: { signature: \"m m\" },\n pgfnoderename: { signature: \"m m\" },\n pgfpositionnodelater: { signature: \"m\" },\n pgfpositionnodenow: { signature: \"m\" },\n pgfnodepostsetupcode: { signature: \"m m\" },\n pgfpointanchor: { signature: \"m m\" },\n pgfpointshapeborder: { signature: \"m m\" },\n pgfdeclareshape: { signature: \"m m\" },\n saveddimen: { signature: \"m m\" },\n savedmacro: { signature: \" m\" },\n anchor: { signature: \"m m\" },\n deferredanchor: { signature: \"m m\" },\n anchorborder: { signature: \"m\" },\n backgroundpath: { signature: \"m\" },\n foregroundpath: { signature: \"m\" },\n behindbackgroundpath: { signature: \"m\" },\n beforebackgroundpath: { signature: \"m\" },\n beforeforegroundpath: { signature: \"m\" },\n behindforegroundpath: { signature: \"m\" },\n // Arrows\n pgfdeclarearrow: { signature: \"m\" },\n pgfarrowssettipend: { signature: \"m\" },\n pgfarrowssetbackend: { signature: \"m\" },\n pgfarrowssetlineend: { signature: \"m\" },\n pgfarrowssetvisualbackend: { signature: \"m\" },\n pgfarrowssetvisualtipend: { signature: \"m\" },\n pgfarrowshullpoint: { signature: \"m m\" },\n pgfarrowsupperhullpoint: { signature: \"m m\" },\n pgfarrowssave: { signature: \"m\" },\n pgfarrowssavethe: { signature: \"m\" },\n pgfarrowsaddtooptions: { signature: \"m\" },\n pgfarrowsaddtolateoptions: { signature: \"m\" },\n pgfarrowsaddtolengthscalelist: { signature: \"m\" },\n pgfarrowsaddtowidthscalelist: { signature: \"m\" },\n pgfarrowsthreeparameters: { signature: \"m\" },\n pgfarrowslinewidthdependent: { signature: \"m m m\" },\n pgfarrowslengthdependent: { signature: \"m\" },\n // Path\n pgfusepath: { signature: \"m\" },\n pgfsetlinewidth: { signature: \"m\" },\n pgfsetmiterlimit: { signature: \"m\" },\n pgfsetdash: { signature: \"m m\" },\n pgfsetstrokecolor: { signature: \"m\" },\n pgfsetcolor: { signature: \"m\" },\n pgfsetinnerlinewidth: { signature: \"m\" },\n pgfsetinnerstrokecolor: { signature: \"m\" },\n pgfsetarrowsstart: { signature: \"m\" },\n pgfsetarrowsend: { signature: \"m\" },\n pgfsetarrows: { signature: \"m\" },\n pgfsetshortenstart: { signature: \"m\" },\n pgfsetshortenend: { signature: \"m\" },\n pgfsetfillcolor: { signature: \"m\" },\n // Decorations\n pgfdeclaredecoration: { signature: \"m m m\" },\n state: { signature: \"m o m\" },\n pgfdecoratepath: { signature: \"m m\" },\n startpgfdecoration: { signature: \"m\" },\n pgfdecoration: { signature: \"m\" },\n pgfdecoratecurrentpath: { signature: \"m\" },\n pgfsetdecorationsegmenttransformation: { signature: \"m\" },\n pgfdeclaremetadecorate: { signature: \"m m m\" },\n pgfmetadecoration: { signature: \"m\" },\n startpgfmetadecoration: { signature: \"m\" },\n // Constructing paths\n pgfpathmoveto: { signature: \"m\" },\n pgfpathlineto: { signature: \"m\" },\n pgfpathcurveto: { signature: \"m m m\" },\n pgfpathquadraticcurveto: { signature: \"m m\" },\n pgfpathcurvebetweentime: { signature: \"m m m m m m\" },\n pgfpathcurvebetweentimecontinue: { signature: \"m m m m m m\" },\n pgfpatharc: { signature: \"m m m\" },\n pgfpatharcaxes: { signature: \"m m m m\" },\n pgfpatharcto: { signature: \"m m m m m m\" },\n pgfpatharctoprecomputed: { signature: \"m m m m m m m m\" },\n pgfpathellipse: { signature: \"m m m\" },\n pgfpathcircle: { signature: \"m m\" },\n pgfpathrectangle: { signature: \"m m\" },\n pgfpathrectanglecorners: { signature: \"m m\" },\n pgfpathgrid: { signature: \" o m m\" },\n pgfpathparabola: { signature: \"m m\" },\n pgfpathsine: { signature: \"m\" },\n pgfpathcosine: { signature: \"m\" },\n pgfsetcornersarced: { signature: \"m\" },\n \"pgf@protocolsizes\": { signature: \"m m\" },\n // Specifying coordinates\n pgfpoint: { signature: \"m m\" },\n pgfpointpolar: { signature: \"m m m\" },\n pgfpointxy: { signature: \"m m\" },\n pgfsetxvec: { signature: \"m\" },\n pgfsetyvec: { signature: \"m\" },\n pgfpointpolarxy: { signature: \"m m\" },\n pgfpointxyz: { signature: \"m m m\" },\n pgfsetzvec: { signature: \"m\" },\n pgfpointcylindrical: { signature: \"m m m\" },\n pgfpointspherical: { signature: \"m m m\" },\n pgfpointadd: { signature: \"m m\" },\n pgfpointscale: { signature: \"m m\" },\n pgfpointdiff: { signature: \"m m\" },\n pgfpointnormalised: { signature: \"m\" },\n pgfpointlineattime: { signature: \"m m m\" },\n pgfpointlineatdistance: { signature: \"m m m\" },\n pgfpointarcaxesattime: { signature: \"m m m m m m\" },\n pgfpointcurveattime: { signature: \"m m m m m\" },\n pgfpointborderrectangle: { signature: \"m m\" },\n pgfpointborderellipse: { signature: \"m m\" },\n pgfpointintersectionoflines: { signature: \"m m m m\" },\n pgfpointintersectionofcircles: { signature: \"m m m m m\" },\n pgfintersectionofpaths: { signature: \"m m\" },\n pgfpointintersectionsolution: { signature: \"m\" },\n pgfextractx: { signature: \"m m\" },\n pgfextracty: { signature: \"m m\" },\n pgfgetlastxy: { signature: \"m m\" },\n \"pgf@process\": { signature: \"m\" },\n // Heirarchical structres ...\n pgfsetbaseline: { signature: \"m\" },\n pgfsetbaselinepointnow: { signature: \"m\" },\n pgfsetbaselinepointlater: { signature: \"m\" },\n pgftext: { signature: \"o m\", renderInfo: { pgfkeysArgs: true } },\n pgfuseid: { signature: \"m\" },\n pgfusetype: { signature: \"m\" },\n pgfidrefnextuse: { signature: \"m m\" },\n pgfidrefprevuse: { signature: \"m m\" },\n pgfaliasid: { signature: \"m m\" },\n pgfgaliasid: { signature: \"m m\" },\n pgfifidreferenced: { signature: \"m m m\" },\n pgfrdfabout: { signature: \"m\" },\n pgfrdfcontent: { signature: \"m\" },\n pgfrdfdatatype: { signature: \"m\" },\n pgfrdfhref: { signature: \"m\" },\n pgfrdfprefix: { signature: \"m\" },\n pgfrdfproperty: { signature: \"m\" },\n pgfrdfrel: { signature: \"m\" },\n pgfrdfresource: { signature: \"m\" },\n pgfrdfrev: { signature: \"m\" },\n pgfrdfsrc: { signature: \"m\" },\n pgfrdftypeof: { signature: \"m\" },\n pgfrdfvocab: { signature: \"m\" },\n pgferror: { signature: \"m\" },\n pgfwarning: { signature: \"m\" },\n path: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n draw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n fill: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n filldraw: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n pattern: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n shade: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n clip: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n useasboundingbox: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n node: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n coordinate: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n graph: {\n signature: \"u;\",\n renderInfo: { breakAround: true, tikzPathCommand: true }\n },\n scoped: {\n signature: \"o o m\",\n argumentParser: tikzCommandArgumentParser,\n renderInfo: {\n namedArguments: [\"animation\", \"options\", \"command\"],\n breakAround: true\n }\n }\n};\n\n// package/tikz/libs/print-raw.ts\nimport { printRaw as latexPrintRaw2 } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { trim as trim4 } from \"@unified-latex/unified-latex-util-trim\";\n\n// package/tikz/libs/parser.ts\nimport { match as match7 } from \"@unified-latex/unified-latex-util-match\";\nimport { decorateArrayForPegjs as decorateArrayForPegjs2 } from \"@unified-latex/unified-latex-util-pegjs\";\nimport { TikzPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nfunction createMatchers() {\n return {\n isChar: match7.string,\n isTerminal: (node) => match7.string(node, \";\"),\n isOperation: (node) => match7.anyString(node) && node.content.match(/[a-zA-Z]/),\n isWhitespace: (node) => match7.whitespace(node) || match7.parbreak(node),\n isComment: match7.comment,\n isGroup: match7.group,\n isMacro: match7.macro,\n isAnyMacro: match7.anyMacro\n };\n}\nvar matchers = createMatchers();\n\n// package/xcolor/provides.ts\nvar macros13 = {\n substitutecolormodel: {\n signature: \"m m\",\n renderInfo: { breakAround: true }\n },\n selectcolormodel: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n definecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true }\n },\n providecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true }\n },\n colorlet: {\n signature: \"o m o m\",\n renderInfo: { breakAround: true }\n },\n definecolorset: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true }\n },\n providecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true }\n },\n preparecolor: {\n signature: \"o m m m\",\n renderInfo: { breakAround: true }\n },\n preparecolorset: {\n signature: \"o m m m m\",\n renderInfo: { breakAround: true }\n },\n DefineNamedColor: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true }\n },\n definecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n providecolors: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n color: { signature: \"o m\", renderInfo: { breakAround: true } },\n textcolor: { signature: \"o m m\", renderInfo: { inParMode: true } },\n pagecolor: { signature: \"o m\" },\n colorbox: { signature: \"o m m\" },\n fcolorbox: { signature: \"o m o m m\" },\n boxframe: { signature: \"o m\" },\n testcolor: { signature: \"o m\" },\n blendcolors: { signature: \"s m\" },\n maskcolors: { signature: \"o m\" },\n definecolorseries: {\n signature: \"m m m o m o m\",\n renderInfo: { breakAround: true }\n },\n resetcolorseries: {\n signature: \"o m\",\n renderInfo: { breakAround: true }\n },\n rowcolors: { signature: \"s o m m m\" },\n extractcolorspec: { signature: \"m m\" },\n extractcolorspecs: { signature: \"m m m\" },\n convertcolorspec: { signature: \"m m m m\" }\n};\nvar environments13 = {\n testcolors: { signature: \"o\", renderInfo: { pgfkeysArgs: true } }\n};\n\n// package/xcolor/libs/xcolor.ts\nimport Color2 from \"color\";\n\n// package/xcolor/libs/predefined-colors.ts\nimport Color from \"color\";\nvar fromRgb = ([r, g, b]) => Color([r * 255, g * 255, b * 255], \"rgb\");\nvar DVI_PS_NAMES = {\n Apricot: Color(\"#FBB982\"),\n Aquamarine: Color(\"#00B5BE\"),\n Bittersweet: Color(\"#C04F17\"),\n Black: Color(\"#221E1F\"),\n Blue: Color(\"#2D2F92\"),\n BlueGreen: Color(\"#00B3B8\"),\n BlueViolet: Color(\"#473992\"),\n BrickRed: Color(\"#B6321C\"),\n Brown: Color(\"#792500\"),\n BurntOrange: Color(\"#F7921D\"),\n CadetBlue: Color(\"#74729A\"),\n CarnationPink: Color(\"#F282B4\"),\n Cerulean: Color(\"#00A2E3\"),\n CornflowerBlue: Color(\"#41B0E4\"),\n Cyan: Color(\"#00AEEF\"),\n Dandelion: Color(\"#FDBC42\"),\n DarkOrchid: Color(\"#A4538A\"),\n Emerald: Color(\"#00A99D\"),\n ForestGreen: Color(\"#009B55\"),\n Fuchsia: Color(\"#8C368C\"),\n Goldenrod: Color(\"#FFDF42\"),\n Gray: Color(\"#949698\"),\n Green: Color(\"#00A64F\"),\n GreenYellow: Color(\"#DFE674\"),\n JungleGreen: Color(\"#00A99A\"),\n Lavender: Color(\"#F49EC4\"),\n LimeGreen: Color(\"#8DC73E\"),\n Magenta: Color(\"#EC008C\"),\n Mahogany: Color(\"#A9341F\"),\n Maroon: Color(\"#AF3235\"),\n Melon: Color(\"#F89E7B\"),\n MidnightBlue: Color(\"#006795\"),\n Mulberry: Color(\"#A93C93\"),\n NavyBlue: Color(\"#006EB8\"),\n OliveGreen: Color(\"#3C8031\"),\n Orange: Color(\"#F58137\"),\n OrangeRed: Color(\"#ED135A\"),\n Orchid: Color(\"#AF72B0\"),\n Peach: Color(\"#F7965A\"),\n Periwinkle: Color(\"#7977B8\"),\n PineGreen: Color(\"#008B72\"),\n Plum: Color(\"#92268F\"),\n ProcessBlue: Color(\"#00B0F0\"),\n Purple: Color(\"#99479B\"),\n RawSienna: Color(\"#974006\"),\n Red: Color(\"#ED1B23\"),\n RedOrange: Color(\"#F26035\"),\n RedViolet: Color(\"#A1246B\"),\n Rhodamine: Color(\"#EF559F\"),\n RoyalBlue: Color(\"#0071BC\"),\n RoyalPurple: Color(\"#613F99\"),\n RubineRed: Color(\"#ED017D\"),\n Salmon: Color(\"#F69289\"),\n SeaGreen: Color(\"#3FBC9D\"),\n Sepia: Color(\"#671800\"),\n SkyBlue: Color(\"#46C5DD\"),\n SpringGreen: Color(\"#C6DC67\"),\n Tan: Color(\"#DA9D76\"),\n TealBlue: Color(\"#00AEB3\"),\n Thistle: Color(\"#D883B7\"),\n Turquoise: Color(\"#00B4CE\"),\n Violet: Color(\"#58429B\"),\n VioletRed: Color(\"#EF58A0\"),\n White: Color(\"#FFFFFF\"),\n WildStrawberry: Color(\"#EE2967\"),\n Yellow: Color(\"#FFF200\"),\n YellowGreen: Color(\"#98CC70\"),\n YellowOrange: Color(\"#FAA21A\")\n};\nvar SVG_NAMES = {\n AliceBlue: fromRgb([0.94, 0.972, 1]),\n AntiqueWhite: fromRgb([0.98, 0.92, 0.844]),\n Aqua: fromRgb([0, 1, 1]),\n Aquamarine: fromRgb([0.498, 1, 0.83]),\n Azure: fromRgb([0.94, 1, 1]),\n Beige: fromRgb([0.96, 0.96, 0.864]),\n Bisque: fromRgb([1, 0.894, 0.77]),\n Black: fromRgb([0, 0, 0]),\n BlanchedAlmond: fromRgb([1, 0.92, 0.804]),\n Blue: fromRgb([0, 0, 1]),\n BlueViolet: fromRgb([0.54, 0.17, 0.888]),\n Brown: fromRgb([0.648, 0.165, 0.165]),\n BurlyWood: fromRgb([0.87, 0.72, 0.53]),\n CadetBlue: fromRgb([0.372, 0.62, 0.628]),\n Chartreuse: fromRgb([0.498, 1, 0]),\n Chocolate: fromRgb([0.824, 0.41, 0.116]),\n Coral: fromRgb([1, 0.498, 0.312]),\n CornflowerBlue: fromRgb([0.392, 0.585, 0.93]),\n Cornsilk: fromRgb([1, 0.972, 0.864]),\n Crimson: fromRgb([0.864, 0.08, 0.235]),\n Cyan: fromRgb([0, 1, 1]),\n DarkBlue: fromRgb([0, 0, 0.545]),\n DarkCyan: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod: fromRgb([0.72, 0.525, 0.044]),\n DarkGray: fromRgb([0.664, 0.664, 0.664]),\n DarkGreen: fromRgb([0, 0.392, 0]),\n DarkGrey: fromRgb([0.664, 0.664, 0.664]),\n DarkKhaki: fromRgb([0.74, 0.716, 0.42]),\n DarkMagenta: fromRgb([0.545, 0, 0.545]),\n DarkOliveGreen: fromRgb([0.332, 0.42, 0.185]),\n DarkOrange: fromRgb([1, 0.55, 0]),\n DarkOrchid: fromRgb([0.6, 0.196, 0.8]),\n DarkRed: fromRgb([0.545, 0, 0]),\n DarkSalmon: fromRgb([0.912, 0.59, 0.48]),\n DarkSeaGreen: fromRgb([0.56, 0.736, 0.56]),\n DarkSlateBlue: fromRgb([0.284, 0.24, 0.545]),\n DarkSlateGray: fromRgb([0.185, 0.31, 0.31]),\n DarkSlateGrey: fromRgb([0.185, 0.31, 0.31]),\n DarkTurquoise: fromRgb([0, 0.808, 0.82]),\n DarkViolet: fromRgb([0.58, 0, 0.828]),\n DeepPink: fromRgb([1, 0.08, 0.576]),\n DeepSkyBlue: fromRgb([0, 0.75, 1]),\n DimGray: fromRgb([0.41, 0.41, 0.41]),\n DimGrey: fromRgb([0.41, 0.41, 0.41]),\n DodgerBlue: fromRgb([0.116, 0.565, 1]),\n FireBrick: fromRgb([0.698, 0.132, 0.132]),\n FloralWhite: fromRgb([1, 0.98, 0.94]),\n ForestGreen: fromRgb([0.132, 0.545, 0.132]),\n Fuchsia: fromRgb([1, 0, 1]),\n Gainsboro: fromRgb([0.864, 0.864, 0.864]),\n GhostWhite: fromRgb([0.972, 0.972, 1]),\n Gold: fromRgb([1, 0.844, 0]),\n Goldenrod: fromRgb([0.855, 0.648, 0.125]),\n Gray: fromRgb([0.5, 0.5, 0.5]),\n Green: fromRgb([0, 0.5, 0]),\n GreenYellow: fromRgb([0.68, 1, 0.185]),\n Grey: fromRgb([0.5, 0.5, 0.5]),\n Honeydew: fromRgb([0.94, 1, 0.94]),\n HotPink: fromRgb([1, 0.41, 0.705]),\n IndianRed: fromRgb([0.804, 0.36, 0.36]),\n Indigo: fromRgb([0.294, 0, 0.51]),\n Ivory: fromRgb([1, 1, 0.94]),\n Khaki: fromRgb([0.94, 0.9, 0.55]),\n Lavender: fromRgb([0.9, 0.9, 0.98]),\n LavenderBlush: fromRgb([1, 0.94, 0.96]),\n LawnGreen: fromRgb([0.488, 0.99, 0]),\n LemonChiffon: fromRgb([1, 0.98, 0.804]),\n LightBlue: fromRgb([0.68, 0.848, 0.9]),\n LightCoral: fromRgb([0.94, 0.5, 0.5]),\n LightCyan: fromRgb([0.88, 1, 1]),\n LightGoldenrod: fromRgb([0.933, 0.867, 0.51]),\n LightGoldenrodYellow: fromRgb([0.98, 0.98, 0.824]),\n LightGray: fromRgb([0.828, 0.828, 0.828]),\n LightGreen: fromRgb([0.565, 0.932, 0.565]),\n LightGrey: fromRgb([0.828, 0.828, 0.828]),\n LightPink: fromRgb([1, 0.712, 0.756]),\n LightSalmon: fromRgb([1, 0.628, 0.48]),\n LightSeaGreen: fromRgb([0.125, 0.698, 0.668]),\n LightSkyBlue: fromRgb([0.53, 0.808, 0.98]),\n LightSlateBlue: fromRgb([0.518, 0.44, 1]),\n LightSlateGray: fromRgb([0.468, 0.532, 0.6]),\n LightSlateGrey: fromRgb([0.468, 0.532, 0.6]),\n LightSteelBlue: fromRgb([0.69, 0.77, 0.87]),\n LightYellow: fromRgb([1, 1, 0.88]),\n Lime: fromRgb([0, 1, 0]),\n LimeGreen: fromRgb([0.196, 0.804, 0.196]),\n Linen: fromRgb([0.98, 0.94, 0.9]),\n Magenta: fromRgb([1, 0, 1]),\n Maroon: fromRgb([0.5, 0, 0]),\n MediumAquamarine: fromRgb([0.4, 0.804, 0.668]),\n MediumBlue: fromRgb([0, 0, 0.804]),\n MediumOrchid: fromRgb([0.73, 0.332, 0.828]),\n MediumPurple: fromRgb([0.576, 0.44, 0.86]),\n MediumSeaGreen: fromRgb([0.235, 0.7, 0.444]),\n MediumSlateBlue: fromRgb([0.484, 0.408, 0.932]),\n MediumSpringGreen: fromRgb([0, 0.98, 0.604]),\n MediumTurquoise: fromRgb([0.284, 0.82, 0.8]),\n MediumVioletRed: fromRgb([0.78, 0.084, 0.52]),\n MidnightBlue: fromRgb([0.098, 0.098, 0.44]),\n MintCream: fromRgb([0.96, 1, 0.98]),\n MistyRose: fromRgb([1, 0.894, 0.884]),\n Moccasin: fromRgb([1, 0.894, 0.71]),\n NavajoWhite: fromRgb([1, 0.87, 0.68]),\n Navy: fromRgb([0, 0, 0.5]),\n NavyBlue: fromRgb([0, 0, 0.5]),\n OldLace: fromRgb([0.992, 0.96, 0.9]),\n Olive: fromRgb([0.5, 0.5, 0]),\n OliveDrab: fromRgb([0.42, 0.556, 0.136]),\n Orange: fromRgb([1, 0.648, 0]),\n OrangeRed: fromRgb([1, 0.27, 0]),\n Orchid: fromRgb([0.855, 0.44, 0.84]),\n PaleGoldenrod: fromRgb([0.932, 0.91, 0.668]),\n PaleGreen: fromRgb([0.596, 0.985, 0.596]),\n PaleTurquoise: fromRgb([0.688, 0.932, 0.932]),\n PaleVioletRed: fromRgb([0.86, 0.44, 0.576]),\n PapayaWhip: fromRgb([1, 0.936, 0.835]),\n PeachPuff: fromRgb([1, 0.855, 0.725]),\n Peru: fromRgb([0.804, 0.52, 0.248]),\n Pink: fromRgb([1, 0.752, 0.796]),\n Plum: fromRgb([0.868, 0.628, 0.868]),\n PowderBlue: fromRgb([0.69, 0.88, 0.9]),\n Purple: fromRgb([0.5, 0, 0.5]),\n Red: fromRgb([1, 0, 0]),\n RosyBrown: fromRgb([0.736, 0.56, 0.56]),\n RoyalBlue: fromRgb([0.255, 0.41, 0.884]),\n SaddleBrown: fromRgb([0.545, 0.27, 0.075]),\n Salmon: fromRgb([0.98, 0.5, 0.448]),\n SandyBrown: fromRgb([0.956, 0.644, 0.376]),\n SeaGreen: fromRgb([0.18, 0.545, 0.34]),\n Seashell: fromRgb([1, 0.96, 0.932]),\n Sienna: fromRgb([0.628, 0.32, 0.176]),\n Silver: fromRgb([0.752, 0.752, 0.752]),\n SkyBlue: fromRgb([0.53, 0.808, 0.92]),\n SlateBlue: fromRgb([0.415, 0.352, 0.804]),\n SlateGray: fromRgb([0.44, 0.5, 0.565]),\n SlateGrey: fromRgb([0.44, 0.5, 0.565]),\n Snow: fromRgb([1, 0.98, 0.98]),\n SpringGreen: fromRgb([0, 1, 0.498]),\n SteelBlue: fromRgb([0.275, 0.51, 0.705]),\n Tan: fromRgb([0.824, 0.705, 0.55]),\n Teal: fromRgb([0, 0.5, 0.5]),\n Thistle: fromRgb([0.848, 0.75, 0.848]),\n Tomato: fromRgb([1, 0.39, 0.28]),\n Turquoise: fromRgb([0.25, 0.88, 0.815]),\n Violet: fromRgb([0.932, 0.51, 0.932]),\n VioletRed: fromRgb([0.816, 0.125, 0.565]),\n Wheat: fromRgb([0.96, 0.87, 0.7]),\n White: fromRgb([1, 1, 1]),\n WhiteSmoke: fromRgb([0.96, 0.96, 0.96]),\n Yellow: fromRgb([1, 1, 0]),\n YellowGreen: fromRgb([0.604, 0.804, 0.196])\n};\nvar X11_NAMES = {\n AntiqueWhite1: fromRgb([1, 0.936, 0.86]),\n AntiqueWhite2: fromRgb([0.932, 0.875, 0.8]),\n AntiqueWhite3: fromRgb([0.804, 0.752, 0.69]),\n AntiqueWhite4: fromRgb([0.545, 0.512, 0.47]),\n Aquamarine1: fromRgb([0.498, 1, 0.83]),\n Aquamarine2: fromRgb([0.464, 0.932, 0.776]),\n Aquamarine3: fromRgb([0.4, 0.804, 0.668]),\n Aquamarine4: fromRgb([0.27, 0.545, 0.455]),\n Azure1: fromRgb([0.94, 1, 1]),\n Azure2: fromRgb([0.88, 0.932, 0.932]),\n Azure3: fromRgb([0.756, 0.804, 0.804]),\n Azure4: fromRgb([0.512, 0.545, 0.545]),\n Bisque1: fromRgb([1, 0.894, 0.77]),\n Bisque2: fromRgb([0.932, 0.835, 0.716]),\n Bisque3: fromRgb([0.804, 0.716, 0.62]),\n Bisque4: fromRgb([0.545, 0.49, 0.42]),\n Blue1: fromRgb([0, 0, 1]),\n Blue2: fromRgb([0, 0, 0.932]),\n Blue3: fromRgb([0, 0, 0.804]),\n Blue4: fromRgb([0, 0, 0.545]),\n Brown1: fromRgb([1, 0.25, 0.25]),\n Brown2: fromRgb([0.932, 0.23, 0.23]),\n Brown3: fromRgb([0.804, 0.2, 0.2]),\n Brown4: fromRgb([0.545, 0.136, 0.136]),\n Burlywood1: fromRgb([1, 0.828, 0.608]),\n Burlywood2: fromRgb([0.932, 0.772, 0.57]),\n Burlywood3: fromRgb([0.804, 0.668, 0.49]),\n Burlywood4: fromRgb([0.545, 0.45, 0.332]),\n CadetBlue1: fromRgb([0.596, 0.96, 1]),\n CadetBlue2: fromRgb([0.556, 0.898, 0.932]),\n CadetBlue3: fromRgb([0.48, 0.772, 0.804]),\n CadetBlue4: fromRgb([0.325, 0.525, 0.545]),\n Chartreuse1: fromRgb([0.498, 1, 0]),\n Chartreuse2: fromRgb([0.464, 0.932, 0]),\n Chartreuse3: fromRgb([0.4, 0.804, 0]),\n Chartreuse4: fromRgb([0.27, 0.545, 0]),\n Chocolate1: fromRgb([1, 0.498, 0.14]),\n Chocolate2: fromRgb([0.932, 0.464, 0.13]),\n Chocolate3: fromRgb([0.804, 0.4, 0.112]),\n Chocolate4: fromRgb([0.545, 0.27, 0.075]),\n Coral1: fromRgb([1, 0.448, 0.336]),\n Coral2: fromRgb([0.932, 0.415, 0.312]),\n Coral3: fromRgb([0.804, 0.356, 0.27]),\n Coral4: fromRgb([0.545, 0.244, 0.185]),\n Cornsilk1: fromRgb([1, 0.972, 0.864]),\n Cornsilk2: fromRgb([0.932, 0.91, 0.804]),\n Cornsilk3: fromRgb([0.804, 0.785, 0.694]),\n Cornsilk4: fromRgb([0.545, 0.532, 0.47]),\n Cyan1: fromRgb([0, 1, 1]),\n Cyan2: fromRgb([0, 0.932, 0.932]),\n Cyan3: fromRgb([0, 0.804, 0.804]),\n Cyan4: fromRgb([0, 0.545, 0.545]),\n DarkGoldenrod1: fromRgb([1, 0.725, 0.06]),\n DarkGoldenrod2: fromRgb([0.932, 0.68, 0.055]),\n DarkGoldenrod3: fromRgb([0.804, 0.585, 0.048]),\n DarkGoldenrod4: fromRgb([0.545, 0.396, 0.03]),\n DarkOliveGreen1: fromRgb([0.792, 1, 0.44]),\n DarkOliveGreen2: fromRgb([0.736, 0.932, 0.408]),\n DarkOliveGreen3: fromRgb([0.635, 0.804, 0.352]),\n DarkOliveGreen4: fromRgb([0.43, 0.545, 0.24]),\n DarkOrange1: fromRgb([1, 0.498, 0]),\n DarkOrange2: fromRgb([0.932, 0.464, 0]),\n DarkOrange3: fromRgb([0.804, 0.4, 0]),\n DarkOrange4: fromRgb([0.545, 0.27, 0]),\n DarkOrchid1: fromRgb([0.75, 0.244, 1]),\n DarkOrchid2: fromRgb([0.698, 0.228, 0.932]),\n DarkOrchid3: fromRgb([0.604, 0.196, 0.804]),\n DarkOrchid4: fromRgb([0.408, 0.132, 0.545]),\n DarkSeaGreen1: fromRgb([0.756, 1, 0.756]),\n DarkSeaGreen2: fromRgb([0.705, 0.932, 0.705]),\n DarkSeaGreen3: fromRgb([0.608, 0.804, 0.608]),\n DarkSeaGreen4: fromRgb([0.41, 0.545, 0.41]),\n DarkSlateGray1: fromRgb([0.592, 1, 1]),\n DarkSlateGray2: fromRgb([0.552, 0.932, 0.932]),\n DarkSlateGray3: fromRgb([0.475, 0.804, 0.804]),\n DarkSlateGray4: fromRgb([0.32, 0.545, 0.545]),\n DeepPink1: fromRgb([1, 0.08, 0.576]),\n DeepPink2: fromRgb([0.932, 0.07, 0.536]),\n DeepPink3: fromRgb([0.804, 0.064, 0.464]),\n DeepPink4: fromRgb([0.545, 0.04, 0.312]),\n DeepSkyBlue1: fromRgb([0, 0.75, 1]),\n DeepSkyBlue2: fromRgb([0, 0.698, 0.932]),\n DeepSkyBlue3: fromRgb([0, 0.604, 0.804]),\n DeepSkyBlue4: fromRgb([0, 0.408, 0.545]),\n DodgerBlue1: fromRgb([0.116, 0.565, 1]),\n DodgerBlue2: fromRgb([0.11, 0.525, 0.932]),\n DodgerBlue3: fromRgb([0.094, 0.455, 0.804]),\n DodgerBlue4: fromRgb([0.064, 0.305, 0.545]),\n Firebrick1: fromRgb([1, 0.19, 0.19]),\n Firebrick2: fromRgb([0.932, 0.172, 0.172]),\n Firebrick3: fromRgb([0.804, 0.15, 0.15]),\n Firebrick4: fromRgb([0.545, 0.1, 0.1]),\n Gold1: fromRgb([1, 0.844, 0]),\n Gold2: fromRgb([0.932, 0.79, 0]),\n Gold3: fromRgb([0.804, 0.68, 0]),\n Gold4: fromRgb([0.545, 0.46, 0]),\n Goldenrod1: fromRgb([1, 0.756, 0.145]),\n Goldenrod2: fromRgb([0.932, 0.705, 0.132]),\n Goldenrod3: fromRgb([0.804, 0.608, 0.112]),\n Goldenrod4: fromRgb([0.545, 0.41, 0.08]),\n Green1: fromRgb([0, 1, 0]),\n Green2: fromRgb([0, 0.932, 0]),\n Green3: fromRgb([0, 0.804, 0]),\n Green4: fromRgb([0, 0.545, 0]),\n Honeydew1: fromRgb([0.94, 1, 0.94]),\n Honeydew2: fromRgb([0.88, 0.932, 0.88]),\n Honeydew3: fromRgb([0.756, 0.804, 0.756]),\n Honeydew4: fromRgb([0.512, 0.545, 0.512]),\n HotPink1: fromRgb([1, 0.43, 0.705]),\n HotPink2: fromRgb([0.932, 0.415, 0.655]),\n HotPink3: fromRgb([0.804, 0.376, 0.565]),\n HotPink4: fromRgb([0.545, 0.228, 0.385]),\n IndianRed1: fromRgb([1, 0.415, 0.415]),\n IndianRed2: fromRgb([0.932, 0.39, 0.39]),\n IndianRed3: fromRgb([0.804, 0.332, 0.332]),\n IndianRed4: fromRgb([0.545, 0.228, 0.228]),\n Ivory1: fromRgb([1, 1, 0.94]),\n Ivory2: fromRgb([0.932, 0.932, 0.88]),\n Ivory3: fromRgb([0.804, 0.804, 0.756]),\n Ivory4: fromRgb([0.545, 0.545, 0.512]),\n Khaki1: fromRgb([1, 0.965, 0.56]),\n Khaki2: fromRgb([0.932, 0.9, 0.52]),\n Khaki3: fromRgb([0.804, 0.776, 0.45]),\n Khaki4: fromRgb([0.545, 0.525, 0.305]),\n LavenderBlush1: fromRgb([1, 0.94, 0.96]),\n LavenderBlush2: fromRgb([0.932, 0.88, 0.898]),\n LavenderBlush3: fromRgb([0.804, 0.756, 0.772]),\n LavenderBlush4: fromRgb([0.545, 0.512, 0.525]),\n LemonChiffon1: fromRgb([1, 0.98, 0.804]),\n LemonChiffon2: fromRgb([0.932, 0.912, 0.75]),\n LemonChiffon3: fromRgb([0.804, 0.79, 0.648]),\n LemonChiffon4: fromRgb([0.545, 0.536, 0.44]),\n LightBlue1: fromRgb([0.75, 0.936, 1]),\n LightBlue2: fromRgb([0.698, 0.875, 0.932]),\n LightBlue3: fromRgb([0.604, 0.752, 0.804]),\n LightBlue4: fromRgb([0.408, 0.512, 0.545]),\n LightCyan1: fromRgb([0.88, 1, 1]),\n LightCyan2: fromRgb([0.82, 0.932, 0.932]),\n LightCyan3: fromRgb([0.705, 0.804, 0.804]),\n LightCyan4: fromRgb([0.48, 0.545, 0.545]),\n LightGoldenrod1: fromRgb([1, 0.925, 0.545]),\n LightGoldenrod2: fromRgb([0.932, 0.864, 0.51]),\n LightGoldenrod3: fromRgb([0.804, 0.745, 0.44]),\n LightGoldenrod4: fromRgb([0.545, 0.505, 0.298]),\n LightPink1: fromRgb([1, 0.684, 0.725]),\n LightPink2: fromRgb([0.932, 0.635, 0.68]),\n LightPink3: fromRgb([0.804, 0.55, 0.585]),\n LightPink4: fromRgb([0.545, 0.372, 0.396]),\n LightSalmon1: fromRgb([1, 0.628, 0.48]),\n LightSalmon2: fromRgb([0.932, 0.585, 0.448]),\n LightSalmon3: fromRgb([0.804, 0.505, 0.385]),\n LightSalmon4: fromRgb([0.545, 0.34, 0.26]),\n LightSkyBlue1: fromRgb([0.69, 0.888, 1]),\n LightSkyBlue2: fromRgb([0.644, 0.828, 0.932]),\n LightSkyBlue3: fromRgb([0.552, 0.712, 0.804]),\n LightSkyBlue4: fromRgb([0.376, 0.484, 0.545]),\n LightSteelBlue1: fromRgb([0.792, 0.884, 1]),\n LightSteelBlue2: fromRgb([0.736, 0.824, 0.932]),\n LightSteelBlue3: fromRgb([0.635, 0.71, 0.804]),\n LightSteelBlue4: fromRgb([0.43, 0.484, 0.545]),\n LightYellow1: fromRgb([1, 1, 0.88]),\n LightYellow2: fromRgb([0.932, 0.932, 0.82]),\n LightYellow3: fromRgb([0.804, 0.804, 0.705]),\n LightYellow4: fromRgb([0.545, 0.545, 0.48]),\n Magenta1: fromRgb([1, 0, 1]),\n Magenta2: fromRgb([0.932, 0, 0.932]),\n Magenta3: fromRgb([0.804, 0, 0.804]),\n Magenta4: fromRgb([0.545, 0, 0.545]),\n Maroon1: fromRgb([1, 0.204, 0.7]),\n Maroon2: fromRgb([0.932, 0.19, 0.655]),\n Maroon3: fromRgb([0.804, 0.16, 0.565]),\n Maroon4: fromRgb([0.545, 0.11, 0.385]),\n MediumOrchid1: fromRgb([0.88, 0.4, 1]),\n MediumOrchid2: fromRgb([0.82, 0.372, 0.932]),\n MediumOrchid3: fromRgb([0.705, 0.32, 0.804]),\n MediumOrchid4: fromRgb([0.48, 0.215, 0.545]),\n MediumPurple1: fromRgb([0.67, 0.51, 1]),\n MediumPurple2: fromRgb([0.624, 0.475, 0.932]),\n MediumPurple3: fromRgb([0.536, 0.408, 0.804]),\n MediumPurple4: fromRgb([0.365, 0.28, 0.545]),\n MistyRose1: fromRgb([1, 0.894, 0.884]),\n MistyRose2: fromRgb([0.932, 0.835, 0.824]),\n MistyRose3: fromRgb([0.804, 0.716, 0.71]),\n MistyRose4: fromRgb([0.545, 0.49, 0.484]),\n NavajoWhite1: fromRgb([1, 0.87, 0.68]),\n NavajoWhite2: fromRgb([0.932, 0.81, 0.63]),\n NavajoWhite3: fromRgb([0.804, 0.7, 0.545]),\n NavajoWhite4: fromRgb([0.545, 0.475, 0.37]),\n OliveDrab1: fromRgb([0.752, 1, 0.244]),\n OliveDrab2: fromRgb([0.7, 0.932, 0.228]),\n OliveDrab3: fromRgb([0.604, 0.804, 0.196]),\n OliveDrab4: fromRgb([0.41, 0.545, 0.132]),\n Orange1: fromRgb([1, 0.648, 0]),\n Orange2: fromRgb([0.932, 0.604, 0]),\n Orange3: fromRgb([0.804, 0.52, 0]),\n Orange4: fromRgb([0.545, 0.352, 0]),\n OrangeRed1: fromRgb([1, 0.27, 0]),\n OrangeRed2: fromRgb([0.932, 0.25, 0]),\n OrangeRed3: fromRgb([0.804, 0.215, 0]),\n OrangeRed4: fromRgb([0.545, 0.145, 0]),\n Orchid1: fromRgb([1, 0.512, 0.98]),\n Orchid2: fromRgb([0.932, 0.48, 0.912]),\n Orchid3: fromRgb([0.804, 0.41, 0.79]),\n Orchid4: fromRgb([0.545, 0.28, 0.536]),\n PaleGreen1: fromRgb([0.604, 1, 0.604]),\n PaleGreen2: fromRgb([0.565, 0.932, 0.565]),\n PaleGreen3: fromRgb([0.488, 0.804, 0.488]),\n PaleGreen4: fromRgb([0.33, 0.545, 0.33]),\n PaleTurquoise1: fromRgb([0.732, 1, 1]),\n PaleTurquoise2: fromRgb([0.684, 0.932, 0.932]),\n PaleTurquoise3: fromRgb([0.59, 0.804, 0.804]),\n PaleTurquoise4: fromRgb([0.4, 0.545, 0.545]),\n PaleVioletRed1: fromRgb([1, 0.51, 0.67]),\n PaleVioletRed2: fromRgb([0.932, 0.475, 0.624]),\n PaleVioletRed3: fromRgb([0.804, 0.408, 0.536]),\n PaleVioletRed4: fromRgb([0.545, 0.28, 0.365]),\n PeachPuff1: fromRgb([1, 0.855, 0.725]),\n PeachPuff2: fromRgb([0.932, 0.796, 0.68]),\n PeachPuff3: fromRgb([0.804, 0.688, 0.585]),\n PeachPuff4: fromRgb([0.545, 0.468, 0.396]),\n Pink1: fromRgb([1, 0.71, 0.772]),\n Pink2: fromRgb([0.932, 0.664, 0.72]),\n Pink3: fromRgb([0.804, 0.57, 0.62]),\n Pink4: fromRgb([0.545, 0.39, 0.424]),\n Plum1: fromRgb([1, 0.732, 1]),\n Plum2: fromRgb([0.932, 0.684, 0.932]),\n Plum3: fromRgb([0.804, 0.59, 0.804]),\n Plum4: fromRgb([0.545, 0.4, 0.545]),\n Purple1: fromRgb([0.608, 0.19, 1]),\n Purple2: fromRgb([0.57, 0.172, 0.932]),\n Purple3: fromRgb([0.49, 0.15, 0.804]),\n Purple4: fromRgb([0.332, 0.1, 0.545]),\n Red1: fromRgb([1, 0, 0]),\n Red2: fromRgb([0.932, 0, 0]),\n Red3: fromRgb([0.804, 0, 0]),\n Red4: fromRgb([0.545, 0, 0]),\n RosyBrown1: fromRgb([1, 0.756, 0.756]),\n RosyBrown2: fromRgb([0.932, 0.705, 0.705]),\n RosyBrown3: fromRgb([0.804, 0.608, 0.608]),\n RosyBrown4: fromRgb([0.545, 0.41, 0.41]),\n RoyalBlue1: fromRgb([0.284, 0.464, 1]),\n RoyalBlue2: fromRgb([0.264, 0.43, 0.932]),\n RoyalBlue3: fromRgb([0.228, 0.372, 0.804]),\n RoyalBlue4: fromRgb([0.152, 0.25, 0.545]),\n Salmon1: fromRgb([1, 0.55, 0.41]),\n Salmon2: fromRgb([0.932, 0.51, 0.385]),\n Salmon3: fromRgb([0.804, 0.44, 0.33]),\n Salmon4: fromRgb([0.545, 0.298, 0.224]),\n SeaGreen1: fromRgb([0.33, 1, 0.624]),\n SeaGreen2: fromRgb([0.305, 0.932, 0.58]),\n SeaGreen3: fromRgb([0.264, 0.804, 0.5]),\n SeaGreen4: fromRgb([0.18, 0.545, 0.34]),\n Seashell1: fromRgb([1, 0.96, 0.932]),\n Seashell2: fromRgb([0.932, 0.898, 0.87]),\n Seashell3: fromRgb([0.804, 0.772, 0.75]),\n Seashell4: fromRgb([0.545, 0.525, 0.51]),\n Sienna1: fromRgb([1, 0.51, 0.28]),\n Sienna2: fromRgb([0.932, 0.475, 0.26]),\n Sienna3: fromRgb([0.804, 0.408, 0.224]),\n Sienna4: fromRgb([0.545, 0.28, 0.15]),\n SkyBlue1: fromRgb([0.53, 0.808, 1]),\n SkyBlue2: fromRgb([0.494, 0.752, 0.932]),\n SkyBlue3: fromRgb([0.424, 0.65, 0.804]),\n SkyBlue4: fromRgb([0.29, 0.44, 0.545]),\n SlateBlue1: fromRgb([0.512, 0.435, 1]),\n SlateBlue2: fromRgb([0.48, 0.404, 0.932]),\n SlateBlue3: fromRgb([0.41, 0.35, 0.804]),\n SlateBlue4: fromRgb([0.28, 0.235, 0.545]),\n SlateGray1: fromRgb([0.776, 0.888, 1]),\n SlateGray2: fromRgb([0.725, 0.828, 0.932]),\n SlateGray3: fromRgb([0.624, 0.712, 0.804]),\n SlateGray4: fromRgb([0.424, 0.484, 0.545]),\n Snow1: fromRgb([1, 0.98, 0.98]),\n Snow2: fromRgb([0.932, 0.912, 0.912]),\n Snow3: fromRgb([0.804, 0.79, 0.79]),\n Snow4: fromRgb([0.545, 0.536, 0.536]),\n SpringGreen1: fromRgb([0, 1, 0.498]),\n SpringGreen2: fromRgb([0, 0.932, 0.464]),\n SpringGreen3: fromRgb([0, 0.804, 0.4]),\n SpringGreen4: fromRgb([0, 0.545, 0.27]),\n SteelBlue1: fromRgb([0.39, 0.72, 1]),\n SteelBlue2: fromRgb([0.36, 0.675, 0.932]),\n SteelBlue3: fromRgb([0.31, 0.58, 0.804]),\n SteelBlue4: fromRgb([0.21, 0.392, 0.545]),\n Tan1: fromRgb([1, 0.648, 0.31]),\n Tan2: fromRgb([0.932, 0.604, 0.288]),\n Tan3: fromRgb([0.804, 0.52, 0.248]),\n Tan4: fromRgb([0.545, 0.352, 0.17]),\n Thistle1: fromRgb([1, 0.884, 1]),\n Thistle2: fromRgb([0.932, 0.824, 0.932]),\n Thistle3: fromRgb([0.804, 0.71, 0.804]),\n Thistle4: fromRgb([0.545, 0.484, 0.545]),\n Tomato1: fromRgb([1, 0.39, 0.28]),\n Tomato2: fromRgb([0.932, 0.36, 0.26]),\n Tomato3: fromRgb([0.804, 0.31, 0.224]),\n Tomato4: fromRgb([0.545, 0.21, 0.15]),\n Turquoise1: fromRgb([0, 0.96, 1]),\n Turquoise2: fromRgb([0, 0.898, 0.932]),\n Turquoise3: fromRgb([0, 0.772, 0.804]),\n Turquoise4: fromRgb([0, 0.525, 0.545]),\n VioletRed1: fromRgb([1, 0.244, 0.59]),\n VioletRed2: fromRgb([0.932, 0.228, 0.55]),\n VioletRed3: fromRgb([0.804, 0.196, 0.47]),\n VioletRed4: fromRgb([0.545, 0.132, 0.32]),\n Wheat1: fromRgb([1, 0.905, 0.73]),\n Wheat2: fromRgb([0.932, 0.848, 0.684]),\n Wheat3: fromRgb([0.804, 0.73, 0.59]),\n Wheat4: fromRgb([0.545, 0.494, 0.4]),\n Yellow1: fromRgb([1, 1, 0]),\n Yellow2: fromRgb([0.932, 0.932, 0]),\n Yellow3: fromRgb([0.804, 0.804, 0]),\n Yellow4: fromRgb([0.545, 0.545, 0]),\n Gray0: fromRgb([0.745, 0.745, 0.745]),\n Green0: fromRgb([0, 1, 0]),\n Grey0: fromRgb([0.745, 0.745, 0.745]),\n Maroon0: fromRgb([0.69, 0.19, 0.376]),\n Purple0: fromRgb([0.628, 0.125, 0.94])\n};\n\n// package/xcolor/libs/parser.ts\nimport { XColorPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\n\n// package/xcolor/libs/xcolor.ts\nvar XColorCoreModelToColor = {\n rgb: ([r, g, b]) => Color2([r * 255, g * 255, b * 255], \"rgb\"),\n cmy: ([c, m, y]) => XColorCoreModelToColor.rgb([1 - c, 1 - m, 1 - y]),\n cmyk: ([c, m, y, k]) => Color2([c * 255, m * 255, y * 255, k * 100], \"cmyk\"),\n hsb: ([h, s, b]) => Color2([h * 360, s * 100, b * 100], \"hsv\"),\n gray: ([v]) => Color2([v * 255, v * 255, v * 255], \"rgb\")\n};\nvar XColorModelToColor = {\n wave: ([lambda]) => {\n const gamma = 0.8;\n let baseRgb = [0, 0, 0];\n if (380 <= lambda && lambda < 440) {\n baseRgb = [(440 - lambda) / (440 - 380), 0, 1];\n }\n if (440 <= lambda && lambda < 490) {\n baseRgb = [0, (lambda - 440) / (490 - 440), 1];\n }\n if (490 <= lambda && lambda < 510) {\n baseRgb = [0, 1, (510 - lambda) / (510 - 490)];\n }\n if (510 <= lambda && lambda < 580) {\n baseRgb = [(lambda - 510) / (580 - 510), 1, 0];\n }\n if (580 <= lambda && lambda < 6450) {\n baseRgb = [1, (645 - lambda) / (645 - 580), 0];\n }\n if (645 <= lambda && lambda <= 780) {\n baseRgb = [1, 0, 0];\n }\n let f = 1;\n if (380 <= lambda && 420 < lambda) {\n f = 0.3 + 0.7 * (lambda - 380) / (420 - 380);\n }\n if (700 < lambda && lambda <= 780) {\n f = 0.3 + 0.7 * (780 - lambda) / (780 - 700);\n }\n const rgb = [\n Math.pow(baseRgb[0] * f, gamma),\n Math.pow(baseRgb[1] * f, gamma),\n Math.pow(baseRgb[2] * f, gamma)\n ];\n return Color2([rgb[0] * 255, rgb[1] * 255, rgb[2] * 255], \"rgb\");\n },\n Hsb: ([h, s, b]) => XColorCoreModelToColor.hsb([h / 360, s, b]),\n HSB: ([h, s, b]) => XColorCoreModelToColor.hsb([h / 240, s / 240, b / 240]),\n HTML: ([v]) => v.startsWith(\"#\") ? Color2(v) : Color2(`#${v}`),\n RGB: ([r, g, b]) => Color2([r, g, b], \"rgb\"),\n Gray: ([v]) => XColorCoreModelToColor.gray([v / 15]),\n ...XColorCoreModelToColor\n};\nvar PREDEFINED_XCOLOR_COLORS = {\n // Core colors\n red: XColorCoreModelToColor.rgb([1, 0, 0]),\n green: XColorCoreModelToColor.rgb([0, 1, 0]),\n blue: XColorCoreModelToColor.rgb([0, 0, 1]),\n brown: XColorCoreModelToColor.rgb([0.75, 0.5, 0.25]),\n lime: XColorCoreModelToColor.rgb([0.75, 1, 0]),\n orange: XColorCoreModelToColor.rgb([1, 0.5, 0]),\n pink: XColorCoreModelToColor.rgb([1, 0.75, 0.75]),\n purple: XColorCoreModelToColor.rgb([0.75, 0, 0.25]),\n teal: XColorCoreModelToColor.rgb([0, 0.5, 0.5]),\n violet: XColorCoreModelToColor.rgb([0.5, 0, 0.5]),\n cyan: XColorCoreModelToColor.rgb([0, 1, 1]),\n magenta: XColorCoreModelToColor.rgb([1, 0, 1]),\n yellow: XColorCoreModelToColor.rgb([1, 1, 0]),\n olive: XColorCoreModelToColor.rgb([0.5, 0.5, 0]),\n black: XColorCoreModelToColor.rgb([0, 0, 0]),\n darkgray: XColorCoreModelToColor.rgb([0.25, 0.25, 0.25]),\n gray: XColorCoreModelToColor.rgb([0.5, 0.5, 0.5]),\n lightgray: XColorCoreModelToColor.rgb([0.75, 0.75, 0.75]),\n white: XColorCoreModelToColor.rgb([1, 1, 1]),\n ...DVI_PS_NAMES,\n ...SVG_NAMES,\n ...X11_NAMES\n};\n\n// package/xcolor/libs/xcolor-macro-to-hex.ts\nimport { getArgsContent as getArgsContent2 } from \"@unified-latex/unified-latex-util-arguments\";\nimport { printRaw as printRaw2 } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { deleteComments as deleteComments2 } from \"@unified-latex/unified-latex-util-comments\";\n\n// package/xcolor/libs/color-to-textcolor-macro.ts\nimport { arg as arg5 } from \"@unified-latex/unified-latex-builder\";\n\n// package/xparse/provides.ts\nvar macros14 = {\n NewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n RenewDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n ProvideDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n DeclareDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n NewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true }\n },\n RenewDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true }\n },\n ProvideDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true }\n },\n DeclareDocumentEnvironment: {\n signature: \"m m m m\",\n renderInfo: { breakAround: true }\n },\n NewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n RenewExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n ProvideExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n DeclareExpandableDocumentCommand: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n RequirePackage: {\n signature: \"o m\",\n renderInfo: { pgfkeysArgs: true, breakAround: true }\n },\n DeclareOption: { signature: \"m m\", renderInfo: { breakAround: true } }\n};\nvar environments14 = {};\n\n// package/beamer/provides.ts\nvar macros15 = {\n mode: { signature: \"s d<> d{}\", renderInfo: { breakAround: true } },\n insertnavigation: { signature: \"m\", renderInfo: { breakAround: true } },\n insertsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n insertsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n insertauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortauthor: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortdate: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortinstitute: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshortpart: { signature: \"o\", renderInfo: { breakAround: true } },\n insertshorttitle: { signature: \"o\", renderInfo: { breakAround: true } },\n insertsubsectionnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n insertsubsectionnavigationhorizontal: {\n signature: \"m m m\",\n renderInfo: { breakAround: true }\n },\n insertverticalnavigation: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n usebeamercolor: { signature: \"s m\", renderInfo: { breakAround: true } },\n usebeamertemplate: { signature: \"s m\", renderInfo: { breakAround: true } },\n setbeamercolor: {\n signature: \"m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n setbeamersize: {\n signature: \"m o o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n setbeamertemplate: {\n signature: \"m o o d{}\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n newcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\"\n ]\n }\n },\n renewcommand: {\n signature: \"s d<> +m o +o +m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\n \"starred\",\n null,\n \"name\",\n \"numArgs\",\n \"default\",\n \"body\"\n ]\n }\n },\n newenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true }\n },\n renewenvironment: {\n signature: \"s d<> m o o m m\",\n renderInfo: { breakAround: true }\n },\n resetcounteronoverlays: {\n signature: \"m\",\n renderInfo: { breakAround: true }\n },\n resetcountonoverlays: { signature: \"m\", renderInfo: { breakAround: true } },\n logo: { signature: \"m\", renderInfo: { breakAround: true } },\n frametitle: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n framesubtitle: { signature: \"d<> m\", renderInfo: { breakAround: true } },\n pause: { signature: \"o\" },\n onslide: { signature: \"t+ t* d<> d{}\" },\n only: { signature: \"d<> m d<>\" },\n uncover: { signature: \"d<> m\" },\n visible: { signature: \"d<> m\" },\n invisible: { signature: \"d<> m\" },\n alt: { signature: \"d<> m m d<>\" },\n temporal: { signature: \"r<> m m m\" },\n item: {\n signature: \"d<> o d<>\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [null, \"label\", null]\n }\n },\n label: { signature: \"d<> o m\" },\n // cleveref adds an optional argument to label; this gives maximum compatibility.\n action: { signature: \"d<> m\" },\n beamerdefaultoverlayspecification: { signature: \"m\" },\n titlegraphic: { signature: \"m\", renderInfo: { breakAround: true } },\n subject: { signature: \"m\", renderInfo: { breakAround: true } },\n keywords: { signature: \"m\", renderInfo: { breakAround: true } },\n lecture: { signature: \"o m m\", renderInfo: { breakAround: true } },\n partpage: { renderInfo: { breakAround: true } },\n sectionpage: { renderInfo: { breakAround: true } },\n subsectionpage: { renderInfo: { breakAround: true } },\n AtBeginLecture: { signature: \"m\", renderInfo: { breakAround: true } },\n AtBeginPart: { signature: \"m\", renderInfo: { breakAround: true } },\n tableofcontents: {\n signature: \"o\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n againframe: { signature: \"d<> o o m\", renderInfo: { breakAround: true } },\n framezoom: {\n signature: \"r<> r<> o r() r()\",\n renderInfo: { breakAround: true }\n },\n column: { signature: \"d<> o m\", renderInfo: { breakAround: true } },\n animate: { signature: \"r<>\", renderInfo: { breakAround: true } },\n animatevalue: { signature: \"r<> m m m\", renderInfo: { breakAround: true } },\n sound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n hyperlinksound: {\n signature: \"o m m\",\n renderInfo: { breakAround: true, pgfkeysArgs: true }\n },\n hyperlinkmute: { signature: \"m\", renderInfo: { breakAround: true } },\n // These signatures conflict with the default signatures.\n // Care must be taken when processing an AST.\n section: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"]\n }\n },\n subsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"]\n }\n },\n subsubsection: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"]\n }\n },\n part: {\n signature: \"s d<> o m\",\n renderInfo: {\n breakAround: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"]\n }\n },\n bibitem: {\n signature: \"s d<> o m\",\n renderInfo: {\n hangingIndent: true,\n namedArguments: [\"starred\", null, \"tocTitle\", \"title\"]\n }\n }\n};\nvar environments15 = {\n frame: {\n signature: \"!d<> !o !o !d{} !d{}\"\n },\n block: {\n signature: \"!d<> !d{} !d<>\"\n },\n alertblock: {\n signature: \"!d<> !d{} !d<>\"\n },\n exampleblock: {\n signature: \"!d<> !d{} !d<>\"\n },\n onlyenv: {\n signature: \"!d<>\"\n },\n altenv: {\n signature: \"!d<> m m m m !d<>\"\n },\n overlayarea: { signature: \"m m\" },\n overprint: { signature: \"o\" },\n actionenv: { signature: \"!d<>\" },\n columns: { signature: \"d<> o\" },\n column: { signature: \"d<> o m\" }\n};\n\n// package/multicol/provides.ts\nvar macros16 = {\n columnbreak: { renderInfo: { breakAround: true } }\n};\nvar environments16 = {\n multicols: {\n signature: \"m o o\"\n },\n \"multicols*\": {\n signature: \"m o o\"\n }\n};\n\n// index.ts\nvar macroInfo = {\n cleveref: macros,\n exam: macros2,\n geometry: macros3,\n hyperref: macros4,\n latex2e: macros5,\n listings: macros6,\n makeidx: macros7,\n mathtools: macros8,\n minted: macros9,\n nicematrix: macros10,\n systeme: macros11,\n tikz: macros12,\n xcolor: macros13,\n xparse: macros14,\n beamer: macros15,\n multicol: macros16\n};\nvar environmentInfo = {\n cleveref: environments,\n exam: environments2,\n geometry: environments3,\n hyperref: environments4,\n latex2e: environments5,\n listings: environments6,\n makeidx: environments7,\n mathtools: environments8,\n minted: environments9,\n nicematrix: environments10,\n systeme: environments11,\n tikz: environments12,\n xcolor: environments13,\n xparse: environments14,\n beamer: environments15,\n multicol: environments16\n};\nexport {\n environmentInfo,\n macroInfo\n};\n//# sourceMappingURL=index.js.map\n","// libs/process-environment.ts\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\";\nfunction processEnvironment(envNode, envInfo) {\n if (envInfo.signature && envNode.args == null) {\n const { args } = gobbleArguments(envNode.content, envInfo.signature);\n envNode.args = args;\n }\n updateRenderInfo(envNode, envInfo.renderInfo);\n if (typeof envInfo.processContent === \"function\") {\n envNode.content = envInfo.processContent(envNode.content);\n }\n}\nfunction processEnvironments(tree, environments) {\n const isRelevantEnvironment = match.createEnvironmentMatcher(environments);\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// libs/unified-latex-process-environment.ts\nimport { visit as visit2 } from \"@unified-latex/unified-latex-util-visit\";\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw as printRaw2 } from \"@unified-latex/unified-latex-util-print-raw\";\nvar unifiedLatexProcessEnvironments = function unifiedLatexAttachMacroArguments(options) {\n const { environments = {} } = options || {};\n const isRelevantEnvironment = match2.createEnvironmentMatcher(environments);\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 visit2(\n tree,\n {\n leave: (node) => {\n const envName = printRaw2(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};\nexport {\n processEnvironment,\n processEnvironments,\n unifiedLatexProcessEnvironments\n};\n//# sourceMappingURL=index.js.map\n","// libs/find-region.ts\nfunction findRegionInArray(tree, start, end) {\n const ret = [];\n let currRegion = { start: void 0, end: tree.length };\n for (let i = 0; i < tree.length; i++) {\n const node = tree[i];\n if (start(node)) {\n currRegion.start = i;\n }\n if (end(node)) {\n currRegion.end = i + 1;\n ret.push(currRegion);\n currRegion = { start: void 0, end: tree.length };\n }\n }\n if (currRegion.start != null) {\n ret.push(currRegion);\n }\n return ret;\n}\n\n// libs/special-regions.ts\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\n\n// libs/regions.ts\nfunction refineRegions(regions) {\n const _regions = [...regions];\n _regions.sort((a, b) => a.start - b.start);\n const cutPointsSet = new Set(_regions.flatMap((r) => [r.start, r.end]));\n const cutPoints = Array.from(cutPointsSet);\n cutPoints.sort((a, b) => a - b);\n const retRegions = [];\n const retRegionsContainedIn = [];\n let seekIndex = 0;\n for (let i = 0; i < cutPoints.length - 1; i++) {\n const start = cutPoints[i];\n const end = cutPoints[i + 1];\n const region = { start, end };\n const regionContainedIn = /* @__PURE__ */ new Set();\n let encounteredEndPastStart = false;\n for (let j = seekIndex; j < _regions.length; j++) {\n const superRegion = _regions[j];\n if (superRegion.end >= region.start) {\n encounteredEndPastStart = true;\n }\n if (!encounteredEndPastStart && superRegion.end < region.start) {\n seekIndex = j + 1;\n continue;\n }\n if (superRegion.start > end) {\n break;\n }\n if (superRegion.start <= region.start && superRegion.end >= region.end) {\n encounteredEndPastStart = true;\n regionContainedIn.add(superRegion);\n }\n }\n if (regionContainedIn.size > 0) {\n retRegions.push(region);\n retRegionsContainedIn.push(regionContainedIn);\n }\n }\n return { regions: retRegions, regionsContainedIn: retRegionsContainedIn };\n}\nfunction splitByRegions(array, regionsRecord) {\n const ret = [];\n const indices = [0, array.length];\n const reverseMap = {};\n for (const [key, records] of Object.entries(regionsRecord)) {\n indices.push(\n ...records.flatMap((r) => {\n reverseMap[\"\" + [r.start, r.end]] = key;\n return [r.start, r.end];\n })\n );\n }\n indices.sort((a, b) => a - b);\n for (let i = 0; i < indices.length - 1; i++) {\n const start = indices[i];\n const end = indices[i + 1];\n if (start === end) {\n continue;\n }\n const regionKey = reverseMap[\"\" + [start, end]];\n ret.push([regionKey || null, array.slice(start, end)]);\n }\n return ret;\n}\n\n// libs/special-regions.ts\nimport { SKIP, visit as visit2 } from \"@unified-latex/unified-latex-util-visit\";\n\n// libs/reparse-macro-names.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { EXIT, visit } from \"@unified-latex/unified-latex-util-visit\";\nfunction escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction buildWordRegex(allowedSet) {\n const regexpStr = `^(${[\"\\\\p{L}\"].concat(Array.from(allowedSet).map(escapeRegExp)).join(\"|\")})*`;\n return new RegExp(regexpStr, \"u\");\n}\nfunction hasReparsableMacroNamesInArray(tree, allowedTokens) {\n for (let i = 0; i < tree.length; i++) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (match.anyMacro(macro) && match.anyString(string)) {\n if (allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) || allowedTokens.has(string.content.charAt(0))) {\n return true;\n }\n }\n }\n return false;\n}\nfunction hasReparsableMacroNames(tree, allowedTokens) {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n let ret = false;\n visit(\n tree,\n (nodes) => {\n if (hasReparsableMacroNamesInArray(nodes, _allowedTokens)) {\n ret = true;\n return EXIT;\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n return ret;\n}\nfunction reparseMacroNamesInArray(tree, allowedTokens) {\n var _a, _b, _c;\n const regex = buildWordRegex(allowedTokens);\n let i = 0;\n while (i < tree.length) {\n const macro = tree[i];\n const string = tree[i + 1];\n if (match.anyMacro(macro) && // The _^ macros in math mode should not be extended no-matter what;\n // So we check to make sure that the macro we're dealing with has the default escape token.\n (macro.escapeToken == null || macro.escapeToken === \"\\\\\") && match.anyString(string) && // There are two options. Either the macro ends with the special character,\n // e.g. `\\@foo` or the special character starts the next string, e.g. `\\foo@`.\n (allowedTokens.has(\n macro.content.charAt(macro.content.length - 1)\n ) || allowedTokens.has(string.content.charAt(0)))) {\n const match3 = string.content.match(regex);\n const takeable = match3 ? match3[0] : \"\";\n if (takeable.length > 0) {\n if (takeable.length === string.content.length) {\n macro.content += string.content;\n tree.splice(i + 1, 1);\n if (macro.position && ((_a = string.position) == null ? void 0 : _a.end)) {\n macro.position.end = string.position.end;\n }\n } else {\n macro.content += takeable;\n string.content = string.content.slice(takeable.length);\n if ((_b = macro.position) == null ? void 0 : _b.end) {\n macro.position.end.offset += takeable.length;\n macro.position.end.column += takeable.length;\n }\n if ((_c = string.position) == null ? void 0 : _c.start) {\n string.position.start.offset += takeable.length;\n string.position.start.column += takeable.length;\n }\n }\n } else {\n i++;\n }\n } else {\n ++i;\n }\n }\n}\nfunction reparseMacroNames(tree, allowedTokens) {\n if (typeof allowedTokens === \"string\") {\n allowedTokens = new Set(allowedTokens.split(\"\"));\n }\n const _allowedTokens = allowedTokens;\n for (const v of _allowedTokens) {\n if (v.length > 1) {\n throw new Error(\n `Only single characters are allowed as \\`allowedTokens\\` when reparsing macro names, not \\`${v}\\`.`\n );\n }\n }\n visit(\n tree,\n (nodes) => {\n reparseMacroNamesInArray(nodes, _allowedTokens);\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\n\n// libs/special-regions.ts\nvar expl3Find = {\n start: match2.createMacroMatcher([\"ExplSyntaxOn\"]),\n end: match2.createMacroMatcher([\"ExplSyntaxOff\"])\n};\nvar atLetterFind = {\n start: match2.createMacroMatcher([\"makeatletter\"]),\n end: match2.createMacroMatcher([\"makeatother\"])\n};\nfunction findExpl3AndAtLetterRegionsInArray(tree) {\n const expl3 = findRegionInArray(tree, expl3Find.start, expl3Find.end);\n const atLetter = findRegionInArray(\n tree,\n atLetterFind.start,\n atLetterFind.end\n );\n const regionMap = new Map([\n ...expl3.map((x) => [x, \"expl\"]),\n ...atLetter.map((x) => [x, \"atLetter\"])\n ]);\n const all = refineRegions([...expl3, ...atLetter]);\n const ret = {\n explOnly: [],\n atLetterOnly: [],\n both: []\n };\n for (let i = 0; i < all.regions.length; i++) {\n const region = all.regions[i];\n const containedIn = all.regionsContainedIn[i];\n if (containedIn.size === 2) {\n ret.both.push(region);\n continue;\n }\n for (const v of containedIn.values()) {\n if (regionMap.get(v) === \"expl\") {\n ret.explOnly.push(region);\n }\n if (regionMap.get(v) === \"atLetter\") {\n ret.atLetterOnly.push(region);\n }\n }\n }\n ret.explOnly = ret.explOnly.filter((r) => r.end - r.start > 1);\n ret.atLetterOnly = ret.atLetterOnly.filter((r) => r.end - r.start > 1);\n ret.both = ret.both.filter((r) => r.end - r.start > 1);\n return ret;\n}\nvar atLetterSet = /* @__PURE__ */ new Set([\"@\"]);\nvar explSet = /* @__PURE__ */ new Set([\"_\", \":\"]);\nvar bothSet = /* @__PURE__ */ new Set([\"_\", \":\", \"@\"]);\nfunction reparseExpl3AndAtLetterRegions(tree) {\n visit2(\n tree,\n {\n leave: (nodes) => {\n const regions = findExpl3AndAtLetterRegionsInArray(nodes);\n const totalNumRegions = regions.both.length + regions.atLetterOnly.length + regions.explOnly.length;\n if (totalNumRegions === 0) {\n return;\n }\n const splits = splitByRegions(nodes, regions);\n const processed = [];\n for (const [key, slice] of splits) {\n switch (key) {\n case null:\n processed.push(...slice);\n continue;\n case \"atLetterOnly\":\n reparseMacroNames(slice, atLetterSet);\n processed.push(...slice);\n continue;\n case \"explOnly\":\n reparseMacroNames(slice, explSet);\n processed.push(...slice);\n continue;\n case \"both\":\n reparseMacroNames(slice, bothSet);\n processed.push(...slice);\n continue;\n default:\n throw new Error(\n `Unexpected case when splitting ${key}`\n );\n }\n }\n nodes.length = 0;\n nodes.push(...processed);\n return SKIP;\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n}\nexport {\n findExpl3AndAtLetterRegionsInArray,\n findRegionInArray,\n hasReparsableMacroNames,\n hasReparsableMacroNamesInArray,\n reparseExpl3AndAtLetterRegions,\n reparseMacroNames,\n reparseMacroNamesInArray\n};\n//# sourceMappingURL=index.js.map\n","// libs/compiler-ast.ts\nvar unifiedLatexAstComplier = function unifiedLatexAstComplier2() {\n Object.assign(this, { Compiler: (x) => x });\n};\n\n// libs/plugin-from-string.ts\nimport { unified } from \"unified\";\nimport { environmentInfo, macroInfo } from \"@unified-latex/unified-latex-ctan\";\nimport {\n unifiedLatexTrimEnvironmentContents,\n unifiedLatexTrimRoot\n} from \"@unified-latex/unified-latex-util-trim\";\n\n// libs/parse-minimal.ts\nimport { LatexPegParser } from \"@unified-latex/unified-latex-util-pegjs\";\nfunction parseMinimal(str) {\n return LatexPegParser.parse(str);\n}\nfunction parseMathMinimal(str) {\n return LatexPegParser.parse(str, { startRule: \"math\" });\n}\n\n// libs/plugin-from-string-minimal.ts\nvar unifiedLatexFromStringMinimal = function unifiedLatexFromStringMinimal2(options) {\n const parser2 = (str) => {\n if ((options == null ? void 0 : options.mode) === \"math\") {\n return {\n type: \"root\",\n content: parseMathMinimal(str),\n _renderInfo: { inMathMode: true }\n };\n }\n return parseMinimal(str);\n };\n Object.assign(this, { Parser: parser2 });\n};\n\n// libs/process-macros-and-environments.ts\nimport { visit as visit2 } from \"@unified-latex/unified-latex-util-visit\";\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw as printRaw2 } from \"@unified-latex/unified-latex-util-print-raw\";\n\n// libs/reparse-math.ts\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nfunction unifiedLatexReparseMathConstructPlugin({\n mathEnvs,\n mathMacros\n}) {\n const isMathEnvironment = match.createEnvironmentMatcher(mathEnvs);\n const isMathMacro = match.createMacroMatcher(mathMacros);\n return (tree) => {\n visit(\n tree,\n (node) => {\n if (match.anyMacro(node)) {\n for (const arg of node.args || []) {\n if (arg.content.length > 0 && !wasParsedInMathMode(arg.content)) {\n arg.content = parseMathMinimal(\n printRaw(arg.content)\n );\n }\n }\n }\n if (match.anyEnvironment(node)) {\n if (!wasParsedInMathMode(node.content)) {\n node.content = parseMathMinimal(printRaw(node.content));\n }\n }\n },\n {\n test: (node) => isMathEnvironment(node) || isMathMacro(node)\n }\n );\n };\n}\nfunction wasParsedInMathMode(nodes) {\n return !nodes.some(\n (node) => (\n // If there are multi-char strings or ^ and _ have been parsed as strings, we know\n // that we were not parsed in math mode.\n match.anyString(node) && node.content.length > 1 || match.string(node, \"^\") || match.string(node, \"_\")\n )\n );\n}\n\n// libs/process-macros-and-environments.ts\nimport { attachMacroArgsInArray } from \"@unified-latex/unified-latex-util-arguments\";\nimport { processEnvironment } from \"@unified-latex/unified-latex-util-environments\";\nvar unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse = function unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse2(options) {\n const { environments = {}, macros = {} } = options || {};\n const mathMacros = Object.fromEntries(\n Object.entries(macros).filter(\n ([_, info]) => {\n var _a;\n return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true;\n }\n )\n );\n const mathEnvs = Object.fromEntries(\n Object.entries(environments).filter(\n ([_, info]) => {\n var _a;\n return ((_a = info.renderInfo) == null ? void 0 : _a.inMathMode) === true;\n }\n )\n );\n const mathReparser = unifiedLatexReparseMathConstructPlugin({\n mathEnvs: Object.keys(mathEnvs),\n mathMacros: Object.keys(mathMacros)\n });\n const isRelevantEnvironment = match2.createEnvironmentMatcher(environments);\n const isRelevantMathEnvironment = match2.createEnvironmentMatcher(mathEnvs);\n return (tree) => {\n visit2(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, mathMacros);\n },\n leave: (node) => {\n if (!isRelevantMathEnvironment(node)) {\n return;\n }\n const envName = printRaw2(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 { includeArrays: true }\n );\n mathReparser(tree);\n visit2(\n tree,\n {\n enter: (nodes) => {\n if (!Array.isArray(nodes)) {\n return;\n }\n attachMacroArgsInArray(nodes, macros);\n },\n leave: (node) => {\n if (!isRelevantEnvironment(node)) {\n return;\n }\n const envName = printRaw2(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 { includeArrays: true }\n );\n };\n};\n\n// libs/process-at-letter-and-expl-macros.ts\nimport { reparseExpl3AndAtLetterRegions } from \"@unified-latex/unified-latex-util-catcode\";\nimport {\n hasReparsableMacroNames,\n reparseMacroNames\n} from \"@unified-latex/unified-latex-util-catcode\";\nvar unifiedLatexProcessAtLetterAndExplMacros = function unifiedLatexProcessAtLetterAndExplMacros2(options) {\n let {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false\n } = options || {};\n return (tree) => {\n reparseExpl3AndAtLetterRegions(tree);\n if (atLetter || expl3) {\n autodetectExpl3AndAtLetter = false;\n }\n if (autodetectExpl3AndAtLetter) {\n atLetter = hasReparsableMacroNames(tree, \"@\");\n expl3 = hasReparsableMacroNames(tree, \"_\");\n }\n const charSet = /* @__PURE__ */ new Set();\n if (atLetter) {\n charSet.add(\"@\");\n }\n if (expl3) {\n charSet.add(\":\");\n charSet.add(\"_\");\n }\n if (charSet.size > 0) {\n reparseMacroNames(tree, charSet);\n }\n };\n};\n\n// libs/plugin-from-string.ts\nvar unifiedLatexFromString = function unifiedLatexFromString2(options) {\n const {\n mode = \"regular\",\n macros = {},\n environments = {},\n flags: {\n atLetter = false,\n expl3 = false,\n autodetectExpl3AndAtLetter = false\n } = {}\n } = options || {};\n const allMacroInfo = Object.assign(\n {},\n ...Object.values(macroInfo),\n macros\n );\n const allEnvInfo = Object.assign(\n {},\n ...Object.values(environmentInfo),\n environments\n );\n const fullParser = unified().use(unifiedLatexFromStringMinimal, { mode }).use(unifiedLatexProcessAtLetterAndExplMacros, {\n atLetter,\n expl3,\n autodetectExpl3AndAtLetter\n }).use(unifiedLatexProcessMacrosAndEnvironmentsWithMathReparse, {\n macros: allMacroInfo,\n environments: allEnvInfo\n }).use(unifiedLatexTrimEnvironmentContents).use(unifiedLatexTrimRoot).use(unifiedLatexAstComplier);\n const parser2 = (str) => {\n const file = fullParser.processSync({ value: str });\n return file.result;\n };\n Object.assign(this, { Parser: parser2 });\n};\n\n// libs/parse.ts\nimport { unified as unified2 } from \"unified\";\nvar parser = unified2().use(unifiedLatexFromString).freeze();\nfunction parse(str) {\n return parser.parse(str);\n}\nfunction getParser(options) {\n return options ? unified2().use(unifiedLatexFromString, options).freeze() : parser;\n}\n\n// libs/parse-math.ts\nimport { unified as unified3 } from \"unified\";\nimport { printRaw as printRaw3 } from \"@unified-latex/unified-latex-util-print-raw\";\nfunction parseMath(str) {\n if (typeof str !== \"string\") {\n str = printRaw3(str);\n }\n const file = unified3().use(unifiedLatexFromString, { mode: \"math\" }).use(unifiedLatexAstComplier).processSync({ value: str });\n return file.result.content;\n}\nexport {\n getParser,\n parse,\n parseMath,\n parseMathMinimal,\n parseMinimal,\n unifiedLatexAstComplier,\n unifiedLatexFromString,\n unifiedLatexFromStringMinimal\n};\n//# sourceMappingURL=index.js.map\n","var __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\n\n// node_modules/prettier/doc.mjs\nvar __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar public_exports = {};\n__export(public_exports, {\n builders: () => builders,\n printer: () => printer,\n utils: () => utils\n});\nvar DOC_TYPE_STRING = \"string\";\nvar DOC_TYPE_ARRAY = \"array\";\nvar DOC_TYPE_CURSOR = \"cursor\";\nvar DOC_TYPE_INDENT = \"indent\";\nvar DOC_TYPE_ALIGN = \"align\";\nvar DOC_TYPE_TRIM = \"trim\";\nvar DOC_TYPE_GROUP = \"group\";\nvar DOC_TYPE_FILL = \"fill\";\nvar DOC_TYPE_IF_BREAK = \"if-break\";\nvar DOC_TYPE_INDENT_IF_BREAK = \"indent-if-break\";\nvar DOC_TYPE_LINE_SUFFIX = \"line-suffix\";\nvar DOC_TYPE_LINE_SUFFIX_BOUNDARY = \"line-suffix-boundary\";\nvar DOC_TYPE_LINE = \"line\";\nvar DOC_TYPE_LABEL = \"label\";\nvar DOC_TYPE_BREAK_PARENT = \"break-parent\";\nvar VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([\n DOC_TYPE_CURSOR,\n DOC_TYPE_INDENT,\n DOC_TYPE_ALIGN,\n DOC_TYPE_TRIM,\n DOC_TYPE_GROUP,\n DOC_TYPE_FILL,\n DOC_TYPE_IF_BREAK,\n DOC_TYPE_INDENT_IF_BREAK,\n DOC_TYPE_LINE_SUFFIX,\n DOC_TYPE_LINE_SUFFIX_BOUNDARY,\n DOC_TYPE_LINE,\n DOC_TYPE_LABEL,\n DOC_TYPE_BREAK_PARENT\n]);\nfunction getDocType(doc) {\n if (typeof doc === \"string\") {\n return DOC_TYPE_STRING;\n }\n if (Array.isArray(doc)) {\n return DOC_TYPE_ARRAY;\n }\n if (!doc) {\n return;\n }\n const { type } = doc;\n if (VALID_OBJECT_DOC_TYPES.has(type)) {\n return type;\n }\n}\nvar get_doc_type_default = getDocType;\nvar disjunctionListFormat = (list) => new Intl.ListFormat(\"en-US\", { type: \"disjunction\" }).format(list);\nfunction getDocErrorMessage(doc) {\n const type = doc === null ? \"null\" : typeof doc;\n if (type !== \"string\" && type !== \"object\") {\n return `Unexpected doc '${type}', \nExpected it to be 'string' or 'object'.`;\n }\n if (get_doc_type_default(doc)) {\n throw new Error(\"doc is valid.\");\n }\n const objectType = Object.prototype.toString.call(doc);\n if (objectType !== \"[object Object]\") {\n return `Unexpected doc '${objectType}'.`;\n }\n const EXPECTED_TYPE_VALUES = disjunctionListFormat(\n [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`)\n );\n return `Unexpected doc.type '${doc.type}'.\nExpected it to be ${EXPECTED_TYPE_VALUES}.`;\n}\nvar InvalidDocError = class extends Error {\n name = \"InvalidDocError\";\n constructor(doc) {\n super(getDocErrorMessage(doc));\n this.doc = doc;\n }\n};\nvar invalid_doc_error_default = InvalidDocError;\nvar traverseDocOnExitStackMarker = {};\nfunction traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) {\n const docsStack = [doc];\n while (docsStack.length > 0) {\n const doc2 = docsStack.pop();\n if (doc2 === traverseDocOnExitStackMarker) {\n onExit(docsStack.pop());\n continue;\n }\n if (onExit) {\n docsStack.push(doc2, traverseDocOnExitStackMarker);\n }\n const docType = get_doc_type_default(doc2);\n if (!docType) {\n throw new invalid_doc_error_default(doc2);\n }\n if ((onEnter == null ? void 0 : onEnter(doc2)) === false) {\n continue;\n }\n switch (docType) {\n case DOC_TYPE_ARRAY:\n case DOC_TYPE_FILL: {\n const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts;\n for (let ic = parts.length, i = ic - 1; i >= 0; --i) {\n docsStack.push(parts[i]);\n }\n break;\n }\n case DOC_TYPE_IF_BREAK:\n docsStack.push(doc2.flatContents, doc2.breakContents);\n break;\n case DOC_TYPE_GROUP:\n if (shouldTraverseConditionalGroups && doc2.expandedStates) {\n for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) {\n docsStack.push(doc2.expandedStates[i]);\n }\n } else {\n docsStack.push(doc2.contents);\n }\n break;\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_LINE_SUFFIX:\n docsStack.push(doc2.contents);\n break;\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc2);\n }\n }\n}\nvar traverse_doc_default = traverseDoc;\nvar noop = () => {\n};\nvar assertDoc = true ? noop : function(doc) {\n traverse_doc_default(doc, (doc2) => {\n if (checked.has(doc2)) {\n return false;\n }\n if (typeof doc2 !== \"string\") {\n checked.add(doc2);\n }\n });\n};\nvar assertDocArray = true ? noop : function(docs, optional = false) {\n if (optional && !docs) {\n return;\n }\n if (!Array.isArray(docs)) {\n throw new TypeError(\"Unexpected doc array.\");\n }\n for (const doc of docs) {\n assertDoc(doc);\n }\n};\nfunction indent(contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_INDENT, contents };\n}\nfunction align(widthOrString, contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_ALIGN, contents, n: widthOrString };\n}\nfunction group(contents, opts = {}) {\n assertDoc(contents);\n assertDocArray(\n opts.expandedStates,\n /* optional */\n true\n );\n return {\n type: DOC_TYPE_GROUP,\n id: opts.id,\n contents,\n break: Boolean(opts.shouldBreak),\n expandedStates: opts.expandedStates\n };\n}\nfunction dedentToRoot(contents) {\n return align(Number.NEGATIVE_INFINITY, contents);\n}\nfunction markAsRoot(contents) {\n return align({ type: \"root\" }, contents);\n}\nfunction dedent(contents) {\n return align(-1, contents);\n}\nfunction conditionalGroup(states, opts) {\n return group(states[0], { ...opts, expandedStates: states });\n}\nfunction fill(parts) {\n assertDocArray(parts);\n return { type: DOC_TYPE_FILL, parts };\n}\nfunction ifBreak(breakContents, flatContents = \"\", opts = {}) {\n assertDoc(breakContents);\n if (flatContents !== \"\") {\n assertDoc(flatContents);\n }\n return {\n type: DOC_TYPE_IF_BREAK,\n breakContents,\n flatContents,\n groupId: opts.groupId\n };\n}\nfunction indentIfBreak(contents, opts) {\n assertDoc(contents);\n return {\n type: DOC_TYPE_INDENT_IF_BREAK,\n contents,\n groupId: opts.groupId,\n negate: opts.negate\n };\n}\nfunction lineSuffix(contents) {\n assertDoc(contents);\n return { type: DOC_TYPE_LINE_SUFFIX, contents };\n}\nvar lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY };\nvar breakParent = { type: DOC_TYPE_BREAK_PARENT };\nvar trim = { type: DOC_TYPE_TRIM };\nvar hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true };\nvar literallineWithoutBreakParent = {\n type: DOC_TYPE_LINE,\n hard: true,\n literal: true\n};\nvar line = { type: DOC_TYPE_LINE };\nvar softline = { type: DOC_TYPE_LINE, soft: true };\nvar hardline = [hardlineWithoutBreakParent, breakParent];\nvar literalline = [literallineWithoutBreakParent, breakParent];\nvar cursor = { type: DOC_TYPE_CURSOR };\nfunction join(separator, docs) {\n assertDoc(separator);\n assertDocArray(docs);\n const parts = [];\n for (let i = 0; i < docs.length; i++) {\n if (i !== 0) {\n parts.push(separator);\n }\n parts.push(docs[i]);\n }\n return parts;\n}\nfunction addAlignmentToDoc(doc, size, tabWidth) {\n assertDoc(doc);\n let aligned = doc;\n if (size > 0) {\n for (let i = 0; i < Math.floor(size / tabWidth); ++i) {\n aligned = indent(aligned);\n }\n aligned = align(size % tabWidth, aligned);\n aligned = align(Number.NEGATIVE_INFINITY, aligned);\n }\n return aligned;\n}\nfunction label(label2, contents) {\n assertDoc(contents);\n return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents;\n}\nvar at = (isOptionalObject, object, index) => {\n if (isOptionalObject && (object === void 0 || object === null)) {\n return;\n }\n if (Array.isArray(object) || typeof object === \"string\") {\n return object[index < 0 ? object.length + index : index];\n }\n return object.at(index);\n};\nvar at_default = at;\nvar stringReplaceAll = (isOptionalObject, original, pattern, replacement) => {\n if (isOptionalObject && (original === void 0 || original === null)) {\n return;\n }\n if (original.replaceAll) {\n return original.replaceAll(pattern, replacement);\n }\n if (pattern.global) {\n return original.replace(pattern, replacement);\n }\n return original.split(pattern).join(replacement);\n};\nvar string_replace_all_default = stringReplaceAll;\nfunction convertEndOfLineToChars(value) {\n switch (value) {\n case \"cr\":\n return \"\\r\";\n case \"crlf\":\n return \"\\r\\n\";\n default:\n return \"\\n\";\n }\n}\nvar emoji_regex_default = () => {\n return /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\nvar eastasianwidth_default = {\n eastAsianWidth(character) {\n var x = character.charCodeAt(0);\n var y = character.length == 2 ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if (55296 <= x && x <= 56319 && 56320 <= y && y <= 57343) {\n x &= 1023;\n y &= 1023;\n codePoint = x << 10 | y;\n codePoint += 65536;\n }\n if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) {\n return \"F\";\n }\n if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) {\n return \"W\";\n }\n return \"N\";\n }\n};\nvar notAsciiRegex = /[^\\x20-\\x7F]/;\nfunction getStringWidth(text) {\n if (!text) {\n return 0;\n }\n if (!notAsciiRegex.test(text)) {\n return text.length;\n }\n text = text.replace(emoji_regex_default(), \" \");\n let width = 0;\n for (const character of text) {\n const codePoint = character.codePointAt(0);\n if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) {\n continue;\n }\n if (codePoint >= 768 && codePoint <= 879) {\n continue;\n }\n const code = eastasianwidth_default.eastAsianWidth(character);\n width += code === \"F\" || code === \"W\" ? 2 : 1;\n }\n return width;\n}\nvar get_string_width_default = getStringWidth;\nvar getDocParts = (doc) => {\n if (Array.isArray(doc)) {\n return doc;\n }\n if (doc.type !== DOC_TYPE_FILL) {\n throw new Error(`Expect doc to be 'array' or '${DOC_TYPE_FILL}'.`);\n }\n return doc.parts;\n};\nfunction mapDoc(doc, cb) {\n if (typeof doc === \"string\") {\n return cb(doc);\n }\n const mapped = /* @__PURE__ */ new Map();\n return rec(doc);\n function rec(doc2) {\n if (mapped.has(doc2)) {\n return mapped.get(doc2);\n }\n const result = process2(doc2);\n mapped.set(doc2, result);\n return result;\n }\n function process2(doc2) {\n switch (get_doc_type_default(doc2)) {\n case DOC_TYPE_ARRAY:\n return cb(doc2.map(rec));\n case DOC_TYPE_FILL:\n return cb({\n ...doc2,\n parts: doc2.parts.map(rec)\n });\n case DOC_TYPE_IF_BREAK:\n return cb({\n ...doc2,\n breakContents: rec(doc2.breakContents),\n flatContents: rec(doc2.flatContents)\n });\n case DOC_TYPE_GROUP: {\n let {\n expandedStates,\n contents\n } = doc2;\n if (expandedStates) {\n expandedStates = expandedStates.map(rec);\n contents = expandedStates[0];\n } else {\n contents = rec(contents);\n }\n return cb({\n ...doc2,\n contents,\n expandedStates\n });\n }\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_LINE_SUFFIX:\n return cb({\n ...doc2,\n contents: rec(doc2.contents)\n });\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n return cb(doc2);\n default:\n throw new invalid_doc_error_default(doc2);\n }\n }\n}\nfunction findInDoc(doc, fn, defaultValue) {\n let result = defaultValue;\n let shouldSkipFurtherProcessing = false;\n function findInDocOnEnterFn(doc2) {\n if (shouldSkipFurtherProcessing) {\n return false;\n }\n const maybeResult = fn(doc2);\n if (maybeResult !== void 0) {\n shouldSkipFurtherProcessing = true;\n result = maybeResult;\n }\n }\n traverse_doc_default(doc, findInDocOnEnterFn);\n return result;\n}\nfunction willBreakFn(doc) {\n if (doc.type === DOC_TYPE_GROUP && doc.break) {\n return true;\n }\n if (doc.type === DOC_TYPE_LINE && doc.hard) {\n return true;\n }\n if (doc.type === DOC_TYPE_BREAK_PARENT) {\n return true;\n }\n}\nfunction willBreak(doc) {\n return findInDoc(doc, willBreakFn, false);\n}\nfunction breakParentGroup(groupStack) {\n if (groupStack.length > 0) {\n const parentGroup = at_default(\n /* isOptionalObject*/\n false,\n groupStack,\n -1\n );\n if (!parentGroup.expandedStates && !parentGroup.break) {\n parentGroup.break = \"propagated\";\n }\n }\n return null;\n}\nfunction propagateBreaks(doc) {\n const alreadyVisitedSet = /* @__PURE__ */ new Set();\n const groupStack = [];\n function propagateBreaksOnEnterFn(doc2) {\n if (doc2.type === DOC_TYPE_BREAK_PARENT) {\n breakParentGroup(groupStack);\n }\n if (doc2.type === DOC_TYPE_GROUP) {\n groupStack.push(doc2);\n if (alreadyVisitedSet.has(doc2)) {\n return false;\n }\n alreadyVisitedSet.add(doc2);\n }\n }\n function propagateBreaksOnExitFn(doc2) {\n if (doc2.type === DOC_TYPE_GROUP) {\n const group22 = groupStack.pop();\n if (group22.break) {\n breakParentGroup(groupStack);\n }\n }\n }\n traverse_doc_default(\n doc,\n propagateBreaksOnEnterFn,\n propagateBreaksOnExitFn,\n /* shouldTraverseConditionalGroups */\n true\n );\n}\nfunction removeLinesFn(doc) {\n if (doc.type === DOC_TYPE_LINE && !doc.hard) {\n return doc.soft ? \"\" : \" \";\n }\n if (doc.type === DOC_TYPE_IF_BREAK) {\n return doc.flatContents;\n }\n return doc;\n}\nfunction removeLines(doc) {\n return mapDoc(doc, removeLinesFn);\n}\nfunction stripTrailingHardlineFromParts(parts) {\n parts = [...parts];\n while (parts.length >= 2 && at_default(\n /* isOptionalObject*/\n false,\n parts,\n -2\n ).type === DOC_TYPE_LINE && at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ).type === DOC_TYPE_BREAK_PARENT) {\n parts.length -= 2;\n }\n if (parts.length > 0) {\n const lastPart = stripTrailingHardlineFromDoc(at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ));\n parts[parts.length - 1] = lastPart;\n }\n return parts;\n}\nfunction stripTrailingHardlineFromDoc(doc) {\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_GROUP:\n case DOC_TYPE_LINE_SUFFIX:\n case DOC_TYPE_LABEL: {\n const contents = stripTrailingHardlineFromDoc(doc.contents);\n return {\n ...doc,\n contents\n };\n }\n case DOC_TYPE_IF_BREAK:\n return {\n ...doc,\n breakContents: stripTrailingHardlineFromDoc(doc.breakContents),\n flatContents: stripTrailingHardlineFromDoc(doc.flatContents)\n };\n case DOC_TYPE_FILL:\n return {\n ...doc,\n parts: stripTrailingHardlineFromParts(doc.parts)\n };\n case DOC_TYPE_ARRAY:\n return stripTrailingHardlineFromParts(doc);\n case DOC_TYPE_STRING:\n return doc.replace(/[\\n\\r]*$/, \"\");\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc);\n }\n return doc;\n}\nfunction stripTrailingHardline(doc) {\n return stripTrailingHardlineFromDoc(cleanDoc(doc));\n}\nfunction cleanDocFn(doc) {\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_FILL:\n if (doc.parts.every((part) => part === \"\")) {\n return \"\";\n }\n break;\n case DOC_TYPE_GROUP:\n if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) {\n return \"\";\n }\n if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) {\n return doc.contents;\n }\n break;\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LINE_SUFFIX:\n if (!doc.contents) {\n return \"\";\n }\n break;\n case DOC_TYPE_IF_BREAK:\n if (!doc.flatContents && !doc.breakContents) {\n return \"\";\n }\n break;\n case DOC_TYPE_ARRAY: {\n const parts = [];\n for (const part of doc) {\n if (!part) {\n continue;\n }\n const [currentPart, ...restParts] = Array.isArray(part) ? part : [part];\n if (typeof currentPart === \"string\" && typeof at_default(\n /* isOptionalObject*/\n false,\n parts,\n -1\n ) === \"string\") {\n parts[parts.length - 1] += currentPart;\n } else {\n parts.push(currentPart);\n }\n parts.push(...restParts);\n }\n if (parts.length === 0) {\n return \"\";\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return parts;\n }\n case DOC_TYPE_STRING:\n case DOC_TYPE_CURSOR:\n case DOC_TYPE_TRIM:\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n case DOC_TYPE_LINE:\n case DOC_TYPE_LABEL:\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc);\n }\n return doc;\n}\nfunction cleanDoc(doc) {\n return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc));\n}\nfunction replaceEndOfLine(doc, replacement = literalline) {\n return mapDoc(doc, (currentDoc) => typeof currentDoc === \"string\" ? join(replacement, currentDoc.split(\"\\n\")) : currentDoc);\n}\nfunction canBreakFn(doc) {\n if (doc.type === DOC_TYPE_LINE) {\n return true;\n }\n}\nfunction canBreak(doc) {\n return findInDoc(doc, canBreakFn, false);\n}\nvar MODE_BREAK = Symbol(\"MODE_BREAK\");\nvar MODE_FLAT = Symbol(\"MODE_FLAT\");\nvar CURSOR_PLACEHOLDER = Symbol(\"cursor\");\nfunction rootIndent() {\n return {\n value: \"\",\n length: 0,\n queue: []\n };\n}\nfunction makeIndent(ind, options) {\n return generateInd(ind, {\n type: \"indent\"\n }, options);\n}\nfunction makeAlign(indent22, widthOrDoc, options) {\n if (widthOrDoc === Number.NEGATIVE_INFINITY) {\n return indent22.root || rootIndent();\n }\n if (widthOrDoc < 0) {\n return generateInd(indent22, {\n type: \"dedent\"\n }, options);\n }\n if (!widthOrDoc) {\n return indent22;\n }\n if (widthOrDoc.type === \"root\") {\n return {\n ...indent22,\n root: indent22\n };\n }\n const alignType = typeof widthOrDoc === \"string\" ? \"stringAlign\" : \"numberAlign\";\n return generateInd(indent22, {\n type: alignType,\n n: widthOrDoc\n }, options);\n}\nfunction generateInd(ind, newPart, options) {\n const queue = newPart.type === \"dedent\" ? ind.queue.slice(0, -1) : [...ind.queue, newPart];\n let value = \"\";\n let length = 0;\n let lastTabs = 0;\n let lastSpaces = 0;\n for (const part of queue) {\n switch (part.type) {\n case \"indent\":\n flush();\n if (options.useTabs) {\n addTabs(1);\n } else {\n addSpaces(options.tabWidth);\n }\n break;\n case \"stringAlign\":\n flush();\n value += part.n;\n length += part.n.length;\n break;\n case \"numberAlign\":\n lastTabs += 1;\n lastSpaces += part.n;\n break;\n default:\n throw new Error(`Unexpected type '${part.type}'`);\n }\n }\n flushSpaces();\n return {\n ...ind,\n value,\n length,\n queue\n };\n function addTabs(count) {\n value += \"\t\".repeat(count);\n length += options.tabWidth * count;\n }\n function addSpaces(count) {\n value += \" \".repeat(count);\n length += count;\n }\n function flush() {\n if (options.useTabs) {\n flushTabs();\n } else {\n flushSpaces();\n }\n }\n function flushTabs() {\n if (lastTabs > 0) {\n addTabs(lastTabs);\n }\n resetLast();\n }\n function flushSpaces() {\n if (lastSpaces > 0) {\n addSpaces(lastSpaces);\n }\n resetLast();\n }\n function resetLast() {\n lastTabs = 0;\n lastSpaces = 0;\n }\n}\nfunction trim2(out) {\n let trimCount = 0;\n let cursorCount = 0;\n let outIndex = out.length;\n outer:\n while (outIndex--) {\n const last = out[outIndex];\n if (last === CURSOR_PLACEHOLDER) {\n cursorCount++;\n continue;\n }\n if (false) {\n throw new Error(`Unexpected value in trim: '${typeof last}'`);\n }\n for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) {\n const char = last[charIndex];\n if (char === \" \" || char === \"\t\") {\n trimCount++;\n } else {\n out[outIndex] = last.slice(0, charIndex + 1);\n break outer;\n }\n }\n }\n if (trimCount > 0 || cursorCount > 0) {\n out.length = outIndex + 1;\n while (cursorCount-- > 0) {\n out.push(CURSOR_PLACEHOLDER);\n }\n }\n return trimCount;\n}\nfunction fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) {\n if (width === Number.POSITIVE_INFINITY) {\n return true;\n }\n let restIdx = restCommands.length;\n const cmds = [next];\n const out = [];\n while (width >= 0) {\n if (cmds.length === 0) {\n if (restIdx === 0) {\n return true;\n }\n cmds.push(restCommands[--restIdx]);\n continue;\n }\n const {\n mode,\n doc\n } = cmds.pop();\n switch (get_doc_type_default(doc)) {\n case DOC_TYPE_STRING:\n out.push(doc);\n width -= get_string_width_default(doc);\n break;\n case DOC_TYPE_ARRAY:\n case DOC_TYPE_FILL: {\n const parts = getDocParts(doc);\n for (let i = parts.length - 1; i >= 0; i--) {\n cmds.push({\n mode,\n doc: parts[i]\n });\n }\n break;\n }\n case DOC_TYPE_INDENT:\n case DOC_TYPE_ALIGN:\n case DOC_TYPE_INDENT_IF_BREAK:\n case DOC_TYPE_LABEL:\n cmds.push({\n mode,\n doc: doc.contents\n });\n break;\n case DOC_TYPE_TRIM:\n width += trim2(out);\n break;\n case DOC_TYPE_GROUP: {\n if (mustBeFlat && doc.break) {\n return false;\n }\n const groupMode = doc.break ? MODE_BREAK : mode;\n const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default(\n /* isOptionalObject*/\n false,\n doc.expandedStates,\n -1\n ) : doc.contents;\n cmds.push({\n mode: groupMode,\n doc: contents\n });\n break;\n }\n case DOC_TYPE_IF_BREAK: {\n const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode;\n const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents;\n if (contents) {\n cmds.push({\n mode,\n doc: contents\n });\n }\n break;\n }\n case DOC_TYPE_LINE:\n if (mode === MODE_BREAK || doc.hard) {\n return true;\n }\n if (!doc.soft) {\n out.push(\" \");\n width--;\n }\n break;\n case DOC_TYPE_LINE_SUFFIX:\n hasLineSuffix = true;\n break;\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n if (hasLineSuffix) {\n return false;\n }\n break;\n }\n }\n return false;\n}\nfunction printDocToString(doc, options) {\n const groupModeMap = {};\n const width = options.printWidth;\n const newLine = convertEndOfLineToChars(options.endOfLine);\n let pos = 0;\n const cmds = [{\n ind: rootIndent(),\n mode: MODE_BREAK,\n doc\n }];\n const out = [];\n let shouldRemeasure = false;\n const lineSuffix22 = [];\n let printedCursorCount = 0;\n propagateBreaks(doc);\n while (cmds.length > 0) {\n const {\n ind,\n mode,\n doc: doc2\n } = cmds.pop();\n switch (get_doc_type_default(doc2)) {\n case DOC_TYPE_STRING: {\n const formatted = newLine !== \"\\n\" ? string_replace_all_default(\n /* isOptionalObject*/\n false,\n doc2,\n \"\\n\",\n newLine\n ) : doc2;\n out.push(formatted);\n if (cmds.length > 0) {\n pos += get_string_width_default(formatted);\n }\n break;\n }\n case DOC_TYPE_ARRAY:\n for (let i = doc2.length - 1; i >= 0; i--) {\n cmds.push({\n ind,\n mode,\n doc: doc2[i]\n });\n }\n break;\n case DOC_TYPE_CURSOR:\n if (printedCursorCount >= 2) {\n throw new Error(\"There are too many 'cursor' in doc.\");\n }\n out.push(CURSOR_PLACEHOLDER);\n printedCursorCount++;\n break;\n case DOC_TYPE_INDENT:\n cmds.push({\n ind: makeIndent(ind, options),\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_ALIGN:\n cmds.push({\n ind: makeAlign(ind, doc2.n, options),\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_TRIM:\n pos -= trim2(out);\n break;\n case DOC_TYPE_GROUP:\n switch (mode) {\n case MODE_FLAT:\n if (!shouldRemeasure) {\n cmds.push({\n ind,\n mode: doc2.break ? MODE_BREAK : MODE_FLAT,\n doc: doc2.contents\n });\n break;\n }\n case MODE_BREAK: {\n shouldRemeasure = false;\n const next = {\n ind,\n mode: MODE_FLAT,\n doc: doc2.contents\n };\n const rem = width - pos;\n const hasLineSuffix = lineSuffix22.length > 0;\n if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) {\n cmds.push(next);\n } else {\n if (doc2.expandedStates) {\n const mostExpanded = at_default(\n /* isOptionalObject*/\n false,\n doc2.expandedStates,\n -1\n );\n if (doc2.break) {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: mostExpanded\n });\n break;\n } else {\n for (let i = 1; i < doc2.expandedStates.length + 1; i++) {\n if (i >= doc2.expandedStates.length) {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: mostExpanded\n });\n break;\n } else {\n const state = doc2.expandedStates[i];\n const cmd = {\n ind,\n mode: MODE_FLAT,\n doc: state\n };\n if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) {\n cmds.push(cmd);\n break;\n }\n }\n }\n }\n } else {\n cmds.push({\n ind,\n mode: MODE_BREAK,\n doc: doc2.contents\n });\n }\n }\n break;\n }\n }\n if (doc2.id) {\n groupModeMap[doc2.id] = at_default(\n /* isOptionalObject*/\n false,\n cmds,\n -1\n ).mode;\n }\n break;\n case DOC_TYPE_FILL: {\n const rem = width - pos;\n const {\n parts\n } = doc2;\n if (parts.length === 0) {\n break;\n }\n const [content, whitespace] = parts;\n const contentFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: content\n };\n const contentBreakCmd = {\n ind,\n mode: MODE_BREAK,\n doc: content\n };\n const contentFits = fits(contentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true);\n if (parts.length === 1) {\n if (contentFits) {\n cmds.push(contentFlatCmd);\n } else {\n cmds.push(contentBreakCmd);\n }\n break;\n }\n const whitespaceFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: whitespace\n };\n const whitespaceBreakCmd = {\n ind,\n mode: MODE_BREAK,\n doc: whitespace\n };\n if (parts.length === 2) {\n if (contentFits) {\n cmds.push(whitespaceFlatCmd, contentFlatCmd);\n } else {\n cmds.push(whitespaceBreakCmd, contentBreakCmd);\n }\n break;\n }\n parts.splice(0, 2);\n const remainingCmd = {\n ind,\n mode,\n doc: fill(parts)\n };\n const secondContent = parts[0];\n const firstAndSecondContentFlatCmd = {\n ind,\n mode: MODE_FLAT,\n doc: [content, whitespace, secondContent]\n };\n const firstAndSecondContentFits = fits(firstAndSecondContentFlatCmd, [], rem, lineSuffix22.length > 0, groupModeMap, true);\n if (firstAndSecondContentFits) {\n cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd);\n } else if (contentFits) {\n cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd);\n } else {\n cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd);\n }\n break;\n }\n case DOC_TYPE_IF_BREAK:\n case DOC_TYPE_INDENT_IF_BREAK: {\n const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode;\n if (groupMode === MODE_BREAK) {\n const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents);\n if (breakContents) {\n cmds.push({\n ind,\n mode,\n doc: breakContents\n });\n }\n }\n if (groupMode === MODE_FLAT) {\n const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents;\n if (flatContents) {\n cmds.push({\n ind,\n mode,\n doc: flatContents\n });\n }\n }\n break;\n }\n case DOC_TYPE_LINE_SUFFIX:\n lineSuffix22.push({\n ind,\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_LINE_SUFFIX_BOUNDARY:\n if (lineSuffix22.length > 0) {\n cmds.push({\n ind,\n mode,\n doc: hardlineWithoutBreakParent\n });\n }\n break;\n case DOC_TYPE_LINE:\n switch (mode) {\n case MODE_FLAT:\n if (!doc2.hard) {\n if (!doc2.soft) {\n out.push(\" \");\n pos += 1;\n }\n break;\n } else {\n shouldRemeasure = true;\n }\n case MODE_BREAK:\n if (lineSuffix22.length > 0) {\n cmds.push({\n ind,\n mode,\n doc: doc2\n }, ...lineSuffix22.reverse());\n lineSuffix22.length = 0;\n break;\n }\n if (doc2.literal) {\n if (ind.root) {\n out.push(newLine, ind.root.value);\n pos = ind.root.length;\n } else {\n out.push(newLine);\n pos = 0;\n }\n } else {\n pos -= trim2(out);\n out.push(newLine + ind.value);\n pos = ind.length;\n }\n break;\n }\n break;\n case DOC_TYPE_LABEL:\n cmds.push({\n ind,\n mode,\n doc: doc2.contents\n });\n break;\n case DOC_TYPE_BREAK_PARENT:\n break;\n default:\n throw new invalid_doc_error_default(doc2);\n }\n if (cmds.length === 0 && lineSuffix22.length > 0) {\n cmds.push(...lineSuffix22.reverse());\n lineSuffix22.length = 0;\n }\n }\n const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER);\n if (cursorPlaceholderIndex !== -1) {\n const otherCursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER, cursorPlaceholderIndex + 1);\n const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(\"\");\n const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(\"\");\n const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(\"\");\n return {\n formatted: beforeCursor + aroundCursor + afterCursor,\n cursorNodeStart: beforeCursor.length,\n cursorNodeText: aroundCursor\n };\n }\n return {\n formatted: out.join(\"\")\n };\n}\nvar builders = {\n join,\n line,\n softline,\n hardline,\n literalline,\n group,\n conditionalGroup,\n fill,\n lineSuffix,\n lineSuffixBoundary,\n cursor,\n breakParent,\n ifBreak,\n trim,\n indent,\n indentIfBreak,\n align,\n addAlignmentToDoc,\n markAsRoot,\n dedentToRoot,\n dedent,\n hardlineWithoutBreakParent,\n literallineWithoutBreakParent,\n label,\n // TODO: Remove this in v4\n concat: (parts) => parts\n};\nvar printer = { printDocToString };\nvar utils = {\n willBreak,\n traverseDoc: traverse_doc_default,\n findInDoc,\n mapDoc,\n removeLines,\n stripTrailingHardline,\n replaceEndOfLine,\n canBreak\n};\n\n// libs/printer/common.ts\nimport { printRaw } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match } from \"@unified-latex/unified-latex-util-match\";\nfunction formatEnvSurround(node) {\n const env = printRaw(node.env);\n return {\n envName: env,\n start: ESCAPE + \"begin{\" + env + \"}\",\n end: ESCAPE + \"end{\" + env + \"}\"\n };\n}\nfunction isLineType(elm) {\n if (elm == null || typeof elm === \"string\") {\n return false;\n }\n if (Array.isArray(elm)) {\n return isLineType(elm[0]);\n }\n if (elm.type === \"concat\") {\n return isLineType(elm.parts);\n }\n return elm.type === \"line\";\n}\nfunction joinWithSoftline(arr) {\n if (arr.length === 0 || arr.length === 1) {\n return arr;\n }\n const ret = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n const prevNode = arr[i - 1];\n const nextNode = arr[i];\n if (!isLineType(prevNode) && !isLineType(nextNode)) {\n ret.push(softline2);\n }\n ret.push(nextNode);\n }\n return ret;\n}\nfunction getNodeInfo(node, options) {\n if (!node) {\n return { renderInfo: {} };\n }\n const renderInfo = node._renderInfo || {};\n const previousNode = options.referenceMap && options.referenceMap.getPreviousNode(node);\n const nextNode = options.referenceMap && options.referenceMap.getNextNode(node);\n const renderCache = options.referenceMap && options.referenceMap.getRenderCache(node);\n return {\n renderInfo,\n renderCache,\n previousNode,\n nextNode,\n referenceMap: options.referenceMap\n };\n}\nvar ESCAPE = \"\\\\\";\nvar {\n group: group2,\n fill: fill2,\n ifBreak: ifBreak2,\n line: line2,\n softline: softline2,\n hardline: hardline2,\n lineSuffix: lineSuffix2,\n lineSuffixBoundary: lineSuffixBoundary2,\n breakParent: breakParent2,\n indent: indent2,\n markAsRoot: markAsRoot2,\n join: join2\n} = builders;\nfunction formatDocArray(nodes, docArray, options) {\n const ret = [];\n for (let i = 0; i < nodes.length; i++) {\n const rawNode = nodes[i];\n const printedNode = docArray[i];\n const { renderInfo, referenceMap, previousNode, nextNode } = getNodeInfo(rawNode, options);\n const renderCache = referenceMap && referenceMap.getRenderCache(rawNode);\n switch (rawNode.type) {\n case \"comment\":\n if (!rawNode.sameline && previousNode && !match.comment(previousNode) && !match.parbreak(previousNode)) {\n ret.push(hardline2);\n }\n ret.push(printedNode);\n if (nextNode && !rawNode.suffixParbreak) {\n ret.push(hardline2);\n }\n break;\n case \"environment\":\n case \"displaymath\":\n case \"mathenv\":\n if (previousNode && (previousNode == null ? void 0 : previousNode.type) !== \"parbreak\") {\n if (ret[ret.length - 1] === line2) {\n ret.pop();\n }\n if (ret[ret.length - 1] !== hardline2) {\n ret.push(hardline2);\n }\n }\n ret.push(printedNode);\n if ((nextNode == null ? void 0 : nextNode.type) === \"whitespace\") {\n ret.push(hardline2);\n i++;\n }\n break;\n case \"macro\":\n if (renderInfo.breakBefore || renderInfo.breakAround) {\n if (previousNode) {\n if (ret[ret.length - 1] === line2 || ret[ret.length - 1] === hardline2) {\n ret.pop();\n ret.push(hardline2);\n } else if (!match.comment(previousNode) && !match.parbreak(previousNode)) {\n ret.push(hardline2);\n }\n }\n }\n if (renderInfo.inParMode && !renderInfo.hangingIndent && renderCache) {\n ret.push(\n renderCache.content,\n ...renderCache.rawArgs || []\n );\n } else {\n ret.push(printedNode);\n }\n if (renderInfo.breakAfter || renderInfo.breakAround) {\n if (nextNode) {\n if (match.whitespace(nextNode)) {\n ret.push(hardline2);\n i++;\n } else if (match.parbreak(nextNode)) {\n } else if (!match.comment(nextNode)) {\n ret.push(hardline2);\n }\n }\n }\n break;\n case \"parbreak\":\n ret.push(hardline2, hardline2);\n break;\n default:\n ret.push(printedNode);\n break;\n }\n }\n return ret;\n}\n\n// libs/zip.ts\nfunction zip(array1, array2) {\n const ret = [];\n const len = Math.min(array1.length, array2.length);\n for (let i = 0; i < len; i++) {\n ret.push([array1[i], array2[i]]);\n }\n return ret;\n}\n\n// libs/printer/macro.ts\nfunction printMacro(path, print, options) {\n const node = path.getNode();\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n const content = (node.escapeToken != null ? node.escapeToken : ESCAPE) + node.content;\n const args = node.args ? path.map(print, \"args\") : [];\n const rawArgs = [];\n for (const [arg, printedArg] of zip(node.args || [], args)) {\n const renderCache = referenceMap && referenceMap.getRenderCache(arg);\n if (renderInfo.inParMode && renderCache) {\n rawArgs.push(...renderCache);\n } else {\n rawArgs.push(printedArg);\n }\n }\n if (referenceMap) {\n referenceMap.setRenderCache(node, { rawArgs, content });\n }\n if (renderInfo.hangingIndent) {\n return indent2(fill2([content, ...rawArgs]));\n }\n return group2([content, ...rawArgs]);\n}\n\n// libs/printer/argument.ts\nimport { match as match3 } from \"@unified-latex/unified-latex-util-match\";\nimport { trim as trim4 } from \"@unified-latex/unified-latex-util-trim\";\n\n// libs/printer/tikz.ts\nimport {\n printRaw as printRaw3\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { match as match2 } from \"@unified-latex/unified-latex-util-match\";\nimport { trim as trim3 } from \"@unified-latex/unified-latex-util-trim\";\nimport {\n parse as parseTikz\n} from \"@unified-latex/unified-latex-ctan/package/tikz\";\n\n// libs/printer/print-argument-pgfkeys.ts\nimport {\n linebreak,\n printRaw as printRaw2\n} from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parsePgfkeys } from \"@unified-latex/unified-latex-util-pgfkeys\";\nfunction printArgumentPgfkeys(nodes, options) {\n const { allowParenGroups = false } = options;\n const parsed = parsePgfkeys(nodes, { allowParenGroups });\n const content = [];\n for (const part of parsed) {\n const isLastItem = part === parsed[parsed.length - 1];\n if (part.itemParts) {\n const parts = part.itemParts.map(\n (node) => printRaw2(node, { asArray: true }).map(\n (token) => token === linebreak ? hardline2 : token\n )\n );\n const row = join2(\"=\", parts);\n content.push(row);\n if (part.trailingComma) {\n content.push(\",\");\n }\n }\n if (part.trailingComment) {\n const leadingContent = part.itemParts ? [\" \"] : [];\n if (part.leadingParbreak) {\n leadingContent.push(hardline2);\n }\n content.push(\n ...leadingContent,\n // We're carefully and manually controlling the newlines,\n // so print the comment directly without any newlines\n \"%\",\n part.trailingComment.content,\n breakParent2\n );\n }\n if (!isLastItem) {\n content.push(line2);\n }\n }\n let leadingComment = [\"\"];\n if (options.leadingComment) {\n if (options.leadingComment.leadingWhitespace) {\n leadingComment.push(\" \");\n }\n leadingComment.push(\"%\" + options.leadingComment.content, breakParent2);\n }\n return group2([\n options.openMark,\n ...leadingComment,\n // If there is no content, we don't want to push an extra `softline`.\n // This matters because the braces group could still be broken by `leadingComment`\n content.length > 0 ? indent2([softline2, ...content]) : \"\",\n softline2,\n options.closeMark\n ]);\n}\n\n// libs/printer/tikz.ts\nfunction printTikzArgument(path, print, options) {\n const node = path.getNode();\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n const content = [];\n const nodes = [...node.content];\n trim3(nodes);\n try {\n const tikzAst = parseTikz(nodes);\n if (tikzAst.content.length === 0) {\n content.push(\";\");\n return content;\n }\n const printer2 = new TikzArgumentPrinter(tikzAst, path, print);\n return printer2.toDoc();\n } catch (e) {\n console.warn(\"Encountered error when trying to parse tikz argument\", e);\n }\n content.push(\";\");\n return content;\n}\nfunction printFragment(fragment, path, print) {\n const tmpKey = Symbol();\n const currNode = path.getNode();\n if (!currNode) {\n throw new Error(\n \"tried to print a fragment, but the current node is `null`\"\n );\n }\n currNode[tmpKey] = fragment;\n const ret = print(tmpKey);\n delete currNode[tmpKey];\n return ret;\n}\nfunction printTikzPathSpecNode(node, path, print) {\n switch (node.type) {\n case \"comment\":\n return printFragment(node, path, print);\n case \"unknown\":\n return printFragment(node.content, path, print);\n case \"coordinate\":\n return [printRaw3(node.prefix), \"(\", printRaw3(node.content), \")\"];\n case \"line_to\":\n return node.command;\n case \"square_brace_group\":\n return printOptionalArgs(node.content);\n case \"operation\":\n return node.content.content;\n case \"svg_operation\": {\n const comments = node.comments.map(\n (n) => printTikzPathSpecNode(n, path, print)\n );\n const options = node.options ? printOptionalArgs(node.options) : [];\n const rest = node.options ? [group2(indent2([line2, printRaw3(node.content)]))] : [\" \", printRaw3(node.content)];\n return [...comments, \"svg\", options, ...rest];\n }\n case \"curve_to\": {\n const comments = node.comments.map(\n (n) => printTikzPathSpecNode(n, path, print)\n );\n const printedControls = node.controls.length > 1 ? [\n printTikzPathSpecNode(node.controls[0], path, print),\n \" \",\n \"and\",\n line2,\n printTikzPathSpecNode(node.controls[1], path, print)\n ] : [printTikzPathSpecNode(node.controls[0], path, print)];\n return [\n ...comments,\n \"..\",\n \" \",\n group2(\n indent2([\"controls\", line2, ...printedControls, \" \", \"..\"])\n )\n ];\n }\n case \"animation\": {\n const comments = node.comments.map(\n (n) => printTikzPathSpecNode(n, path, print)\n );\n return [\n ...comments,\n \":\",\n node.attribute,\n \" \",\n \"=\",\n \" \",\n group2(\n indent2([\n printArgumentPgfkeys(node.content, {\n openMark: \"{\",\n closeMark: \"}\"\n })\n ])\n )\n ];\n }\n case \"foreach\": {\n const comments = node.comments.map(\n (n) => printTikzPathSpecNode(n, path, print)\n );\n const variables = [...node.variables];\n trim3(variables);\n const list = node.list.type === \"macro\" ? printFragment(node.list, path, print) : printArgumentPgfkeys(node.list.content, {\n openMark: \"{\",\n closeMark: \"}\",\n allowParenGroups: true\n });\n const doc = [\n ...comments,\n printRaw3(node.start),\n \" \",\n printRaw3(variables)\n ];\n if (node.options) {\n doc.push(\" \", indent2(printOptionalArgs(node.options)));\n }\n doc.push(\" \", \"in\", \" \", group2(indent2(list)));\n const commandType = node.command.type;\n switch (commandType) {\n case \"foreach\":\n doc.push(\n indent2([\n line2,\n printTikzPathSpecNode(node.command, path, print)\n ])\n );\n break;\n case \"macro\":\n doc.push(\n indent2([line2, printFragment(node.command, path, print)])\n );\n break;\n case \"group\": {\n const groupContent = [...node.command.content];\n trim3(groupContent);\n doc.push(\n \" \",\n indent2(\n group2([\n \"{\",\n indent2([\n softline2,\n ...groupContent.map(\n (n) => printFragment(n, path, print)\n )\n ]),\n softline2,\n \"}\"\n ])\n )\n );\n break;\n }\n default:\n const invalidType = commandType;\n console.warn(\n `Unhandled command type when printing \"foreach\": ${invalidType}`\n );\n }\n return indent2(doc);\n }\n }\n console.warn(\n `Encountered unknown type when trying to print tikz PathSpec: \"${node.type}\"`\n );\n return [];\n}\nfunction printOptionalArgs(nodes) {\n return printArgumentPgfkeys(nodes, {\n openMark: \"[\",\n closeMark: \"]\"\n });\n}\nvar _path, _print;\nvar TikzArgumentPrinter = class {\n constructor(spec, path, print) {\n __privateAdd(this, _path, void 0);\n __privateAdd(this, _print, void 0);\n __privateSet(this, _path, path);\n __privateSet(this, _print, print);\n this.nodes = [...spec.content];\n }\n nodeToDoc(node) {\n return printTikzPathSpecNode(node, __privateGet(this, _path), __privateGet(this, _print));\n }\n toDoc() {\n const doc = [];\n const startArg = this.eatOptionalArg();\n if (startArg.optionalArg) {\n doc.push(\n ...startArg.comments.map(\n (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print))\n )\n );\n doc.push(printOptionalArgs(startArg.optionalArg.content));\n }\n const innerDoc = [];\n doc.push(group2([indent2(innerDoc), \";\"]));\n let cycle = -1;\n while (this.nodes.length > 0) {\n cycle++;\n const firstSep = cycle === 0 && !startArg.optionalArg ? \" \" : line2;\n const comingUp = this.peek();\n switch (comingUp) {\n case \"short_path\": {\n const [n0, n1, n2] = this.nodes.splice(0, 3);\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.nodeToDoc(n1),\n \" \",\n this.nodeToDoc(n2)\n );\n continue;\n }\n case \"long_path\": {\n const [n0, n1] = this.nodes.splice(0, 2);\n if (n1.type === \"operation\") {\n this.nodes.unshift(n1);\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.eatOperation()\n );\n } else {\n innerDoc.push(\n firstSep,\n this.nodeToDoc(n0),\n \" \",\n this.nodeToDoc(n1)\n );\n }\n continue;\n }\n case \"node\":\n {\n const eatenNode = this.eatNode();\n if (eatenNode) {\n innerDoc.push(line2, ...eatenNode);\n continue;\n }\n console.warn(\n \"Expected to print a tikz `node` PathSpec but couldn't find the text `node`\"\n );\n }\n continue;\n case \"operation\":\n innerDoc.push(firstSep, this.eatOperation());\n continue;\n case \"unknown\": {\n const node = this.nodes.shift();\n innerDoc.push(firstSep, this.nodeToDoc(node));\n continue;\n }\n }\n this.nodes.shift();\n }\n return doc;\n }\n /**\n * Look at the current node and the nodes that follow. Return what\n * \"type\" is recognized.\n */\n peek() {\n const [n0, n1, n2, n3] = [\n this.nodes[0],\n this.nodes[1],\n this.nodes[2],\n this.nodes[3]\n ];\n if ((n0 == null ? void 0 : n0.type) === \"coordinate\" && isPathJoinOperation(n1)) {\n if ((n2 == null ? void 0 : n2.type) === \"coordinate\" && !((n3 == null ? void 0 : n3.type) === \"coordinate\" || isPathJoinOperation(n3))) {\n return \"short_path\";\n }\n return \"long_path\";\n }\n if ((n0 == null ? void 0 : n0.type) === \"operation\") {\n if (n0.content.content === \"node\") {\n return \"node\";\n }\n return \"operation\";\n }\n return \"unknown\";\n }\n /**\n * Eat comments and an optional arg if present. If no optional\n * arg is present, do nothing.\n */\n eatOptionalArg() {\n let i = 0;\n const comments = [];\n let optionalArg = null;\n for (; i < this.nodes.length; i++) {\n const node = this.nodes[i];\n if (node.type === \"square_brace_group\") {\n optionalArg = node;\n i++;\n break;\n }\n if (node.type === \"comment\") {\n comments.push(node);\n continue;\n }\n break;\n }\n if (optionalArg) {\n this.nodes.splice(0, i);\n }\n return { optionalArg, comments };\n }\n /**\n * Eat a `type === \"operation\"` node whose contents is `\"node\"`. I.e.,\n * the type of thing that shows up in `\\path node at (1,1) {foo};`\n */\n eatNode() {\n const firstNode = this.nodes[0];\n if ((firstNode == null ? void 0 : firstNode.type) === \"operation\" && firstNode.content.content === \"node\") {\n this.nodes.shift();\n } else {\n return null;\n }\n const innerDoc = [];\n const commentBlock = [];\n const doc = [commentBlock, \"node\", group2(indent2(innerDoc))];\n let hasNodeArgument = false;\n let shouldBail = false;\n let i = 0;\n const comments = [];\n const options = [];\n const name = [];\n const atLocations = [];\n const animations = [];\n let content = [];\n for (; i < this.nodes.length && !shouldBail; i++) {\n const node = this.nodes[i];\n switch (node.type) {\n case \"animation\":\n animations.push(this.nodeToDoc(node));\n continue;\n case \"comment\": {\n const comment = {\n ...node,\n leadingWhitespace: false\n };\n comments.push(this.nodeToDoc(comment));\n continue;\n }\n case \"square_brace_group\":\n options.push(printOptionalArgs(node.content));\n continue;\n case \"coordinate\":\n name.push(this.nodeToDoc(node));\n continue;\n case \"operation\": {\n if (node.content.content === \"at\") {\n const nextNode = this.nodes[i + 1];\n if (!nextNode || !(nextNode.type === \"coordinate\" || nextNode.type === \"unknown\" && match2.anyMacro(nextNode.content))) {\n shouldBail = true;\n continue;\n }\n atLocations.push([\"at\", \" \", this.nodeToDoc(nextNode)]);\n i++;\n continue;\n }\n shouldBail = true;\n continue;\n }\n case \"unknown\": {\n if (match2.group(node.content)) {\n hasNodeArgument = true;\n content = this.nodeToDoc(node);\n }\n }\n }\n break;\n }\n if (!hasNodeArgument) {\n return innerDoc;\n }\n this.nodes.splice(0, i + 1);\n let isFirstElement = true;\n let isNamed = !(Array.isArray(name) && name.length === 0);\n for (const comment of comments) {\n commentBlock.push(comment, hardline2);\n }\n if (options.length > 0) {\n innerDoc.push(join2(\" \", options));\n isFirstElement = false;\n }\n if (animations.length > 0) {\n innerDoc.push(isFirstElement ? \" \" : line2);\n innerDoc.push(join2(line2, animations));\n isFirstElement = false;\n }\n if (isNamed) {\n innerDoc.push(isFirstElement ? \" \" : line2);\n innerDoc.push(name);\n isFirstElement = false;\n }\n if (atLocations.length > 0) {\n innerDoc.push(isFirstElement || isNamed ? \" \" : line2);\n innerDoc.push(join2(line2, atLocations));\n isFirstElement = false;\n }\n innerDoc.push(line2, content);\n return doc;\n }\n /**\n * Eat a `type === \"operation\"` node, including its optional arguments.\n */\n eatOperation() {\n const node = this.nodes[0];\n if ((node == null ? void 0 : node.type) === \"operation\") {\n this.nodes.shift();\n } else {\n return [];\n }\n const doc = [];\n if ((node == null ? void 0 : node.type) !== \"operation\") {\n throw new Error(\"Expecting `operation` node.\");\n }\n const options = this.eatOptionalArg();\n doc.push(\n ...options.comments.map(\n (c) => printFragment(c, __privateGet(this, _path), __privateGet(this, _print))\n ),\n node.content.content\n );\n if (options.optionalArg) {\n doc.push(indent2(printOptionalArgs(options.optionalArg.content)));\n }\n return doc;\n }\n};\n_path = new WeakMap();\n_print = new WeakMap();\nvar PATH_JOIN_OPERATIONS = /* @__PURE__ */ new Set([\"rectangle\", \"grid\", \"sin\", \"cos\", \"to\"]);\nfunction isPathJoinOperation(node) {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case \"line_to\":\n case \"curve_to\":\n return true;\n case \"operation\":\n return PATH_JOIN_OPERATIONS.has(node.content.content);\n }\n return false;\n}\n\n// libs/printer/argument.ts\nfunction printArgument(path, print, options) {\n const node = path.getNode();\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n if (node.openMark === \"\" && node.closeMark === \"\" && node.content.length === 0) {\n return [];\n }\n const parentNode = path.getParentNode();\n const { renderInfo: parentRenderInfo } = getNodeInfo(parentNode, options);\n if (parentRenderInfo.pgfkeysArgs) {\n const leadingComment = node.content.length > 0 && match3.comment(node.content[0]) && node.content[0].sameline ? node.content[0] : null;\n const content2 = leadingComment ? node.content.slice(1) : node.content;\n trim4(content2);\n return printArgumentPgfkeys(content2, {\n openMark: node.openMark,\n closeMark: node.closeMark,\n leadingComment\n });\n }\n if (parentRenderInfo.tikzPathCommand) {\n return printTikzArgument(path, print, options);\n }\n const openMark = node.openMark;\n const closeMark = node.closeMark;\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n if (match3.comment(node.content[node.content.length - 1])) {\n content.push(hardline2);\n }\n let rawRet = [openMark, fill2(content), closeMark];\n if (renderInfo.inParMode) {\n rawRet = [openMark, ...content, closeMark];\n }\n if (referenceMap) {\n referenceMap.setRenderCache(node, rawRet);\n }\n return rawRet;\n}\n\n// libs/printer/root.ts\nimport { match as match4 } from \"@unified-latex/unified-latex-util-match\";\nfunction hasPreambleCode(nodes) {\n return nodes.some((node) => match4.macro(node, \"documentclass\"));\n}\nfunction printRoot(path, print, options) {\n const node = path.getNode();\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n const content = path.map(print, \"content\");\n const rawContent = formatDocArray(node.content, content, options);\n const concatFunction = hasPreambleCode(node.content) ? (x) => x : fill2;\n return concatFunction(rawContent);\n}\n\n// libs/printer/comment.ts\nimport { printRaw as printRaw4 } from \"@unified-latex/unified-latex-util-print-raw\";\nfunction printComment(path, _print2, _options) {\n const node = path.getNode();\n let leadingWhitespace = \"\";\n if (node.leadingWhitespace && node.sameline) {\n leadingWhitespace = \" \";\n }\n const content = [leadingWhitespace, \"%\" + printRaw4(node.content)];\n return content;\n}\n\n// libs/printer/math.ts\nfunction printInlineMath(path, print, options) {\n const node = path.getNode();\n if (node.content.length === 0) {\n return [\"$\", \" \", \"$\"];\n }\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n content = joinWithSoftline(content);\n if (node.content[node.content.length - 1].type === \"comment\") {\n content.push(hardline2);\n }\n return fill2([\"$\", ...content, \"$\"]);\n}\nfunction printDisplayMath(path, print, options) {\n const node = path.getNode();\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n content = joinWithSoftline(content);\n const bodyStartToken = [hardline2];\n if (node.content.length === 0 || node.content[0].type === \"comment\" && node.content[0].sameline) {\n bodyStartToken.pop();\n }\n return [\n ESCAPE + \"[\",\n indent2(fill2(bodyStartToken.concat(content))),\n hardline2,\n ESCAPE + \"]\"\n ];\n}\n\n// libs/printer/environment.ts\nimport { printRaw as printRaw5 } from \"@unified-latex/unified-latex-util-print-raw\";\nimport { parseAlignEnvironment } from \"@unified-latex/unified-latex-util-align\";\nimport { trim as trim5 } from \"@unified-latex/unified-latex-util-trim\";\nfunction printVerbatimEnvironment(path, print, options) {\n const node = path.getNode();\n const env = formatEnvSurround(node);\n return [env.start, node.content, env.end];\n}\nfunction printEnvironment(path, print, options) {\n const node = path.getNode();\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n const args = node.args ? path.map(print, \"args\") : [];\n const env = formatEnvSurround(node);\n let content = path.map(print, \"content\");\n content = formatDocArray(node.content, content, options);\n if (renderInfo.inMathMode) {\n content = joinWithSoftline(content);\n }\n let bodyStartToken = [hardline2];\n if (node.content.length === 0 || node.content[0].type === \"comment\" && node.content[0].sameline) {\n bodyStartToken.pop();\n }\n return [\n env.start,\n ...args,\n indent2(fill2(bodyStartToken.concat(content))),\n hardline2,\n env.end\n ];\n}\nfunction printAlignedEnvironment(path, print, options) {\n const node = path.getNode();\n const { renderInfo, previousNode, nextNode, referenceMap } = getNodeInfo(\n node,\n options\n );\n const args = node.args ? path.map(print, \"args\") : [];\n const env = formatEnvSurround(node);\n const leadingComment = node.content[0] && node.content[0].type === \"comment\" && node.content[0].sameline ? node.content[0] : null;\n const { rows, rowSeps, trailingComments } = formatAlignedContent(\n leadingComment ? node.content.slice(1) : node.content\n );\n const content = [];\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const rowSep = rowSeps[i];\n const trailingComment = trailingComments[i];\n content.push(row);\n if (rowSep) {\n content.push(printRaw5(rowSep));\n }\n if (rowSep && trailingComment) {\n content.push(\" \");\n }\n if (trailingComment) {\n content.push([\"%\", printRaw5(trailingComment.content)]);\n }\n if (rowSep || trailingComment) {\n content.push(hardline2);\n }\n }\n if (content[content.length - 1] === hardline2) {\n content.pop();\n }\n if (leadingComment) {\n content.unshift(\n leadingComment.leadingWhitespace ? \" \" : \"\",\n \"%\" + printRaw5(leadingComment.content),\n hardline2\n );\n return [env.start, ...args, indent2(content), hardline2, env.end];\n }\n return [\n env.start,\n ...args,\n indent2([hardline2, ...content]),\n hardline2,\n env.end\n ];\n}\nfunction formatAlignedContent(nodes) {\n function getSpace(len = 1) {\n return \" \".repeat(len);\n }\n const rows = parseAlignEnvironment(nodes);\n const numCols = Math.max(...rows.map((r) => r.cells.length));\n const rowSeps = rows.map(({ rowSep }) => printRaw5(rowSep || []));\n const trailingComments = rows.map(({ trailingComment }) => trailingComment);\n const renderedRows = rows.map(({ cells, colSeps }) => ({\n cells: cells.map((nodes2) => {\n trim5(nodes2);\n return printRaw5(nodes2);\n }),\n seps: colSeps.map((nodes2) => printRaw5(nodes2))\n }));\n const colWidths = [];\n for (let i = 0; i < numCols; i++) {\n colWidths.push(\n Math.max(\n ...renderedRows.map(\n ({ cells, seps }) => ((cells[i] || \"\") + (seps[i] || \"\")).length\n )\n )\n );\n }\n const joinedRows = renderedRows.map(({ cells, seps }) => {\n if (cells.length === 1 && cells[0] === \"\") {\n return \"\";\n }\n let ret = \"\";\n for (let i = 0; i < cells.length; i++) {\n const width = colWidths[i] - (seps[i] || \"\").length;\n ret += (i === 0 ? \"\" : \" \") + cells[i] + getSpace(width - cells[i].length + 1) + (seps[i] || \"\");\n }\n return ret;\n });\n return { rows: joinedRows, rowSeps, trailingComments };\n}\n\n// libs/printer/printer.ts\nimport {\n linebreak as linebreak2,\n printRaw as printRaw6\n} from \"@unified-latex/unified-latex-util-print-raw\";\n\n// libs/reference-map.ts\nimport { visit } from \"@unified-latex/unified-latex-util-visit\";\nvar ReferenceMap = class {\n constructor(ast) {\n this.ast = ast;\n this.map = /* @__PURE__ */ new Map();\n visit(\n this.ast,\n (nodeList) => {\n for (let i = 0; i < nodeList.length; i++) {\n this.map.set(nodeList[i], {\n previous: nodeList[i - 1],\n next: nodeList[i + 1]\n });\n }\n },\n { includeArrays: true, test: Array.isArray }\n );\n }\n /**\n * Associate render-specific data with this node. This data\n * will be overwritten if `setRenderCache` is called twice.\n *\n * @param {Ast.Ast} node\n * @param {*} data\n * @memberof ReferenceMap\n */\n setRenderCache(node, data) {\n const currData = this.map.get(node) || {};\n this.map.set(node, { ...currData, renderCache: data });\n }\n /**\n * Retrieve data associated with `node` via `setRenderCache`\n *\n * @param {Ast.Ast} node\n * @returns {(object | undefined)}\n * @memberof ReferenceMap\n */\n getRenderCache(node) {\n var _a;\n return (_a = this.map.get(node)) == null ? void 0 : _a.renderCache;\n }\n getPreviousNode(node) {\n return (this.map.get(node) || {}).previous;\n }\n getNextNode(node) {\n return (this.map.get(node) || {}).next;\n }\n};\n\n// libs/printer/printer.ts\nfunction printLatexAst(path, options, print) {\n const node = path.getValue();\n const { renderInfo } = getNodeInfo(node, options);\n if (node == null) {\n return node;\n }\n if (typeof node === \"string\") {\n return node;\n }\n switch (node.type) {\n case \"root\":\n if (options.referenceMap) {\n console.warn(\n \"Processing root node, but ReferenceMap already exists. Are there multiple nodes of type 'root'?\"\n );\n }\n options.referenceMap = new ReferenceMap(node);\n return printRoot(path, print, options);\n case \"argument\":\n return printArgument(path, print, options);\n case \"comment\":\n return printComment(path, print, options);\n case \"environment\":\n case \"mathenv\":\n if (renderInfo.alignContent) {\n return printAlignedEnvironment(path, print, options);\n }\n return printEnvironment(path, print, options);\n case \"displaymath\":\n return printDisplayMath(path, print, options);\n case \"group\":\n const content = printRaw6(node.content, {\n asArray: true\n }).map((token) => token === linebreak2 ? hardline2 : token);\n return [\"{\", ...content, \"}\"];\n case \"inlinemath\":\n return printInlineMath(path, print, options);\n case \"macro\":\n return printMacro(path, print, options);\n case \"parbreak\":\n return [hardline2, hardline2];\n case \"string\":\n return node.content;\n case \"verb\":\n return [\n ESCAPE,\n node.env,\n node.escape,\n printRaw6(node.content),\n node.escape\n ];\n case \"verbatim\":\n return printVerbatimEnvironment(path, print, options);\n case \"whitespace\":\n return line2;\n default:\n console.warn(\"Printing unknown type\", node);\n return printRaw6(node);\n }\n}\n\n// libs/prettier-plugin-latex.ts\nimport { parse } from \"@unified-latex/unified-latex-util-parse\";\nvar languages = [\n {\n name: \"latex\",\n extensions: [\".tex\"],\n parsers: [\"latex-parser\"]\n }\n];\nvar parsers = {\n \"latex-parser\": {\n parse,\n astFormat: \"latex-ast\",\n locStart: (node) => node.position ? node.position.start.offset : 0,\n locEnd: (node) => node.position ? node.position.end.offset : 1\n }\n};\nvar printers = {\n \"latex-ast\": {\n print: printLatexAst\n }\n};\nvar prettierPluginLatex = { languages, parsers, printers };\nexport {\n prettierPluginLatex,\n printLatexAst,\n printLatexAst as printer\n};\n//# sourceMappingURL=index.js.map\n","import { prettierPluginLatex } from \"@unified-latex/unified-latex-prettier\";\n\nexport const options = {};\n\nexport const defaultOptions = {\n useTabs: true,\n};\n\nexport const languages = prettierPluginLatex.languages;\nexport const parsers = prettierPluginLatex.parsers;\nexport const printers = prettierPluginLatex.printers;\n"],"names":["ESCAPE","options","macros","index","index2","trim","match2","s","line","options2","at","parse","PegParser","exports","module","append","require$$0","create","checkPrefix","recursePrefix","pushInOrder","recurseRandomWord","permutations","permute","reducer","input","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","parseArgspec","arg2","macroInfo","createMatchers","isBuffer","isArray","isPlainObject","setProperty","getProperty","extend","point","position","join","path","assertPath","prop","dirname","basename","extname","bufferLike","value","isPlainObj","file","isArrayish","swizzle","simpleSwizzleModule","arg","colorStringModule","match","convert","conversions","color","colorString","models","route","keys","trim2","parseArgspec2","gobbleSingleArgument2","match3","arg3","parseArgspec3","arg4","trim3","gobbleSingleArgument3","match6","Color","visit2","slice","environments","printRaw2","unified2","__defProp","parseTikz","printRaw3","trim4","match4","printRaw4","printRaw5","trim5","printRaw6","linebreak2","languages","parsers","printers","prettierPluginLatex"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]} \ No newline at end of file diff --git a/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.d.ts b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.d.ts new file mode 100644 index 0000000..e94ca4f --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.d.ts @@ -0,0 +1,11 @@ +export declare const options: {}; +export declare const defaultOptions: { + useTabs: boolean; +}; +export declare const languages: import("prettier").SupportLanguage[] | undefined; +export declare const parsers: { + [parserName: string]: import("prettier").Parser; +} | undefined; +export declare const printers: { + [astFormat: string]: import("prettier").Printer; +} | undefined; diff --git a/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js new file mode 100644 index 0000000..7fbfeff --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const prettierPluginLatex = require("./prettier-plugin-latex-f9d12326.js"); +exports.defaultOptions = prettierPluginLatex.defaultOptions; +exports.languages = prettierPluginLatex.languages; +exports.options = prettierPluginLatex.options; +exports.parsers = prettierPluginLatex.parsers; +exports.printers = prettierPluginLatex.printers; +//# sourceMappingURL=prettier-plugin-latex.js.map diff --git a/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js.map b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js.map new file mode 100644 index 0000000..535f4b0 --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prettier-plugin-latex.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"} \ No newline at end of file diff --git a/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.mjs b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.mjs new file mode 100644 index 0000000..500769a --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/prettier-plugin-latex.mjs @@ -0,0 +1,9 @@ +import { d, l, o, a, b } from "./prettier-plugin-latex-9db821d0.mjs"; +export { + d as defaultOptions, + l as languages, + o as options, + a as parsers, + b as printers +}; +//# sourceMappingURL=prettier-plugin-latex.mjs.map diff --git a/node_modules/prettier-plugin-latex/dist/standalone.d.ts b/node_modules/prettier-plugin-latex/dist/standalone.d.ts new file mode 100644 index 0000000..3233356 --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/standalone.d.ts @@ -0,0 +1,12 @@ +import * as Prettier from "prettier/standalone"; +/** + * Format `source` LaTeX code using Prettier to format/render + * the code. + * + * @export + * @param [source=""] - code to be formatted + * @param [options={}] - Prettier options object (you can set `printWidth` here) + * @returns formatted code + */ +export declare function printPrettier(source?: string, options?: {}): Promise; +export { Prettier }; diff --git a/node_modules/prettier-plugin-latex/dist/standalone.js b/node_modules/prettier-plugin-latex/dist/standalone.js new file mode 100644 index 0000000..e94c88a --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/standalone.js @@ -0,0 +1,2459 @@ +"use strict"; +var __defProp = Object.defineProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +const prettierPluginLatex = require("./prettier-plugin-latex-f9d12326.js"); +var au = Object.create; +var $e = Object.defineProperty; +var Du = Object.getOwnPropertyDescriptor; +var cu = Object.getOwnPropertyNames; +var lu = Object.getPrototypeOf, fu = Object.prototype.hasOwnProperty; +var pu = (t, e) => () => (t && (e = t(t = 0)), e); +var Ue = (t, e) => () => (e || t((e = { exports: {} }).exports, e), e.exports), Me = (t, e) => { + for (var r in e) + $e(t, r, { get: e[r], enumerable: true }); +}, nr = (t, e, r, n) => { + if (e && typeof e == "object" || typeof e == "function") + for (let o of cu(e)) + !fu.call(t, o) && o !== r && $e(t, o, { get: () => e[o], enumerable: !(n = Du(e, o)) || n.enumerable }); + return t; +}; +var Ce = (t, e, r) => (r = t != null ? au(lu(t)) : {}, nr(e || !t || !t.__esModule ? $e(r, "default", { value: t, enumerable: true }) : r, t)), du = (t) => nr($e({}, "__esModule", { value: true }), t); +var Fu = (t, e, r) => { + if (!e.has(t)) + throw TypeError("Cannot " + r); +}; +var Ct = (t, e, r) => { + if (e.has(t)) + throw TypeError("Cannot add the same private member more than once"); + e instanceof WeakSet ? e.add(t) : e.set(t, r); +}; +var ce = (t, e, r) => (Fu(t, e, "access private method"), r); +var or = Ue((gt) => { + Object.defineProperty(gt, "__esModule", { value: true }); + gt.default = ur; + function ur() { + } + ur.prototype = { diff: function(e, r) { + var n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, o = n.callback; + typeof n == "function" && (o = n, n = {}), this.options = n; + var u = this; + function i(p) { + return o ? (setTimeout(function() { + o(void 0, p); + }, 0), true) : p; + } + e = this.castInput(e), r = this.castInput(r), e = this.removeEmpty(this.tokenize(e)), r = this.removeEmpty(this.tokenize(r)); + var s = r.length, a = e.length, D = 1, c = s + a; + n.maxEditLength && (c = Math.min(c, n.maxEditLength)); + var F = [{ newPos: -1, components: [] }], f = this.extractCommon(F[0], r, e, 0); + if (F[0].newPos + 1 >= s && f + 1 >= a) + return i([{ value: this.join(r), count: r.length }]); + function d() { + for (var p = -1 * D; p <= D; p += 2) { + var m = void 0, E = F[p - 1], h = F[p + 1], g = (h ? h.newPos : 0) - p; + E && (F[p - 1] = void 0); + var C = E && E.newPos + 1 < s, _ = h && 0 <= g && g < a; + if (!C && !_) { + F[p] = void 0; + continue; + } + if (!C || _ && E.newPos < h.newPos ? (m = hu(h), u.pushComponent(m.components, void 0, true)) : (m = E, m.newPos++, u.pushComponent(m.components, true, void 0)), g = u.extractCommon(m, r, e, p), m.newPos + 1 >= s && g + 1 >= a) + return i(Eu(u, m.components, r, e, u.useLongestToken)); + F[p] = m; + } + D++; + } + if (o) + (function p() { + setTimeout(function() { + if (D > c) + return o(); + d() || p(); + }, 0); + })(); + else + for (; D <= c; ) { + var l = d(); + if (l) + return l; + } + }, pushComponent: function(e, r, n) { + var o = e[e.length - 1]; + o && o.added === r && o.removed === n ? e[e.length - 1] = { count: o.count + 1, added: r, removed: n } : e.push({ count: 1, added: r, removed: n }); + }, extractCommon: function(e, r, n, o) { + for (var u = r.length, i = n.length, s = e.newPos, a = s - o, D = 0; s + 1 < u && a + 1 < i && this.equals(r[s + 1], n[a + 1]); ) + s++, a++, D++; + return D && e.components.push({ count: D }), e.newPos = s, a; + }, equals: function(e, r) { + return this.options.comparator ? this.options.comparator(e, r) : e === r || this.options.ignoreCase && e.toLowerCase() === r.toLowerCase(); + }, removeEmpty: function(e) { + for (var r = [], n = 0; n < e.length; n++) + e[n] && r.push(e[n]); + return r; + }, castInput: function(e) { + return e; + }, tokenize: function(e) { + return e.split(""); + }, join: function(e) { + return e.join(""); + } }; + function Eu(t, e, r, n, o) { + for (var u = 0, i = e.length, s = 0, a = 0; u < i; u++) { + var D = e[u]; + if (D.removed) { + if (D.value = t.join(n.slice(a, a + D.count)), a += D.count, u && e[u - 1].added) { + var F = e[u - 1]; + e[u - 1] = e[u], e[u] = F; + } + } else { + if (!D.added && o) { + var c = r.slice(s, s + D.count); + c = c.map(function(d, l) { + var p = n[a + l]; + return p.length > d.length ? p : d; + }), D.value = t.join(c); + } else + D.value = t.join(r.slice(s, s + D.count)); + s += D.count, D.added || (a += D.count); + } + } + var f = e[i - 1]; + return i > 1 && typeof f.value == "string" && (f.added || f.removed) && t.equals("", f.value) && (e[i - 2].value += f.value, e.pop()), e; + } + function hu(t) { + return { newPos: t.newPos, components: t.components.slice(0) }; + } +}); +var ir = Ue((ye) => { + Object.defineProperty(ye, "__esModule", { value: true }); + ye.diffArrays = yu; + ye.arrayDiff = void 0; + var Cu = gu(or()); + function gu(t) { + return t && t.__esModule ? t : { default: t }; + } + var ge = new Cu.default(); + ye.arrayDiff = ge; + ge.tokenize = function(t) { + return t.slice(); + }; + ge.join = ge.removeEmpty = function(t) { + return t; + }; + function yu(t, e, r) { + return ge.diff(t, e, r); + } +}); +var Pe = Ue((ss, Rr) => { + var Ir = new Proxy(String, { get: () => Ir }); + Rr.exports = Ir; +}); +var ln = {}; +Me(ln, { default: () => to, shouldHighlight: () => eo }); +var eo, to, fn = pu(() => { + eo = () => false, to = String; +}); +var hn = Ue((pt) => { + Object.defineProperty(pt, "__esModule", { value: true }); + pt.codeFrameColumns = En; + pt.default = io; + var pn = (fn(), du(ln)), ro = Pe(), dn = ro, jt; + function no(t) { + if (t) { + return jt != null || (jt = new dn.constructor({ enabled: true, level: 1 })), jt; + } + return dn; + } + var Fn = false; + function uo(t) { + return { gutter: t.grey, marker: t.red.bold, message: t.red.bold }; + } + var mn = /\r\n|[\n\r\u2028\u2029]/; + function oo(t, e, r) { + let n = Object.assign({ column: 0, line: -1 }, t.start), o = Object.assign({}, n, t.end), { linesAbove: u = 2, linesBelow: i = 3 } = r || {}, s = n.line, a = n.column, D = o.line, c = o.column, F = Math.max(s - (u + 1), 0), f = Math.min(e.length, D + i); + s === -1 && (F = 0), D === -1 && (f = e.length); + let d = D - s, l = {}; + if (d) + for (let p = 0; p <= d; p++) { + let m = p + s; + if (!a) + l[m] = true; + else if (p === 0) { + let E = e[m - 1].length; + l[m] = [a, E - a + 1]; + } else if (p === d) + l[m] = [0, c]; + else { + let E = e[m - p].length; + l[m] = [0, E]; + } + } + else + a === c ? a ? l[s] = [a, 0] : l[s] = true : l[s] = [a, c - a]; + return { start: F, end: f, markerLines: l }; + } + function En(t, e, r = {}) { + let n = (r.highlightCode || r.forceColor) && (0, pn.shouldHighlight)(r), o = no(r.forceColor), u = uo(o), i = (p, m) => n ? p(m) : m, s = t.split(mn), { start: a, end: D, markerLines: c } = oo(e, s, r), F = e.start && typeof e.start.column == "number", f = String(D).length, l = (n ? (0, pn.default)(t, r) : t).split(mn, D).slice(a, D).map((p, m) => { + let E = a + 1 + m, g = ` ${` ${E}`.slice(-f)} |`, C = c[E], _ = !c[E + 1]; + if (C) { + let Z = ""; + if (Array.isArray(C)) { + let $ = p.slice(0, Math.max(C[0] - 1, 0)).replace(/[^\t]/g, " "), Q = C[1] || 1; + Z = [` + `, i(u.gutter, g.replace(/\d/g, " ")), " ", $, i(u.marker, "^").repeat(Q)].join(""), _ && r.message && (Z += " " + i(u.message, r.message)); + } + return [i(u.marker, ">"), i(u.gutter, g), p.length > 0 ? ` ${p}` : "", Z].join(""); + } else + return ` ${i(u.gutter, g)}${p.length > 0 ? ` ${p}` : ""}`; + }).join(` +`); + return r.message && !F && (l = `${" ".repeat(f + 1)}${r.message} +${l}`), n ? o.reset(l) : l; + } + function io(t, e, r, n = {}) { + if (!Fn) { + Fn = true; + let u = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; + { + let i = new Error(u); + i.name = "DeprecationWarning", console.warn(new Error(u)); + } + } + return r = Math.max(r, 0), En(t, { start: { column: r, line: e } }, n); + } +}); +var tr = {}; +Me(tr, { __debug: () => Qo, check: () => Xo, doc: () => er, format: () => su, formatWithCursor: () => iu, getSupportInfo: () => Zo, util: () => Qt, version: () => ou }); +var mu = (t, e, r, n) => { + if (!(t && e == null)) + return e.replaceAll ? e.replaceAll(r, n) : r.global ? e.replace(r, n) : e.split(r).join(n); +}, ee = mu; +var Wn = Ce(ir(), 1); +var U = "string", j = "array", M = "cursor", T = "indent", S = "align", v = "trim", A = "group", k = "fill", B = "if-break", P = "indent-if-break", L = "line-suffix", I = "line-suffix-boundary", x = "line", O = "label", b = "break-parent", We = /* @__PURE__ */ new Set([M, T, S, v, A, k, B, P, L, I, x, O, b]); +function xu(t) { + if (typeof t == "string") + return U; + if (Array.isArray(t)) + return j; + if (!t) + return; + let { type: e } = t; + if (We.has(e)) + return e; +} +var W = xu; +var _u = (t) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(t); +function Au(t) { + let e = t === null ? "null" : typeof t; + if (e !== "string" && e !== "object") + return `Unexpected doc '${e}', +Expected it to be 'string' or 'object'.`; + if (W(t)) + throw new Error("doc is valid."); + let r = Object.prototype.toString.call(t); + if (r !== "[object Object]") + return `Unexpected doc '${r}'.`; + let n = _u([...We].map((o) => `'${o}'`)); + return `Unexpected doc.type '${t.type}'. +Expected it to be ${n}.`; +} +var yt = class extends Error { + constructor(e) { + super(Au(e)); + __publicField(this, "name", "InvalidDocError"); + this.doc = e; + } +}, q = yt; +var sr = {}; +function Bu(t, e, r, n) { + let o = [t]; + for (; o.length > 0; ) { + let u = o.pop(); + if (u === sr) { + r(o.pop()); + continue; + } + r && o.push(u, sr); + let i = W(u); + if (!i) + throw new q(u); + if ((e == null ? void 0 : e(u)) !== false) + switch (i) { + case j: + case k: { + let s = i === j ? u : u.parts; + for (let a = s.length, D = a - 1; D >= 0; --D) + o.push(s[D]); + break; + } + case B: + o.push(u.flatContents, u.breakContents); + break; + case A: + if (n && u.expandedStates) + for (let s = u.expandedStates.length, a = s - 1; a >= 0; --a) + o.push(u.expandedStates[a]); + else + o.push(u.contents); + break; + case S: + case T: + case P: + case O: + case L: + o.push(u.contents); + break; + case U: + case M: + case v: + case I: + case x: + case b: + break; + default: + throw new q(u); + } + } +} +var xe = Bu; +var ar = () => { +}, ze = ar; +function ie(t) { + return { type: T, contents: t }; +} +function oe(t, e) { + return { type: S, contents: e, n: t }; +} +function xt(t, e = {}) { + return ze(e.expandedStates), { type: A, id: e.id, contents: t, break: !!e.shouldBreak, expandedStates: e.expandedStates }; +} +function Dr(t) { + return oe(Number.NEGATIVE_INFINITY, t); +} +function cr(t) { + return oe({ type: "root" }, t); +} +function lr(t) { + return oe(-1, t); +} +function fr(t, e) { + return xt(t[0], { ...e, expandedStates: t }); +} +function Ge(t) { + return { type: k, parts: t }; +} +function pr(t, e = "", r = {}) { + return { type: B, breakContents: t, flatContents: e, groupId: r.groupId }; +} +function dr(t, e) { + return { type: P, contents: t, groupId: e.groupId, negate: e.negate }; +} +function _e(t) { + return { type: L, contents: t }; +} +var Fr = { type: I }, le = { type: b }, mr = { type: v }, Ae = { type: x, hard: true }, _t = { type: x, hard: true, literal: true }, Ke = { type: x }, Er = { type: x, soft: true }, G = [Ae, le], He = [_t, le], Be = { type: M }; +function ke(t, e) { + let r = []; + for (let n = 0; n < e.length; n++) + n !== 0 && r.push(t), r.push(e[n]); + return r; +} +function qe(t, e, r) { + let n = t; + if (e > 0) { + for (let o = 0; o < Math.floor(e / r); ++o) + n = ie(n); + n = oe(e % r, n), n = oe(Number.NEGATIVE_INFINITY, n); + } + return n; +} +function hr(t, e) { + return t ? { type: O, label: t, contents: e } : e; +} +var ku = (t, e, r) => { + if (!(t && e == null)) + return Array.isArray(e) || typeof e == "string" ? e[r < 0 ? e.length + r : r] : e.at(r); +}, y = ku; +function Cr(t) { + let e = t.indexOf("\r"); + return e >= 0 ? t.charAt(e + 1) === ` +` ? "crlf" : "cr" : "lf"; +} +function be(t) { + switch (t) { + case "cr": + return "\r"; + case "crlf": + return `\r +`; + default: + return ` +`; + } +} +function At(t, e) { + let r; + switch (e) { + case ` +`: + r = /\n/g; + break; + case "\r": + r = /\r/g; + break; + case `\r +`: + r = /\r\n/g; + break; + default: + throw new Error(`Unexpected "eol" ${JSON.stringify(e)}.`); + } + let n = t.match(r); + return n ? n.length : 0; +} +function gr(t) { + return ee(false, t, /\r\n?/g, ` +`); +} +var yr = () => /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; +var xr = { eastAsianWidth(t) { + var e = t.charCodeAt(0), r = t.length == 2 ? t.charCodeAt(1) : 0, n = e; + return 55296 <= e && e <= 56319 && 56320 <= r && r <= 57343 && (e &= 1023, r &= 1023, n = e << 10 | r, n += 65536), n == 12288 || 65281 <= n && n <= 65376 || 65504 <= n && n <= 65510 ? "F" : 4352 <= n && n <= 4447 || 4515 <= n && n <= 4519 || 4602 <= n && n <= 4607 || 9001 <= n && n <= 9002 || 11904 <= n && n <= 11929 || 11931 <= n && n <= 12019 || 12032 <= n && n <= 12245 || 12272 <= n && n <= 12283 || 12289 <= n && n <= 12350 || 12353 <= n && n <= 12438 || 12441 <= n && n <= 12543 || 12549 <= n && n <= 12589 || 12593 <= n && n <= 12686 || 12688 <= n && n <= 12730 || 12736 <= n && n <= 12771 || 12784 <= n && n <= 12830 || 12832 <= n && n <= 12871 || 12880 <= n && n <= 13054 || 13056 <= n && n <= 19903 || 19968 <= n && n <= 42124 || 42128 <= n && n <= 42182 || 43360 <= n && n <= 43388 || 44032 <= n && n <= 55203 || 55216 <= n && n <= 55238 || 55243 <= n && n <= 55291 || 63744 <= n && n <= 64255 || 65040 <= n && n <= 65049 || 65072 <= n && n <= 65106 || 65108 <= n && n <= 65126 || 65128 <= n && n <= 65131 || 110592 <= n && n <= 110593 || 127488 <= n && n <= 127490 || 127504 <= n && n <= 127546 || 127552 <= n && n <= 127560 || 127568 <= n && n <= 127569 || 131072 <= n && n <= 194367 || 177984 <= n && n <= 196605 || 196608 <= n && n <= 262141 ? "W" : "N"; +} }; +var bu = /[^\x20-\x7F]/; +function wu(t) { + if (!t) + return 0; + if (!bu.test(t)) + return t.length; + t = t.replace(yr(), " "); + let e = 0; + for (let r of t) { + let n = r.codePointAt(0); + if (n <= 31 || n >= 127 && n <= 159 || n >= 768 && n <= 879) + continue; + let o = xr.eastAsianWidth(r); + e += o === "F" || o === "W" ? 2 : 1; + } + return e; +} +var we = wu; +var Br = (t) => { + if (Array.isArray(t)) + return t; + if (t.type !== k) + throw new Error(`Expect doc to be 'array' or '${k}'.`); + return t.parts; +}; +function Ne(t, e) { + if (typeof t == "string") + return e(t); + let r = /* @__PURE__ */ new Map(); + return n(t); + function n(u) { + if (r.has(u)) + return r.get(u); + let i = o(u); + return r.set(u, i), i; + } + function o(u) { + switch (W(u)) { + case j: + return e(u.map(n)); + case k: + return e({ ...u, parts: u.parts.map(n) }); + case B: + return e({ ...u, breakContents: n(u.breakContents), flatContents: n(u.flatContents) }); + case A: { + let { expandedStates: i, contents: s } = u; + return i ? (i = i.map(n), s = i[0]) : s = n(s), e({ ...u, contents: s, expandedStates: i }); + } + case S: + case T: + case P: + case O: + case L: + return e({ ...u, contents: n(u.contents) }); + case U: + case M: + case v: + case I: + case x: + case b: + return e(u); + default: + throw new q(u); + } + } +} +function Je(t, e, r) { + let n = r, o = false; + function u(i) { + if (o) + return false; + let s = e(i); + s !== void 0 && (o = true, n = s); + } + return xe(t, u), n; +} +function Ou(t) { + if (t.type === A && t.break || t.type === x && t.hard || t.type === b) + return true; +} +function kr(t) { + return Je(t, Ou, false); +} +function _r(t) { + if (t.length > 0) { + let e = y(false, t, -1); + !e.expandedStates && !e.break && (e.break = "propagated"); + } + return null; +} +function br(t) { + let e = /* @__PURE__ */ new Set(), r = []; + function n(u) { + if (u.type === b && _r(r), u.type === A) { + if (r.push(u), e.has(u)) + return false; + e.add(u); + } + } + function o(u) { + u.type === A && r.pop().break && _r(r); + } + xe(t, n, o, true); +} +function Nu(t) { + return t.type === x && !t.hard ? t.soft ? "" : " " : t.type === B ? t.flatContents : t; +} +function wr(t) { + return Ne(t, Nu); +} +function Ar(t) { + for (t = [...t]; t.length >= 2 && y(false, t, -2).type === x && y(false, t, -1).type === b; ) + t.length -= 2; + if (t.length > 0) { + let e = Oe(y(false, t, -1)); + t[t.length - 1] = e; + } + return t; +} +function Oe(t) { + switch (W(t)) { + case S: + case T: + case P: + case A: + case L: + case O: { + let e = Oe(t.contents); + return { ...t, contents: e }; + } + case B: + return { ...t, breakContents: Oe(t.breakContents), flatContents: Oe(t.flatContents) }; + case k: + return { ...t, parts: Ar(t.parts) }; + case j: + return Ar(t); + case U: + return t.replace(/[\n\r]*$/, ""); + case M: + case v: + case I: + case x: + case b: + break; + default: + throw new q(t); + } + return t; +} +function Xe(t) { + return Oe(Su(t)); +} +function Tu(t) { + switch (W(t)) { + case k: + if (t.parts.every((e) => e === "")) + return ""; + break; + case A: + if (!t.contents && !t.id && !t.break && !t.expandedStates) + return ""; + if (t.contents.type === A && t.contents.id === t.id && t.contents.break === t.break && t.contents.expandedStates === t.expandedStates) + return t.contents; + break; + case S: + case T: + case P: + case L: + if (!t.contents) + return ""; + break; + case B: + if (!t.flatContents && !t.breakContents) + return ""; + break; + case j: { + let e = []; + for (let r of t) { + if (!r) + continue; + let [n, ...o] = Array.isArray(r) ? r : [r]; + typeof n == "string" && typeof y(false, e, -1) == "string" ? e[e.length - 1] += n : e.push(n), e.push(...o); + } + return e.length === 0 ? "" : e.length === 1 ? e[0] : e; + } + case U: + case M: + case v: + case I: + case x: + case O: + case b: + break; + default: + throw new q(t); + } + return t; +} +function Su(t) { + return Ne(t, (e) => Tu(e)); +} +function Or(t, e = He) { + return Ne(t, (r) => typeof r == "string" ? ke(e, r.split(` +`)) : r); +} +function vu(t) { + if (t.type === x) + return true; +} +function Nr(t) { + return Je(t, vu, false); +} +function Ze(t, e) { + return t.type === O ? { ...t, contents: e(t.contents) } : e(t); +} +var R = Symbol("MODE_BREAK"), K = Symbol("MODE_FLAT"), Te = Symbol("cursor"); +function Tr() { + return { value: "", length: 0, queue: [] }; +} +function Pu(t, e) { + return Bt(t, { type: "indent" }, e); +} +function Lu(t, e, r) { + return e === Number.NEGATIVE_INFINITY ? t.root || Tr() : e < 0 ? Bt(t, { type: "dedent" }, r) : e ? e.type === "root" ? { ...t, root: t } : Bt(t, { type: typeof e == "string" ? "stringAlign" : "numberAlign", n: e }, r) : t; +} +function Bt(t, e, r) { + let n = e.type === "dedent" ? t.queue.slice(0, -1) : [...t.queue, e], o = "", u = 0, i = 0, s = 0; + for (let l of n) + switch (l.type) { + case "indent": + c(), r.useTabs ? a(1) : D(r.tabWidth); + break; + case "stringAlign": + c(), o += l.n, u += l.n.length; + break; + case "numberAlign": + i += 1, s += l.n; + break; + default: + throw new Error(`Unexpected type '${l.type}'`); + } + return f(), { ...t, value: o, length: u, queue: n }; + function a(l) { + o += " ".repeat(l), u += r.tabWidth * l; + } + function D(l) { + o += " ".repeat(l), u += l; + } + function c() { + r.useTabs ? F() : f(); + } + function F() { + i > 0 && a(i), d(); + } + function f() { + s > 0 && D(s), d(); + } + function d() { + i = 0, s = 0; + } +} +function kt(t) { + let e = 0, r = 0, n = t.length; + e: + for (; n--; ) { + let o = t[n]; + if (o === Te) { + r++; + continue; + } + for (let u = o.length - 1; u >= 0; u--) { + let i = o[u]; + if (i === " " || i === " ") + e++; + else { + t[n] = o.slice(0, u + 1); + break e; + } + } + } + if (e > 0 || r > 0) + for (t.length = n + 1; r-- > 0; ) + t.push(Te); + return e; +} +function Qe(t, e, r, n, o, u) { + if (r === Number.POSITIVE_INFINITY) + return true; + let i = e.length, s = [t], a = []; + for (; r >= 0; ) { + if (s.length === 0) { + if (i === 0) + return true; + s.push(e[--i]); + continue; + } + let { mode: D, doc: c } = s.pop(); + switch (W(c)) { + case U: + a.push(c), r -= we(c); + break; + case j: + case k: { + let F = Br(c); + for (let f = F.length - 1; f >= 0; f--) + s.push({ mode: D, doc: F[f] }); + break; + } + case T: + case S: + case P: + case O: + s.push({ mode: D, doc: c.contents }); + break; + case v: + r += kt(a); + break; + case A: { + if (u && c.break) + return false; + let F = c.break ? R : D, f = c.expandedStates && F === R ? y(false, c.expandedStates, -1) : c.contents; + s.push({ mode: F, doc: f }); + break; + } + case B: { + let f = (c.groupId ? o[c.groupId] || K : D) === R ? c.breakContents : c.flatContents; + f && s.push({ mode: D, doc: f }); + break; + } + case x: + if (D === R || c.hard) + return true; + c.soft || (a.push(" "), r--); + break; + case L: + n = true; + break; + case I: + if (n) + return false; + break; + } + } + return false; +} +function fe(t, e) { + let r = {}, n = e.printWidth, o = be(e.endOfLine), u = 0, i = [{ ind: Tr(), mode: R, doc: t }], s = [], a = false, D = [], c = 0; + for (br(t); i.length > 0; ) { + let { ind: f, mode: d, doc: l } = i.pop(); + switch (W(l)) { + case U: { + let p = o !== ` +` ? ee(false, l, ` +`, o) : l; + s.push(p), i.length > 0 && (u += we(p)); + break; + } + case j: + for (let p = l.length - 1; p >= 0; p--) + i.push({ ind: f, mode: d, doc: l[p] }); + break; + case M: + if (c >= 2) + throw new Error("There are too many 'cursor' in doc."); + s.push(Te), c++; + break; + case T: + i.push({ ind: Pu(f, e), mode: d, doc: l.contents }); + break; + case S: + i.push({ ind: Lu(f, l.n, e), mode: d, doc: l.contents }); + break; + case v: + u -= kt(s); + break; + case A: + switch (d) { + case K: + if (!a) { + i.push({ ind: f, mode: l.break ? R : K, doc: l.contents }); + break; + } + case R: { + a = false; + let p = { ind: f, mode: K, doc: l.contents }, m = n - u, E = D.length > 0; + if (!l.break && Qe(p, i, m, E, r)) + i.push(p); + else if (l.expandedStates) { + let h = y(false, l.expandedStates, -1); + if (l.break) { + i.push({ ind: f, mode: R, doc: h }); + break; + } else + for (let g = 1; g < l.expandedStates.length + 1; g++) + if (g >= l.expandedStates.length) { + i.push({ ind: f, mode: R, doc: h }); + break; + } else { + let C = l.expandedStates[g], _ = { ind: f, mode: K, doc: C }; + if (Qe(_, i, m, E, r)) { + i.push(_); + break; + } + } + } else + i.push({ ind: f, mode: R, doc: l.contents }); + break; + } + } + l.id && (r[l.id] = y(false, i, -1).mode); + break; + case k: { + let p = n - u, { parts: m } = l; + if (m.length === 0) + break; + let [E, h] = m, g = { ind: f, mode: K, doc: E }, C = { ind: f, mode: R, doc: E }, _ = Qe(g, [], p, D.length > 0, r, true); + if (m.length === 1) { + _ ? i.push(g) : i.push(C); + break; + } + let Z = { ind: f, mode: K, doc: h }, $ = { ind: f, mode: R, doc: h }; + if (m.length === 2) { + _ ? i.push(Z, g) : i.push($, C); + break; + } + m.splice(0, 2); + let Q = { ind: f, mode: d, doc: Ge(m) }, rr = m[0]; + Qe({ ind: f, mode: K, doc: [E, h, rr] }, [], p, D.length > 0, r, true) ? i.push(Q, Z, g) : _ ? i.push(Q, $, g) : i.push(Q, $, C); + break; + } + case B: + case P: { + let p = l.groupId ? r[l.groupId] : d; + if (p === R) { + let m = l.type === B ? l.breakContents : l.negate ? l.contents : ie(l.contents); + m && i.push({ ind: f, mode: d, doc: m }); + } + if (p === K) { + let m = l.type === B ? l.flatContents : l.negate ? ie(l.contents) : l.contents; + m && i.push({ ind: f, mode: d, doc: m }); + } + break; + } + case L: + D.push({ ind: f, mode: d, doc: l.contents }); + break; + case I: + D.length > 0 && i.push({ ind: f, mode: d, doc: Ae }); + break; + case x: + switch (d) { + case K: + if (l.hard) + a = true; + else { + l.soft || (s.push(" "), u += 1); + break; + } + case R: + if (D.length > 0) { + i.push({ ind: f, mode: d, doc: l }, ...D.reverse()), D.length = 0; + break; + } + l.literal ? f.root ? (s.push(o, f.root.value), u = f.root.length) : (s.push(o), u = 0) : (u -= kt(s), s.push(o + f.value), u = f.length); + break; + } + break; + case O: + i.push({ ind: f, mode: d, doc: l.contents }); + break; + case b: + break; + default: + throw new q(l); + } + i.length === 0 && D.length > 0 && (i.push(...D.reverse()), D.length = 0); + } + let F = s.indexOf(Te); + if (F !== -1) { + let f = s.indexOf(Te, F + 1), d = s.slice(0, F).join(""), l = s.slice(F + 1, f).join(""), p = s.slice(f + 1).join(""); + return { formatted: d + l + p, cursorNodeStart: d.length, cursorNodeText: l }; + } + return { formatted: s.join("") }; +} +function J(t) { + var e; + if (!t) + return ""; + if (Array.isArray(t)) { + let r = []; + for (let n of t) + if (Array.isArray(n)) + r.push(...J(n)); + else { + let o = J(n); + o !== "" && r.push(o); + } + return r; + } + return t.type === B ? { ...t, breakContents: J(t.breakContents), flatContents: J(t.flatContents) } : t.type === A ? { ...t, contents: J(t.contents), expandedStates: (e = t.expandedStates) == null ? void 0 : e.map(J) } : t.type === k ? { type: "fill", parts: t.parts.map(J) } : t.contents ? { ...t, contents: J(t.contents) } : t; +} +function Sr(t) { + let e = /* @__PURE__ */ Object.create(null), r = /* @__PURE__ */ new Set(); + return n(J(t)); + function n(u, i, s) { + var a, D; + if (typeof u == "string") + return JSON.stringify(u); + if (Array.isArray(u)) { + let c = u.map(n).filter(Boolean); + return c.length === 1 ? c[0] : `[${c.join(", ")}]`; + } + if (u.type === x) { + let c = ((a = s == null ? void 0 : s[i + 1]) == null ? void 0 : a.type) === b; + return u.literal ? c ? "literalline" : "literallineWithoutBreakParent" : u.hard ? c ? "hardline" : "hardlineWithoutBreakParent" : u.soft ? "softline" : "line"; + } + if (u.type === b) + return ((D = s == null ? void 0 : s[i - 1]) == null ? void 0 : D.type) === x && s[i - 1].hard ? void 0 : "breakParent"; + if (u.type === v) + return "trim"; + if (u.type === T) + return "indent(" + n(u.contents) + ")"; + if (u.type === S) + return u.n === Number.NEGATIVE_INFINITY ? "dedentToRoot(" + n(u.contents) + ")" : u.n < 0 ? "dedent(" + n(u.contents) + ")" : u.n.type === "root" ? "markAsRoot(" + n(u.contents) + ")" : "align(" + JSON.stringify(u.n) + ", " + n(u.contents) + ")"; + if (u.type === B) + return "ifBreak(" + n(u.breakContents) + (u.flatContents ? ", " + n(u.flatContents) : "") + (u.groupId ? (u.flatContents ? "" : ', ""') + `, { groupId: ${o(u.groupId)} }` : "") + ")"; + if (u.type === P) { + let c = []; + u.negate && c.push("negate: true"), u.groupId && c.push(`groupId: ${o(u.groupId)}`); + let F = c.length > 0 ? `, { ${c.join(", ")} }` : ""; + return `indentIfBreak(${n(u.contents)}${F})`; + } + if (u.type === A) { + let c = []; + u.break && u.break !== "propagated" && c.push("shouldBreak: true"), u.id && c.push(`id: ${o(u.id)}`); + let F = c.length > 0 ? `, { ${c.join(", ")} }` : ""; + return u.expandedStates ? `conditionalGroup([${u.expandedStates.map((f) => n(f)).join(",")}]${F})` : `group(${n(u.contents)}${F})`; + } + if (u.type === k) + return `fill([${u.parts.map((c) => n(c)).join(", ")}])`; + if (u.type === L) + return "lineSuffix(" + n(u.contents) + ")"; + if (u.type === I) + return "lineSuffixBoundary"; + if (u.type === O) + return `label(${JSON.stringify(u.label)}, ${n(u.contents)})`; + throw new Error("Unknown doc type " + u.type); + } + function o(u) { + if (typeof u != "symbol") + return JSON.stringify(String(u)); + if (u in e) + return e[u]; + let i = u.description || "symbol"; + for (let s = 0; ; s++) { + let a = i + (s > 0 ? ` #${s}` : ""); + if (!r.has(a)) + return r.add(a), e[u] = `Symbol.for(${JSON.stringify(a)})`; + } + } +} +function Iu(t, e, r = 0) { + let n = 0; + for (let o = r; o < t.length; ++o) + t[o] === " " ? n = n + e - n % e : n++; + return n; +} +var pe = Iu; +var Se = class extends Error { + constructor() { + super(...arguments); + __publicField(this, "name", "ConfigError"); + } +}, ve = class extends Error { + constructor() { + super(...arguments); + __publicField(this, "name", "UndefinedParserError"); + } +}; +var vr = { cursorOffset: { category: "Special", type: "int", default: -1, range: { start: -1, end: 1 / 0, step: 1 }, description: `Print (to stderr) where a cursor at the given position would move to after formatting. +This option cannot be used with --range-start and --range-end.`, cliCategory: "Editor" }, endOfLine: { category: "Global", type: "choice", default: "lf", description: "Which end of line characters to apply.", choices: [{ value: "lf", description: "Line Feed only (\\n), common on Linux and macOS as well as inside git repos" }, { value: "crlf", description: "Carriage Return + Line Feed characters (\\r\\n), common on Windows" }, { value: "cr", description: "Carriage Return character only (\\r), used very rarely" }, { value: "auto", description: `Maintain existing +(mixed values within one file are normalised by looking at what's used after the first line)` }] }, filepath: { category: "Special", type: "path", description: "Specify the input filepath. This will be used to do parser inference.", cliName: "stdin-filepath", cliCategory: "Other", cliDescription: "Path to the file to pretend that stdin comes from." }, insertPragma: { category: "Special", type: "boolean", default: false, description: "Insert @format pragma into file's first docblock comment.", cliCategory: "Other" }, parser: { category: "Global", type: "choice", default: void 0, description: "Which parser to use.", exception: (t) => typeof t == "string" || typeof t == "function", choices: [{ value: "flow", description: "Flow" }, { value: "babel", description: "JavaScript" }, { value: "babel-flow", description: "Flow" }, { value: "babel-ts", description: "TypeScript" }, { value: "typescript", description: "TypeScript" }, { value: "acorn", description: "JavaScript" }, { value: "espree", description: "JavaScript" }, { value: "meriyah", description: "JavaScript" }, { value: "css", description: "CSS" }, { value: "less", description: "Less" }, { value: "scss", description: "SCSS" }, { value: "json", description: "JSON" }, { value: "json5", description: "JSON5" }, { value: "json-stringify", description: "JSON.stringify" }, { value: "graphql", description: "GraphQL" }, { value: "markdown", description: "Markdown" }, { value: "mdx", description: "MDX" }, { value: "vue", description: "Vue" }, { value: "yaml", description: "YAML" }, { value: "glimmer", description: "Ember / Handlebars" }, { value: "html", description: "HTML" }, { value: "angular", description: "Angular" }, { value: "lwc", description: "Lightning Web Components" }] }, plugins: { type: "path", array: true, default: [{ value: [] }], category: "Global", description: "Add a plugin. Multiple plugins can be passed as separate `--plugin`s.", exception: (t) => typeof t == "string" || typeof t == "object", cliName: "plugin", cliCategory: "Config" }, printWidth: { category: "Global", type: "int", default: 80, description: "The line length where Prettier will try wrap.", range: { start: 0, end: 1 / 0, step: 1 } }, rangeEnd: { category: "Special", type: "int", default: 1 / 0, range: { start: 0, end: 1 / 0, step: 1 }, description: `Format code ending at a given character offset (exclusive). +The range will extend forwards to the end of the selected statement. +This option cannot be used with --cursor-offset.`, cliCategory: "Editor" }, rangeStart: { category: "Special", type: "int", default: 0, range: { start: 0, end: 1 / 0, step: 1 }, description: `Format code starting at a given character offset. +The range will extend backwards to the start of the first line containing the selected statement. +This option cannot be used with --cursor-offset.`, cliCategory: "Editor" }, requirePragma: { category: "Special", type: "boolean", default: false, description: `Require either '@prettier' or '@format' to be present in the file's first docblock comment +in order for it to be formatted.`, cliCategory: "Other" }, tabWidth: { type: "int", category: "Global", default: 2, description: "Number of spaces per indentation level.", range: { start: 0, end: 1 / 0, step: 1 } }, useTabs: { category: "Global", type: "boolean", default: false, description: "Indent with tabs instead of spaces." }, embeddedLanguageFormatting: { category: "Global", type: "choice", default: "auto", description: "Control how Prettier formats quoted code embedded in the file.", choices: [{ value: "auto", description: "Format embedded code if Prettier can automatically identify it." }, { value: "off", description: "Never automatically format embedded code." }] } }; +function et({ plugins: t = [], showDeprecated: e = false } = {}) { + let r = t.flatMap((o) => o.languages ?? []), n = []; + for (let o of Yu(Object.assign({}, ...t.map(({ options: u }) => u), vr))) + !e && o.deprecated || (Array.isArray(o.choices) && (e || (o.choices = o.choices.filter((u) => !u.deprecated)), o.name === "parser" && (o.choices = [...o.choices, ...Ru(o.choices, r, t)])), o.pluginDefaults = Object.fromEntries(t.filter((u) => { + var i; + return ((i = u.defaultOptions) == null ? void 0 : i[o.name]) !== void 0; + }).map((u) => [u.name, u.defaultOptions[o.name]])), n.push(o)); + return { languages: r, options: n }; +} +function* Ru(t, e, r) { + let n = new Set(t.map((o) => o.value)); + for (let o of e) + if (o.parsers) { + for (let u of o.parsers) + if (!n.has(u)) { + n.add(u); + let i = r.find((a) => a.parsers && Object.prototype.hasOwnProperty.call(a.parsers, u)), s = o.name; + i != null && i.name && (s += ` (plugin: ${i.name})`), yield { value: u, description: s }; + } + } +} +function Yu(t) { + let e = []; + for (let [r, n] of Object.entries(t)) { + let o = { name: r, ...n }; + Array.isArray(o.default) && (o.default = y(false, o.default, -1).value), e.push(o); + } + return e; +} +var ju = (t) => t.split(/[/\\]/).pop(); +function Pr(t, e) { + if (!e) + return; + let r = ju(e).toLowerCase(); + return t.find((n) => { + var o, u; + return ((o = n.extensions) == null ? void 0 : o.some((i) => r.endsWith(i))) || ((u = n.filenames) == null ? void 0 : u.some((i) => i.toLowerCase() === r)); + }); +} +function Vu(t, e) { + if (e) + return t.find(({ name: r }) => r.toLowerCase() === e) ?? t.find(({ aliases: r }) => r == null ? void 0 : r.includes(e)) ?? t.find(({ extensions: r }) => r == null ? void 0 : r.includes(`.${e}`)); +} +function $u(t, e) { + let r = t.plugins.flatMap((o) => o.languages ?? []), n = Vu(r, e.language) ?? Pr(r, e.physicalFile) ?? Pr(r, e.file) ?? (e.physicalFile, void 0); + return n == null ? void 0 : n.parsers[0]; +} +var Lr = $u; +var te = { key: (t) => /^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(t) ? t : JSON.stringify(t), value(t) { + if (t === null || typeof t != "object") + return JSON.stringify(t); + if (Array.isArray(t)) + return `[${t.map((r) => te.value(r)).join(", ")}]`; + let e = Object.keys(t); + return e.length === 0 ? "{}" : `{ ${e.map((r) => `${te.key(r)}: ${te.value(t[r])}`).join(", ")} }`; +}, pair: ({ key: t, value: e }) => te.value({ [t]: e }) }; +var bt = Ce(Pe(), 1), Yr = (t, e, { descriptor: r }) => { + let n = [`${bt.default.yellow(typeof t == "string" ? r.key(t) : r.pair(t))} is deprecated`]; + return e && n.push(`we now treat it as ${bt.default.blue(typeof e == "string" ? r.key(e) : r.pair(e))}`), n.join("; ") + "."; +}; +var se = Ce(Pe(), 1); +var tt = Symbol.for("vnopts.VALUE_NOT_EXIST"), de = Symbol.for("vnopts.VALUE_UNCHANGED"); +var jr = " ".repeat(2), $r = (t, e, r) => { + let { text: n, list: o } = r.normalizeExpectedResult(r.schemas[t].expected(r)), u = []; + return n && u.push(Vr(t, e, n, r.descriptor)), o && u.push([Vr(t, e, o.title, r.descriptor)].concat(o.values.map((i) => Ur(i, r.loggerPrintWidth))).join(` +`)), Mr(u, r.loggerPrintWidth); +}; +function Vr(t, e, r, n) { + return [`Invalid ${se.default.red(n.key(t))} value.`, `Expected ${se.default.blue(r)},`, `but received ${e === tt ? se.default.gray("nothing") : se.default.red(n.value(e))}.`].join(" "); +} +function Ur({ text: t, list: e }, r) { + let n = []; + return t && n.push(`- ${se.default.blue(t)}`), e && n.push([`- ${se.default.blue(e.title)}:`].concat(e.values.map((o) => Ur(o, r - jr.length).replace(/^|\n/g, `$&${jr}`))).join(` +`)), Mr(n, r); +} +function Mr(t, e) { + if (t.length === 1) + return t[0]; + let [r, n] = t, [o, u] = t.map((i) => i.split(` +`, 1)[0].length); + return o > e && o > u ? n : r; +} +var Nt = Ce(Pe(), 1); +var wt = [], Wr = []; +function Ot(t, e) { + if (t === e) + return 0; + let r = t; + t.length > e.length && (t = e, e = r); + let n = t.length, o = e.length; + for (; n > 0 && t.charCodeAt(~-n) === e.charCodeAt(~-o); ) + n--, o--; + let u = 0; + for (; u < n && t.charCodeAt(u) === e.charCodeAt(u); ) + u++; + if (n -= u, o -= u, n === 0) + return o; + let i, s, a, D, c = 0, F = 0; + for (; c < n; ) + Wr[c] = t.charCodeAt(u + c), wt[c] = ++c; + for (; F < o; ) + for (i = e.charCodeAt(u + F), a = F++, s = F, c = 0; c < n; c++) + D = i === Wr[c] ? a : a + 1, a = wt[c], s = wt[c] = a > s ? D > s ? s + 1 : D : D > a ? a + 1 : D; + return s; +} +var rt = (t, e, { descriptor: r, logger: n, schemas: o }) => { + let u = [`Ignored unknown option ${Nt.default.yellow(r.pair({ key: t, value: e }))}.`], i = Object.keys(o).sort().find((s) => Ot(t, s) < 3); + i && u.push(`Did you mean ${Nt.default.blue(r.key(i))}?`), n.warn(u.join(" ")); +}; +var Uu = ["default", "expected", "validate", "deprecated", "forward", "redirect", "overlap", "preprocess", "postprocess"]; +function Mu(t, e) { + let r = new t(e), n = Object.create(r); + for (let o of Uu) + o in e && (n[o] = Wu(e[o], r, w.prototype[o].length)); + return n; +} +var w = class { + static create(e) { + return Mu(this, e); + } + constructor(e) { + this.name = e.name; + } + default(e) { + } + expected(e) { + return "nothing"; + } + validate(e, r) { + return false; + } + deprecated(e, r) { + return false; + } + forward(e, r) { + } + redirect(e, r) { + } + overlap(e, r, n) { + return e; + } + preprocess(e, r) { + return e; + } + postprocess(e, r) { + return de; + } +}; +function Wu(t, e, r) { + return typeof t == "function" ? (...n) => t(...n.slice(0, r - 1), e, ...n.slice(r - 1)) : () => t; +} +var nt = class extends w { + constructor(e) { + super(e), this._sourceName = e.sourceName; + } + expected(e) { + return e.schemas[this._sourceName].expected(e); + } + validate(e, r) { + return r.schemas[this._sourceName].validate(e, r); + } + redirect(e, r) { + return this._sourceName; + } +}; +var ut = class extends w { + expected() { + return "anything"; + } + validate() { + return true; + } +}; +var ot = class extends w { + constructor({ valueSchema: e, name: r = e.name, ...n }) { + super({ ...n, name: r }), this._valueSchema = e; + } + expected(e) { + let { text: r, list: n } = e.normalizeExpectedResult(this._valueSchema.expected(e)); + return { text: r && `an array of ${r}`, list: n && { title: "an array of the following values", values: [{ list: n }] } }; + } + validate(e, r) { + if (!Array.isArray(e)) + return false; + let n = []; + for (let o of e) { + let u = r.normalizeValidateResult(this._valueSchema.validate(o, r), o); + u !== true && n.push(u.value); + } + return n.length === 0 ? true : { value: n }; + } + deprecated(e, r) { + let n = []; + for (let o of e) { + let u = r.normalizeDeprecatedResult(this._valueSchema.deprecated(o, r), o); + u !== false && n.push(...u.map(({ value: i }) => ({ value: [i] }))); + } + return n; + } + forward(e, r) { + let n = []; + for (let o of e) { + let u = r.normalizeForwardResult(this._valueSchema.forward(o, r), o); + n.push(...u.map(zr)); + } + return n; + } + redirect(e, r) { + let n = [], o = []; + for (let u of e) { + let i = r.normalizeRedirectResult(this._valueSchema.redirect(u, r), u); + "remain" in i && n.push(i.remain), o.push(...i.redirect.map(zr)); + } + return n.length === 0 ? { redirect: o } : { redirect: o, remain: n }; + } + overlap(e, r) { + return e.concat(r); + } +}; +function zr({ from: t, to: e }) { + return { from: [t], to: e }; +} +var it = class extends w { + expected() { + return "true or false"; + } + validate(e) { + return typeof e == "boolean"; + } +}; +function Kr(t, e) { + let r = /* @__PURE__ */ Object.create(null); + for (let n of t) { + let o = n[e]; + if (r[o]) + throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`); + r[o] = n; + } + return r; +} +function Hr(t, e) { + let r = /* @__PURE__ */ new Map(); + for (let n of t) { + let o = n[e]; + if (r.has(o)) + throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`); + r.set(o, n); + } + return r; +} +function qr() { + let t = /* @__PURE__ */ Object.create(null); + return (e) => { + let r = JSON.stringify(e); + return t[r] ? true : (t[r] = true, false); + }; +} +function Jr(t, e) { + let r = [], n = []; + for (let o of t) + e(o) ? r.push(o) : n.push(o); + return [r, n]; +} +function Xr(t) { + return t === Math.floor(t); +} +function Zr(t, e) { + if (t === e) + return 0; + let r = typeof t, n = typeof e, o = ["undefined", "object", "boolean", "number", "string"]; + return r !== n ? o.indexOf(r) - o.indexOf(n) : r !== "string" ? Number(t) - Number(e) : t.localeCompare(e); +} +function Qr(t) { + return (...e) => { + let r = t(...e); + return typeof r == "string" ? new Error(r) : r; + }; +} +function Tt(t) { + return t === void 0 ? {} : t; +} +function St(t) { + if (typeof t == "string") + return { text: t }; + let { text: e, list: r } = t; + return zu((e || r) !== void 0, "Unexpected `expected` result, there should be at least one field."), r ? { text: e, list: { title: r.title, values: r.values.map(St) } } : { text: e }; +} +function vt(t, e) { + return t === true ? true : t === false ? { value: e } : t; +} +function Pt(t, e, r = false) { + return t === false ? false : t === true ? r ? true : [{ value: e }] : "value" in t ? [t] : t.length === 0 ? false : t; +} +function Gr(t, e) { + return typeof t == "string" || "key" in t ? { from: e, to: t } : "from" in t ? { from: t.from, to: t.to } : { from: e, to: t.to }; +} +function st(t, e) { + return t === void 0 ? [] : Array.isArray(t) ? t.map((r) => Gr(r, e)) : [Gr(t, e)]; +} +function Lt(t, e) { + let r = st(typeof t == "object" && "redirect" in t ? t.redirect : t, e); + return r.length === 0 ? { remain: e, redirect: r } : typeof t == "object" && "remain" in t ? { remain: t.remain, redirect: r } : { redirect: r }; +} +function zu(t, e) { + if (!t) + throw new Error(e); +} +var at = class extends w { + constructor(e) { + super(e), this._choices = Hr(e.choices.map((r) => r && typeof r == "object" ? r : { value: r }), "value"); + } + expected({ descriptor: e }) { + let r = Array.from(this._choices.keys()).map((i) => this._choices.get(i)).filter(({ hidden: i }) => !i).map((i) => i.value).sort(Zr).map(e.value), n = r.slice(0, -2), o = r.slice(-2); + return { text: n.concat(o.join(" or ")).join(", "), list: { title: "one of the following values", values: r } }; + } + validate(e) { + return this._choices.has(e); + } + deprecated(e) { + let r = this._choices.get(e); + return r && r.deprecated ? { value: e } : false; + } + forward(e) { + let r = this._choices.get(e); + return r ? r.forward : void 0; + } + redirect(e) { + let r = this._choices.get(e); + return r ? r.redirect : void 0; + } +}; +var Dt = class extends w { + expected() { + return "a number"; + } + validate(e, r) { + return typeof e == "number"; + } +}; +var ct = class extends Dt { + expected() { + return "an integer"; + } + validate(e, r) { + return r.normalizeValidateResult(super.validate(e, r), e) === true && Xr(e); + } +}; +var Le = class extends w { + expected() { + return "a string"; + } + validate(e) { + return typeof e == "string"; + } +}; +var en = te, tn = rt, rn = $r, nn = Yr; +var lt = class { + constructor(e, r) { + let { logger: n = console, loggerPrintWidth: o = 80, descriptor: u = en, unknown: i = tn, invalid: s = rn, deprecated: a = nn, missing: D = () => false, required: c = () => false, preprocess: F = (d) => d, postprocess: f = () => de } = r || {}; + this._utils = { descriptor: u, logger: n || { warn: () => { + } }, loggerPrintWidth: o, schemas: Kr(e, "name"), normalizeDefaultResult: Tt, normalizeExpectedResult: St, normalizeDeprecatedResult: Pt, normalizeForwardResult: st, normalizeRedirectResult: Lt, normalizeValidateResult: vt }, this._unknownHandler = i, this._invalidHandler = Qr(s), this._deprecatedHandler = a, this._identifyMissing = (d, l) => !(d in l) || D(d, l), this._identifyRequired = c, this._preprocess = F, this._postprocess = f, this.cleanHistory(); + } + cleanHistory() { + this._hasDeprecationWarned = qr(); + } + normalize(e) { + let r = {}, o = [this._preprocess(e, this._utils)], u = () => { + for (; o.length !== 0; ) { + let i = o.shift(), s = this._applyNormalization(i, r); + o.push(...s); + } + }; + u(); + for (let i of Object.keys(this._utils.schemas)) { + let s = this._utils.schemas[i]; + if (!(i in r)) { + let a = Tt(s.default(this._utils)); + "value" in a && o.push({ [i]: a.value }); + } + } + u(); + for (let i of Object.keys(this._utils.schemas)) { + if (!(i in r)) + continue; + let s = this._utils.schemas[i], a = r[i], D = s.postprocess(a, this._utils); + D !== de && (this._applyValidation(D, i, s), r[i] = D); + } + return this._applyPostprocess(r), this._applyRequiredCheck(r), r; + } + _applyNormalization(e, r) { + let n = [], { knownKeys: o, unknownKeys: u } = this._partitionOptionKeys(e); + for (let i of o) { + let s = this._utils.schemas[i], a = s.preprocess(e[i], this._utils); + this._applyValidation(a, i, s); + let D = ({ from: d, to: l }) => { + n.push(typeof l == "string" ? { [l]: d } : { [l.key]: l.value }); + }, c = ({ value: d, redirectTo: l }) => { + let p = Pt(s.deprecated(d, this._utils), a, true); + if (p !== false) + if (p === true) + this._hasDeprecationWarned(i) || this._utils.logger.warn(this._deprecatedHandler(i, l, this._utils)); + else + for (let { value: m } of p) { + let E = { key: i, value: m }; + if (!this._hasDeprecationWarned(E)) { + let h = typeof l == "string" ? { key: l, value: m } : l; + this._utils.logger.warn(this._deprecatedHandler(E, h, this._utils)); + } + } + }; + st(s.forward(a, this._utils), a).forEach(D); + let f = Lt(s.redirect(a, this._utils), a); + if (f.redirect.forEach(D), "remain" in f) { + let d = f.remain; + r[i] = i in r ? s.overlap(r[i], d, this._utils) : d, c({ value: d }); + } + for (let { from: d, to: l } of f.redirect) + c({ value: d, redirectTo: l }); + } + for (let i of u) { + let s = e[i]; + this._applyUnknownHandler(i, s, r, (a, D) => { + n.push({ [a]: D }); + }); + } + return n; + } + _applyRequiredCheck(e) { + for (let r of Object.keys(this._utils.schemas)) + if (this._identifyMissing(r, e) && this._identifyRequired(r)) + throw this._invalidHandler(r, tt, this._utils); + } + _partitionOptionKeys(e) { + let [r, n] = Jr(Object.keys(e).filter((o) => !this._identifyMissing(o, e)), (o) => o in this._utils.schemas); + return { knownKeys: r, unknownKeys: n }; + } + _applyValidation(e, r, n) { + let o = vt(n.validate(e, this._utils), e); + if (o !== true) + throw this._invalidHandler(r, o.value, this._utils); + } + _applyUnknownHandler(e, r, n, o) { + let u = this._unknownHandler(e, r, this._utils); + if (u) + for (let i of Object.keys(u)) { + if (this._identifyMissing(i, u)) + continue; + let s = u[i]; + i in this._utils.schemas ? o(i, s) : n[i] = s; + } + } + _applyPostprocess(e) { + let r = this._postprocess(e, this._utils); + if (r !== de) { + if (r.delete) + for (let n of r.delete) + delete e[n]; + if (r.override) { + let { knownKeys: n, unknownKeys: o } = this._partitionOptionKeys(r.override); + for (let u of n) { + let i = r.override[u]; + this._applyValidation(i, u, this._utils.schemas[u]), e[u] = i; + } + for (let u of o) { + let i = r.override[u]; + this._applyUnknownHandler(u, i, e, (s, a) => { + let D = this._utils.schemas[s]; + this._applyValidation(a, s, D), e[s] = a; + }); + } + } + } + } +}; +var It; +function Ku(t, e, { logger: r = false, isCLI: n = false, passThrough: o = false, FlagSchema: u, descriptor: i } = {}) { + if (n) { + if (!u) + throw new Error("'FlagSchema' option is required."); + if (!i) + throw new Error("'descriptor' option is required."); + } else + i = te; + let s = o ? Array.isArray(o) ? (f, d) => o.includes(f) ? { [f]: d } : void 0 : (f, d) => ({ [f]: d }) : (f, d, l) => { + let { _: p, ...m } = l.schemas; + return rt(f, d, { ...l, schemas: m }); + }, a = Hu(e, { isCLI: n, FlagSchema: u }), D = new lt(a, { logger: r, unknown: s, descriptor: i }), c = r !== false; + c && It && (D._hasDeprecationWarned = It); + let F = D.normalize(t); + return c && (It = D._hasDeprecationWarned), F; +} +function Hu(t, { isCLI: e, FlagSchema: r }) { + let n = []; + e && n.push(ut.create({ name: "_" })); + for (let o of t) + n.push(qu(o, { isCLI: e, optionInfos: t, FlagSchema: r })), o.alias && e && n.push(nt.create({ name: o.alias, sourceName: o.name })); + return n; +} +function qu(t, { isCLI: e, optionInfos: r, FlagSchema: n }) { + let { name: o } = t, u = { name: o }, i, s = {}; + switch (t.type) { + case "int": + i = ct, e && (u.preprocess = Number); + break; + case "string": + i = Le; + break; + case "choice": + i = at, u.choices = t.choices.map((a) => a != null && a.redirect ? { ...a, redirect: { to: { key: t.name, value: a.redirect } } } : a); + break; + case "boolean": + i = it; + break; + case "flag": + i = n, u.flags = r.flatMap((a) => [a.alias, a.description && a.name, a.oppositeDescription && `no-${a.name}`].filter(Boolean)); + break; + case "path": + i = Le; + break; + default: + throw new Error(`Unexpected type ${t.type}`); + } + if (t.exception ? u.validate = (a, D, c) => t.exception(a) || D.validate(a, c) : u.validate = (a, D, c) => a === void 0 || D.validate(a, c), t.redirect && (s.redirect = (a) => a ? { to: { key: t.redirect.option, value: t.redirect.value } } : void 0), t.deprecated && (s.deprecated = true), e && !t.array) { + let a = u.preprocess || ((D) => D); + u.preprocess = (D, c, F) => c.preprocess(a(Array.isArray(D) ? y(false, D, -1) : D), F); + } + return t.array ? ot.create({ ...e ? { preprocess: (a) => Array.isArray(a) ? a : [a] } : {}, ...s, valueSchema: i.create(u) }) : i.create({ ...u, ...s }); +} +var un = Ku; +function Rt(t, e) { + if (!e) + throw new Error("parserName is required."); + for (let n = t.length - 1; n >= 0; n--) { + let o = t[n]; + if (o.parsers && Object.prototype.hasOwnProperty.call(o.parsers, e)) + return o; + } + let r = `Couldn't resolve parser "${e}".`; + throw r += " Plugins must be explicitly added to the standalone bundle.", new Se(r); +} +function on(t, e) { + if (!e) + throw new Error("astFormat is required."); + for (let n = t.length - 1; n >= 0; n--) { + let o = t[n]; + if (o.printers && Object.prototype.hasOwnProperty.call(o.printers, e)) + return o; + } + let r = `Couldn't find plugin for AST format "${e}".`; + throw r += " Plugins must be explicitly added to the standalone bundle.", new Se(r); +} +function ft({ plugins: t, parser: e }) { + let r = Rt(t, e); + return Yt(r, e); +} +function Yt(t, e) { + let r = t.parsers[e]; + return typeof r == "function" ? r() : r; +} +function sn(t, e) { + let r = t.printers[e]; + return typeof r == "function" ? r() : r; +} +var an = { astFormat: "estree", printer: {}, originalText: void 0, locStart: null, locEnd: null }; +async function Ju(t, e = {}) { + var F; + let r = { ...t }; + if (!r.parser) + if (r.filepath) { + if (r.parser = Lr(r, { physicalFile: r.filepath }), !r.parser) + throw new ve(`No parser could be inferred for file "${r.filepath}".`); + } else + throw new ve("No parser and no file path given, couldn't infer a parser."); + let n = et({ plugins: t.plugins, showDeprecated: true }).options, o = { ...an, ...Object.fromEntries(n.filter((f) => f.default !== void 0).map((f) => [f.name, f.default])) }, u = Rt(r.plugins, r.parser), i = await Yt(u, r.parser); + r.astFormat = i.astFormat, r.locEnd = i.locEnd, r.locStart = i.locStart; + let s = (F = u.printers) != null && F[i.astFormat] ? u : on(r.plugins, i.astFormat), a = await sn(s, i.astFormat); + r.printer = a; + let D = s.defaultOptions ? Object.fromEntries(Object.entries(s.defaultOptions).filter(([, f]) => f !== void 0)) : {}, c = { ...o, ...D }; + for (let [f, d] of Object.entries(c)) + (r[f] === null || r[f] === void 0) && (r[f] = d); + return r.parser === "json" && (r.trailingComma = "none"), un(r, n, { passThrough: Object.keys(an), ...e }); +} +var re = Ju; +var Dn = /* @__PURE__ */ new Set(["tokens", "comments", "parent", "enclosingNode", "precedingNode", "followingNode"]), Xu = (t) => Object.keys(t).filter((e) => !Dn.has(e)); +function Zu(t) { + return t ? (e) => t(e, Dn) : Xu; +} +var H = Zu; +function Qu(t, e) { + let { printer: { massageAstNode: r, getVisitorKeys: n } } = e; + if (!r) + return t; + let o = H(n), u = r.ignoredProperties ?? /* @__PURE__ */ new Set(); + return i(t); + function i(s, a) { + if (!(s !== null && typeof s == "object")) + return s; + if (Array.isArray(s)) + return s.map((f) => i(f, a)).filter(Boolean); + let D = {}, c = new Set(o(s)); + for (let f in s) + !Object.prototype.hasOwnProperty.call(s, f) || u.has(f) || (c.has(f) ? D[f] = i(s[f], s) : D[f] = s[f]); + let F = r(s, D, a); + if (F !== null) + return F ?? D; + } +} +var cn = Qu; +var Cn = Ce(hn(), 1); +async function so(t, e) { + let r = await ft(e), n = r.preprocess ? r.preprocess(t, e) : t; + e.originalText = n; + let o; + try { + o = await r.parse(n, e, e); + } catch (u) { + ao(u, t); + } + return { text: n, ast: o }; +} +function ao(t, e) { + let { loc: r } = t; + if (r) { + let n = (0, Cn.codeFrameColumns)(e, r, { highlightCode: true }); + throw t.message += ` +` + n, t.codeFrame = n, t; + } + throw t; +} +var ae = so; +var Ie, $t, Fe, dt, Vt = class { + constructor(e) { + Ct(this, Ie); + Ct(this, Fe); + this.stack = [e]; + } + get key() { + let { stack: e, siblings: r } = this; + return y(false, e, r === null ? -2 : -4) ?? null; + } + get index() { + return this.siblings === null ? null : y(false, this.stack, -2); + } + get node() { + return y(false, this.stack, -1); + } + get parent() { + return this.getNode(1); + } + get grandparent() { + return this.getNode(2); + } + get isInArray() { + return this.siblings !== null; + } + get siblings() { + let { stack: e } = this, r = y(false, e, -3); + return Array.isArray(r) ? r : null; + } + get next() { + let { siblings: e } = this; + return e === null ? null : e[this.index + 1]; + } + get previous() { + let { siblings: e } = this; + return e === null ? null : e[this.index - 1]; + } + get isFirst() { + return this.index === 0; + } + get isLast() { + let { siblings: e, index: r } = this; + return e !== null && r === e.length - 1; + } + get isRoot() { + return this.stack.length === 1; + } + get root() { + return this.stack[0]; + } + get ancestors() { + return [...ce(this, Fe, dt).call(this)]; + } + getName() { + let { stack: e } = this, { length: r } = e; + return r > 1 ? y(false, e, -2) : null; + } + getValue() { + return y(false, this.stack, -1); + } + getNode(e = 0) { + let r = ce(this, Ie, $t).call(this, e); + return r === -1 ? null : this.stack[r]; + } + getParentNode(e = 0) { + return this.getNode(e + 1); + } + call(e, ...r) { + let { stack: n } = this, { length: o } = n, u = y(false, n, -1); + for (let i of r) + u = u[i], n.push(i, u); + try { + return e(this); + } finally { + n.length = o; + } + } + callParent(e, r = 0) { + let n = ce(this, Ie, $t).call(this, r + 1), o = this.stack.splice(n + 1); + try { + return e(this); + } finally { + this.stack.push(...o); + } + } + each(e, ...r) { + let { stack: n } = this, { length: o } = n, u = y(false, n, -1); + for (let i of r) + u = u[i], n.push(i, u); + try { + for (let i = 0; i < u.length; ++i) + n.push(i, u[i]), e(this, i, u), n.length -= 2; + } finally { + n.length = o; + } + } + map(e, ...r) { + let n = []; + return this.each((o, u, i) => { + n[u] = e(o, u, i); + }, ...r), n; + } + match(...e) { + let r = this.stack.length - 1, n = null, o = this.stack[r--]; + for (let u of e) { + if (o === void 0) + return false; + let i = null; + if (typeof n == "number" && (i = n, n = this.stack[r--], o = this.stack[r--]), u && !u(o, n, i)) + return false; + n = this.stack[r--], o = this.stack[r--]; + } + return true; + } + findAncestor(e) { + for (let r of ce(this, Fe, dt).call(this)) + if (e(r)) + return r; + } + hasAncestor(e) { + for (let r of ce(this, Fe, dt).call(this)) + if (e(r)) + return true; + return false; + } +}; +Ie = /* @__PURE__ */ new WeakSet(), $t = function(e) { + let { stack: r } = this; + for (let n = r.length - 1; n >= 0; n -= 2) + if (!Array.isArray(r[n]) && --e < 0) + return n; + return -1; +}, Fe = /* @__PURE__ */ new WeakSet(), dt = function* () { + let { stack: e } = this; + for (let r = e.length - 3; r >= 0; r -= 2) { + let n = e[r]; + Array.isArray(n) || (yield n); + } +}; +var gn = Vt; +var yn = new Proxy(() => { +}, { get: () => yn }), Re = yn; +function me(t) { + return (e, r, n) => { + let o = !!(n != null && n.backwards); + if (r === false) + return false; + let { length: u } = e, i = r; + for (; i >= 0 && i < u; ) { + let s = e.charAt(i); + if (t instanceof RegExp) { + if (!t.test(s)) + return i; + } else if (!t.includes(s)) + return i; + o ? i-- : i++; + } + return i === -1 || i === u ? i : false; + }; +} +var xn = me(/\s/), N = me(" "), Ft = me(",; "), mt = me(/[^\n\r]/); +function Do(t, e, r) { + let n = !!(r != null && r.backwards); + if (e === false) + return false; + let o = t.charAt(e); + if (n) { + if (t.charAt(e - 1) === "\r" && o === ` +`) + return e - 2; + if (o === ` +` || o === "\r" || o === "\u2028" || o === "\u2029") + return e - 1; + } else { + if (o === "\r" && t.charAt(e + 1) === ` +`) + return e + 2; + if (o === ` +` || o === "\r" || o === "\u2028" || o === "\u2029") + return e + 1; + } + return e; +} +var Y = Do; +function co(t, e, r = {}) { + let n = N(t, r.backwards ? e - 1 : e, r), o = Y(t, n, r); + return n !== o; +} +var V = co; +function lo(t) { + return Array.isArray(t) && t.length > 0; +} +var Ut = lo; +function fo(t) { + return t !== null && typeof t == "object"; +} +var _n = fo; +function* Mt(t, e) { + let { getVisitorKeys: r, filter: n = () => true } = e, o = (u) => _n(u) && n(u); + for (let u of r(t)) { + let i = t[u]; + if (Array.isArray(i)) + for (let s of i) + o(s) && (yield s); + else + o(i) && (yield i); + } +} +function* An(t, e) { + let r = [t]; + for (let n = 0; n < r.length; n++) { + let o = r[n]; + for (let u of Mt(o, e)) + yield u, r.push(u); + } +} +function po(t) { + let e = t.type || t.kind || "(unknown type)", r = String(t.name || t.id && (typeof t.id == "object" ? t.id.name : t.id) || t.key && (typeof t.key == "object" ? t.key.name : t.key) || t.value && (typeof t.value == "object" ? "" : String(t.value)) || t.operator || ""); + return r.length > 20 && (r = r.slice(0, 19) + "…"), e + (r ? " " + r : ""); +} +function Wt(t, e) { + (t.comments ?? (t.comments = [])).push(e), e.printed = false, e.nodeDescription = po(t); +} +function ne(t, e) { + e.leading = true, e.trailing = false, Wt(t, e); +} +function X(t, e, r) { + e.leading = false, e.trailing = false, r && (e.marker = r), Wt(t, e); +} +function ue(t, e) { + e.leading = false, e.trailing = true, Wt(t, e); +} +var zt = /* @__PURE__ */ new WeakMap(); +function Et(t, e) { + if (zt.has(t)) + return zt.get(t); + let { printer: { getCommentChildNodes: r, canAttachComment: n, getVisitorKeys: o }, locStart: u, locEnd: i } = e; + if (!n) + return []; + let s = ((r == null ? void 0 : r(t, e)) ?? [...Mt(t, { getVisitorKeys: H(o) })]).flatMap((a) => n(a) ? [a] : Et(a, e)); + return s.sort((a, D) => u(a) - u(D) || i(a) - i(D)), zt.set(t, s), s; +} +function kn(t, e, r, n) { + let { locStart: o, locEnd: u } = r, i = o(e), s = u(e), a = Et(t, r), D, c, F = 0, f = a.length; + for (; F < f; ) { + let d = F + f >> 1, l = a[d], p = o(l), m = u(l); + if (p <= i && s <= m) + return kn(l, e, r, l); + if (m <= i) { + D = l, F = d + 1; + continue; + } + if (s <= p) { + c = l, f = d; + continue; + } + throw new Error("Comment location overlaps with node location"); + } + if ((n == null ? void 0 : n.type) === "TemplateLiteral") { + let { quasis: d } = n, l = Kt(d, e, r); + D && Kt(d, D, r) !== l && (D = null), c && Kt(d, c, r) !== l && (c = null); + } + return { enclosingNode: n, precedingNode: D, followingNode: c }; +} +var Gt = () => false; +function bn(t, e) { + let { comments: r } = t; + if (delete t.comments, !Ut(r) || !e.printer.canAttachComment) + return; + let n = [], { locStart: o, locEnd: u, printer: { experimentalFeatures: { avoidAstMutation: i = false } = {}, handleComments: s = {} }, originalText: a } = e, { ownLine: D = Gt, endOfLine: c = Gt, remaining: F = Gt } = s, f = r.map((d, l) => ({ ...kn(t, d, e), comment: d, text: a, options: e, ast: t, isLastComment: r.length - 1 === l })); + for (let [d, l] of f.entries()) { + let { comment: p, precedingNode: m, enclosingNode: E, followingNode: h, text: g, options: C, ast: _, isLastComment: Z } = l; + if (C.parser === "json" || C.parser === "json5" || C.parser === "__js_expression" || C.parser === "__ts_expression" || C.parser === "__vue_expression" || C.parser === "__vue_ts_expression") { + if (o(p) - o(_) <= 0) { + ne(_, p); + continue; + } + if (u(p) - u(_) >= 0) { + ue(_, p); + continue; + } + } + let $; + if (i ? $ = [l] : (p.enclosingNode = E, p.precedingNode = m, p.followingNode = h, $ = [p, g, C, _, Z]), Fo(g, C, f, d)) + p.placement = "ownLine", D(...$) || (h ? ne(h, p) : m ? ue(m, p) : E ? X(E, p) : X(_, p)); + else if (mo(g, C, f, d)) + p.placement = "endOfLine", c(...$) || (m ? ue(m, p) : h ? ne(h, p) : E ? X(E, p) : X(_, p)); + else if (p.placement = "remaining", !F(...$)) + if (m && h) { + let Q = n.length; + Q > 0 && n[Q - 1].followingNode !== h && Bn(n, C), n.push(l); + } else + m ? ue(m, p) : h ? ne(h, p) : E ? X(E, p) : X(_, p); + } + if (Bn(n, e), !i) + for (let d of r) + delete d.precedingNode, delete d.enclosingNode, delete d.followingNode; +} +var wn = (t) => !/[\S\n\u2028\u2029]/.test(t); +function Fo(t, e, r, n) { + let { comment: o, precedingNode: u } = r[n], { locStart: i, locEnd: s } = e, a = i(o); + if (u) + for (let D = n - 1; D >= 0; D--) { + let { comment: c, precedingNode: F } = r[D]; + if (F !== u || !wn(t.slice(s(c), a))) + break; + a = i(c); + } + return V(t, a, { backwards: true }); +} +function mo(t, e, r, n) { + let { comment: o, followingNode: u } = r[n], { locStart: i, locEnd: s } = e, a = s(o); + if (u) + for (let D = n + 1; D < r.length; D++) { + let { comment: c, followingNode: F } = r[D]; + if (F !== u || !wn(t.slice(a, i(c)))) + break; + a = s(c); + } + return V(t, a); +} +function Bn(t, e) { + var s, a; + let r = t.length; + if (r === 0) + return; + let { precedingNode: n, followingNode: o } = t[0], u = e.locStart(o), i; + for (i = r; i > 0; --i) { + let { comment: D, precedingNode: c, followingNode: F } = t[i - 1]; + Re.strictEqual(c, n), Re.strictEqual(F, o); + let f = e.originalText.slice(e.locEnd(D), u); + if (((a = (s = e.printer).isGap) == null ? void 0 : a.call(s, f, e)) ?? /^[\s(]*$/.test(f)) + u = e.locStart(D); + else + break; + } + for (let [D, { comment: c }] of t.entries()) + D < i ? ue(n, c) : ne(o, c); + for (let D of [n, o]) + D.comments && D.comments.length > 1 && D.comments.sort((c, F) => e.locStart(c) - e.locStart(F)); + t.length = 0; +} +function Kt(t, e, r) { + let n = r.locStart(e) - 1; + for (let o = 1; o < t.length; ++o) + if (n < r.locStart(t[o])) + return o - 1; + return 0; +} +function Eo(t, e) { + let r = e - 1; + r = N(t, r, { backwards: true }), r = Y(t, r, { backwards: true }), r = N(t, r, { backwards: true }); + let n = Y(t, r, { backwards: true }); + return r !== n; +} +var Ye = Eo; +function On(t, e) { + let r = t.node; + return r.printed = true, e.printer.printComment(t, e); +} +function ho(t, e) { + var c; + let r = t.node, n = [On(t, e)], { printer: o, originalText: u, locStart: i, locEnd: s } = e; + if ((c = o.isBlockComment) == null ? void 0 : c.call(o, r)) { + let F = V(u, s(r)) ? V(u, i(r), { backwards: true }) ? G : Ke : " "; + n.push(F); + } else + n.push(G); + let D = Y(u, N(u, s(r))); + return D !== false && V(u, D) && n.push(G), n; +} +function Co(t, e, r) { + var D; + let n = t.node, o = On(t, e), { printer: u, originalText: i, locStart: s } = e, a = (D = u.isBlockComment) == null ? void 0 : D.call(u, n); + if (r != null && r.hasLineSuffix && !(r != null && r.isBlock) || V(i, s(n), { backwards: true })) { + let c = Ye(i, s(n)); + return { doc: _e([G, c ? G : "", o]), isBlock: a, hasLineSuffix: true }; + } + return !a || r != null && r.hasLineSuffix ? { doc: [_e([" ", o]), le], isBlock: a, hasLineSuffix: true } : { doc: [" ", o], isBlock: a, hasLineSuffix: false }; +} +function go(t, e) { + let r = t.node; + if (!r) + return {}; + let n = e[Symbol.for("printedComments")]; + if ((r.comments || []).filter((a) => !n.has(a)).length === 0) + return { leading: "", trailing: "" }; + let u = [], i = [], s; + return t.each(() => { + let a = t.node; + if (n != null && n.has(a)) + return; + let { leading: D, trailing: c } = a; + D ? u.push(ho(t, e)) : c && (s = Co(t, e, s), i.push(s.doc)); + }, "comments"), { leading: u, trailing: i }; +} +function Nn(t, e, r) { + let { leading: n, trailing: o } = go(t, r); + return !n && !o ? e : Ze(e, (u) => [n, u, o]); +} +function Tn(t) { + let { [Symbol.for("comments")]: e, [Symbol.for("printedComments")]: r } = t; + for (let n of e) { + if (!n.printed && !r.has(n)) + throw new Error('Comment "' + n.value.trim() + '" was not printed. Please report this error!'); + delete n.printed; + } +} +async function Sn(t, e, r, n, o) { + let { embeddedLanguageFormatting: u, printer: { embed: i, hasPrettierIgnore: s = () => false, getVisitorKeys: a } } = r; + if (!i || u !== "auto") + return; + if (i.length > 2) + throw new Error("printer.embed has too many parameters. The API changed in Prettier v3. Please update your plugin. See https://prettier.io/docs/en/plugins.html#optional-embed"); + let D = H(i.getVisitorKeys ?? a), c = []; + d(); + let F = t.stack; + for (let { print: l, node: p, pathStack: m } of c) + try { + t.stack = m; + let E = await l(f, e, t, r); + E && o.set(p, E); + } catch (E) { + if (globalThis.PRETTIER_DEBUG) + throw E; + } + t.stack = F; + function f(l, p) { + return yo(l, p, r, n); + } + function d() { + let { node: l } = t; + if (l === null || typeof l != "object" || s(t)) + return; + for (let m of D(l)) + Array.isArray(l[m]) ? t.each(d, m) : t.call(d, m); + let p = i(t, r); + if (p) { + if (typeof p == "function") { + c.push({ print: p, node: l, pathStack: [...t.stack] }); + return; + } + o.set(l, p); + } + } +} +async function yo(t, e, r, n) { + let o = await re({ ...r, ...e, parentParser: r.parser, originalText: t }, { passThrough: true }), { ast: u } = await ae(t, o), i = await n(u, o); + return Xe(i); +} +function _o(t, e) { + let { originalText: r, [Symbol.for("comments")]: n, locStart: o, locEnd: u, [Symbol.for("printedComments")]: i } = e, { node: s } = t, a = o(s), D = u(s); + for (let c of n) + o(c) >= a && u(c) <= D && i.add(c); + return r.slice(a, D); +} +var Pn = _o; +async function je(t, e) { + ({ ast: t } = await Ht(t, e)); + let r = /* @__PURE__ */ new Map(), n = new gn(t), u = /* @__PURE__ */ new Map(); + await Sn(n, s, e, je, u); + let i = await Ln(n, e, s, void 0, u); + return Tn(e), i; + function s(D, c) { + return D === void 0 || D === n ? a(c) : Array.isArray(D) ? n.call(() => a(c), ...D) : n.call(() => a(c), D); + } + function a(D) { + let c = n.node; + if (c == null) + return ""; + let F = c && typeof c == "object" && D === void 0; + if (F && r.has(c)) + return r.get(c); + let f = Ln(n, e, s, D, u); + return F && r.set(c, f), f; + } +} +function Ln(t, e, r, n, o) { + var a; + let { node: u } = t, { printer: i } = e, s; + return (a = i.hasPrettierIgnore) != null && a.call(i, t) ? s = Pn(t, e) : o.has(u) ? s = o.get(u) : s = i.print(t, e, r, n), u === e.cursorNode && (s = Ze(s, (D) => [Be, D, Be])), i.printComment && (!i.willPrintOwnComments || !i.willPrintOwnComments(t, e)) && (s = Nn(t, s, e)), s; +} +async function Ht(t, e) { + let r = t.comments ?? []; + e[Symbol.for("comments")] = r, e[Symbol.for("tokens")] = t.tokens ?? [], e[Symbol.for("printedComments")] = /* @__PURE__ */ new Set(), bn(t, e); + let { printer: { preprocess: n } } = e; + return t = n ? await n(t, e) : t, { ast: t, comments: r }; +} +var Ao = ({ parser: t }) => t === "json" || t === "json5" || t === "json-stringify"; +function Bo(t, e) { + let r = [t.node, ...t.parentNodes], n = /* @__PURE__ */ new Set([e.node, ...e.parentNodes]); + return r.find((o) => Yn.has(o.type) && n.has(o)); +} +function In(t) { + let e = t.length - 1; + for (; ; ) { + let r = t[e]; + if ((r == null ? void 0 : r.type) === "Program" || (r == null ? void 0 : r.type) === "File") + e--; + else + break; + } + return t.slice(0, e + 1); +} +function ko(t, e, { locStart: r, locEnd: n }) { + let o = t.node, u = e.node; + if (o === u) + return { startNode: o, endNode: u }; + let i = r(t.node); + for (let a of In(e.parentNodes)) + if (r(a) >= i) + u = a; + else + break; + let s = n(e.node); + for (let a of In(t.parentNodes)) { + if (n(a) <= s) + o = a; + else + break; + if (o === u) + break; + } + return { startNode: o, endNode: u }; +} +function qt(t, e, r, n, o = [], u) { + let { locStart: i, locEnd: s } = r, a = i(t), D = s(t); + if (!(e > D || e < a || u === "rangeEnd" && e === a || u === "rangeStart" && e === D)) { + for (let c of Et(t, r)) { + let F = qt(c, e, r, n, [t, ...o], u); + if (F) + return F; + } + if (!n || n(t, o[0])) + return { node: t, parentNodes: o }; + } +} +function bo(t, e) { + return e !== "DeclareExportDeclaration" && t !== "TypeParameterDeclaration" && (t === "Directive" || t === "TypeAlias" || t === "TSExportAssignment" || t.startsWith("Declare") || t.startsWith("TSDeclare") || t.endsWith("Statement") || t.endsWith("Declaration")); +} +var Yn = /* @__PURE__ */ new Set(["JsonRoot", "ObjectExpression", "ArrayExpression", "StringLiteral", "NumericLiteral", "BooleanLiteral", "NullLiteral", "UnaryExpression", "TemplateLiteral"]), wo = /* @__PURE__ */ new Set(["OperationDefinition", "FragmentDefinition", "VariableDefinition", "TypeExtensionDefinition", "ObjectTypeDefinition", "FieldDefinition", "DirectiveDefinition", "EnumTypeDefinition", "EnumValueDefinition", "InputValueDefinition", "InputObjectTypeDefinition", "SchemaDefinition", "OperationTypeDefinition", "InterfaceTypeDefinition", "UnionTypeDefinition", "ScalarTypeDefinition"]); +function Rn(t, e, r) { + if (!e) + return false; + switch (t.parser) { + case "flow": + case "babel": + case "babel-flow": + case "babel-ts": + case "typescript": + case "acorn": + case "espree": + case "meriyah": + case "__babel_estree": + return bo(e.type, r == null ? void 0 : r.type); + case "json": + case "json5": + case "json-stringify": + return Yn.has(e.type); + case "graphql": + return wo.has(e.kind); + case "vue": + return e.tag !== "root"; + } + return false; +} +function jn(t, e, r) { + let { rangeStart: n, rangeEnd: o, locStart: u, locEnd: i } = e; + Re.ok(o > n); + let s = t.slice(n, o).search(/\S/), a = s === -1; + if (!a) + for (n += s; o > n && !/\S/.test(t[o - 1]); --o) + ; + let D = qt(r, n, e, (d, l) => Rn(e, d, l), [], "rangeStart"), c = a ? D : qt(r, o, e, (d) => Rn(e, d), [], "rangeEnd"); + if (!D || !c) + return { rangeStart: 0, rangeEnd: 0 }; + let F, f; + if (Ao(e)) { + let d = Bo(D, c); + F = d, f = d; + } else + ({ startNode: F, endNode: f } = ko(D, c, e)); + return { rangeStart: Math.min(u(F), u(f)), rangeEnd: Math.max(i(F), i(f)) }; +} +function Oo(t, e) { + let { cursorOffset: r, locStart: n, locEnd: o } = e, u = H(e.printer.getVisitorKeys), i = (a) => n(a) <= r && o(a) >= r, s = t; + for (let a of An(t, { getVisitorKeys: u, filter: i })) + s = a; + return s; +} +var Vn = Oo; +var zn = "\uFEFF", $n = Symbol("cursor"); +async function Gn(t, e, r = 0) { + if (!t || t.trim().length === 0) + return { formatted: "", cursorOffset: -1, comments: [] }; + let { ast: n, text: o } = await ae(t, e); + e.cursorOffset >= 0 && (e.cursorNode = Vn(n, e)); + let u = await je(n, e); + r > 0 && (u = qe([G, u], r, e.tabWidth)); + let i = fe(u, e); + if (r > 0) { + let a = i.formatted.trim(); + i.cursorNodeStart !== void 0 && (i.cursorNodeStart -= i.formatted.indexOf(a)), i.formatted = a + be(e.endOfLine); + } + let s = e[Symbol.for("comments")]; + if (e.cursorOffset >= 0) { + let a, D, c, F, f; + if (e.cursorNode && i.cursorNodeText ? (a = e.locStart(e.cursorNode), D = o.slice(a, e.locEnd(e.cursorNode)), c = e.cursorOffset - a, F = i.cursorNodeStart, f = i.cursorNodeText) : (a = 0, D = o, c = e.cursorOffset, F = 0, f = i.formatted), D === f) + return { formatted: i.formatted, cursorOffset: F + c, comments: s }; + let d = D.split(""); + d.splice(c, 0, $n); + let l = f.split(""), p = (0, Wn.diffArrays)(d, l), m = F; + for (let E of p) + if (E.removed) { + if (E.value.includes($n)) + break; + } else + m += E.count; + return { formatted: i.formatted, cursorOffset: m, comments: s }; + } + return { formatted: i.formatted, cursorOffset: -1, comments: s }; +} +async function No(t, e) { + let { ast: r, text: n } = await ae(t, e), { rangeStart: o, rangeEnd: u } = jn(n, e, r), i = n.slice(o, u), s = Math.min(o, n.lastIndexOf(` +`, o) + 1), a = n.slice(s, o).match(/^\s*/)[0], D = pe(a, e.tabWidth), c = await Gn(i, { ...e, rangeStart: 0, rangeEnd: Number.POSITIVE_INFINITY, cursorOffset: e.cursorOffset > o && e.cursorOffset <= u ? e.cursorOffset - o : -1, endOfLine: "lf" }, D), F = c.formatted.trimEnd(), { cursorOffset: f } = e; + f > u ? f += F.length - i.length : c.cursorOffset >= 0 && (f = c.cursorOffset + o); + let d = n.slice(0, o) + F + n.slice(u); + if (e.endOfLine !== "lf") { + let l = be(e.endOfLine); + f >= 0 && l === `\r +` && (f += At(d.slice(0, f), ` +`)), d = ee(false, d, ` +`, l); + } + return { formatted: d, cursorOffset: f, comments: c.comments }; +} +function Jt(t, e, r) { + return typeof e != "number" || Number.isNaN(e) || e < 0 || e > t.length ? r : e; +} +function Un(t, e) { + let { cursorOffset: r, rangeStart: n, rangeEnd: o } = e; + return r = Jt(t, r, -1), n = Jt(t, n, 0), o = Jt(t, o, t.length), { ...e, cursorOffset: r, rangeStart: n, rangeEnd: o }; +} +function Kn(t, e) { + let { cursorOffset: r, rangeStart: n, rangeEnd: o, endOfLine: u } = Un(t, e), i = t.charAt(0) === zn; + if (i && (t = t.slice(1), r--, n--, o--), u === "auto" && (u = Cr(t)), t.includes("\r")) { + let s = (a) => At(t.slice(0, Math.max(a, 0)), `\r +`); + r -= s(r), n -= s(n), o -= s(o), t = gr(t); + } + return { hasBOM: i, text: t, options: Un(t, { ...e, cursorOffset: r, rangeStart: n, rangeEnd: o, endOfLine: u }) }; +} +async function Mn(t, e) { + let r = await ft(e); + return !r.hasPragma || r.hasPragma(t); +} +async function Xt(t, e) { + let { hasBOM: r, text: n, options: o } = Kn(t, await re(e)); + if (o.rangeStart >= o.rangeEnd && n !== "" || o.requirePragma && !await Mn(n, o)) + return { formatted: t, cursorOffset: e.cursorOffset, comments: [] }; + let u; + return o.rangeStart > 0 || o.rangeEnd < n.length ? u = await No(n, o) : (!o.requirePragma && o.insertPragma && o.printer.insertPragma && !await Mn(n, o) && (n = o.printer.insertPragma(n)), u = await Gn(n, o)), r && (u.formatted = zn + u.formatted, u.cursorOffset >= 0 && u.cursorOffset++), u; +} +async function Hn(t, e, r) { + let { text: n, options: o } = Kn(t, await re(e)), u = await ae(n, o); + return r && (r.preprocessForPrint && (u.ast = await Ht(u.ast, o)), r.massage && (u.ast = cn(u.ast, o))), u; +} +async function qn(t, e) { + e = await re(e); + let r = await je(t, e); + return fe(r, e); +} +async function Jn(t, e) { + let r = Sr(t), { formatted: n } = await Xt(r, { ...e, parser: "__js_expression" }); + return n; +} +async function Xn(t, e) { + e = await re(e); + let { ast: r } = await ae(t, e); + return je(r, e); +} +async function Zn(t, e) { + return fe(t, await re(e)); +} +var Qt = {}; +Me(Qt, { addDanglingComment: () => X, addLeadingComment: () => ne, addTrailingComment: () => ue, getAlignmentSize: () => pe, getIndentSize: () => eu, getMaxContinuousCount: () => Qn, getNextNonSpaceNonCommentCharacter: () => nu, getNextNonSpaceNonCommentCharacterIndex: () => Mo, getStringWidth: () => we, hasNewline: () => V, hasNewlineInRange: () => tu, hasSpaces: () => ru, isNextLineEmpty: () => Ko, isNextLineEmptyAfterIndex: () => ht, isPreviousLineEmpty: () => zo, makeString: () => uu, skip: () => me, skipEverythingButNewLine: () => mt, skipInlineComment: () => Ee, skipNewline: () => Y, skipSpaces: () => N, skipToLineEnd: () => Ft, skipTrailingComment: () => he, skipWhitespace: () => xn }); +function So(t, e) { + if (e === false) + return false; + if (t.charAt(e) === "/" && t.charAt(e + 1) === "*") { + for (let r = e + 2; r < t.length; ++r) + if (t.charAt(r) === "*" && t.charAt(r + 1) === "/") + return r + 2; + } + return e; +} +var Ee = So; +function vo(t, e) { + return e === false ? false : t.charAt(e) === "/" && t.charAt(e + 1) === "/" ? mt(t, e) : e; +} +var he = vo; +function Po(t, e) { + let r = null, n = e; + for (; n !== r; ) + r = n, n = N(t, n), n = Ee(t, n), n = he(t, n), n = Y(t, n); + return n; +} +var Ve = Po; +function Lo(t, e) { + let r = null, n = e; + for (; n !== r; ) + r = n, n = Ft(t, n), n = Ee(t, n), n = N(t, n); + return n = he(t, n), n = Y(t, n), n !== false && V(t, n); +} +var ht = Lo; +function Zt(t) { + if (typeof t != "string") + throw new TypeError("Expected a string"); + return t.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); +} +function Io(t, e) { + let r = t.match(new RegExp(`(${Zt(e)})+`, "g")); + return r === null ? 0 : r.reduce((n, o) => Math.max(n, o.length / e.length), 0); +} +var Qn = Io; +function Ro(t, e) { + let r = t.lastIndexOf(` +`); + return r === -1 ? 0 : pe(t.slice(r + 1).match(/^[\t ]*/)[0], e); +} +var eu = Ro; +function Yo(t, e, r) { + for (let n = e; n < r; ++n) + if (t.charAt(n) === ` +`) + return true; + return false; +} +var tu = Yo; +function jo(t, e, r = {}) { + return N(t, r.backwards ? e - 1 : e, r) !== e; +} +var ru = jo; +function Vo(t, e) { + let r = Ve(t, e); + return r === false ? "" : t.charAt(r); +} +var nu = Vo; +function $o(t, e, r) { + let n = e === '"' ? "'" : '"', u = ee(false, t, /\\(.)|(["'])/gs, (i, s, a) => s === n ? s : a === e ? "\\" + a : a || (r && /^[^\n\r"'0-7\\bfnrt-vx\u2028\u2029]$/.test(s) ? s : "\\" + s)); + return e + u + e; +} +var uu = $o; +function Uo(t, e, r) { + return Ve(t, r(e)); +} +function Mo(t, e) { + return arguments.length === 2 || typeof e == "number" ? Ve(t, e) : Uo(...arguments); +} +function Wo(t, e, r) { + return Ye(t, r(e)); +} +function zo(t, e) { + return arguments.length === 2 || typeof e == "number" ? Ye(t, e) : Wo(...arguments); +} +function Go(t, e, r) { + return ht(t, r(e)); +} +function Ko(t, e) { + return arguments.length === 2 || typeof e == "number" ? ht(t, e) : Go(...arguments); +} +var er = {}; +Me(er, { builders: () => Ho, printer: () => qo, utils: () => Jo }); +var Ho = { join: ke, line: Ke, softline: Er, hardline: G, literalline: He, group: xt, conditionalGroup: fr, fill: Ge, lineSuffix: _e, lineSuffixBoundary: Fr, cursor: Be, breakParent: le, ifBreak: pr, trim: mr, indent: ie, indentIfBreak: dr, align: oe, addAlignmentToDoc: qe, markAsRoot: cr, dedentToRoot: Dr, dedent: lr, hardlineWithoutBreakParent: Ae, literallineWithoutBreakParent: _t, label: hr, concat: (t) => t }, qo = { printDocToString: fe }, Jo = { willBreak: kr, traverseDoc: xe, findInDoc: Je, mapDoc: Ne, removeLines: wr, stripTrailingHardline: Xe, replaceEndOfLine: Or, canBreak: Nr }; +var ou = "3.0.3"; +function De(t, e = 1) { + return async (...r) => { + let n = r[e] ?? {}, o = n.plugins ?? []; + return r[e] = { ...n, plugins: Array.isArray(o) ? o : Object.values(o) }, t(...r); + }; +} +var iu = De(Xt); +async function su(t, e) { + let { formatted: r } = await iu(t, { ...e, cursorOffset: -1 }); + return r; +} +async function Xo(t, e) { + return await su(t, e) === t; +} +var Zo = De(et, 0), Qo = { parse: De(Hn), formatAST: De(qn), formatDoc: De(Jn), printToDoc: De(Xn), printDocToString: De(Zn) }; +var Uc = tr; +const standalone = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + __debug: Qo, + check: Xo, + default: Uc, + doc: er, + format: su, + formatWithCursor: iu, + getSupportInfo: Zo, + util: Qt, + version: ou +}, Symbol.toStringTag, { value: "Module" })); +async function printPrettier(source = "", options = {}) { + return await su(source, { + printWidth: 80, + useTabs: true, + ...options, + parser: "latex-parser", + plugins: [prettierPluginLatex.prettierPluginLatex] + }); +} +exports.Prettier = standalone; +exports.printPrettier = printPrettier; +//# sourceMappingURL=standalone.js.map diff --git a/node_modules/prettier-plugin-latex/dist/standalone.js.map b/node_modules/prettier-plugin-latex/dist/standalone.js.map new file mode 100644 index 0000000..166efd6 --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/standalone.js.map @@ -0,0 +1 @@ +{"version":3,"file":"standalone.js","sources":["../node_modules/prettier/standalone.mjs","../src/standalone.ts"],"sourcesContent":["var au=Object.create;var $e=Object.defineProperty;var Du=Object.getOwnPropertyDescriptor;var cu=Object.getOwnPropertyNames;var lu=Object.getPrototypeOf,fu=Object.prototype.hasOwnProperty;var pu=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ue=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Me=(t,e)=>{for(var r in e)$e(t,r,{get:e[r],enumerable:!0})},nr=(t,e,r,n)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let o of cu(e))!fu.call(t,o)&&o!==r&&$e(t,o,{get:()=>e[o],enumerable:!(n=Du(e,o))||n.enumerable});return t};var Ce=(t,e,r)=>(r=t!=null?au(lu(t)):{},nr(e||!t||!t.__esModule?$e(r,\"default\",{value:t,enumerable:!0}):r,t)),du=t=>nr($e({},\"__esModule\",{value:!0}),t);var Fu=(t,e,r)=>{if(!e.has(t))throw TypeError(\"Cannot \"+r)};var Ct=(t,e,r)=>{if(e.has(t))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(t):e.set(t,r)};var ce=(t,e,r)=>(Fu(t,e,\"access private method\"),r);var or=Ue(gt=>{\"use strict\";Object.defineProperty(gt,\"__esModule\",{value:!0});gt.default=ur;function ur(){}ur.prototype={diff:function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=n.callback;typeof n==\"function\"&&(o=n,n={}),this.options=n;var u=this;function i(p){return o?(setTimeout(function(){o(void 0,p)},0),!0):p}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var s=r.length,a=e.length,D=1,c=s+a;n.maxEditLength&&(c=Math.min(c,n.maxEditLength));var F=[{newPos:-1,components:[]}],f=this.extractCommon(F[0],r,e,0);if(F[0].newPos+1>=s&&f+1>=a)return i([{value:this.join(r),count:r.length}]);function d(){for(var p=-1*D;p<=D;p+=2){var m=void 0,E=F[p-1],h=F[p+1],g=(h?h.newPos:0)-p;E&&(F[p-1]=void 0);var C=E&&E.newPos+1=s&&g+1>=a)return i(Eu(u,m.components,r,e,u.useLongestToken));F[p]=m}D++}if(o)(function p(){setTimeout(function(){if(D>c)return o();d()||p()},0)})();else for(;D<=c;){var l=d();if(l)return l}},pushComponent:function(e,r,n){var o=e[e.length-1];o&&o.added===r&&o.removed===n?e[e.length-1]={count:o.count+1,added:r,removed:n}:e.push({count:1,added:r,removed:n})},extractCommon:function(e,r,n,o){for(var u=r.length,i=n.length,s=e.newPos,a=s-o,D=0;s+1d.length?p:d}),D.value=t.join(c)}else D.value=t.join(r.slice(s,s+D.count));s+=D.count,D.added||(a+=D.count)}}var f=e[i-1];return i>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&t.equals(\"\",f.value)&&(e[i-2].value+=f.value,e.pop()),e}function hu(t){return{newPos:t.newPos,components:t.components.slice(0)}}});var ir=Ue(ye=>{\"use strict\";Object.defineProperty(ye,\"__esModule\",{value:!0});ye.diffArrays=yu;ye.arrayDiff=void 0;var Cu=gu(or());function gu(t){return t&&t.__esModule?t:{default:t}}var ge=new Cu.default;ye.arrayDiff=ge;ge.tokenize=function(t){return t.slice()};ge.join=ge.removeEmpty=function(t){return t};function yu(t,e,r){return ge.diff(t,e,r)}});var Pe=Ue((ss,Rr)=>{\"use strict\";var Ir=new Proxy(String,{get:()=>Ir});Rr.exports=Ir});var ln={};Me(ln,{default:()=>to,shouldHighlight:()=>eo});var eo,to,fn=pu(()=>{eo=()=>!1,to=String});var hn=Ue(pt=>{\"use strict\";Object.defineProperty(pt,\"__esModule\",{value:!0});pt.codeFrameColumns=En;pt.default=io;var pn=(fn(),du(ln)),ro=Pe(),dn=ro,jt;function no(t){if(t){var e;return(e=jt)!=null||(jt=new dn.constructor({enabled:!0,level:1})),jt}return dn}var Fn=!1;function uo(t){return{gutter:t.grey,marker:t.red.bold,message:t.red.bold}}var mn=/\\r\\n|[\\n\\r\\u2028\\u2029]/;function oo(t,e,r){let n=Object.assign({column:0,line:-1},t.start),o=Object.assign({},n,t.end),{linesAbove:u=2,linesBelow:i=3}=r||{},s=n.line,a=n.column,D=o.line,c=o.column,F=Math.max(s-(u+1),0),f=Math.min(e.length,D+i);s===-1&&(F=0),D===-1&&(f=e.length);let d=D-s,l={};if(d)for(let p=0;p<=d;p++){let m=p+s;if(!a)l[m]=!0;else if(p===0){let E=e[m-1].length;l[m]=[a,E-a+1]}else if(p===d)l[m]=[0,c];else{let E=e[m-p].length;l[m]=[0,E]}}else a===c?a?l[s]=[a,0]:l[s]=!0:l[s]=[a,c-a];return{start:F,end:f,markerLines:l}}function En(t,e,r={}){let n=(r.highlightCode||r.forceColor)&&(0,pn.shouldHighlight)(r),o=no(r.forceColor),u=uo(o),i=(p,m)=>n?p(m):m,s=t.split(mn),{start:a,end:D,markerLines:c}=oo(e,s,r),F=e.start&&typeof e.start.column==\"number\",f=String(D).length,l=(n?(0,pn.default)(t,r):t).split(mn,D).slice(a,D).map((p,m)=>{let E=a+1+m,g=` ${` ${E}`.slice(-f)} |`,C=c[E],_=!c[E+1];if(C){let Z=\"\";if(Array.isArray(C)){let $=p.slice(0,Math.max(C[0]-1,0)).replace(/[^\\t]/g,\" \"),Q=C[1]||1;Z=[`\n `,i(u.gutter,g.replace(/\\d/g,\" \")),\" \",$,i(u.marker,\"^\").repeat(Q)].join(\"\"),_&&r.message&&(Z+=\" \"+i(u.message,r.message))}return[i(u.marker,\">\"),i(u.gutter,g),p.length>0?` ${p}`:\"\",Z].join(\"\")}else return` ${i(u.gutter,g)}${p.length>0?` ${p}`:\"\"}`}).join(`\n`);return r.message&&!F&&(l=`${\" \".repeat(f+1)}${r.message}\n${l}`),n?o.reset(l):l}function io(t,e,r,n={}){if(!Fn){Fn=!0;let u=\"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";{let i=new Error(u);i.name=\"DeprecationWarning\",console.warn(new Error(u))}}return r=Math.max(r,0),En(t,{start:{column:r,line:e}},n)}});var tr={};Me(tr,{__debug:()=>Qo,check:()=>Xo,doc:()=>er,format:()=>su,formatWithCursor:()=>iu,getSupportInfo:()=>Zo,util:()=>Qt,version:()=>ou});var mu=(t,e,r,n)=>{if(!(t&&e==null))return e.replaceAll?e.replaceAll(r,n):r.global?e.replace(r,n):e.split(r).join(n)},ee=mu;var Wn=Ce(ir(),1);var U=\"string\",j=\"array\",M=\"cursor\",T=\"indent\",S=\"align\",v=\"trim\",A=\"group\",k=\"fill\",B=\"if-break\",P=\"indent-if-break\",L=\"line-suffix\",I=\"line-suffix-boundary\",x=\"line\",O=\"label\",b=\"break-parent\",We=new Set([M,T,S,v,A,k,B,P,L,I,x,O,b]);function xu(t){if(typeof t==\"string\")return U;if(Array.isArray(t))return j;if(!t)return;let{type:e}=t;if(We.has(e))return e}var W=xu;var _u=t=>new Intl.ListFormat(\"en-US\",{type:\"disjunction\"}).format(t);function Au(t){let e=t===null?\"null\":typeof t;if(e!==\"string\"&&e!==\"object\")return`Unexpected doc '${e}', \nExpected it to be 'string' or 'object'.`;if(W(t))throw new Error(\"doc is valid.\");let r=Object.prototype.toString.call(t);if(r!==\"[object Object]\")return`Unexpected doc '${r}'.`;let n=_u([...We].map(o=>`'${o}'`));return`Unexpected doc.type '${t.type}'.\nExpected it to be ${n}.`}var yt=class extends Error{name=\"InvalidDocError\";constructor(e){super(Au(e)),this.doc=e}},q=yt;var sr={};function Bu(t,e,r,n){let o=[t];for(;o.length>0;){let u=o.pop();if(u===sr){r(o.pop());continue}r&&o.push(u,sr);let i=W(u);if(!i)throw new q(u);if((e==null?void 0:e(u))!==!1)switch(i){case j:case k:{let s=i===j?u:u.parts;for(let a=s.length,D=a-1;D>=0;--D)o.push(s[D]);break}case B:o.push(u.flatContents,u.breakContents);break;case A:if(n&&u.expandedStates)for(let s=u.expandedStates.length,a=s-1;a>=0;--a)o.push(u.expandedStates[a]);else o.push(u.contents);break;case S:case T:case P:case O:case L:o.push(u.contents);break;case U:case M:case v:case I:case x:case b:break;default:throw new q(u)}}}var xe=Bu;var ar=()=>{},z=ar,ze=ar;function ie(t){return z(t),{type:T,contents:t}}function oe(t,e){return z(e),{type:S,contents:e,n:t}}function xt(t,e={}){return z(t),ze(e.expandedStates,!0),{type:A,id:e.id,contents:t,break:!!e.shouldBreak,expandedStates:e.expandedStates}}function Dr(t){return oe(Number.NEGATIVE_INFINITY,t)}function cr(t){return oe({type:\"root\"},t)}function lr(t){return oe(-1,t)}function fr(t,e){return xt(t[0],{...e,expandedStates:t})}function Ge(t){return ze(t),{type:k,parts:t}}function pr(t,e=\"\",r={}){return z(t),e!==\"\"&&z(e),{type:B,breakContents:t,flatContents:e,groupId:r.groupId}}function dr(t,e){return z(t),{type:P,contents:t,groupId:e.groupId,negate:e.negate}}function _e(t){return z(t),{type:L,contents:t}}var Fr={type:I},le={type:b},mr={type:v},Ae={type:x,hard:!0},_t={type:x,hard:!0,literal:!0},Ke={type:x},Er={type:x,soft:!0},G=[Ae,le],He=[_t,le],Be={type:M};function ke(t,e){z(t),ze(e);let r=[];for(let n=0;n0){for(let o=0;o{if(!(t&&e==null))return Array.isArray(e)||typeof e==\"string\"?e[r<0?e.length+r:r]:e.at(r)},y=ku;function Cr(t){let e=t.indexOf(\"\\r\");return e>=0?t.charAt(e+1)===`\n`?\"crlf\":\"cr\":\"lf\"}function be(t){switch(t){case\"cr\":return\"\\r\";case\"crlf\":return`\\r\n`;default:return`\n`}}function At(t,e){let r;switch(e){case`\n`:r=/\\n/g;break;case\"\\r\":r=/\\r/g;break;case`\\r\n`:r=/\\r\\n/g;break;default:throw new Error(`Unexpected \"eol\" ${JSON.stringify(e)}.`)}let n=t.match(r);return n?n.length:0}function gr(t){return ee(!1,t,/\\r\\n?/g,`\n`)}var yr=()=>/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;var xr={eastAsianWidth(t){var e=t.charCodeAt(0),r=t.length==2?t.charCodeAt(1):0,n=e;return 55296<=e&&e<=56319&&56320<=r&&r<=57343&&(e&=1023,r&=1023,n=e<<10|r,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?\"F\":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?\"W\":\"N\"}};var bu=/[^\\x20-\\x7F]/;function wu(t){if(!t)return 0;if(!bu.test(t))return t.length;t=t.replace(yr(),\" \");let e=0;for(let r of t){let n=r.codePointAt(0);if(n<=31||n>=127&&n<=159||n>=768&&n<=879)continue;let o=xr.eastAsianWidth(r);e+=o===\"F\"||o===\"W\"?2:1}return e}var we=wu;var Br=t=>{if(Array.isArray(t))return t;if(t.type!==k)throw new Error(`Expect doc to be 'array' or '${k}'.`);return t.parts};function Ne(t,e){if(typeof t==\"string\")return e(t);let r=new Map;return n(t);function n(u){if(r.has(u))return r.get(u);let i=o(u);return r.set(u,i),i}function o(u){switch(W(u)){case j:return e(u.map(n));case k:return e({...u,parts:u.parts.map(n)});case B:return e({...u,breakContents:n(u.breakContents),flatContents:n(u.flatContents)});case A:{let{expandedStates:i,contents:s}=u;return i?(i=i.map(n),s=i[0]):s=n(s),e({...u,contents:s,expandedStates:i})}case S:case T:case P:case O:case L:return e({...u,contents:n(u.contents)});case U:case M:case v:case I:case x:case b:return e(u);default:throw new q(u)}}}function Je(t,e,r){let n=r,o=!1;function u(i){if(o)return!1;let s=e(i);s!==void 0&&(o=!0,n=s)}return xe(t,u),n}function Ou(t){if(t.type===A&&t.break||t.type===x&&t.hard||t.type===b)return!0}function kr(t){return Je(t,Ou,!1)}function _r(t){if(t.length>0){let e=y(!1,t,-1);!e.expandedStates&&!e.break&&(e.break=\"propagated\")}return null}function br(t){let e=new Set,r=[];function n(u){if(u.type===b&&_r(r),u.type===A){if(r.push(u),e.has(u))return!1;e.add(u)}}function o(u){u.type===A&&r.pop().break&&_r(r)}xe(t,n,o,!0)}function Nu(t){return t.type===x&&!t.hard?t.soft?\"\":\" \":t.type===B?t.flatContents:t}function wr(t){return Ne(t,Nu)}function Ar(t){for(t=[...t];t.length>=2&&y(!1,t,-2).type===x&&y(!1,t,-1).type===b;)t.length-=2;if(t.length>0){let e=Oe(y(!1,t,-1));t[t.length-1]=e}return t}function Oe(t){switch(W(t)){case S:case T:case P:case A:case L:case O:{let e=Oe(t.contents);return{...t,contents:e}}case B:return{...t,breakContents:Oe(t.breakContents),flatContents:Oe(t.flatContents)};case k:return{...t,parts:Ar(t.parts)};case j:return Ar(t);case U:return t.replace(/[\\n\\r]*$/,\"\");case M:case v:case I:case x:case b:break;default:throw new q(t)}return t}function Xe(t){return Oe(Su(t))}function Tu(t){switch(W(t)){case k:if(t.parts.every(e=>e===\"\"))return\"\";break;case A:if(!t.contents&&!t.id&&!t.break&&!t.expandedStates)return\"\";if(t.contents.type===A&&t.contents.id===t.id&&t.contents.break===t.break&&t.contents.expandedStates===t.expandedStates)return t.contents;break;case S:case T:case P:case L:if(!t.contents)return\"\";break;case B:if(!t.flatContents&&!t.breakContents)return\"\";break;case j:{let e=[];for(let r of t){if(!r)continue;let[n,...o]=Array.isArray(r)?r:[r];typeof n==\"string\"&&typeof y(!1,e,-1)==\"string\"?e[e.length-1]+=n:e.push(n),e.push(...o)}return e.length===0?\"\":e.length===1?e[0]:e}case U:case M:case v:case I:case x:case O:case b:break;default:throw new q(t)}return t}function Su(t){return Ne(t,e=>Tu(e))}function Or(t,e=He){return Ne(t,r=>typeof r==\"string\"?ke(e,r.split(`\n`)):r)}function vu(t){if(t.type===x)return!0}function Nr(t){return Je(t,vu,!1)}function Ze(t,e){return t.type===O?{...t,contents:e(t.contents)}:e(t)}var R=Symbol(\"MODE_BREAK\"),K=Symbol(\"MODE_FLAT\"),Te=Symbol(\"cursor\");function Tr(){return{value:\"\",length:0,queue:[]}}function Pu(t,e){return Bt(t,{type:\"indent\"},e)}function Lu(t,e,r){return e===Number.NEGATIVE_INFINITY?t.root||Tr():e<0?Bt(t,{type:\"dedent\"},r):e?e.type===\"root\"?{...t,root:t}:Bt(t,{type:typeof e==\"string\"?\"stringAlign\":\"numberAlign\",n:e},r):t}function Bt(t,e,r){let n=e.type===\"dedent\"?t.queue.slice(0,-1):[...t.queue,e],o=\"\",u=0,i=0,s=0;for(let l of n)switch(l.type){case\"indent\":c(),r.useTabs?a(1):D(r.tabWidth);break;case\"stringAlign\":c(),o+=l.n,u+=l.n.length;break;case\"numberAlign\":i+=1,s+=l.n;break;default:throw new Error(`Unexpected type '${l.type}'`)}return f(),{...t,value:o,length:u,queue:n};function a(l){o+=\"\t\".repeat(l),u+=r.tabWidth*l}function D(l){o+=\" \".repeat(l),u+=l}function c(){r.useTabs?F():f()}function F(){i>0&&a(i),d()}function f(){s>0&&D(s),d()}function d(){i=0,s=0}}function kt(t){let e=0,r=0,n=t.length;e:for(;n--;){let o=t[n];if(o===Te){r++;continue}for(let u=o.length-1;u>=0;u--){let i=o[u];if(i===\" \"||i===\"\t\")e++;else{t[n]=o.slice(0,u+1);break e}}}if(e>0||r>0)for(t.length=n+1;r-- >0;)t.push(Te);return e}function Qe(t,e,r,n,o,u){if(r===Number.POSITIVE_INFINITY)return!0;let i=e.length,s=[t],a=[];for(;r>=0;){if(s.length===0){if(i===0)return!0;s.push(e[--i]);continue}let{mode:D,doc:c}=s.pop();switch(W(c)){case U:a.push(c),r-=we(c);break;case j:case k:{let F=Br(c);for(let f=F.length-1;f>=0;f--)s.push({mode:D,doc:F[f]});break}case T:case S:case P:case O:s.push({mode:D,doc:c.contents});break;case v:r+=kt(a);break;case A:{if(u&&c.break)return!1;let F=c.break?R:D,f=c.expandedStates&&F===R?y(!1,c.expandedStates,-1):c.contents;s.push({mode:F,doc:f});break}case B:{let f=(c.groupId?o[c.groupId]||K:D)===R?c.breakContents:c.flatContents;f&&s.push({mode:D,doc:f});break}case x:if(D===R||c.hard)return!0;c.soft||(a.push(\" \"),r--);break;case L:n=!0;break;case I:if(n)return!1;break}}return!1}function fe(t,e){let r={},n=e.printWidth,o=be(e.endOfLine),u=0,i=[{ind:Tr(),mode:R,doc:t}],s=[],a=!1,D=[],c=0;for(br(t);i.length>0;){let{ind:f,mode:d,doc:l}=i.pop();switch(W(l)){case U:{let p=o!==`\n`?ee(!1,l,`\n`,o):l;s.push(p),i.length>0&&(u+=we(p));break}case j:for(let p=l.length-1;p>=0;p--)i.push({ind:f,mode:d,doc:l[p]});break;case M:if(c>=2)throw new Error(\"There are too many 'cursor' in doc.\");s.push(Te),c++;break;case T:i.push({ind:Pu(f,e),mode:d,doc:l.contents});break;case S:i.push({ind:Lu(f,l.n,e),mode:d,doc:l.contents});break;case v:u-=kt(s);break;case A:switch(d){case K:if(!a){i.push({ind:f,mode:l.break?R:K,doc:l.contents});break}case R:{a=!1;let p={ind:f,mode:K,doc:l.contents},m=n-u,E=D.length>0;if(!l.break&&Qe(p,i,m,E,r))i.push(p);else if(l.expandedStates){let h=y(!1,l.expandedStates,-1);if(l.break){i.push({ind:f,mode:R,doc:h});break}else for(let g=1;g=l.expandedStates.length){i.push({ind:f,mode:R,doc:h});break}else{let C=l.expandedStates[g],_={ind:f,mode:K,doc:C};if(Qe(_,i,m,E,r)){i.push(_);break}}}else i.push({ind:f,mode:R,doc:l.contents});break}}l.id&&(r[l.id]=y(!1,i,-1).mode);break;case k:{let p=n-u,{parts:m}=l;if(m.length===0)break;let[E,h]=m,g={ind:f,mode:K,doc:E},C={ind:f,mode:R,doc:E},_=Qe(g,[],p,D.length>0,r,!0);if(m.length===1){_?i.push(g):i.push(C);break}let Z={ind:f,mode:K,doc:h},$={ind:f,mode:R,doc:h};if(m.length===2){_?i.push(Z,g):i.push($,C);break}m.splice(0,2);let Q={ind:f,mode:d,doc:Ge(m)},rr=m[0];Qe({ind:f,mode:K,doc:[E,h,rr]},[],p,D.length>0,r,!0)?i.push(Q,Z,g):_?i.push(Q,$,g):i.push(Q,$,C);break}case B:case P:{let p=l.groupId?r[l.groupId]:d;if(p===R){let m=l.type===B?l.breakContents:l.negate?l.contents:ie(l.contents);m&&i.push({ind:f,mode:d,doc:m})}if(p===K){let m=l.type===B?l.flatContents:l.negate?ie(l.contents):l.contents;m&&i.push({ind:f,mode:d,doc:m})}break}case L:D.push({ind:f,mode:d,doc:l.contents});break;case I:D.length>0&&i.push({ind:f,mode:d,doc:Ae});break;case x:switch(d){case K:if(l.hard)a=!0;else{l.soft||(s.push(\" \"),u+=1);break}case R:if(D.length>0){i.push({ind:f,mode:d,doc:l},...D.reverse()),D.length=0;break}l.literal?f.root?(s.push(o,f.root.value),u=f.root.length):(s.push(o),u=0):(u-=kt(s),s.push(o+f.value),u=f.length);break}break;case O:i.push({ind:f,mode:d,doc:l.contents});break;case b:break;default:throw new q(l)}i.length===0&&D.length>0&&(i.push(...D.reverse()),D.length=0)}let F=s.indexOf(Te);if(F!==-1){let f=s.indexOf(Te,F+1),d=s.slice(0,F).join(\"\"),l=s.slice(F+1,f).join(\"\"),p=s.slice(f+1).join(\"\");return{formatted:d+l+p,cursorNodeStart:d.length,cursorNodeText:l}}return{formatted:s.join(\"\")}}function J(t){var e;if(!t)return\"\";if(Array.isArray(t)){let r=[];for(let n of t)if(Array.isArray(n))r.push(...J(n));else{let o=J(n);o!==\"\"&&r.push(o)}return r}return t.type===B?{...t,breakContents:J(t.breakContents),flatContents:J(t.flatContents)}:t.type===A?{...t,contents:J(t.contents),expandedStates:(e=t.expandedStates)==null?void 0:e.map(J)}:t.type===k?{type:\"fill\",parts:t.parts.map(J)}:t.contents?{...t,contents:J(t.contents)}:t}function Sr(t){let e=Object.create(null),r=new Set;return n(J(t));function n(u,i,s){var a,D;if(typeof u==\"string\")return JSON.stringify(u);if(Array.isArray(u)){let c=u.map(n).filter(Boolean);return c.length===1?c[0]:`[${c.join(\", \")}]`}if(u.type===x){let c=((a=s==null?void 0:s[i+1])==null?void 0:a.type)===b;return u.literal?c?\"literalline\":\"literallineWithoutBreakParent\":u.hard?c?\"hardline\":\"hardlineWithoutBreakParent\":u.soft?\"softline\":\"line\"}if(u.type===b)return((D=s==null?void 0:s[i-1])==null?void 0:D.type)===x&&s[i-1].hard?void 0:\"breakParent\";if(u.type===v)return\"trim\";if(u.type===T)return\"indent(\"+n(u.contents)+\")\";if(u.type===S)return u.n===Number.NEGATIVE_INFINITY?\"dedentToRoot(\"+n(u.contents)+\")\":u.n<0?\"dedent(\"+n(u.contents)+\")\":u.n.type===\"root\"?\"markAsRoot(\"+n(u.contents)+\")\":\"align(\"+JSON.stringify(u.n)+\", \"+n(u.contents)+\")\";if(u.type===B)return\"ifBreak(\"+n(u.breakContents)+(u.flatContents?\", \"+n(u.flatContents):\"\")+(u.groupId?(u.flatContents?\"\":', \"\"')+`, { groupId: ${o(u.groupId)} }`:\"\")+\")\";if(u.type===P){let c=[];u.negate&&c.push(\"negate: true\"),u.groupId&&c.push(`groupId: ${o(u.groupId)}`);let F=c.length>0?`, { ${c.join(\", \")} }`:\"\";return`indentIfBreak(${n(u.contents)}${F})`}if(u.type===A){let c=[];u.break&&u.break!==\"propagated\"&&c.push(\"shouldBreak: true\"),u.id&&c.push(`id: ${o(u.id)}`);let F=c.length>0?`, { ${c.join(\", \")} }`:\"\";return u.expandedStates?`conditionalGroup([${u.expandedStates.map(f=>n(f)).join(\",\")}]${F})`:`group(${n(u.contents)}${F})`}if(u.type===k)return`fill([${u.parts.map(c=>n(c)).join(\", \")}])`;if(u.type===L)return\"lineSuffix(\"+n(u.contents)+\")\";if(u.type===I)return\"lineSuffixBoundary\";if(u.type===O)return`label(${JSON.stringify(u.label)}, ${n(u.contents)})`;throw new Error(\"Unknown doc type \"+u.type)}function o(u){if(typeof u!=\"symbol\")return JSON.stringify(String(u));if(u in e)return e[u];let i=u.description||\"symbol\";for(let s=0;;s++){let a=i+(s>0?` #${s}`:\"\");if(!r.has(a))return r.add(a),e[u]=`Symbol.for(${JSON.stringify(a)})`}}}function Iu(t,e,r=0){let n=0;for(let o=r;otypeof t==\"string\"||typeof t==\"function\",choices:[{value:\"flow\",description:\"Flow\"},{value:\"babel\",description:\"JavaScript\"},{value:\"babel-flow\",description:\"Flow\"},{value:\"babel-ts\",description:\"TypeScript\"},{value:\"typescript\",description:\"TypeScript\"},{value:\"acorn\",description:\"JavaScript\"},{value:\"espree\",description:\"JavaScript\"},{value:\"meriyah\",description:\"JavaScript\"},{value:\"css\",description:\"CSS\"},{value:\"less\",description:\"Less\"},{value:\"scss\",description:\"SCSS\"},{value:\"json\",description:\"JSON\"},{value:\"json5\",description:\"JSON5\"},{value:\"json-stringify\",description:\"JSON.stringify\"},{value:\"graphql\",description:\"GraphQL\"},{value:\"markdown\",description:\"Markdown\"},{value:\"mdx\",description:\"MDX\"},{value:\"vue\",description:\"Vue\"},{value:\"yaml\",description:\"YAML\"},{value:\"glimmer\",description:\"Ember / Handlebars\"},{value:\"html\",description:\"HTML\"},{value:\"angular\",description:\"Angular\"},{value:\"lwc\",description:\"Lightning Web Components\"}]},plugins:{type:\"path\",array:!0,default:[{value:[]}],category:\"Global\",description:\"Add a plugin. Multiple plugins can be passed as separate `--plugin`s.\",exception:t=>typeof t==\"string\"||typeof t==\"object\",cliName:\"plugin\",cliCategory:\"Config\"},printWidth:{category:\"Global\",type:\"int\",default:80,description:\"The line length where Prettier will try wrap.\",range:{start:0,end:1/0,step:1}},rangeEnd:{category:\"Special\",type:\"int\",default:1/0,range:{start:0,end:1/0,step:1},description:`Format code ending at a given character offset (exclusive).\nThe range will extend forwards to the end of the selected statement.\nThis option cannot be used with --cursor-offset.`,cliCategory:\"Editor\"},rangeStart:{category:\"Special\",type:\"int\",default:0,range:{start:0,end:1/0,step:1},description:`Format code starting at a given character offset.\nThe range will extend backwards to the start of the first line containing the selected statement.\nThis option cannot be used with --cursor-offset.`,cliCategory:\"Editor\"},requirePragma:{category:\"Special\",type:\"boolean\",default:!1,description:`Require either '@prettier' or '@format' to be present in the file's first docblock comment\nin order for it to be formatted.`,cliCategory:\"Other\"},tabWidth:{type:\"int\",category:\"Global\",default:2,description:\"Number of spaces per indentation level.\",range:{start:0,end:1/0,step:1}},useTabs:{category:\"Global\",type:\"boolean\",default:!1,description:\"Indent with tabs instead of spaces.\"},embeddedLanguageFormatting:{category:\"Global\",type:\"choice\",default:\"auto\",description:\"Control how Prettier formats quoted code embedded in the file.\",choices:[{value:\"auto\",description:\"Format embedded code if Prettier can automatically identify it.\"},{value:\"off\",description:\"Never automatically format embedded code.\"}]}};function et({plugins:t=[],showDeprecated:e=!1}={}){let r=t.flatMap(o=>o.languages??[]),n=[];for(let o of Yu(Object.assign({},...t.map(({options:u})=>u),vr)))!e&&o.deprecated||(Array.isArray(o.choices)&&(e||(o.choices=o.choices.filter(u=>!u.deprecated)),o.name===\"parser\"&&(o.choices=[...o.choices,...Ru(o.choices,r,t)])),o.pluginDefaults=Object.fromEntries(t.filter(u=>{var i;return((i=u.defaultOptions)==null?void 0:i[o.name])!==void 0}).map(u=>[u.name,u.defaultOptions[o.name]])),n.push(o));return{languages:r,options:n}}function*Ru(t,e,r){let n=new Set(t.map(o=>o.value));for(let o of e)if(o.parsers){for(let u of o.parsers)if(!n.has(u)){n.add(u);let i=r.find(a=>a.parsers&&Object.prototype.hasOwnProperty.call(a.parsers,u)),s=o.name;i!=null&&i.name&&(s+=` (plugin: ${i.name})`),yield{value:u,description:s}}}}function Yu(t){let e=[];for(let[r,n]of Object.entries(t)){let o={name:r,...n};Array.isArray(o.default)&&(o.default=y(!1,o.default,-1).value),e.push(o)}return e}var ju=t=>t.split(/[/\\\\]/).pop();function Pr(t,e){if(!e)return;let r=ju(e).toLowerCase();return t.find(n=>{var o,u;return((o=n.extensions)==null?void 0:o.some(i=>r.endsWith(i)))||((u=n.filenames)==null?void 0:u.some(i=>i.toLowerCase()===r))})}function Vu(t,e){if(e)return t.find(({name:r})=>r.toLowerCase()===e)??t.find(({aliases:r})=>r==null?void 0:r.includes(e))??t.find(({extensions:r})=>r==null?void 0:r.includes(`.${e}`))}function $u(t,e){let r=t.plugins.flatMap(o=>o.languages??[]),n=Vu(r,e.language)??Pr(r,e.physicalFile)??Pr(r,e.file)??(e.physicalFile,void 0);return n==null?void 0:n.parsers[0]}var Lr=$u;var te={key:t=>/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(t)?t:JSON.stringify(t),value(t){if(t===null||typeof t!=\"object\")return JSON.stringify(t);if(Array.isArray(t))return`[${t.map(r=>te.value(r)).join(\", \")}]`;let e=Object.keys(t);return e.length===0?\"{}\":`{ ${e.map(r=>`${te.key(r)}: ${te.value(t[r])}`).join(\", \")} }`},pair:({key:t,value:e})=>te.value({[t]:e})};var bt=Ce(Pe(),1),Yr=(t,e,{descriptor:r})=>{let n=[`${bt.default.yellow(typeof t==\"string\"?r.key(t):r.pair(t))} is deprecated`];return e&&n.push(`we now treat it as ${bt.default.blue(typeof e==\"string\"?r.key(e):r.pair(e))}`),n.join(\"; \")+\".\"};var se=Ce(Pe(),1);var tt=Symbol.for(\"vnopts.VALUE_NOT_EXIST\"),de=Symbol.for(\"vnopts.VALUE_UNCHANGED\");var jr=\" \".repeat(2),$r=(t,e,r)=>{let{text:n,list:o}=r.normalizeExpectedResult(r.schemas[t].expected(r)),u=[];return n&&u.push(Vr(t,e,n,r.descriptor)),o&&u.push([Vr(t,e,o.title,r.descriptor)].concat(o.values.map(i=>Ur(i,r.loggerPrintWidth))).join(`\n`)),Mr(u,r.loggerPrintWidth)};function Vr(t,e,r,n){return[`Invalid ${se.default.red(n.key(t))} value.`,`Expected ${se.default.blue(r)},`,`but received ${e===tt?se.default.gray(\"nothing\"):se.default.red(n.value(e))}.`].join(\" \")}function Ur({text:t,list:e},r){let n=[];return t&&n.push(`- ${se.default.blue(t)}`),e&&n.push([`- ${se.default.blue(e.title)}:`].concat(e.values.map(o=>Ur(o,r-jr.length).replace(/^|\\n/g,`$&${jr}`))).join(`\n`)),Mr(n,r)}function Mr(t,e){if(t.length===1)return t[0];let[r,n]=t,[o,u]=t.map(i=>i.split(`\n`,1)[0].length);return o>e&&o>u?n:r}var Nt=Ce(Pe(),1);var wt=[],Wr=[];function Ot(t,e){if(t===e)return 0;let r=t;t.length>e.length&&(t=e,e=r);let n=t.length,o=e.length;for(;n>0&&t.charCodeAt(~-n)===e.charCodeAt(~-o);)n--,o--;let u=0;for(;us?D>s?s+1:D:D>a?a+1:D;return s}var rt=(t,e,{descriptor:r,logger:n,schemas:o})=>{let u=[`Ignored unknown option ${Nt.default.yellow(r.pair({key:t,value:e}))}.`],i=Object.keys(o).sort().find(s=>Ot(t,s)<3);i&&u.push(`Did you mean ${Nt.default.blue(r.key(i))}?`),n.warn(u.join(\" \"))};var Uu=[\"default\",\"expected\",\"validate\",\"deprecated\",\"forward\",\"redirect\",\"overlap\",\"preprocess\",\"postprocess\"];function Mu(t,e){let r=new t(e),n=Object.create(r);for(let o of Uu)o in e&&(n[o]=Wu(e[o],r,w.prototype[o].length));return n}var w=class{static create(e){return Mu(this,e)}constructor(e){this.name=e.name}default(e){}expected(e){return\"nothing\"}validate(e,r){return!1}deprecated(e,r){return!1}forward(e,r){}redirect(e,r){}overlap(e,r,n){return e}preprocess(e,r){return e}postprocess(e,r){return de}};function Wu(t,e,r){return typeof t==\"function\"?(...n)=>t(...n.slice(0,r-1),e,...n.slice(r-1)):()=>t}var nt=class extends w{constructor(e){super(e),this._sourceName=e.sourceName}expected(e){return e.schemas[this._sourceName].expected(e)}validate(e,r){return r.schemas[this._sourceName].validate(e,r)}redirect(e,r){return this._sourceName}};var ut=class extends w{expected(){return\"anything\"}validate(){return!0}};var ot=class extends w{constructor({valueSchema:e,name:r=e.name,...n}){super({...n,name:r}),this._valueSchema=e}expected(e){let{text:r,list:n}=e.normalizeExpectedResult(this._valueSchema.expected(e));return{text:r&&`an array of ${r}`,list:n&&{title:\"an array of the following values\",values:[{list:n}]}}}validate(e,r){if(!Array.isArray(e))return!1;let n=[];for(let o of e){let u=r.normalizeValidateResult(this._valueSchema.validate(o,r),o);u!==!0&&n.push(u.value)}return n.length===0?!0:{value:n}}deprecated(e,r){let n=[];for(let o of e){let u=r.normalizeDeprecatedResult(this._valueSchema.deprecated(o,r),o);u!==!1&&n.push(...u.map(({value:i})=>({value:[i]})))}return n}forward(e,r){let n=[];for(let o of e){let u=r.normalizeForwardResult(this._valueSchema.forward(o,r),o);n.push(...u.map(zr))}return n}redirect(e,r){let n=[],o=[];for(let u of e){let i=r.normalizeRedirectResult(this._valueSchema.redirect(u,r),u);\"remain\"in i&&n.push(i.remain),o.push(...i.redirect.map(zr))}return n.length===0?{redirect:o}:{redirect:o,remain:n}}overlap(e,r){return e.concat(r)}};function zr({from:t,to:e}){return{from:[t],to:e}}var it=class extends w{expected(){return\"true or false\"}validate(e){return typeof e==\"boolean\"}};function Kr(t,e){let r=Object.create(null);for(let n of t){let o=n[e];if(r[o])throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`);r[o]=n}return r}function Hr(t,e){let r=new Map;for(let n of t){let o=n[e];if(r.has(o))throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`);r.set(o,n)}return r}function qr(){let t=Object.create(null);return e=>{let r=JSON.stringify(e);return t[r]?!0:(t[r]=!0,!1)}}function Jr(t,e){let r=[],n=[];for(let o of t)e(o)?r.push(o):n.push(o);return[r,n]}function Xr(t){return t===Math.floor(t)}function Zr(t,e){if(t===e)return 0;let r=typeof t,n=typeof e,o=[\"undefined\",\"object\",\"boolean\",\"number\",\"string\"];return r!==n?o.indexOf(r)-o.indexOf(n):r!==\"string\"?Number(t)-Number(e):t.localeCompare(e)}function Qr(t){return(...e)=>{let r=t(...e);return typeof r==\"string\"?new Error(r):r}}function Tt(t){return t===void 0?{}:t}function St(t){if(typeof t==\"string\")return{text:t};let{text:e,list:r}=t;return zu((e||r)!==void 0,\"Unexpected `expected` result, there should be at least one field.\"),r?{text:e,list:{title:r.title,values:r.values.map(St)}}:{text:e}}function vt(t,e){return t===!0?!0:t===!1?{value:e}:t}function Pt(t,e,r=!1){return t===!1?!1:t===!0?r?!0:[{value:e}]:\"value\"in t?[t]:t.length===0?!1:t}function Gr(t,e){return typeof t==\"string\"||\"key\"in t?{from:e,to:t}:\"from\"in t?{from:t.from,to:t.to}:{from:e,to:t.to}}function st(t,e){return t===void 0?[]:Array.isArray(t)?t.map(r=>Gr(r,e)):[Gr(t,e)]}function Lt(t,e){let r=st(typeof t==\"object\"&&\"redirect\"in t?t.redirect:t,e);return r.length===0?{remain:e,redirect:r}:typeof t==\"object\"&&\"remain\"in t?{remain:t.remain,redirect:r}:{redirect:r}}function zu(t,e){if(!t)throw new Error(e)}var at=class extends w{constructor(e){super(e),this._choices=Hr(e.choices.map(r=>r&&typeof r==\"object\"?r:{value:r}),\"value\")}expected({descriptor:e}){let r=Array.from(this._choices.keys()).map(i=>this._choices.get(i)).filter(({hidden:i})=>!i).map(i=>i.value).sort(Zr).map(e.value),n=r.slice(0,-2),o=r.slice(-2);return{text:n.concat(o.join(\" or \")).join(\", \"),list:{title:\"one of the following values\",values:r}}}validate(e){return this._choices.has(e)}deprecated(e){let r=this._choices.get(e);return r&&r.deprecated?{value:e}:!1}forward(e){let r=this._choices.get(e);return r?r.forward:void 0}redirect(e){let r=this._choices.get(e);return r?r.redirect:void 0}};var Dt=class extends w{expected(){return\"a number\"}validate(e,r){return typeof e==\"number\"}};var ct=class extends Dt{expected(){return\"an integer\"}validate(e,r){return r.normalizeValidateResult(super.validate(e,r),e)===!0&&Xr(e)}};var Le=class extends w{expected(){return\"a string\"}validate(e){return typeof e==\"string\"}};var en=te,tn=rt,rn=$r,nn=Yr;var lt=class{constructor(e,r){let{logger:n=console,loggerPrintWidth:o=80,descriptor:u=en,unknown:i=tn,invalid:s=rn,deprecated:a=nn,missing:D=()=>!1,required:c=()=>!1,preprocess:F=d=>d,postprocess:f=()=>de}=r||{};this._utils={descriptor:u,logger:n||{warn:()=>{}},loggerPrintWidth:o,schemas:Kr(e,\"name\"),normalizeDefaultResult:Tt,normalizeExpectedResult:St,normalizeDeprecatedResult:Pt,normalizeForwardResult:st,normalizeRedirectResult:Lt,normalizeValidateResult:vt},this._unknownHandler=i,this._invalidHandler=Qr(s),this._deprecatedHandler=a,this._identifyMissing=(d,l)=>!(d in l)||D(d,l),this._identifyRequired=c,this._preprocess=F,this._postprocess=f,this.cleanHistory()}cleanHistory(){this._hasDeprecationWarned=qr()}normalize(e){let r={},o=[this._preprocess(e,this._utils)],u=()=>{for(;o.length!==0;){let i=o.shift(),s=this._applyNormalization(i,r);o.push(...s)}};u();for(let i of Object.keys(this._utils.schemas)){let s=this._utils.schemas[i];if(!(i in r)){let a=Tt(s.default(this._utils));\"value\"in a&&o.push({[i]:a.value})}}u();for(let i of Object.keys(this._utils.schemas)){if(!(i in r))continue;let s=this._utils.schemas[i],a=r[i],D=s.postprocess(a,this._utils);D!==de&&(this._applyValidation(D,i,s),r[i]=D)}return this._applyPostprocess(r),this._applyRequiredCheck(r),r}_applyNormalization(e,r){let n=[],{knownKeys:o,unknownKeys:u}=this._partitionOptionKeys(e);for(let i of o){let s=this._utils.schemas[i],a=s.preprocess(e[i],this._utils);this._applyValidation(a,i,s);let D=({from:d,to:l})=>{n.push(typeof l==\"string\"?{[l]:d}:{[l.key]:l.value})},c=({value:d,redirectTo:l})=>{let p=Pt(s.deprecated(d,this._utils),a,!0);if(p!==!1)if(p===!0)this._hasDeprecationWarned(i)||this._utils.logger.warn(this._deprecatedHandler(i,l,this._utils));else for(let{value:m}of p){let E={key:i,value:m};if(!this._hasDeprecationWarned(E)){let h=typeof l==\"string\"?{key:l,value:m}:l;this._utils.logger.warn(this._deprecatedHandler(E,h,this._utils))}}};st(s.forward(a,this._utils),a).forEach(D);let f=Lt(s.redirect(a,this._utils),a);if(f.redirect.forEach(D),\"remain\"in f){let d=f.remain;r[i]=i in r?s.overlap(r[i],d,this._utils):d,c({value:d})}for(let{from:d,to:l}of f.redirect)c({value:d,redirectTo:l})}for(let i of u){let s=e[i];this._applyUnknownHandler(i,s,r,(a,D)=>{n.push({[a]:D})})}return n}_applyRequiredCheck(e){for(let r of Object.keys(this._utils.schemas))if(this._identifyMissing(r,e)&&this._identifyRequired(r))throw this._invalidHandler(r,tt,this._utils)}_partitionOptionKeys(e){let[r,n]=Jr(Object.keys(e).filter(o=>!this._identifyMissing(o,e)),o=>o in this._utils.schemas);return{knownKeys:r,unknownKeys:n}}_applyValidation(e,r,n){let o=vt(n.validate(e,this._utils),e);if(o!==!0)throw this._invalidHandler(r,o.value,this._utils)}_applyUnknownHandler(e,r,n,o){let u=this._unknownHandler(e,r,this._utils);if(u)for(let i of Object.keys(u)){if(this._identifyMissing(i,u))continue;let s=u[i];i in this._utils.schemas?o(i,s):n[i]=s}}_applyPostprocess(e){let r=this._postprocess(e,this._utils);if(r!==de){if(r.delete)for(let n of r.delete)delete e[n];if(r.override){let{knownKeys:n,unknownKeys:o}=this._partitionOptionKeys(r.override);for(let u of n){let i=r.override[u];this._applyValidation(i,u,this._utils.schemas[u]),e[u]=i}for(let u of o){let i=r.override[u];this._applyUnknownHandler(u,i,e,(s,a)=>{let D=this._utils.schemas[s];this._applyValidation(a,s,D),e[s]=a})}}}}};var It;function Ku(t,e,{logger:r=!1,isCLI:n=!1,passThrough:o=!1,FlagSchema:u,descriptor:i}={}){if(n){if(!u)throw new Error(\"'FlagSchema' option is required.\");if(!i)throw new Error(\"'descriptor' option is required.\")}else i=te;let s=o?Array.isArray(o)?(f,d)=>o.includes(f)?{[f]:d}:void 0:(f,d)=>({[f]:d}):(f,d,l)=>{let{_:p,...m}=l.schemas;return rt(f,d,{...l,schemas:m})},a=Hu(e,{isCLI:n,FlagSchema:u}),D=new lt(a,{logger:r,unknown:s,descriptor:i}),c=r!==!1;c&&It&&(D._hasDeprecationWarned=It);let F=D.normalize(t);return c&&(It=D._hasDeprecationWarned),F}function Hu(t,{isCLI:e,FlagSchema:r}){let n=[];e&&n.push(ut.create({name:\"_\"}));for(let o of t)n.push(qu(o,{isCLI:e,optionInfos:t,FlagSchema:r})),o.alias&&e&&n.push(nt.create({name:o.alias,sourceName:o.name}));return n}function qu(t,{isCLI:e,optionInfos:r,FlagSchema:n}){let{name:o}=t,u={name:o},i,s={};switch(t.type){case\"int\":i=ct,e&&(u.preprocess=Number);break;case\"string\":i=Le;break;case\"choice\":i=at,u.choices=t.choices.map(a=>a!=null&&a.redirect?{...a,redirect:{to:{key:t.name,value:a.redirect}}}:a);break;case\"boolean\":i=it;break;case\"flag\":i=n,u.flags=r.flatMap(a=>[a.alias,a.description&&a.name,a.oppositeDescription&&`no-${a.name}`].filter(Boolean));break;case\"path\":i=Le;break;default:throw new Error(`Unexpected type ${t.type}`)}if(t.exception?u.validate=(a,D,c)=>t.exception(a)||D.validate(a,c):u.validate=(a,D,c)=>a===void 0||D.validate(a,c),t.redirect&&(s.redirect=a=>a?{to:{key:t.redirect.option,value:t.redirect.value}}:void 0),t.deprecated&&(s.deprecated=!0),e&&!t.array){let a=u.preprocess||(D=>D);u.preprocess=(D,c,F)=>c.preprocess(a(Array.isArray(D)?y(!1,D,-1):D),F)}return t.array?ot.create({...e?{preprocess:a=>Array.isArray(a)?a:[a]}:{},...s,valueSchema:i.create(u)}):i.create({...u,...s})}var un=Ku;function Rt(t,e){if(!e)throw new Error(\"parserName is required.\");for(let n=t.length-1;n>=0;n--){let o=t[n];if(o.parsers&&Object.prototype.hasOwnProperty.call(o.parsers,e))return o}let r=`Couldn't resolve parser \"${e}\".`;throw r+=\" Plugins must be explicitly added to the standalone bundle.\",new Se(r)}function on(t,e){if(!e)throw new Error(\"astFormat is required.\");for(let n=t.length-1;n>=0;n--){let o=t[n];if(o.printers&&Object.prototype.hasOwnProperty.call(o.printers,e))return o}let r=`Couldn't find plugin for AST format \"${e}\".`;throw r+=\" Plugins must be explicitly added to the standalone bundle.\",new Se(r)}function ft({plugins:t,parser:e}){let r=Rt(t,e);return Yt(r,e)}function Yt(t,e){let r=t.parsers[e];return typeof r==\"function\"?r():r}function sn(t,e){let r=t.printers[e];return typeof r==\"function\"?r():r}var an={astFormat:\"estree\",printer:{},originalText:void 0,locStart:null,locEnd:null};async function Ju(t,e={}){var F;let r={...t};if(!r.parser)if(r.filepath){if(r.parser=Lr(r,{physicalFile:r.filepath}),!r.parser)throw new ve(`No parser could be inferred for file \"${r.filepath}\".`)}else throw new ve(\"No parser and no file path given, couldn't infer a parser.\");let n=et({plugins:t.plugins,showDeprecated:!0}).options,o={...an,...Object.fromEntries(n.filter(f=>f.default!==void 0).map(f=>[f.name,f.default]))},u=Rt(r.plugins,r.parser),i=await Yt(u,r.parser);r.astFormat=i.astFormat,r.locEnd=i.locEnd,r.locStart=i.locStart;let s=(F=u.printers)!=null&&F[i.astFormat]?u:on(r.plugins,i.astFormat),a=await sn(s,i.astFormat);r.printer=a;let D=s.defaultOptions?Object.fromEntries(Object.entries(s.defaultOptions).filter(([,f])=>f!==void 0)):{},c={...o,...D};for(let[f,d]of Object.entries(c))(r[f]===null||r[f]===void 0)&&(r[f]=d);return r.parser===\"json\"&&(r.trailingComma=\"none\"),un(r,n,{passThrough:Object.keys(an),...e})}var re=Ju;var Dn=new Set([\"tokens\",\"comments\",\"parent\",\"enclosingNode\",\"precedingNode\",\"followingNode\"]),Xu=t=>Object.keys(t).filter(e=>!Dn.has(e));function Zu(t){return t?e=>t(e,Dn):Xu}var H=Zu;function Qu(t,e){let{printer:{massageAstNode:r,getVisitorKeys:n}}=e;if(!r)return t;let o=H(n),u=r.ignoredProperties??new Set;return i(t);function i(s,a){if(!(s!==null&&typeof s==\"object\"))return s;if(Array.isArray(s))return s.map(f=>i(f,a)).filter(Boolean);let D={},c=new Set(o(s));for(let f in s)!Object.prototype.hasOwnProperty.call(s,f)||u.has(f)||(c.has(f)?D[f]=i(s[f],s):D[f]=s[f]);let F=r(s,D,a);if(F!==null)return F??D}}var cn=Qu;var Cn=Ce(hn(),1);async function so(t,e){let r=await ft(e),n=r.preprocess?r.preprocess(t,e):t;e.originalText=n;let o;try{o=await r.parse(n,e,e)}catch(u){ao(u,t)}return{text:n,ast:o}}function ao(t,e){let{loc:r}=t;if(r){let n=(0,Cn.codeFrameColumns)(e,r,{highlightCode:!0});throw t.message+=`\n`+n,t.codeFrame=n,t}throw t}var ae=so;var Ie,$t,Fe,dt,Vt=class{constructor(e){Ct(this,Ie);Ct(this,Fe);this.stack=[e]}get key(){let{stack:e,siblings:r}=this;return y(!1,e,r===null?-2:-4)??null}get index(){return this.siblings===null?null:y(!1,this.stack,-2)}get node(){return y(!1,this.stack,-1)}get parent(){return this.getNode(1)}get grandparent(){return this.getNode(2)}get isInArray(){return this.siblings!==null}get siblings(){let{stack:e}=this,r=y(!1,e,-3);return Array.isArray(r)?r:null}get next(){let{siblings:e}=this;return e===null?null:e[this.index+1]}get previous(){let{siblings:e}=this;return e===null?null:e[this.index-1]}get isFirst(){return this.index===0}get isLast(){let{siblings:e,index:r}=this;return e!==null&&r===e.length-1}get isRoot(){return this.stack.length===1}get root(){return this.stack[0]}get ancestors(){return[...ce(this,Fe,dt).call(this)]}getName(){let{stack:e}=this,{length:r}=e;return r>1?y(!1,e,-2):null}getValue(){return y(!1,this.stack,-1)}getNode(e=0){let r=ce(this,Ie,$t).call(this,e);return r===-1?null:this.stack[r]}getParentNode(e=0){return this.getNode(e+1)}call(e,...r){let{stack:n}=this,{length:o}=n,u=y(!1,n,-1);for(let i of r)u=u[i],n.push(i,u);try{return e(this)}finally{n.length=o}}callParent(e,r=0){let n=ce(this,Ie,$t).call(this,r+1),o=this.stack.splice(n+1);try{return e(this)}finally{this.stack.push(...o)}}each(e,...r){let{stack:n}=this,{length:o}=n,u=y(!1,n,-1);for(let i of r)u=u[i],n.push(i,u);try{for(let i=0;i{n[u]=e(o,u,i)},...r),n}match(...e){let r=this.stack.length-1,n=null,o=this.stack[r--];for(let u of e){if(o===void 0)return!1;let i=null;if(typeof n==\"number\"&&(i=n,n=this.stack[r--],o=this.stack[r--]),u&&!u(o,n,i))return!1;n=this.stack[r--],o=this.stack[r--]}return!0}findAncestor(e){for(let r of ce(this,Fe,dt).call(this))if(e(r))return r}hasAncestor(e){for(let r of ce(this,Fe,dt).call(this))if(e(r))return!0;return!1}};Ie=new WeakSet,$t=function(e){let{stack:r}=this;for(let n=r.length-1;n>=0;n-=2)if(!Array.isArray(r[n])&&--e<0)return n;return-1},Fe=new WeakSet,dt=function*(){let{stack:e}=this;for(let r=e.length-3;r>=0;r-=2){let n=e[r];Array.isArray(n)||(yield n)}};var gn=Vt;var yn=new Proxy(()=>{},{get:()=>yn}),Re=yn;function me(t){return(e,r,n)=>{let o=!!(n!=null&&n.backwards);if(r===!1)return!1;let{length:u}=e,i=r;for(;i>=0&&i0}var Ut=lo;function fo(t){return t!==null&&typeof t==\"object\"}var _n=fo;function*Mt(t,e){let{getVisitorKeys:r,filter:n=()=>!0}=e,o=u=>_n(u)&&n(u);for(let u of r(t)){let i=t[u];if(Array.isArray(i))for(let s of i)o(s)&&(yield s);else o(i)&&(yield i)}}function*An(t,e){let r=[t];for(let n=0;n20&&(r=r.slice(0,19)+\"\\u2026\"),e+(r?\" \"+r:\"\")}function Wt(t,e){(t.comments??(t.comments=[])).push(e),e.printed=!1,e.nodeDescription=po(t)}function ne(t,e){e.leading=!0,e.trailing=!1,Wt(t,e)}function X(t,e,r){e.leading=!1,e.trailing=!1,r&&(e.marker=r),Wt(t,e)}function ue(t,e){e.leading=!1,e.trailing=!0,Wt(t,e)}var zt=new WeakMap;function Et(t,e){if(zt.has(t))return zt.get(t);let{printer:{getCommentChildNodes:r,canAttachComment:n,getVisitorKeys:o},locStart:u,locEnd:i}=e;if(!n)return[];let s=((r==null?void 0:r(t,e))??[...Mt(t,{getVisitorKeys:H(o)})]).flatMap(a=>n(a)?[a]:Et(a,e));return s.sort((a,D)=>u(a)-u(D)||i(a)-i(D)),zt.set(t,s),s}function kn(t,e,r,n){let{locStart:o,locEnd:u}=r,i=o(e),s=u(e),a=Et(t,r),D,c,F=0,f=a.length;for(;F>1,l=a[d],p=o(l),m=u(l);if(p<=i&&s<=m)return kn(l,e,r,l);if(m<=i){D=l,F=d+1;continue}if(s<=p){c=l,f=d;continue}throw new Error(\"Comment location overlaps with node location\")}if((n==null?void 0:n.type)===\"TemplateLiteral\"){let{quasis:d}=n,l=Kt(d,e,r);D&&Kt(d,D,r)!==l&&(D=null),c&&Kt(d,c,r)!==l&&(c=null)}return{enclosingNode:n,precedingNode:D,followingNode:c}}var Gt=()=>!1;function bn(t,e){let{comments:r}=t;if(delete t.comments,!Ut(r)||!e.printer.canAttachComment)return;let n=[],{locStart:o,locEnd:u,printer:{experimentalFeatures:{avoidAstMutation:i=!1}={},handleComments:s={}},originalText:a}=e,{ownLine:D=Gt,endOfLine:c=Gt,remaining:F=Gt}=s,f=r.map((d,l)=>({...kn(t,d,e),comment:d,text:a,options:e,ast:t,isLastComment:r.length-1===l}));for(let[d,l]of f.entries()){let{comment:p,precedingNode:m,enclosingNode:E,followingNode:h,text:g,options:C,ast:_,isLastComment:Z}=l;if(C.parser===\"json\"||C.parser===\"json5\"||C.parser===\"__js_expression\"||C.parser===\"__ts_expression\"||C.parser===\"__vue_expression\"||C.parser===\"__vue_ts_expression\"){if(o(p)-o(_)<=0){ne(_,p);continue}if(u(p)-u(_)>=0){ue(_,p);continue}}let $;if(i?$=[l]:(p.enclosingNode=E,p.precedingNode=m,p.followingNode=h,$=[p,g,C,_,Z]),Fo(g,C,f,d))p.placement=\"ownLine\",D(...$)||(h?ne(h,p):m?ue(m,p):E?X(E,p):X(_,p));else if(mo(g,C,f,d))p.placement=\"endOfLine\",c(...$)||(m?ue(m,p):h?ne(h,p):E?X(E,p):X(_,p));else if(p.placement=\"remaining\",!F(...$))if(m&&h){let Q=n.length;Q>0&&n[Q-1].followingNode!==h&&Bn(n,C),n.push(l)}else m?ue(m,p):h?ne(h,p):E?X(E,p):X(_,p)}if(Bn(n,e),!i)for(let d of r)delete d.precedingNode,delete d.enclosingNode,delete d.followingNode}var wn=t=>!/[\\S\\n\\u2028\\u2029]/.test(t);function Fo(t,e,r,n){let{comment:o,precedingNode:u}=r[n],{locStart:i,locEnd:s}=e,a=i(o);if(u)for(let D=n-1;D>=0;D--){let{comment:c,precedingNode:F}=r[D];if(F!==u||!wn(t.slice(s(c),a)))break;a=i(c)}return V(t,a,{backwards:!0})}function mo(t,e,r,n){let{comment:o,followingNode:u}=r[n],{locStart:i,locEnd:s}=e,a=s(o);if(u)for(let D=n+1;D0;--i){let{comment:D,precedingNode:c,followingNode:F}=t[i-1];Re.strictEqual(c,n),Re.strictEqual(F,o);let f=e.originalText.slice(e.locEnd(D),u);if(((a=(s=e.printer).isGap)==null?void 0:a.call(s,f,e))??/^[\\s(]*$/.test(f))u=e.locStart(D);else break}for(let[D,{comment:c}]of t.entries())D1&&D.comments.sort((c,F)=>e.locStart(c)-e.locStart(F));t.length=0}function Kt(t,e,r){let n=r.locStart(e)-1;for(let o=1;o!n.has(a)).length===0)return{leading:\"\",trailing:\"\"};let u=[],i=[],s;return t.each(()=>{let a=t.node;if(n!=null&&n.has(a))return;let{leading:D,trailing:c}=a;D?u.push(ho(t,e)):c&&(s=Co(t,e,s),i.push(s.doc))},\"comments\"),{leading:u,trailing:i}}function Nn(t,e,r){let{leading:n,trailing:o}=go(t,r);return!n&&!o?e:Ze(e,u=>[n,u,o])}function Tn(t){let{[Symbol.for(\"comments\")]:e,[Symbol.for(\"printedComments\")]:r}=t;for(let n of e){if(!n.printed&&!r.has(n))throw new Error('Comment \"'+n.value.trim()+'\" was not printed. Please report this error!');delete n.printed}}async function Sn(t,e,r,n,o){let{embeddedLanguageFormatting:u,printer:{embed:i,hasPrettierIgnore:s=()=>!1,getVisitorKeys:a}}=r;if(!i||u!==\"auto\")return;if(i.length>2)throw new Error(\"printer.embed has too many parameters. The API changed in Prettier v3. Please update your plugin. See https://prettier.io/docs/en/plugins.html#optional-embed\");let D=H(i.getVisitorKeys??a),c=[];d();let F=t.stack;for(let{print:l,node:p,pathStack:m}of c)try{t.stack=m;let E=await l(f,e,t,r);E&&o.set(p,E)}catch(E){if(globalThis.PRETTIER_DEBUG)throw E}t.stack=F;function f(l,p){return yo(l,p,r,n)}function d(){let{node:l}=t;if(l===null||typeof l!=\"object\"||s(t))return;for(let m of D(l))Array.isArray(l[m])?t.each(d,m):t.call(d,m);let p=i(t,r);if(p){if(typeof p==\"function\"){c.push({print:p,node:l,pathStack:[...t.stack]});return}o.set(l,p)}}}async function yo(t,e,r,n){let o=await re({...r,...e,parentParser:r.parser,originalText:t},{passThrough:!0}),{ast:u}=await ae(t,o),i=await n(u,o);return Xe(i)}function xo(t){return()=>{}}var vn=xo;function _o(t,e){let{originalText:r,[Symbol.for(\"comments\")]:n,locStart:o,locEnd:u,[Symbol.for(\"printedComments\")]:i}=e,{node:s}=t,a=o(s),D=u(s);for(let c of n)o(c)>=a&&u(c)<=D&&i.add(c);return r.slice(a,D)}var Pn=_o;async function je(t,e){({ast:t}=await Ht(t,e));let r=new Map,n=new gn(t),o=vn(e),u=new Map;await Sn(n,s,e,je,u);let i=await Ln(n,e,s,void 0,u);return Tn(e),i;function s(D,c){return D===void 0||D===n?a(c):Array.isArray(D)?n.call(()=>a(c),...D):n.call(()=>a(c),D)}function a(D){o(n);let c=n.node;if(c==null)return\"\";let F=c&&typeof c==\"object\"&&D===void 0;if(F&&r.has(c))return r.get(c);let f=Ln(n,e,s,D,u);return F&&r.set(c,f),f}}function Ln(t,e,r,n,o){var a;let{node:u}=t,{printer:i}=e,s;return(a=i.hasPrettierIgnore)!=null&&a.call(i,t)?s=Pn(t,e):o.has(u)?s=o.get(u):s=i.print(t,e,r,n),u===e.cursorNode&&(s=Ze(s,D=>[Be,D,Be])),i.printComment&&(!i.willPrintOwnComments||!i.willPrintOwnComments(t,e))&&(s=Nn(t,s,e)),s}async function Ht(t,e){let r=t.comments??[];e[Symbol.for(\"comments\")]=r,e[Symbol.for(\"tokens\")]=t.tokens??[],e[Symbol.for(\"printedComments\")]=new Set,bn(t,e);let{printer:{preprocess:n}}=e;return t=n?await n(t,e):t,{ast:t,comments:r}}var Ao=({parser:t})=>t===\"json\"||t===\"json5\"||t===\"json-stringify\";function Bo(t,e){let r=[t.node,...t.parentNodes],n=new Set([e.node,...e.parentNodes]);return r.find(o=>Yn.has(o.type)&&n.has(o))}function In(t){let e=t.length-1;for(;;){let r=t[e];if((r==null?void 0:r.type)===\"Program\"||(r==null?void 0:r.type)===\"File\")e--;else break}return t.slice(0,e+1)}function ko(t,e,{locStart:r,locEnd:n}){let o=t.node,u=e.node;if(o===u)return{startNode:o,endNode:u};let i=r(t.node);for(let a of In(e.parentNodes))if(r(a)>=i)u=a;else break;let s=n(e.node);for(let a of In(t.parentNodes)){if(n(a)<=s)o=a;else break;if(o===u)break}return{startNode:o,endNode:u}}function qt(t,e,r,n,o=[],u){let{locStart:i,locEnd:s}=r,a=i(t),D=s(t);if(!(e>D||en);let s=t.slice(n,o).search(/\\S/),a=s===-1;if(!a)for(n+=s;o>n&&!/\\S/.test(t[o-1]);--o);let D=qt(r,n,e,(d,l)=>Rn(e,d,l),[],\"rangeStart\"),c=a?D:qt(r,o,e,d=>Rn(e,d),[],\"rangeEnd\");if(!D||!c)return{rangeStart:0,rangeEnd:0};let F,f;if(Ao(e)){let d=Bo(D,c);F=d,f=d}else({startNode:F,endNode:f}=ko(D,c,e));return{rangeStart:Math.min(u(F),u(f)),rangeEnd:Math.max(i(F),i(f))}}function Oo(t,e){let{cursorOffset:r,locStart:n,locEnd:o}=e,u=H(e.printer.getVisitorKeys),i=a=>n(a)<=r&&o(a)>=r,s=t;for(let a of An(t,{getVisitorKeys:u,filter:i}))s=a;return s}var Vn=Oo;var zn=\"\\uFEFF\",$n=Symbol(\"cursor\");async function Gn(t,e,r=0){if(!t||t.trim().length===0)return{formatted:\"\",cursorOffset:-1,comments:[]};let{ast:n,text:o}=await ae(t,e);e.cursorOffset>=0&&(e.cursorNode=Vn(n,e));let u=await je(n,e,r);r>0&&(u=qe([G,u],r,e.tabWidth));let i=fe(u,e);if(r>0){let a=i.formatted.trim();i.cursorNodeStart!==void 0&&(i.cursorNodeStart-=i.formatted.indexOf(a)),i.formatted=a+be(e.endOfLine)}let s=e[Symbol.for(\"comments\")];if(e.cursorOffset>=0){let a,D,c,F,f;if(e.cursorNode&&i.cursorNodeText?(a=e.locStart(e.cursorNode),D=o.slice(a,e.locEnd(e.cursorNode)),c=e.cursorOffset-a,F=i.cursorNodeStart,f=i.cursorNodeText):(a=0,D=o,c=e.cursorOffset,F=0,f=i.formatted),D===f)return{formatted:i.formatted,cursorOffset:F+c,comments:s};let d=D.split(\"\");d.splice(c,0,$n);let l=f.split(\"\"),p=(0,Wn.diffArrays)(d,l),m=F;for(let E of p)if(E.removed){if(E.value.includes($n))break}else m+=E.count;return{formatted:i.formatted,cursorOffset:m,comments:s}}return{formatted:i.formatted,cursorOffset:-1,comments:s}}async function No(t,e){let{ast:r,text:n}=await ae(t,e),{rangeStart:o,rangeEnd:u}=jn(n,e,r),i=n.slice(o,u),s=Math.min(o,n.lastIndexOf(`\n`,o)+1),a=n.slice(s,o).match(/^\\s*/)[0],D=pe(a,e.tabWidth),c=await Gn(i,{...e,rangeStart:0,rangeEnd:Number.POSITIVE_INFINITY,cursorOffset:e.cursorOffset>o&&e.cursorOffset<=u?e.cursorOffset-o:-1,endOfLine:\"lf\"},D),F=c.formatted.trimEnd(),{cursorOffset:f}=e;f>u?f+=F.length-i.length:c.cursorOffset>=0&&(f=c.cursorOffset+o);let d=n.slice(0,o)+F+n.slice(u);if(e.endOfLine!==\"lf\"){let l=be(e.endOfLine);f>=0&&l===`\\r\n`&&(f+=At(d.slice(0,f),`\n`)),d=ee(!1,d,`\n`,l)}return{formatted:d,cursorOffset:f,comments:c.comments}}function Jt(t,e,r){return typeof e!=\"number\"||Number.isNaN(e)||e<0||e>t.length?r:e}function Un(t,e){let{cursorOffset:r,rangeStart:n,rangeEnd:o}=e;return r=Jt(t,r,-1),n=Jt(t,n,0),o=Jt(t,o,t.length),{...e,cursorOffset:r,rangeStart:n,rangeEnd:o}}function Kn(t,e){let{cursorOffset:r,rangeStart:n,rangeEnd:o,endOfLine:u}=Un(t,e),i=t.charAt(0)===zn;if(i&&(t=t.slice(1),r--,n--,o--),u===\"auto\"&&(u=Cr(t)),t.includes(\"\\r\")){let s=a=>At(t.slice(0,Math.max(a,0)),`\\r\n`);r-=s(r),n-=s(n),o-=s(o),t=gr(t)}return{hasBOM:i,text:t,options:Un(t,{...e,cursorOffset:r,rangeStart:n,rangeEnd:o,endOfLine:u})}}async function Mn(t,e){let r=await ft(e);return!r.hasPragma||r.hasPragma(t)}async function Xt(t,e){let{hasBOM:r,text:n,options:o}=Kn(t,await re(e));if(o.rangeStart>=o.rangeEnd&&n!==\"\"||o.requirePragma&&!await Mn(n,o))return{formatted:t,cursorOffset:e.cursorOffset,comments:[]};let u;return o.rangeStart>0||o.rangeEnd=0&&u.cursorOffset++),u}async function Hn(t,e,r){let{text:n,options:o}=Kn(t,await re(e)),u=await ae(n,o);return r&&(r.preprocessForPrint&&(u.ast=await Ht(u.ast,o)),r.massage&&(u.ast=cn(u.ast,o))),u}async function qn(t,e){e=await re(e);let r=await je(t,e);return fe(r,e)}async function Jn(t,e){let r=Sr(t),{formatted:n}=await Xt(r,{...e,parser:\"__js_expression\"});return n}async function Xn(t,e){e=await re(e);let{ast:r}=await ae(t,e);return je(r,e)}async function Zn(t,e){return fe(t,await re(e))}var Qt={};Me(Qt,{addDanglingComment:()=>X,addLeadingComment:()=>ne,addTrailingComment:()=>ue,getAlignmentSize:()=>pe,getIndentSize:()=>eu,getMaxContinuousCount:()=>Qn,getNextNonSpaceNonCommentCharacter:()=>nu,getNextNonSpaceNonCommentCharacterIndex:()=>Mo,getStringWidth:()=>we,hasNewline:()=>V,hasNewlineInRange:()=>tu,hasSpaces:()=>ru,isNextLineEmpty:()=>Ko,isNextLineEmptyAfterIndex:()=>ht,isPreviousLineEmpty:()=>zo,makeString:()=>uu,skip:()=>me,skipEverythingButNewLine:()=>mt,skipInlineComment:()=>Ee,skipNewline:()=>Y,skipSpaces:()=>N,skipToLineEnd:()=>Ft,skipTrailingComment:()=>he,skipWhitespace:()=>xn});function So(t,e){if(e===!1)return!1;if(t.charAt(e)===\"/\"&&t.charAt(e+1)===\"*\"){for(let r=e+2;rMath.max(n,o.length/e.length),0)}var Qn=Io;function Ro(t,e){let r=t.lastIndexOf(`\n`);return r===-1?0:pe(t.slice(r+1).match(/^[\\t ]*/)[0],e)}var eu=Ro;function Yo(t,e,r){for(let n=e;ns===n?s:a===e?\"\\\\\"+a:a||(r&&/^[^\\n\\r\"'0-7\\\\bfnrt-vx\\u2028\\u2029]$/.test(s)?s:\"\\\\\"+s));return e+u+e}var uu=$o;function Uo(t,e,r){return Ve(t,r(e))}function Mo(t,e){return arguments.length===2||typeof e==\"number\"?Ve(t,e):Uo(...arguments)}function Wo(t,e,r){return Ye(t,r(e))}function zo(t,e){return arguments.length===2||typeof e==\"number\"?Ye(t,e):Wo(...arguments)}function Go(t,e,r){return ht(t,r(e))}function Ko(t,e){return arguments.length===2||typeof e==\"number\"?ht(t,e):Go(...arguments)}var er={};Me(er,{builders:()=>Ho,printer:()=>qo,utils:()=>Jo});var Ho={join:ke,line:Ke,softline:Er,hardline:G,literalline:He,group:xt,conditionalGroup:fr,fill:Ge,lineSuffix:_e,lineSuffixBoundary:Fr,cursor:Be,breakParent:le,ifBreak:pr,trim:mr,indent:ie,indentIfBreak:dr,align:oe,addAlignmentToDoc:qe,markAsRoot:cr,dedentToRoot:Dr,dedent:lr,hardlineWithoutBreakParent:Ae,literallineWithoutBreakParent:_t,label:hr,concat:t=>t},qo={printDocToString:fe},Jo={willBreak:kr,traverseDoc:xe,findInDoc:Je,mapDoc:Ne,removeLines:wr,stripTrailingHardline:Xe,replaceEndOfLine:Or,canBreak:Nr};var ou=\"3.0.3\";function De(t,e=1){return async(...r)=>{let n=r[e]??{},o=n.plugins??[];return r[e]={...n,plugins:Array.isArray(o)?o:Object.values(o)},t(...r)}}var iu=De(Xt);async function su(t,e){let{formatted:r}=await iu(t,{...e,cursorOffset:-1});return r}async function Xo(t,e){return await su(t,e)===t}var Zo=De(et,0),Qo={parse:De(Hn),formatAST:De(qn),formatDoc:De(Jn),printToDoc:De(Xn),printDocToString:De(Zn)};var Uc=tr;export{Qo as __debug,Xo as check,Uc as default,er as doc,su as format,iu as formatWithCursor,Zo as getSupportInfo,Qt as util,ou as version};\n","import * as Prettier from \"prettier/standalone\";\nimport * as prettierPluginLatex from \"./prettier-plugin-latex\";\n\n/**\n * Format `source` LaTeX code using Prettier to format/render\n * the code.\n *\n * @export\n * @param [source=\"\"] - code to be formatted\n * @param [options={}] - Prettier options object (you can set `printWidth` here)\n * @returns formatted code\n */\nexport async function printPrettier(source = \"\", options = {}) {\n return await Prettier.format(source, {\n printWidth: 80,\n useTabs: true,\n ...options,\n parser: \"latex-parser\",\n plugins: [prettierPluginLatex],\n });\n}\n\nexport { Prettier };\n"],"names":["Prettier.format","prettierPluginLatex"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/node_modules/prettier-plugin-latex/dist/standalone.mjs b/node_modules/prettier-plugin-latex/dist/standalone.mjs new file mode 100644 index 0000000..9b51dc4 --- /dev/null +++ b/node_modules/prettier-plugin-latex/dist/standalone.mjs @@ -0,0 +1,2459 @@ +var __defProp = Object.defineProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +import { p as prettierPluginLatex } from "./prettier-plugin-latex-9db821d0.mjs"; +var au = Object.create; +var $e = Object.defineProperty; +var Du = Object.getOwnPropertyDescriptor; +var cu = Object.getOwnPropertyNames; +var lu = Object.getPrototypeOf, fu = Object.prototype.hasOwnProperty; +var pu = (t, e) => () => (t && (e = t(t = 0)), e); +var Ue = (t, e) => () => (e || t((e = { exports: {} }).exports, e), e.exports), Me = (t, e) => { + for (var r in e) + $e(t, r, { get: e[r], enumerable: true }); +}, nr = (t, e, r, n) => { + if (e && typeof e == "object" || typeof e == "function") + for (let o of cu(e)) + !fu.call(t, o) && o !== r && $e(t, o, { get: () => e[o], enumerable: !(n = Du(e, o)) || n.enumerable }); + return t; +}; +var Ce = (t, e, r) => (r = t != null ? au(lu(t)) : {}, nr(e || !t || !t.__esModule ? $e(r, "default", { value: t, enumerable: true }) : r, t)), du = (t) => nr($e({}, "__esModule", { value: true }), t); +var Fu = (t, e, r) => { + if (!e.has(t)) + throw TypeError("Cannot " + r); +}; +var Ct = (t, e, r) => { + if (e.has(t)) + throw TypeError("Cannot add the same private member more than once"); + e instanceof WeakSet ? e.add(t) : e.set(t, r); +}; +var ce = (t, e, r) => (Fu(t, e, "access private method"), r); +var or = Ue((gt) => { + Object.defineProperty(gt, "__esModule", { value: true }); + gt.default = ur; + function ur() { + } + ur.prototype = { diff: function(e, r) { + var n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, o = n.callback; + typeof n == "function" && (o = n, n = {}), this.options = n; + var u = this; + function i(p) { + return o ? (setTimeout(function() { + o(void 0, p); + }, 0), true) : p; + } + e = this.castInput(e), r = this.castInput(r), e = this.removeEmpty(this.tokenize(e)), r = this.removeEmpty(this.tokenize(r)); + var s = r.length, a = e.length, D = 1, c = s + a; + n.maxEditLength && (c = Math.min(c, n.maxEditLength)); + var F = [{ newPos: -1, components: [] }], f = this.extractCommon(F[0], r, e, 0); + if (F[0].newPos + 1 >= s && f + 1 >= a) + return i([{ value: this.join(r), count: r.length }]); + function d() { + for (var p = -1 * D; p <= D; p += 2) { + var m = void 0, E = F[p - 1], h = F[p + 1], g = (h ? h.newPos : 0) - p; + E && (F[p - 1] = void 0); + var C = E && E.newPos + 1 < s, _ = h && 0 <= g && g < a; + if (!C && !_) { + F[p] = void 0; + continue; + } + if (!C || _ && E.newPos < h.newPos ? (m = hu(h), u.pushComponent(m.components, void 0, true)) : (m = E, m.newPos++, u.pushComponent(m.components, true, void 0)), g = u.extractCommon(m, r, e, p), m.newPos + 1 >= s && g + 1 >= a) + return i(Eu(u, m.components, r, e, u.useLongestToken)); + F[p] = m; + } + D++; + } + if (o) + (function p() { + setTimeout(function() { + if (D > c) + return o(); + d() || p(); + }, 0); + })(); + else + for (; D <= c; ) { + var l = d(); + if (l) + return l; + } + }, pushComponent: function(e, r, n) { + var o = e[e.length - 1]; + o && o.added === r && o.removed === n ? e[e.length - 1] = { count: o.count + 1, added: r, removed: n } : e.push({ count: 1, added: r, removed: n }); + }, extractCommon: function(e, r, n, o) { + for (var u = r.length, i = n.length, s = e.newPos, a = s - o, D = 0; s + 1 < u && a + 1 < i && this.equals(r[s + 1], n[a + 1]); ) + s++, a++, D++; + return D && e.components.push({ count: D }), e.newPos = s, a; + }, equals: function(e, r) { + return this.options.comparator ? this.options.comparator(e, r) : e === r || this.options.ignoreCase && e.toLowerCase() === r.toLowerCase(); + }, removeEmpty: function(e) { + for (var r = [], n = 0; n < e.length; n++) + e[n] && r.push(e[n]); + return r; + }, castInput: function(e) { + return e; + }, tokenize: function(e) { + return e.split(""); + }, join: function(e) { + return e.join(""); + } }; + function Eu(t, e, r, n, o) { + for (var u = 0, i = e.length, s = 0, a = 0; u < i; u++) { + var D = e[u]; + if (D.removed) { + if (D.value = t.join(n.slice(a, a + D.count)), a += D.count, u && e[u - 1].added) { + var F = e[u - 1]; + e[u - 1] = e[u], e[u] = F; + } + } else { + if (!D.added && o) { + var c = r.slice(s, s + D.count); + c = c.map(function(d, l) { + var p = n[a + l]; + return p.length > d.length ? p : d; + }), D.value = t.join(c); + } else + D.value = t.join(r.slice(s, s + D.count)); + s += D.count, D.added || (a += D.count); + } + } + var f = e[i - 1]; + return i > 1 && typeof f.value == "string" && (f.added || f.removed) && t.equals("", f.value) && (e[i - 2].value += f.value, e.pop()), e; + } + function hu(t) { + return { newPos: t.newPos, components: t.components.slice(0) }; + } +}); +var ir = Ue((ye) => { + Object.defineProperty(ye, "__esModule", { value: true }); + ye.diffArrays = yu; + ye.arrayDiff = void 0; + var Cu = gu(or()); + function gu(t) { + return t && t.__esModule ? t : { default: t }; + } + var ge = new Cu.default(); + ye.arrayDiff = ge; + ge.tokenize = function(t) { + return t.slice(); + }; + ge.join = ge.removeEmpty = function(t) { + return t; + }; + function yu(t, e, r) { + return ge.diff(t, e, r); + } +}); +var Pe = Ue((ss, Rr) => { + var Ir = new Proxy(String, { get: () => Ir }); + Rr.exports = Ir; +}); +var ln = {}; +Me(ln, { default: () => to, shouldHighlight: () => eo }); +var eo, to, fn = pu(() => { + eo = () => false, to = String; +}); +var hn = Ue((pt) => { + Object.defineProperty(pt, "__esModule", { value: true }); + pt.codeFrameColumns = En; + pt.default = io; + var pn = (fn(), du(ln)), ro = Pe(), dn = ro, jt; + function no(t) { + if (t) { + return jt != null || (jt = new dn.constructor({ enabled: true, level: 1 })), jt; + } + return dn; + } + var Fn = false; + function uo(t) { + return { gutter: t.grey, marker: t.red.bold, message: t.red.bold }; + } + var mn = /\r\n|[\n\r\u2028\u2029]/; + function oo(t, e, r) { + let n = Object.assign({ column: 0, line: -1 }, t.start), o = Object.assign({}, n, t.end), { linesAbove: u = 2, linesBelow: i = 3 } = r || {}, s = n.line, a = n.column, D = o.line, c = o.column, F = Math.max(s - (u + 1), 0), f = Math.min(e.length, D + i); + s === -1 && (F = 0), D === -1 && (f = e.length); + let d = D - s, l = {}; + if (d) + for (let p = 0; p <= d; p++) { + let m = p + s; + if (!a) + l[m] = true; + else if (p === 0) { + let E = e[m - 1].length; + l[m] = [a, E - a + 1]; + } else if (p === d) + l[m] = [0, c]; + else { + let E = e[m - p].length; + l[m] = [0, E]; + } + } + else + a === c ? a ? l[s] = [a, 0] : l[s] = true : l[s] = [a, c - a]; + return { start: F, end: f, markerLines: l }; + } + function En(t, e, r = {}) { + let n = (r.highlightCode || r.forceColor) && (0, pn.shouldHighlight)(r), o = no(r.forceColor), u = uo(o), i = (p, m) => n ? p(m) : m, s = t.split(mn), { start: a, end: D, markerLines: c } = oo(e, s, r), F = e.start && typeof e.start.column == "number", f = String(D).length, l = (n ? (0, pn.default)(t, r) : t).split(mn, D).slice(a, D).map((p, m) => { + let E = a + 1 + m, g = ` ${` ${E}`.slice(-f)} |`, C = c[E], _ = !c[E + 1]; + if (C) { + let Z = ""; + if (Array.isArray(C)) { + let $ = p.slice(0, Math.max(C[0] - 1, 0)).replace(/[^\t]/g, " "), Q = C[1] || 1; + Z = [` + `, i(u.gutter, g.replace(/\d/g, " ")), " ", $, i(u.marker, "^").repeat(Q)].join(""), _ && r.message && (Z += " " + i(u.message, r.message)); + } + return [i(u.marker, ">"), i(u.gutter, g), p.length > 0 ? ` ${p}` : "", Z].join(""); + } else + return ` ${i(u.gutter, g)}${p.length > 0 ? ` ${p}` : ""}`; + }).join(` +`); + return r.message && !F && (l = `${" ".repeat(f + 1)}${r.message} +${l}`), n ? o.reset(l) : l; + } + function io(t, e, r, n = {}) { + if (!Fn) { + Fn = true; + let u = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; + { + let i = new Error(u); + i.name = "DeprecationWarning", console.warn(new Error(u)); + } + } + return r = Math.max(r, 0), En(t, { start: { column: r, line: e } }, n); + } +}); +var tr = {}; +Me(tr, { __debug: () => Qo, check: () => Xo, doc: () => er, format: () => su, formatWithCursor: () => iu, getSupportInfo: () => Zo, util: () => Qt, version: () => ou }); +var mu = (t, e, r, n) => { + if (!(t && e == null)) + return e.replaceAll ? e.replaceAll(r, n) : r.global ? e.replace(r, n) : e.split(r).join(n); +}, ee = mu; +var Wn = Ce(ir(), 1); +var U = "string", j = "array", M = "cursor", T = "indent", S = "align", v = "trim", A = "group", k = "fill", B = "if-break", P = "indent-if-break", L = "line-suffix", I = "line-suffix-boundary", x = "line", O = "label", b = "break-parent", We = /* @__PURE__ */ new Set([M, T, S, v, A, k, B, P, L, I, x, O, b]); +function xu(t) { + if (typeof t == "string") + return U; + if (Array.isArray(t)) + return j; + if (!t) + return; + let { type: e } = t; + if (We.has(e)) + return e; +} +var W = xu; +var _u = (t) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(t); +function Au(t) { + let e = t === null ? "null" : typeof t; + if (e !== "string" && e !== "object") + return `Unexpected doc '${e}', +Expected it to be 'string' or 'object'.`; + if (W(t)) + throw new Error("doc is valid."); + let r = Object.prototype.toString.call(t); + if (r !== "[object Object]") + return `Unexpected doc '${r}'.`; + let n = _u([...We].map((o) => `'${o}'`)); + return `Unexpected doc.type '${t.type}'. +Expected it to be ${n}.`; +} +var yt = class extends Error { + constructor(e) { + super(Au(e)); + __publicField(this, "name", "InvalidDocError"); + this.doc = e; + } +}, q = yt; +var sr = {}; +function Bu(t, e, r, n) { + let o = [t]; + for (; o.length > 0; ) { + let u = o.pop(); + if (u === sr) { + r(o.pop()); + continue; + } + r && o.push(u, sr); + let i = W(u); + if (!i) + throw new q(u); + if ((e == null ? void 0 : e(u)) !== false) + switch (i) { + case j: + case k: { + let s = i === j ? u : u.parts; + for (let a = s.length, D = a - 1; D >= 0; --D) + o.push(s[D]); + break; + } + case B: + o.push(u.flatContents, u.breakContents); + break; + case A: + if (n && u.expandedStates) + for (let s = u.expandedStates.length, a = s - 1; a >= 0; --a) + o.push(u.expandedStates[a]); + else + o.push(u.contents); + break; + case S: + case T: + case P: + case O: + case L: + o.push(u.contents); + break; + case U: + case M: + case v: + case I: + case x: + case b: + break; + default: + throw new q(u); + } + } +} +var xe = Bu; +var ar = () => { +}, ze = ar; +function ie(t) { + return { type: T, contents: t }; +} +function oe(t, e) { + return { type: S, contents: e, n: t }; +} +function xt(t, e = {}) { + return ze(e.expandedStates), { type: A, id: e.id, contents: t, break: !!e.shouldBreak, expandedStates: e.expandedStates }; +} +function Dr(t) { + return oe(Number.NEGATIVE_INFINITY, t); +} +function cr(t) { + return oe({ type: "root" }, t); +} +function lr(t) { + return oe(-1, t); +} +function fr(t, e) { + return xt(t[0], { ...e, expandedStates: t }); +} +function Ge(t) { + return { type: k, parts: t }; +} +function pr(t, e = "", r = {}) { + return { type: B, breakContents: t, flatContents: e, groupId: r.groupId }; +} +function dr(t, e) { + return { type: P, contents: t, groupId: e.groupId, negate: e.negate }; +} +function _e(t) { + return { type: L, contents: t }; +} +var Fr = { type: I }, le = { type: b }, mr = { type: v }, Ae = { type: x, hard: true }, _t = { type: x, hard: true, literal: true }, Ke = { type: x }, Er = { type: x, soft: true }, G = [Ae, le], He = [_t, le], Be = { type: M }; +function ke(t, e) { + let r = []; + for (let n = 0; n < e.length; n++) + n !== 0 && r.push(t), r.push(e[n]); + return r; +} +function qe(t, e, r) { + let n = t; + if (e > 0) { + for (let o = 0; o < Math.floor(e / r); ++o) + n = ie(n); + n = oe(e % r, n), n = oe(Number.NEGATIVE_INFINITY, n); + } + return n; +} +function hr(t, e) { + return t ? { type: O, label: t, contents: e } : e; +} +var ku = (t, e, r) => { + if (!(t && e == null)) + return Array.isArray(e) || typeof e == "string" ? e[r < 0 ? e.length + r : r] : e.at(r); +}, y = ku; +function Cr(t) { + let e = t.indexOf("\r"); + return e >= 0 ? t.charAt(e + 1) === ` +` ? "crlf" : "cr" : "lf"; +} +function be(t) { + switch (t) { + case "cr": + return "\r"; + case "crlf": + return `\r +`; + default: + return ` +`; + } +} +function At(t, e) { + let r; + switch (e) { + case ` +`: + r = /\n/g; + break; + case "\r": + r = /\r/g; + break; + case `\r +`: + r = /\r\n/g; + break; + default: + throw new Error(`Unexpected "eol" ${JSON.stringify(e)}.`); + } + let n = t.match(r); + return n ? n.length : 0; +} +function gr(t) { + return ee(false, t, /\r\n?/g, ` +`); +} +var yr = () => /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; +var xr = { eastAsianWidth(t) { + var e = t.charCodeAt(0), r = t.length == 2 ? t.charCodeAt(1) : 0, n = e; + return 55296 <= e && e <= 56319 && 56320 <= r && r <= 57343 && (e &= 1023, r &= 1023, n = e << 10 | r, n += 65536), n == 12288 || 65281 <= n && n <= 65376 || 65504 <= n && n <= 65510 ? "F" : 4352 <= n && n <= 4447 || 4515 <= n && n <= 4519 || 4602 <= n && n <= 4607 || 9001 <= n && n <= 9002 || 11904 <= n && n <= 11929 || 11931 <= n && n <= 12019 || 12032 <= n && n <= 12245 || 12272 <= n && n <= 12283 || 12289 <= n && n <= 12350 || 12353 <= n && n <= 12438 || 12441 <= n && n <= 12543 || 12549 <= n && n <= 12589 || 12593 <= n && n <= 12686 || 12688 <= n && n <= 12730 || 12736 <= n && n <= 12771 || 12784 <= n && n <= 12830 || 12832 <= n && n <= 12871 || 12880 <= n && n <= 13054 || 13056 <= n && n <= 19903 || 19968 <= n && n <= 42124 || 42128 <= n && n <= 42182 || 43360 <= n && n <= 43388 || 44032 <= n && n <= 55203 || 55216 <= n && n <= 55238 || 55243 <= n && n <= 55291 || 63744 <= n && n <= 64255 || 65040 <= n && n <= 65049 || 65072 <= n && n <= 65106 || 65108 <= n && n <= 65126 || 65128 <= n && n <= 65131 || 110592 <= n && n <= 110593 || 127488 <= n && n <= 127490 || 127504 <= n && n <= 127546 || 127552 <= n && n <= 127560 || 127568 <= n && n <= 127569 || 131072 <= n && n <= 194367 || 177984 <= n && n <= 196605 || 196608 <= n && n <= 262141 ? "W" : "N"; +} }; +var bu = /[^\x20-\x7F]/; +function wu(t) { + if (!t) + return 0; + if (!bu.test(t)) + return t.length; + t = t.replace(yr(), " "); + let e = 0; + for (let r of t) { + let n = r.codePointAt(0); + if (n <= 31 || n >= 127 && n <= 159 || n >= 768 && n <= 879) + continue; + let o = xr.eastAsianWidth(r); + e += o === "F" || o === "W" ? 2 : 1; + } + return e; +} +var we = wu; +var Br = (t) => { + if (Array.isArray(t)) + return t; + if (t.type !== k) + throw new Error(`Expect doc to be 'array' or '${k}'.`); + return t.parts; +}; +function Ne(t, e) { + if (typeof t == "string") + return e(t); + let r = /* @__PURE__ */ new Map(); + return n(t); + function n(u) { + if (r.has(u)) + return r.get(u); + let i = o(u); + return r.set(u, i), i; + } + function o(u) { + switch (W(u)) { + case j: + return e(u.map(n)); + case k: + return e({ ...u, parts: u.parts.map(n) }); + case B: + return e({ ...u, breakContents: n(u.breakContents), flatContents: n(u.flatContents) }); + case A: { + let { expandedStates: i, contents: s } = u; + return i ? (i = i.map(n), s = i[0]) : s = n(s), e({ ...u, contents: s, expandedStates: i }); + } + case S: + case T: + case P: + case O: + case L: + return e({ ...u, contents: n(u.contents) }); + case U: + case M: + case v: + case I: + case x: + case b: + return e(u); + default: + throw new q(u); + } + } +} +function Je(t, e, r) { + let n = r, o = false; + function u(i) { + if (o) + return false; + let s = e(i); + s !== void 0 && (o = true, n = s); + } + return xe(t, u), n; +} +function Ou(t) { + if (t.type === A && t.break || t.type === x && t.hard || t.type === b) + return true; +} +function kr(t) { + return Je(t, Ou, false); +} +function _r(t) { + if (t.length > 0) { + let e = y(false, t, -1); + !e.expandedStates && !e.break && (e.break = "propagated"); + } + return null; +} +function br(t) { + let e = /* @__PURE__ */ new Set(), r = []; + function n(u) { + if (u.type === b && _r(r), u.type === A) { + if (r.push(u), e.has(u)) + return false; + e.add(u); + } + } + function o(u) { + u.type === A && r.pop().break && _r(r); + } + xe(t, n, o, true); +} +function Nu(t) { + return t.type === x && !t.hard ? t.soft ? "" : " " : t.type === B ? t.flatContents : t; +} +function wr(t) { + return Ne(t, Nu); +} +function Ar(t) { + for (t = [...t]; t.length >= 2 && y(false, t, -2).type === x && y(false, t, -1).type === b; ) + t.length -= 2; + if (t.length > 0) { + let e = Oe(y(false, t, -1)); + t[t.length - 1] = e; + } + return t; +} +function Oe(t) { + switch (W(t)) { + case S: + case T: + case P: + case A: + case L: + case O: { + let e = Oe(t.contents); + return { ...t, contents: e }; + } + case B: + return { ...t, breakContents: Oe(t.breakContents), flatContents: Oe(t.flatContents) }; + case k: + return { ...t, parts: Ar(t.parts) }; + case j: + return Ar(t); + case U: + return t.replace(/[\n\r]*$/, ""); + case M: + case v: + case I: + case x: + case b: + break; + default: + throw new q(t); + } + return t; +} +function Xe(t) { + return Oe(Su(t)); +} +function Tu(t) { + switch (W(t)) { + case k: + if (t.parts.every((e) => e === "")) + return ""; + break; + case A: + if (!t.contents && !t.id && !t.break && !t.expandedStates) + return ""; + if (t.contents.type === A && t.contents.id === t.id && t.contents.break === t.break && t.contents.expandedStates === t.expandedStates) + return t.contents; + break; + case S: + case T: + case P: + case L: + if (!t.contents) + return ""; + break; + case B: + if (!t.flatContents && !t.breakContents) + return ""; + break; + case j: { + let e = []; + for (let r of t) { + if (!r) + continue; + let [n, ...o] = Array.isArray(r) ? r : [r]; + typeof n == "string" && typeof y(false, e, -1) == "string" ? e[e.length - 1] += n : e.push(n), e.push(...o); + } + return e.length === 0 ? "" : e.length === 1 ? e[0] : e; + } + case U: + case M: + case v: + case I: + case x: + case O: + case b: + break; + default: + throw new q(t); + } + return t; +} +function Su(t) { + return Ne(t, (e) => Tu(e)); +} +function Or(t, e = He) { + return Ne(t, (r) => typeof r == "string" ? ke(e, r.split(` +`)) : r); +} +function vu(t) { + if (t.type === x) + return true; +} +function Nr(t) { + return Je(t, vu, false); +} +function Ze(t, e) { + return t.type === O ? { ...t, contents: e(t.contents) } : e(t); +} +var R = Symbol("MODE_BREAK"), K = Symbol("MODE_FLAT"), Te = Symbol("cursor"); +function Tr() { + return { value: "", length: 0, queue: [] }; +} +function Pu(t, e) { + return Bt(t, { type: "indent" }, e); +} +function Lu(t, e, r) { + return e === Number.NEGATIVE_INFINITY ? t.root || Tr() : e < 0 ? Bt(t, { type: "dedent" }, r) : e ? e.type === "root" ? { ...t, root: t } : Bt(t, { type: typeof e == "string" ? "stringAlign" : "numberAlign", n: e }, r) : t; +} +function Bt(t, e, r) { + let n = e.type === "dedent" ? t.queue.slice(0, -1) : [...t.queue, e], o = "", u = 0, i = 0, s = 0; + for (let l of n) + switch (l.type) { + case "indent": + c(), r.useTabs ? a(1) : D(r.tabWidth); + break; + case "stringAlign": + c(), o += l.n, u += l.n.length; + break; + case "numberAlign": + i += 1, s += l.n; + break; + default: + throw new Error(`Unexpected type '${l.type}'`); + } + return f(), { ...t, value: o, length: u, queue: n }; + function a(l) { + o += " ".repeat(l), u += r.tabWidth * l; + } + function D(l) { + o += " ".repeat(l), u += l; + } + function c() { + r.useTabs ? F() : f(); + } + function F() { + i > 0 && a(i), d(); + } + function f() { + s > 0 && D(s), d(); + } + function d() { + i = 0, s = 0; + } +} +function kt(t) { + let e = 0, r = 0, n = t.length; + e: + for (; n--; ) { + let o = t[n]; + if (o === Te) { + r++; + continue; + } + for (let u = o.length - 1; u >= 0; u--) { + let i = o[u]; + if (i === " " || i === " ") + e++; + else { + t[n] = o.slice(0, u + 1); + break e; + } + } + } + if (e > 0 || r > 0) + for (t.length = n + 1; r-- > 0; ) + t.push(Te); + return e; +} +function Qe(t, e, r, n, o, u) { + if (r === Number.POSITIVE_INFINITY) + return true; + let i = e.length, s = [t], a = []; + for (; r >= 0; ) { + if (s.length === 0) { + if (i === 0) + return true; + s.push(e[--i]); + continue; + } + let { mode: D, doc: c } = s.pop(); + switch (W(c)) { + case U: + a.push(c), r -= we(c); + break; + case j: + case k: { + let F = Br(c); + for (let f = F.length - 1; f >= 0; f--) + s.push({ mode: D, doc: F[f] }); + break; + } + case T: + case S: + case P: + case O: + s.push({ mode: D, doc: c.contents }); + break; + case v: + r += kt(a); + break; + case A: { + if (u && c.break) + return false; + let F = c.break ? R : D, f = c.expandedStates && F === R ? y(false, c.expandedStates, -1) : c.contents; + s.push({ mode: F, doc: f }); + break; + } + case B: { + let f = (c.groupId ? o[c.groupId] || K : D) === R ? c.breakContents : c.flatContents; + f && s.push({ mode: D, doc: f }); + break; + } + case x: + if (D === R || c.hard) + return true; + c.soft || (a.push(" "), r--); + break; + case L: + n = true; + break; + case I: + if (n) + return false; + break; + } + } + return false; +} +function fe(t, e) { + let r = {}, n = e.printWidth, o = be(e.endOfLine), u = 0, i = [{ ind: Tr(), mode: R, doc: t }], s = [], a = false, D = [], c = 0; + for (br(t); i.length > 0; ) { + let { ind: f, mode: d, doc: l } = i.pop(); + switch (W(l)) { + case U: { + let p = o !== ` +` ? ee(false, l, ` +`, o) : l; + s.push(p), i.length > 0 && (u += we(p)); + break; + } + case j: + for (let p = l.length - 1; p >= 0; p--) + i.push({ ind: f, mode: d, doc: l[p] }); + break; + case M: + if (c >= 2) + throw new Error("There are too many 'cursor' in doc."); + s.push(Te), c++; + break; + case T: + i.push({ ind: Pu(f, e), mode: d, doc: l.contents }); + break; + case S: + i.push({ ind: Lu(f, l.n, e), mode: d, doc: l.contents }); + break; + case v: + u -= kt(s); + break; + case A: + switch (d) { + case K: + if (!a) { + i.push({ ind: f, mode: l.break ? R : K, doc: l.contents }); + break; + } + case R: { + a = false; + let p = { ind: f, mode: K, doc: l.contents }, m = n - u, E = D.length > 0; + if (!l.break && Qe(p, i, m, E, r)) + i.push(p); + else if (l.expandedStates) { + let h = y(false, l.expandedStates, -1); + if (l.break) { + i.push({ ind: f, mode: R, doc: h }); + break; + } else + for (let g = 1; g < l.expandedStates.length + 1; g++) + if (g >= l.expandedStates.length) { + i.push({ ind: f, mode: R, doc: h }); + break; + } else { + let C = l.expandedStates[g], _ = { ind: f, mode: K, doc: C }; + if (Qe(_, i, m, E, r)) { + i.push(_); + break; + } + } + } else + i.push({ ind: f, mode: R, doc: l.contents }); + break; + } + } + l.id && (r[l.id] = y(false, i, -1).mode); + break; + case k: { + let p = n - u, { parts: m } = l; + if (m.length === 0) + break; + let [E, h] = m, g = { ind: f, mode: K, doc: E }, C = { ind: f, mode: R, doc: E }, _ = Qe(g, [], p, D.length > 0, r, true); + if (m.length === 1) { + _ ? i.push(g) : i.push(C); + break; + } + let Z = { ind: f, mode: K, doc: h }, $ = { ind: f, mode: R, doc: h }; + if (m.length === 2) { + _ ? i.push(Z, g) : i.push($, C); + break; + } + m.splice(0, 2); + let Q = { ind: f, mode: d, doc: Ge(m) }, rr = m[0]; + Qe({ ind: f, mode: K, doc: [E, h, rr] }, [], p, D.length > 0, r, true) ? i.push(Q, Z, g) : _ ? i.push(Q, $, g) : i.push(Q, $, C); + break; + } + case B: + case P: { + let p = l.groupId ? r[l.groupId] : d; + if (p === R) { + let m = l.type === B ? l.breakContents : l.negate ? l.contents : ie(l.contents); + m && i.push({ ind: f, mode: d, doc: m }); + } + if (p === K) { + let m = l.type === B ? l.flatContents : l.negate ? ie(l.contents) : l.contents; + m && i.push({ ind: f, mode: d, doc: m }); + } + break; + } + case L: + D.push({ ind: f, mode: d, doc: l.contents }); + break; + case I: + D.length > 0 && i.push({ ind: f, mode: d, doc: Ae }); + break; + case x: + switch (d) { + case K: + if (l.hard) + a = true; + else { + l.soft || (s.push(" "), u += 1); + break; + } + case R: + if (D.length > 0) { + i.push({ ind: f, mode: d, doc: l }, ...D.reverse()), D.length = 0; + break; + } + l.literal ? f.root ? (s.push(o, f.root.value), u = f.root.length) : (s.push(o), u = 0) : (u -= kt(s), s.push(o + f.value), u = f.length); + break; + } + break; + case O: + i.push({ ind: f, mode: d, doc: l.contents }); + break; + case b: + break; + default: + throw new q(l); + } + i.length === 0 && D.length > 0 && (i.push(...D.reverse()), D.length = 0); + } + let F = s.indexOf(Te); + if (F !== -1) { + let f = s.indexOf(Te, F + 1), d = s.slice(0, F).join(""), l = s.slice(F + 1, f).join(""), p = s.slice(f + 1).join(""); + return { formatted: d + l + p, cursorNodeStart: d.length, cursorNodeText: l }; + } + return { formatted: s.join("") }; +} +function J(t) { + var e; + if (!t) + return ""; + if (Array.isArray(t)) { + let r = []; + for (let n of t) + if (Array.isArray(n)) + r.push(...J(n)); + else { + let o = J(n); + o !== "" && r.push(o); + } + return r; + } + return t.type === B ? { ...t, breakContents: J(t.breakContents), flatContents: J(t.flatContents) } : t.type === A ? { ...t, contents: J(t.contents), expandedStates: (e = t.expandedStates) == null ? void 0 : e.map(J) } : t.type === k ? { type: "fill", parts: t.parts.map(J) } : t.contents ? { ...t, contents: J(t.contents) } : t; +} +function Sr(t) { + let e = /* @__PURE__ */ Object.create(null), r = /* @__PURE__ */ new Set(); + return n(J(t)); + function n(u, i, s) { + var a, D; + if (typeof u == "string") + return JSON.stringify(u); + if (Array.isArray(u)) { + let c = u.map(n).filter(Boolean); + return c.length === 1 ? c[0] : `[${c.join(", ")}]`; + } + if (u.type === x) { + let c = ((a = s == null ? void 0 : s[i + 1]) == null ? void 0 : a.type) === b; + return u.literal ? c ? "literalline" : "literallineWithoutBreakParent" : u.hard ? c ? "hardline" : "hardlineWithoutBreakParent" : u.soft ? "softline" : "line"; + } + if (u.type === b) + return ((D = s == null ? void 0 : s[i - 1]) == null ? void 0 : D.type) === x && s[i - 1].hard ? void 0 : "breakParent"; + if (u.type === v) + return "trim"; + if (u.type === T) + return "indent(" + n(u.contents) + ")"; + if (u.type === S) + return u.n === Number.NEGATIVE_INFINITY ? "dedentToRoot(" + n(u.contents) + ")" : u.n < 0 ? "dedent(" + n(u.contents) + ")" : u.n.type === "root" ? "markAsRoot(" + n(u.contents) + ")" : "align(" + JSON.stringify(u.n) + ", " + n(u.contents) + ")"; + if (u.type === B) + return "ifBreak(" + n(u.breakContents) + (u.flatContents ? ", " + n(u.flatContents) : "") + (u.groupId ? (u.flatContents ? "" : ', ""') + `, { groupId: ${o(u.groupId)} }` : "") + ")"; + if (u.type === P) { + let c = []; + u.negate && c.push("negate: true"), u.groupId && c.push(`groupId: ${o(u.groupId)}`); + let F = c.length > 0 ? `, { ${c.join(", ")} }` : ""; + return `indentIfBreak(${n(u.contents)}${F})`; + } + if (u.type === A) { + let c = []; + u.break && u.break !== "propagated" && c.push("shouldBreak: true"), u.id && c.push(`id: ${o(u.id)}`); + let F = c.length > 0 ? `, { ${c.join(", ")} }` : ""; + return u.expandedStates ? `conditionalGroup([${u.expandedStates.map((f) => n(f)).join(",")}]${F})` : `group(${n(u.contents)}${F})`; + } + if (u.type === k) + return `fill([${u.parts.map((c) => n(c)).join(", ")}])`; + if (u.type === L) + return "lineSuffix(" + n(u.contents) + ")"; + if (u.type === I) + return "lineSuffixBoundary"; + if (u.type === O) + return `label(${JSON.stringify(u.label)}, ${n(u.contents)})`; + throw new Error("Unknown doc type " + u.type); + } + function o(u) { + if (typeof u != "symbol") + return JSON.stringify(String(u)); + if (u in e) + return e[u]; + let i = u.description || "symbol"; + for (let s = 0; ; s++) { + let a = i + (s > 0 ? ` #${s}` : ""); + if (!r.has(a)) + return r.add(a), e[u] = `Symbol.for(${JSON.stringify(a)})`; + } + } +} +function Iu(t, e, r = 0) { + let n = 0; + for (let o = r; o < t.length; ++o) + t[o] === " " ? n = n + e - n % e : n++; + return n; +} +var pe = Iu; +var Se = class extends Error { + constructor() { + super(...arguments); + __publicField(this, "name", "ConfigError"); + } +}, ve = class extends Error { + constructor() { + super(...arguments); + __publicField(this, "name", "UndefinedParserError"); + } +}; +var vr = { cursorOffset: { category: "Special", type: "int", default: -1, range: { start: -1, end: 1 / 0, step: 1 }, description: `Print (to stderr) where a cursor at the given position would move to after formatting. +This option cannot be used with --range-start and --range-end.`, cliCategory: "Editor" }, endOfLine: { category: "Global", type: "choice", default: "lf", description: "Which end of line characters to apply.", choices: [{ value: "lf", description: "Line Feed only (\\n), common on Linux and macOS as well as inside git repos" }, { value: "crlf", description: "Carriage Return + Line Feed characters (\\r\\n), common on Windows" }, { value: "cr", description: "Carriage Return character only (\\r), used very rarely" }, { value: "auto", description: `Maintain existing +(mixed values within one file are normalised by looking at what's used after the first line)` }] }, filepath: { category: "Special", type: "path", description: "Specify the input filepath. This will be used to do parser inference.", cliName: "stdin-filepath", cliCategory: "Other", cliDescription: "Path to the file to pretend that stdin comes from." }, insertPragma: { category: "Special", type: "boolean", default: false, description: "Insert @format pragma into file's first docblock comment.", cliCategory: "Other" }, parser: { category: "Global", type: "choice", default: void 0, description: "Which parser to use.", exception: (t) => typeof t == "string" || typeof t == "function", choices: [{ value: "flow", description: "Flow" }, { value: "babel", description: "JavaScript" }, { value: "babel-flow", description: "Flow" }, { value: "babel-ts", description: "TypeScript" }, { value: "typescript", description: "TypeScript" }, { value: "acorn", description: "JavaScript" }, { value: "espree", description: "JavaScript" }, { value: "meriyah", description: "JavaScript" }, { value: "css", description: "CSS" }, { value: "less", description: "Less" }, { value: "scss", description: "SCSS" }, { value: "json", description: "JSON" }, { value: "json5", description: "JSON5" }, { value: "json-stringify", description: "JSON.stringify" }, { value: "graphql", description: "GraphQL" }, { value: "markdown", description: "Markdown" }, { value: "mdx", description: "MDX" }, { value: "vue", description: "Vue" }, { value: "yaml", description: "YAML" }, { value: "glimmer", description: "Ember / Handlebars" }, { value: "html", description: "HTML" }, { value: "angular", description: "Angular" }, { value: "lwc", description: "Lightning Web Components" }] }, plugins: { type: "path", array: true, default: [{ value: [] }], category: "Global", description: "Add a plugin. Multiple plugins can be passed as separate `--plugin`s.", exception: (t) => typeof t == "string" || typeof t == "object", cliName: "plugin", cliCategory: "Config" }, printWidth: { category: "Global", type: "int", default: 80, description: "The line length where Prettier will try wrap.", range: { start: 0, end: 1 / 0, step: 1 } }, rangeEnd: { category: "Special", type: "int", default: 1 / 0, range: { start: 0, end: 1 / 0, step: 1 }, description: `Format code ending at a given character offset (exclusive). +The range will extend forwards to the end of the selected statement. +This option cannot be used with --cursor-offset.`, cliCategory: "Editor" }, rangeStart: { category: "Special", type: "int", default: 0, range: { start: 0, end: 1 / 0, step: 1 }, description: `Format code starting at a given character offset. +The range will extend backwards to the start of the first line containing the selected statement. +This option cannot be used with --cursor-offset.`, cliCategory: "Editor" }, requirePragma: { category: "Special", type: "boolean", default: false, description: `Require either '@prettier' or '@format' to be present in the file's first docblock comment +in order for it to be formatted.`, cliCategory: "Other" }, tabWidth: { type: "int", category: "Global", default: 2, description: "Number of spaces per indentation level.", range: { start: 0, end: 1 / 0, step: 1 } }, useTabs: { category: "Global", type: "boolean", default: false, description: "Indent with tabs instead of spaces." }, embeddedLanguageFormatting: { category: "Global", type: "choice", default: "auto", description: "Control how Prettier formats quoted code embedded in the file.", choices: [{ value: "auto", description: "Format embedded code if Prettier can automatically identify it." }, { value: "off", description: "Never automatically format embedded code." }] } }; +function et({ plugins: t = [], showDeprecated: e = false } = {}) { + let r = t.flatMap((o) => o.languages ?? []), n = []; + for (let o of Yu(Object.assign({}, ...t.map(({ options: u }) => u), vr))) + !e && o.deprecated || (Array.isArray(o.choices) && (e || (o.choices = o.choices.filter((u) => !u.deprecated)), o.name === "parser" && (o.choices = [...o.choices, ...Ru(o.choices, r, t)])), o.pluginDefaults = Object.fromEntries(t.filter((u) => { + var i; + return ((i = u.defaultOptions) == null ? void 0 : i[o.name]) !== void 0; + }).map((u) => [u.name, u.defaultOptions[o.name]])), n.push(o)); + return { languages: r, options: n }; +} +function* Ru(t, e, r) { + let n = new Set(t.map((o) => o.value)); + for (let o of e) + if (o.parsers) { + for (let u of o.parsers) + if (!n.has(u)) { + n.add(u); + let i = r.find((a) => a.parsers && Object.prototype.hasOwnProperty.call(a.parsers, u)), s = o.name; + i != null && i.name && (s += ` (plugin: ${i.name})`), yield { value: u, description: s }; + } + } +} +function Yu(t) { + let e = []; + for (let [r, n] of Object.entries(t)) { + let o = { name: r, ...n }; + Array.isArray(o.default) && (o.default = y(false, o.default, -1).value), e.push(o); + } + return e; +} +var ju = (t) => t.split(/[/\\]/).pop(); +function Pr(t, e) { + if (!e) + return; + let r = ju(e).toLowerCase(); + return t.find((n) => { + var o, u; + return ((o = n.extensions) == null ? void 0 : o.some((i) => r.endsWith(i))) || ((u = n.filenames) == null ? void 0 : u.some((i) => i.toLowerCase() === r)); + }); +} +function Vu(t, e) { + if (e) + return t.find(({ name: r }) => r.toLowerCase() === e) ?? t.find(({ aliases: r }) => r == null ? void 0 : r.includes(e)) ?? t.find(({ extensions: r }) => r == null ? void 0 : r.includes(`.${e}`)); +} +function $u(t, e) { + let r = t.plugins.flatMap((o) => o.languages ?? []), n = Vu(r, e.language) ?? Pr(r, e.physicalFile) ?? Pr(r, e.file) ?? (e.physicalFile, void 0); + return n == null ? void 0 : n.parsers[0]; +} +var Lr = $u; +var te = { key: (t) => /^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(t) ? t : JSON.stringify(t), value(t) { + if (t === null || typeof t != "object") + return JSON.stringify(t); + if (Array.isArray(t)) + return `[${t.map((r) => te.value(r)).join(", ")}]`; + let e = Object.keys(t); + return e.length === 0 ? "{}" : `{ ${e.map((r) => `${te.key(r)}: ${te.value(t[r])}`).join(", ")} }`; +}, pair: ({ key: t, value: e }) => te.value({ [t]: e }) }; +var bt = Ce(Pe(), 1), Yr = (t, e, { descriptor: r }) => { + let n = [`${bt.default.yellow(typeof t == "string" ? r.key(t) : r.pair(t))} is deprecated`]; + return e && n.push(`we now treat it as ${bt.default.blue(typeof e == "string" ? r.key(e) : r.pair(e))}`), n.join("; ") + "."; +}; +var se = Ce(Pe(), 1); +var tt = Symbol.for("vnopts.VALUE_NOT_EXIST"), de = Symbol.for("vnopts.VALUE_UNCHANGED"); +var jr = " ".repeat(2), $r = (t, e, r) => { + let { text: n, list: o } = r.normalizeExpectedResult(r.schemas[t].expected(r)), u = []; + return n && u.push(Vr(t, e, n, r.descriptor)), o && u.push([Vr(t, e, o.title, r.descriptor)].concat(o.values.map((i) => Ur(i, r.loggerPrintWidth))).join(` +`)), Mr(u, r.loggerPrintWidth); +}; +function Vr(t, e, r, n) { + return [`Invalid ${se.default.red(n.key(t))} value.`, `Expected ${se.default.blue(r)},`, `but received ${e === tt ? se.default.gray("nothing") : se.default.red(n.value(e))}.`].join(" "); +} +function Ur({ text: t, list: e }, r) { + let n = []; + return t && n.push(`- ${se.default.blue(t)}`), e && n.push([`- ${se.default.blue(e.title)}:`].concat(e.values.map((o) => Ur(o, r - jr.length).replace(/^|\n/g, `$&${jr}`))).join(` +`)), Mr(n, r); +} +function Mr(t, e) { + if (t.length === 1) + return t[0]; + let [r, n] = t, [o, u] = t.map((i) => i.split(` +`, 1)[0].length); + return o > e && o > u ? n : r; +} +var Nt = Ce(Pe(), 1); +var wt = [], Wr = []; +function Ot(t, e) { + if (t === e) + return 0; + let r = t; + t.length > e.length && (t = e, e = r); + let n = t.length, o = e.length; + for (; n > 0 && t.charCodeAt(~-n) === e.charCodeAt(~-o); ) + n--, o--; + let u = 0; + for (; u < n && t.charCodeAt(u) === e.charCodeAt(u); ) + u++; + if (n -= u, o -= u, n === 0) + return o; + let i, s, a, D, c = 0, F = 0; + for (; c < n; ) + Wr[c] = t.charCodeAt(u + c), wt[c] = ++c; + for (; F < o; ) + for (i = e.charCodeAt(u + F), a = F++, s = F, c = 0; c < n; c++) + D = i === Wr[c] ? a : a + 1, a = wt[c], s = wt[c] = a > s ? D > s ? s + 1 : D : D > a ? a + 1 : D; + return s; +} +var rt = (t, e, { descriptor: r, logger: n, schemas: o }) => { + let u = [`Ignored unknown option ${Nt.default.yellow(r.pair({ key: t, value: e }))}.`], i = Object.keys(o).sort().find((s) => Ot(t, s) < 3); + i && u.push(`Did you mean ${Nt.default.blue(r.key(i))}?`), n.warn(u.join(" ")); +}; +var Uu = ["default", "expected", "validate", "deprecated", "forward", "redirect", "overlap", "preprocess", "postprocess"]; +function Mu(t, e) { + let r = new t(e), n = Object.create(r); + for (let o of Uu) + o in e && (n[o] = Wu(e[o], r, w.prototype[o].length)); + return n; +} +var w = class { + static create(e) { + return Mu(this, e); + } + constructor(e) { + this.name = e.name; + } + default(e) { + } + expected(e) { + return "nothing"; + } + validate(e, r) { + return false; + } + deprecated(e, r) { + return false; + } + forward(e, r) { + } + redirect(e, r) { + } + overlap(e, r, n) { + return e; + } + preprocess(e, r) { + return e; + } + postprocess(e, r) { + return de; + } +}; +function Wu(t, e, r) { + return typeof t == "function" ? (...n) => t(...n.slice(0, r - 1), e, ...n.slice(r - 1)) : () => t; +} +var nt = class extends w { + constructor(e) { + super(e), this._sourceName = e.sourceName; + } + expected(e) { + return e.schemas[this._sourceName].expected(e); + } + validate(e, r) { + return r.schemas[this._sourceName].validate(e, r); + } + redirect(e, r) { + return this._sourceName; + } +}; +var ut = class extends w { + expected() { + return "anything"; + } + validate() { + return true; + } +}; +var ot = class extends w { + constructor({ valueSchema: e, name: r = e.name, ...n }) { + super({ ...n, name: r }), this._valueSchema = e; + } + expected(e) { + let { text: r, list: n } = e.normalizeExpectedResult(this._valueSchema.expected(e)); + return { text: r && `an array of ${r}`, list: n && { title: "an array of the following values", values: [{ list: n }] } }; + } + validate(e, r) { + if (!Array.isArray(e)) + return false; + let n = []; + for (let o of e) { + let u = r.normalizeValidateResult(this._valueSchema.validate(o, r), o); + u !== true && n.push(u.value); + } + return n.length === 0 ? true : { value: n }; + } + deprecated(e, r) { + let n = []; + for (let o of e) { + let u = r.normalizeDeprecatedResult(this._valueSchema.deprecated(o, r), o); + u !== false && n.push(...u.map(({ value: i }) => ({ value: [i] }))); + } + return n; + } + forward(e, r) { + let n = []; + for (let o of e) { + let u = r.normalizeForwardResult(this._valueSchema.forward(o, r), o); + n.push(...u.map(zr)); + } + return n; + } + redirect(e, r) { + let n = [], o = []; + for (let u of e) { + let i = r.normalizeRedirectResult(this._valueSchema.redirect(u, r), u); + "remain" in i && n.push(i.remain), o.push(...i.redirect.map(zr)); + } + return n.length === 0 ? { redirect: o } : { redirect: o, remain: n }; + } + overlap(e, r) { + return e.concat(r); + } +}; +function zr({ from: t, to: e }) { + return { from: [t], to: e }; +} +var it = class extends w { + expected() { + return "true or false"; + } + validate(e) { + return typeof e == "boolean"; + } +}; +function Kr(t, e) { + let r = /* @__PURE__ */ Object.create(null); + for (let n of t) { + let o = n[e]; + if (r[o]) + throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`); + r[o] = n; + } + return r; +} +function Hr(t, e) { + let r = /* @__PURE__ */ new Map(); + for (let n of t) { + let o = n[e]; + if (r.has(o)) + throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`); + r.set(o, n); + } + return r; +} +function qr() { + let t = /* @__PURE__ */ Object.create(null); + return (e) => { + let r = JSON.stringify(e); + return t[r] ? true : (t[r] = true, false); + }; +} +function Jr(t, e) { + let r = [], n = []; + for (let o of t) + e(o) ? r.push(o) : n.push(o); + return [r, n]; +} +function Xr(t) { + return t === Math.floor(t); +} +function Zr(t, e) { + if (t === e) + return 0; + let r = typeof t, n = typeof e, o = ["undefined", "object", "boolean", "number", "string"]; + return r !== n ? o.indexOf(r) - o.indexOf(n) : r !== "string" ? Number(t) - Number(e) : t.localeCompare(e); +} +function Qr(t) { + return (...e) => { + let r = t(...e); + return typeof r == "string" ? new Error(r) : r; + }; +} +function Tt(t) { + return t === void 0 ? {} : t; +} +function St(t) { + if (typeof t == "string") + return { text: t }; + let { text: e, list: r } = t; + return zu((e || r) !== void 0, "Unexpected `expected` result, there should be at least one field."), r ? { text: e, list: { title: r.title, values: r.values.map(St) } } : { text: e }; +} +function vt(t, e) { + return t === true ? true : t === false ? { value: e } : t; +} +function Pt(t, e, r = false) { + return t === false ? false : t === true ? r ? true : [{ value: e }] : "value" in t ? [t] : t.length === 0 ? false : t; +} +function Gr(t, e) { + return typeof t == "string" || "key" in t ? { from: e, to: t } : "from" in t ? { from: t.from, to: t.to } : { from: e, to: t.to }; +} +function st(t, e) { + return t === void 0 ? [] : Array.isArray(t) ? t.map((r) => Gr(r, e)) : [Gr(t, e)]; +} +function Lt(t, e) { + let r = st(typeof t == "object" && "redirect" in t ? t.redirect : t, e); + return r.length === 0 ? { remain: e, redirect: r } : typeof t == "object" && "remain" in t ? { remain: t.remain, redirect: r } : { redirect: r }; +} +function zu(t, e) { + if (!t) + throw new Error(e); +} +var at = class extends w { + constructor(e) { + super(e), this._choices = Hr(e.choices.map((r) => r && typeof r == "object" ? r : { value: r }), "value"); + } + expected({ descriptor: e }) { + let r = Array.from(this._choices.keys()).map((i) => this._choices.get(i)).filter(({ hidden: i }) => !i).map((i) => i.value).sort(Zr).map(e.value), n = r.slice(0, -2), o = r.slice(-2); + return { text: n.concat(o.join(" or ")).join(", "), list: { title: "one of the following values", values: r } }; + } + validate(e) { + return this._choices.has(e); + } + deprecated(e) { + let r = this._choices.get(e); + return r && r.deprecated ? { value: e } : false; + } + forward(e) { + let r = this._choices.get(e); + return r ? r.forward : void 0; + } + redirect(e) { + let r = this._choices.get(e); + return r ? r.redirect : void 0; + } +}; +var Dt = class extends w { + expected() { + return "a number"; + } + validate(e, r) { + return typeof e == "number"; + } +}; +var ct = class extends Dt { + expected() { + return "an integer"; + } + validate(e, r) { + return r.normalizeValidateResult(super.validate(e, r), e) === true && Xr(e); + } +}; +var Le = class extends w { + expected() { + return "a string"; + } + validate(e) { + return typeof e == "string"; + } +}; +var en = te, tn = rt, rn = $r, nn = Yr; +var lt = class { + constructor(e, r) { + let { logger: n = console, loggerPrintWidth: o = 80, descriptor: u = en, unknown: i = tn, invalid: s = rn, deprecated: a = nn, missing: D = () => false, required: c = () => false, preprocess: F = (d) => d, postprocess: f = () => de } = r || {}; + this._utils = { descriptor: u, logger: n || { warn: () => { + } }, loggerPrintWidth: o, schemas: Kr(e, "name"), normalizeDefaultResult: Tt, normalizeExpectedResult: St, normalizeDeprecatedResult: Pt, normalizeForwardResult: st, normalizeRedirectResult: Lt, normalizeValidateResult: vt }, this._unknownHandler = i, this._invalidHandler = Qr(s), this._deprecatedHandler = a, this._identifyMissing = (d, l) => !(d in l) || D(d, l), this._identifyRequired = c, this._preprocess = F, this._postprocess = f, this.cleanHistory(); + } + cleanHistory() { + this._hasDeprecationWarned = qr(); + } + normalize(e) { + let r = {}, o = [this._preprocess(e, this._utils)], u = () => { + for (; o.length !== 0; ) { + let i = o.shift(), s = this._applyNormalization(i, r); + o.push(...s); + } + }; + u(); + for (let i of Object.keys(this._utils.schemas)) { + let s = this._utils.schemas[i]; + if (!(i in r)) { + let a = Tt(s.default(this._utils)); + "value" in a && o.push({ [i]: a.value }); + } + } + u(); + for (let i of Object.keys(this._utils.schemas)) { + if (!(i in r)) + continue; + let s = this._utils.schemas[i], a = r[i], D = s.postprocess(a, this._utils); + D !== de && (this._applyValidation(D, i, s), r[i] = D); + } + return this._applyPostprocess(r), this._applyRequiredCheck(r), r; + } + _applyNormalization(e, r) { + let n = [], { knownKeys: o, unknownKeys: u } = this._partitionOptionKeys(e); + for (let i of o) { + let s = this._utils.schemas[i], a = s.preprocess(e[i], this._utils); + this._applyValidation(a, i, s); + let D = ({ from: d, to: l }) => { + n.push(typeof l == "string" ? { [l]: d } : { [l.key]: l.value }); + }, c = ({ value: d, redirectTo: l }) => { + let p = Pt(s.deprecated(d, this._utils), a, true); + if (p !== false) + if (p === true) + this._hasDeprecationWarned(i) || this._utils.logger.warn(this._deprecatedHandler(i, l, this._utils)); + else + for (let { value: m } of p) { + let E = { key: i, value: m }; + if (!this._hasDeprecationWarned(E)) { + let h = typeof l == "string" ? { key: l, value: m } : l; + this._utils.logger.warn(this._deprecatedHandler(E, h, this._utils)); + } + } + }; + st(s.forward(a, this._utils), a).forEach(D); + let f = Lt(s.redirect(a, this._utils), a); + if (f.redirect.forEach(D), "remain" in f) { + let d = f.remain; + r[i] = i in r ? s.overlap(r[i], d, this._utils) : d, c({ value: d }); + } + for (let { from: d, to: l } of f.redirect) + c({ value: d, redirectTo: l }); + } + for (let i of u) { + let s = e[i]; + this._applyUnknownHandler(i, s, r, (a, D) => { + n.push({ [a]: D }); + }); + } + return n; + } + _applyRequiredCheck(e) { + for (let r of Object.keys(this._utils.schemas)) + if (this._identifyMissing(r, e) && this._identifyRequired(r)) + throw this._invalidHandler(r, tt, this._utils); + } + _partitionOptionKeys(e) { + let [r, n] = Jr(Object.keys(e).filter((o) => !this._identifyMissing(o, e)), (o) => o in this._utils.schemas); + return { knownKeys: r, unknownKeys: n }; + } + _applyValidation(e, r, n) { + let o = vt(n.validate(e, this._utils), e); + if (o !== true) + throw this._invalidHandler(r, o.value, this._utils); + } + _applyUnknownHandler(e, r, n, o) { + let u = this._unknownHandler(e, r, this._utils); + if (u) + for (let i of Object.keys(u)) { + if (this._identifyMissing(i, u)) + continue; + let s = u[i]; + i in this._utils.schemas ? o(i, s) : n[i] = s; + } + } + _applyPostprocess(e) { + let r = this._postprocess(e, this._utils); + if (r !== de) { + if (r.delete) + for (let n of r.delete) + delete e[n]; + if (r.override) { + let { knownKeys: n, unknownKeys: o } = this._partitionOptionKeys(r.override); + for (let u of n) { + let i = r.override[u]; + this._applyValidation(i, u, this._utils.schemas[u]), e[u] = i; + } + for (let u of o) { + let i = r.override[u]; + this._applyUnknownHandler(u, i, e, (s, a) => { + let D = this._utils.schemas[s]; + this._applyValidation(a, s, D), e[s] = a; + }); + } + } + } + } +}; +var It; +function Ku(t, e, { logger: r = false, isCLI: n = false, passThrough: o = false, FlagSchema: u, descriptor: i } = {}) { + if (n) { + if (!u) + throw new Error("'FlagSchema' option is required."); + if (!i) + throw new Error("'descriptor' option is required."); + } else + i = te; + let s = o ? Array.isArray(o) ? (f, d) => o.includes(f) ? { [f]: d } : void 0 : (f, d) => ({ [f]: d }) : (f, d, l) => { + let { _: p, ...m } = l.schemas; + return rt(f, d, { ...l, schemas: m }); + }, a = Hu(e, { isCLI: n, FlagSchema: u }), D = new lt(a, { logger: r, unknown: s, descriptor: i }), c = r !== false; + c && It && (D._hasDeprecationWarned = It); + let F = D.normalize(t); + return c && (It = D._hasDeprecationWarned), F; +} +function Hu(t, { isCLI: e, FlagSchema: r }) { + let n = []; + e && n.push(ut.create({ name: "_" })); + for (let o of t) + n.push(qu(o, { isCLI: e, optionInfos: t, FlagSchema: r })), o.alias && e && n.push(nt.create({ name: o.alias, sourceName: o.name })); + return n; +} +function qu(t, { isCLI: e, optionInfos: r, FlagSchema: n }) { + let { name: o } = t, u = { name: o }, i, s = {}; + switch (t.type) { + case "int": + i = ct, e && (u.preprocess = Number); + break; + case "string": + i = Le; + break; + case "choice": + i = at, u.choices = t.choices.map((a) => a != null && a.redirect ? { ...a, redirect: { to: { key: t.name, value: a.redirect } } } : a); + break; + case "boolean": + i = it; + break; + case "flag": + i = n, u.flags = r.flatMap((a) => [a.alias, a.description && a.name, a.oppositeDescription && `no-${a.name}`].filter(Boolean)); + break; + case "path": + i = Le; + break; + default: + throw new Error(`Unexpected type ${t.type}`); + } + if (t.exception ? u.validate = (a, D, c) => t.exception(a) || D.validate(a, c) : u.validate = (a, D, c) => a === void 0 || D.validate(a, c), t.redirect && (s.redirect = (a) => a ? { to: { key: t.redirect.option, value: t.redirect.value } } : void 0), t.deprecated && (s.deprecated = true), e && !t.array) { + let a = u.preprocess || ((D) => D); + u.preprocess = (D, c, F) => c.preprocess(a(Array.isArray(D) ? y(false, D, -1) : D), F); + } + return t.array ? ot.create({ ...e ? { preprocess: (a) => Array.isArray(a) ? a : [a] } : {}, ...s, valueSchema: i.create(u) }) : i.create({ ...u, ...s }); +} +var un = Ku; +function Rt(t, e) { + if (!e) + throw new Error("parserName is required."); + for (let n = t.length - 1; n >= 0; n--) { + let o = t[n]; + if (o.parsers && Object.prototype.hasOwnProperty.call(o.parsers, e)) + return o; + } + let r = `Couldn't resolve parser "${e}".`; + throw r += " Plugins must be explicitly added to the standalone bundle.", new Se(r); +} +function on(t, e) { + if (!e) + throw new Error("astFormat is required."); + for (let n = t.length - 1; n >= 0; n--) { + let o = t[n]; + if (o.printers && Object.prototype.hasOwnProperty.call(o.printers, e)) + return o; + } + let r = `Couldn't find plugin for AST format "${e}".`; + throw r += " Plugins must be explicitly added to the standalone bundle.", new Se(r); +} +function ft({ plugins: t, parser: e }) { + let r = Rt(t, e); + return Yt(r, e); +} +function Yt(t, e) { + let r = t.parsers[e]; + return typeof r == "function" ? r() : r; +} +function sn(t, e) { + let r = t.printers[e]; + return typeof r == "function" ? r() : r; +} +var an = { astFormat: "estree", printer: {}, originalText: void 0, locStart: null, locEnd: null }; +async function Ju(t, e = {}) { + var F; + let r = { ...t }; + if (!r.parser) + if (r.filepath) { + if (r.parser = Lr(r, { physicalFile: r.filepath }), !r.parser) + throw new ve(`No parser could be inferred for file "${r.filepath}".`); + } else + throw new ve("No parser and no file path given, couldn't infer a parser."); + let n = et({ plugins: t.plugins, showDeprecated: true }).options, o = { ...an, ...Object.fromEntries(n.filter((f) => f.default !== void 0).map((f) => [f.name, f.default])) }, u = Rt(r.plugins, r.parser), i = await Yt(u, r.parser); + r.astFormat = i.astFormat, r.locEnd = i.locEnd, r.locStart = i.locStart; + let s = (F = u.printers) != null && F[i.astFormat] ? u : on(r.plugins, i.astFormat), a = await sn(s, i.astFormat); + r.printer = a; + let D = s.defaultOptions ? Object.fromEntries(Object.entries(s.defaultOptions).filter(([, f]) => f !== void 0)) : {}, c = { ...o, ...D }; + for (let [f, d] of Object.entries(c)) + (r[f] === null || r[f] === void 0) && (r[f] = d); + return r.parser === "json" && (r.trailingComma = "none"), un(r, n, { passThrough: Object.keys(an), ...e }); +} +var re = Ju; +var Dn = /* @__PURE__ */ new Set(["tokens", "comments", "parent", "enclosingNode", "precedingNode", "followingNode"]), Xu = (t) => Object.keys(t).filter((e) => !Dn.has(e)); +function Zu(t) { + return t ? (e) => t(e, Dn) : Xu; +} +var H = Zu; +function Qu(t, e) { + let { printer: { massageAstNode: r, getVisitorKeys: n } } = e; + if (!r) + return t; + let o = H(n), u = r.ignoredProperties ?? /* @__PURE__ */ new Set(); + return i(t); + function i(s, a) { + if (!(s !== null && typeof s == "object")) + return s; + if (Array.isArray(s)) + return s.map((f) => i(f, a)).filter(Boolean); + let D = {}, c = new Set(o(s)); + for (let f in s) + !Object.prototype.hasOwnProperty.call(s, f) || u.has(f) || (c.has(f) ? D[f] = i(s[f], s) : D[f] = s[f]); + let F = r(s, D, a); + if (F !== null) + return F ?? D; + } +} +var cn = Qu; +var Cn = Ce(hn(), 1); +async function so(t, e) { + let r = await ft(e), n = r.preprocess ? r.preprocess(t, e) : t; + e.originalText = n; + let o; + try { + o = await r.parse(n, e, e); + } catch (u) { + ao(u, t); + } + return { text: n, ast: o }; +} +function ao(t, e) { + let { loc: r } = t; + if (r) { + let n = (0, Cn.codeFrameColumns)(e, r, { highlightCode: true }); + throw t.message += ` +` + n, t.codeFrame = n, t; + } + throw t; +} +var ae = so; +var Ie, $t, Fe, dt, Vt = class { + constructor(e) { + Ct(this, Ie); + Ct(this, Fe); + this.stack = [e]; + } + get key() { + let { stack: e, siblings: r } = this; + return y(false, e, r === null ? -2 : -4) ?? null; + } + get index() { + return this.siblings === null ? null : y(false, this.stack, -2); + } + get node() { + return y(false, this.stack, -1); + } + get parent() { + return this.getNode(1); + } + get grandparent() { + return this.getNode(2); + } + get isInArray() { + return this.siblings !== null; + } + get siblings() { + let { stack: e } = this, r = y(false, e, -3); + return Array.isArray(r) ? r : null; + } + get next() { + let { siblings: e } = this; + return e === null ? null : e[this.index + 1]; + } + get previous() { + let { siblings: e } = this; + return e === null ? null : e[this.index - 1]; + } + get isFirst() { + return this.index === 0; + } + get isLast() { + let { siblings: e, index: r } = this; + return e !== null && r === e.length - 1; + } + get isRoot() { + return this.stack.length === 1; + } + get root() { + return this.stack[0]; + } + get ancestors() { + return [...ce(this, Fe, dt).call(this)]; + } + getName() { + let { stack: e } = this, { length: r } = e; + return r > 1 ? y(false, e, -2) : null; + } + getValue() { + return y(false, this.stack, -1); + } + getNode(e = 0) { + let r = ce(this, Ie, $t).call(this, e); + return r === -1 ? null : this.stack[r]; + } + getParentNode(e = 0) { + return this.getNode(e + 1); + } + call(e, ...r) { + let { stack: n } = this, { length: o } = n, u = y(false, n, -1); + for (let i of r) + u = u[i], n.push(i, u); + try { + return e(this); + } finally { + n.length = o; + } + } + callParent(e, r = 0) { + let n = ce(this, Ie, $t).call(this, r + 1), o = this.stack.splice(n + 1); + try { + return e(this); + } finally { + this.stack.push(...o); + } + } + each(e, ...r) { + let { stack: n } = this, { length: o } = n, u = y(false, n, -1); + for (let i of r) + u = u[i], n.push(i, u); + try { + for (let i = 0; i < u.length; ++i) + n.push(i, u[i]), e(this, i, u), n.length -= 2; + } finally { + n.length = o; + } + } + map(e, ...r) { + let n = []; + return this.each((o, u, i) => { + n[u] = e(o, u, i); + }, ...r), n; + } + match(...e) { + let r = this.stack.length - 1, n = null, o = this.stack[r--]; + for (let u of e) { + if (o === void 0) + return false; + let i = null; + if (typeof n == "number" && (i = n, n = this.stack[r--], o = this.stack[r--]), u && !u(o, n, i)) + return false; + n = this.stack[r--], o = this.stack[r--]; + } + return true; + } + findAncestor(e) { + for (let r of ce(this, Fe, dt).call(this)) + if (e(r)) + return r; + } + hasAncestor(e) { + for (let r of ce(this, Fe, dt).call(this)) + if (e(r)) + return true; + return false; + } +}; +Ie = /* @__PURE__ */ new WeakSet(), $t = function(e) { + let { stack: r } = this; + for (let n = r.length - 1; n >= 0; n -= 2) + if (!Array.isArray(r[n]) && --e < 0) + return n; + return -1; +}, Fe = /* @__PURE__ */ new WeakSet(), dt = function* () { + let { stack: e } = this; + for (let r = e.length - 3; r >= 0; r -= 2) { + let n = e[r]; + Array.isArray(n) || (yield n); + } +}; +var gn = Vt; +var yn = new Proxy(() => { +}, { get: () => yn }), Re = yn; +function me(t) { + return (e, r, n) => { + let o = !!(n != null && n.backwards); + if (r === false) + return false; + let { length: u } = e, i = r; + for (; i >= 0 && i < u; ) { + let s = e.charAt(i); + if (t instanceof RegExp) { + if (!t.test(s)) + return i; + } else if (!t.includes(s)) + return i; + o ? i-- : i++; + } + return i === -1 || i === u ? i : false; + }; +} +var xn = me(/\s/), N = me(" "), Ft = me(",; "), mt = me(/[^\n\r]/); +function Do(t, e, r) { + let n = !!(r != null && r.backwards); + if (e === false) + return false; + let o = t.charAt(e); + if (n) { + if (t.charAt(e - 1) === "\r" && o === ` +`) + return e - 2; + if (o === ` +` || o === "\r" || o === "\u2028" || o === "\u2029") + return e - 1; + } else { + if (o === "\r" && t.charAt(e + 1) === ` +`) + return e + 2; + if (o === ` +` || o === "\r" || o === "\u2028" || o === "\u2029") + return e + 1; + } + return e; +} +var Y = Do; +function co(t, e, r = {}) { + let n = N(t, r.backwards ? e - 1 : e, r), o = Y(t, n, r); + return n !== o; +} +var V = co; +function lo(t) { + return Array.isArray(t) && t.length > 0; +} +var Ut = lo; +function fo(t) { + return t !== null && typeof t == "object"; +} +var _n = fo; +function* Mt(t, e) { + let { getVisitorKeys: r, filter: n = () => true } = e, o = (u) => _n(u) && n(u); + for (let u of r(t)) { + let i = t[u]; + if (Array.isArray(i)) + for (let s of i) + o(s) && (yield s); + else + o(i) && (yield i); + } +} +function* An(t, e) { + let r = [t]; + for (let n = 0; n < r.length; n++) { + let o = r[n]; + for (let u of Mt(o, e)) + yield u, r.push(u); + } +} +function po(t) { + let e = t.type || t.kind || "(unknown type)", r = String(t.name || t.id && (typeof t.id == "object" ? t.id.name : t.id) || t.key && (typeof t.key == "object" ? t.key.name : t.key) || t.value && (typeof t.value == "object" ? "" : String(t.value)) || t.operator || ""); + return r.length > 20 && (r = r.slice(0, 19) + "…"), e + (r ? " " + r : ""); +} +function Wt(t, e) { + (t.comments ?? (t.comments = [])).push(e), e.printed = false, e.nodeDescription = po(t); +} +function ne(t, e) { + e.leading = true, e.trailing = false, Wt(t, e); +} +function X(t, e, r) { + e.leading = false, e.trailing = false, r && (e.marker = r), Wt(t, e); +} +function ue(t, e) { + e.leading = false, e.trailing = true, Wt(t, e); +} +var zt = /* @__PURE__ */ new WeakMap(); +function Et(t, e) { + if (zt.has(t)) + return zt.get(t); + let { printer: { getCommentChildNodes: r, canAttachComment: n, getVisitorKeys: o }, locStart: u, locEnd: i } = e; + if (!n) + return []; + let s = ((r == null ? void 0 : r(t, e)) ?? [...Mt(t, { getVisitorKeys: H(o) })]).flatMap((a) => n(a) ? [a] : Et(a, e)); + return s.sort((a, D) => u(a) - u(D) || i(a) - i(D)), zt.set(t, s), s; +} +function kn(t, e, r, n) { + let { locStart: o, locEnd: u } = r, i = o(e), s = u(e), a = Et(t, r), D, c, F = 0, f = a.length; + for (; F < f; ) { + let d = F + f >> 1, l = a[d], p = o(l), m = u(l); + if (p <= i && s <= m) + return kn(l, e, r, l); + if (m <= i) { + D = l, F = d + 1; + continue; + } + if (s <= p) { + c = l, f = d; + continue; + } + throw new Error("Comment location overlaps with node location"); + } + if ((n == null ? void 0 : n.type) === "TemplateLiteral") { + let { quasis: d } = n, l = Kt(d, e, r); + D && Kt(d, D, r) !== l && (D = null), c && Kt(d, c, r) !== l && (c = null); + } + return { enclosingNode: n, precedingNode: D, followingNode: c }; +} +var Gt = () => false; +function bn(t, e) { + let { comments: r } = t; + if (delete t.comments, !Ut(r) || !e.printer.canAttachComment) + return; + let n = [], { locStart: o, locEnd: u, printer: { experimentalFeatures: { avoidAstMutation: i = false } = {}, handleComments: s = {} }, originalText: a } = e, { ownLine: D = Gt, endOfLine: c = Gt, remaining: F = Gt } = s, f = r.map((d, l) => ({ ...kn(t, d, e), comment: d, text: a, options: e, ast: t, isLastComment: r.length - 1 === l })); + for (let [d, l] of f.entries()) { + let { comment: p, precedingNode: m, enclosingNode: E, followingNode: h, text: g, options: C, ast: _, isLastComment: Z } = l; + if (C.parser === "json" || C.parser === "json5" || C.parser === "__js_expression" || C.parser === "__ts_expression" || C.parser === "__vue_expression" || C.parser === "__vue_ts_expression") { + if (o(p) - o(_) <= 0) { + ne(_, p); + continue; + } + if (u(p) - u(_) >= 0) { + ue(_, p); + continue; + } + } + let $; + if (i ? $ = [l] : (p.enclosingNode = E, p.precedingNode = m, p.followingNode = h, $ = [p, g, C, _, Z]), Fo(g, C, f, d)) + p.placement = "ownLine", D(...$) || (h ? ne(h, p) : m ? ue(m, p) : E ? X(E, p) : X(_, p)); + else if (mo(g, C, f, d)) + p.placement = "endOfLine", c(...$) || (m ? ue(m, p) : h ? ne(h, p) : E ? X(E, p) : X(_, p)); + else if (p.placement = "remaining", !F(...$)) + if (m && h) { + let Q = n.length; + Q > 0 && n[Q - 1].followingNode !== h && Bn(n, C), n.push(l); + } else + m ? ue(m, p) : h ? ne(h, p) : E ? X(E, p) : X(_, p); + } + if (Bn(n, e), !i) + for (let d of r) + delete d.precedingNode, delete d.enclosingNode, delete d.followingNode; +} +var wn = (t) => !/[\S\n\u2028\u2029]/.test(t); +function Fo(t, e, r, n) { + let { comment: o, precedingNode: u } = r[n], { locStart: i, locEnd: s } = e, a = i(o); + if (u) + for (let D = n - 1; D >= 0; D--) { + let { comment: c, precedingNode: F } = r[D]; + if (F !== u || !wn(t.slice(s(c), a))) + break; + a = i(c); + } + return V(t, a, { backwards: true }); +} +function mo(t, e, r, n) { + let { comment: o, followingNode: u } = r[n], { locStart: i, locEnd: s } = e, a = s(o); + if (u) + for (let D = n + 1; D < r.length; D++) { + let { comment: c, followingNode: F } = r[D]; + if (F !== u || !wn(t.slice(a, i(c)))) + break; + a = s(c); + } + return V(t, a); +} +function Bn(t, e) { + var s, a; + let r = t.length; + if (r === 0) + return; + let { precedingNode: n, followingNode: o } = t[0], u = e.locStart(o), i; + for (i = r; i > 0; --i) { + let { comment: D, precedingNode: c, followingNode: F } = t[i - 1]; + Re.strictEqual(c, n), Re.strictEqual(F, o); + let f = e.originalText.slice(e.locEnd(D), u); + if (((a = (s = e.printer).isGap) == null ? void 0 : a.call(s, f, e)) ?? /^[\s(]*$/.test(f)) + u = e.locStart(D); + else + break; + } + for (let [D, { comment: c }] of t.entries()) + D < i ? ue(n, c) : ne(o, c); + for (let D of [n, o]) + D.comments && D.comments.length > 1 && D.comments.sort((c, F) => e.locStart(c) - e.locStart(F)); + t.length = 0; +} +function Kt(t, e, r) { + let n = r.locStart(e) - 1; + for (let o = 1; o < t.length; ++o) + if (n < r.locStart(t[o])) + return o - 1; + return 0; +} +function Eo(t, e) { + let r = e - 1; + r = N(t, r, { backwards: true }), r = Y(t, r, { backwards: true }), r = N(t, r, { backwards: true }); + let n = Y(t, r, { backwards: true }); + return r !== n; +} +var Ye = Eo; +function On(t, e) { + let r = t.node; + return r.printed = true, e.printer.printComment(t, e); +} +function ho(t, e) { + var c; + let r = t.node, n = [On(t, e)], { printer: o, originalText: u, locStart: i, locEnd: s } = e; + if ((c = o.isBlockComment) == null ? void 0 : c.call(o, r)) { + let F = V(u, s(r)) ? V(u, i(r), { backwards: true }) ? G : Ke : " "; + n.push(F); + } else + n.push(G); + let D = Y(u, N(u, s(r))); + return D !== false && V(u, D) && n.push(G), n; +} +function Co(t, e, r) { + var D; + let n = t.node, o = On(t, e), { printer: u, originalText: i, locStart: s } = e, a = (D = u.isBlockComment) == null ? void 0 : D.call(u, n); + if (r != null && r.hasLineSuffix && !(r != null && r.isBlock) || V(i, s(n), { backwards: true })) { + let c = Ye(i, s(n)); + return { doc: _e([G, c ? G : "", o]), isBlock: a, hasLineSuffix: true }; + } + return !a || r != null && r.hasLineSuffix ? { doc: [_e([" ", o]), le], isBlock: a, hasLineSuffix: true } : { doc: [" ", o], isBlock: a, hasLineSuffix: false }; +} +function go(t, e) { + let r = t.node; + if (!r) + return {}; + let n = e[Symbol.for("printedComments")]; + if ((r.comments || []).filter((a) => !n.has(a)).length === 0) + return { leading: "", trailing: "" }; + let u = [], i = [], s; + return t.each(() => { + let a = t.node; + if (n != null && n.has(a)) + return; + let { leading: D, trailing: c } = a; + D ? u.push(ho(t, e)) : c && (s = Co(t, e, s), i.push(s.doc)); + }, "comments"), { leading: u, trailing: i }; +} +function Nn(t, e, r) { + let { leading: n, trailing: o } = go(t, r); + return !n && !o ? e : Ze(e, (u) => [n, u, o]); +} +function Tn(t) { + let { [Symbol.for("comments")]: e, [Symbol.for("printedComments")]: r } = t; + for (let n of e) { + if (!n.printed && !r.has(n)) + throw new Error('Comment "' + n.value.trim() + '" was not printed. Please report this error!'); + delete n.printed; + } +} +async function Sn(t, e, r, n, o) { + let { embeddedLanguageFormatting: u, printer: { embed: i, hasPrettierIgnore: s = () => false, getVisitorKeys: a } } = r; + if (!i || u !== "auto") + return; + if (i.length > 2) + throw new Error("printer.embed has too many parameters. The API changed in Prettier v3. Please update your plugin. See https://prettier.io/docs/en/plugins.html#optional-embed"); + let D = H(i.getVisitorKeys ?? a), c = []; + d(); + let F = t.stack; + for (let { print: l, node: p, pathStack: m } of c) + try { + t.stack = m; + let E = await l(f, e, t, r); + E && o.set(p, E); + } catch (E) { + if (globalThis.PRETTIER_DEBUG) + throw E; + } + t.stack = F; + function f(l, p) { + return yo(l, p, r, n); + } + function d() { + let { node: l } = t; + if (l === null || typeof l != "object" || s(t)) + return; + for (let m of D(l)) + Array.isArray(l[m]) ? t.each(d, m) : t.call(d, m); + let p = i(t, r); + if (p) { + if (typeof p == "function") { + c.push({ print: p, node: l, pathStack: [...t.stack] }); + return; + } + o.set(l, p); + } + } +} +async function yo(t, e, r, n) { + let o = await re({ ...r, ...e, parentParser: r.parser, originalText: t }, { passThrough: true }), { ast: u } = await ae(t, o), i = await n(u, o); + return Xe(i); +} +function _o(t, e) { + let { originalText: r, [Symbol.for("comments")]: n, locStart: o, locEnd: u, [Symbol.for("printedComments")]: i } = e, { node: s } = t, a = o(s), D = u(s); + for (let c of n) + o(c) >= a && u(c) <= D && i.add(c); + return r.slice(a, D); +} +var Pn = _o; +async function je(t, e) { + ({ ast: t } = await Ht(t, e)); + let r = /* @__PURE__ */ new Map(), n = new gn(t), u = /* @__PURE__ */ new Map(); + await Sn(n, s, e, je, u); + let i = await Ln(n, e, s, void 0, u); + return Tn(e), i; + function s(D, c) { + return D === void 0 || D === n ? a(c) : Array.isArray(D) ? n.call(() => a(c), ...D) : n.call(() => a(c), D); + } + function a(D) { + let c = n.node; + if (c == null) + return ""; + let F = c && typeof c == "object" && D === void 0; + if (F && r.has(c)) + return r.get(c); + let f = Ln(n, e, s, D, u); + return F && r.set(c, f), f; + } +} +function Ln(t, e, r, n, o) { + var a; + let { node: u } = t, { printer: i } = e, s; + return (a = i.hasPrettierIgnore) != null && a.call(i, t) ? s = Pn(t, e) : o.has(u) ? s = o.get(u) : s = i.print(t, e, r, n), u === e.cursorNode && (s = Ze(s, (D) => [Be, D, Be])), i.printComment && (!i.willPrintOwnComments || !i.willPrintOwnComments(t, e)) && (s = Nn(t, s, e)), s; +} +async function Ht(t, e) { + let r = t.comments ?? []; + e[Symbol.for("comments")] = r, e[Symbol.for("tokens")] = t.tokens ?? [], e[Symbol.for("printedComments")] = /* @__PURE__ */ new Set(), bn(t, e); + let { printer: { preprocess: n } } = e; + return t = n ? await n(t, e) : t, { ast: t, comments: r }; +} +var Ao = ({ parser: t }) => t === "json" || t === "json5" || t === "json-stringify"; +function Bo(t, e) { + let r = [t.node, ...t.parentNodes], n = /* @__PURE__ */ new Set([e.node, ...e.parentNodes]); + return r.find((o) => Yn.has(o.type) && n.has(o)); +} +function In(t) { + let e = t.length - 1; + for (; ; ) { + let r = t[e]; + if ((r == null ? void 0 : r.type) === "Program" || (r == null ? void 0 : r.type) === "File") + e--; + else + break; + } + return t.slice(0, e + 1); +} +function ko(t, e, { locStart: r, locEnd: n }) { + let o = t.node, u = e.node; + if (o === u) + return { startNode: o, endNode: u }; + let i = r(t.node); + for (let a of In(e.parentNodes)) + if (r(a) >= i) + u = a; + else + break; + let s = n(e.node); + for (let a of In(t.parentNodes)) { + if (n(a) <= s) + o = a; + else + break; + if (o === u) + break; + } + return { startNode: o, endNode: u }; +} +function qt(t, e, r, n, o = [], u) { + let { locStart: i, locEnd: s } = r, a = i(t), D = s(t); + if (!(e > D || e < a || u === "rangeEnd" && e === a || u === "rangeStart" && e === D)) { + for (let c of Et(t, r)) { + let F = qt(c, e, r, n, [t, ...o], u); + if (F) + return F; + } + if (!n || n(t, o[0])) + return { node: t, parentNodes: o }; + } +} +function bo(t, e) { + return e !== "DeclareExportDeclaration" && t !== "TypeParameterDeclaration" && (t === "Directive" || t === "TypeAlias" || t === "TSExportAssignment" || t.startsWith("Declare") || t.startsWith("TSDeclare") || t.endsWith("Statement") || t.endsWith("Declaration")); +} +var Yn = /* @__PURE__ */ new Set(["JsonRoot", "ObjectExpression", "ArrayExpression", "StringLiteral", "NumericLiteral", "BooleanLiteral", "NullLiteral", "UnaryExpression", "TemplateLiteral"]), wo = /* @__PURE__ */ new Set(["OperationDefinition", "FragmentDefinition", "VariableDefinition", "TypeExtensionDefinition", "ObjectTypeDefinition", "FieldDefinition", "DirectiveDefinition", "EnumTypeDefinition", "EnumValueDefinition", "InputValueDefinition", "InputObjectTypeDefinition", "SchemaDefinition", "OperationTypeDefinition", "InterfaceTypeDefinition", "UnionTypeDefinition", "ScalarTypeDefinition"]); +function Rn(t, e, r) { + if (!e) + return false; + switch (t.parser) { + case "flow": + case "babel": + case "babel-flow": + case "babel-ts": + case "typescript": + case "acorn": + case "espree": + case "meriyah": + case "__babel_estree": + return bo(e.type, r == null ? void 0 : r.type); + case "json": + case "json5": + case "json-stringify": + return Yn.has(e.type); + case "graphql": + return wo.has(e.kind); + case "vue": + return e.tag !== "root"; + } + return false; +} +function jn(t, e, r) { + let { rangeStart: n, rangeEnd: o, locStart: u, locEnd: i } = e; + Re.ok(o > n); + let s = t.slice(n, o).search(/\S/), a = s === -1; + if (!a) + for (n += s; o > n && !/\S/.test(t[o - 1]); --o) + ; + let D = qt(r, n, e, (d, l) => Rn(e, d, l), [], "rangeStart"), c = a ? D : qt(r, o, e, (d) => Rn(e, d), [], "rangeEnd"); + if (!D || !c) + return { rangeStart: 0, rangeEnd: 0 }; + let F, f; + if (Ao(e)) { + let d = Bo(D, c); + F = d, f = d; + } else + ({ startNode: F, endNode: f } = ko(D, c, e)); + return { rangeStart: Math.min(u(F), u(f)), rangeEnd: Math.max(i(F), i(f)) }; +} +function Oo(t, e) { + let { cursorOffset: r, locStart: n, locEnd: o } = e, u = H(e.printer.getVisitorKeys), i = (a) => n(a) <= r && o(a) >= r, s = t; + for (let a of An(t, { getVisitorKeys: u, filter: i })) + s = a; + return s; +} +var Vn = Oo; +var zn = "\uFEFF", $n = Symbol("cursor"); +async function Gn(t, e, r = 0) { + if (!t || t.trim().length === 0) + return { formatted: "", cursorOffset: -1, comments: [] }; + let { ast: n, text: o } = await ae(t, e); + e.cursorOffset >= 0 && (e.cursorNode = Vn(n, e)); + let u = await je(n, e); + r > 0 && (u = qe([G, u], r, e.tabWidth)); + let i = fe(u, e); + if (r > 0) { + let a = i.formatted.trim(); + i.cursorNodeStart !== void 0 && (i.cursorNodeStart -= i.formatted.indexOf(a)), i.formatted = a + be(e.endOfLine); + } + let s = e[Symbol.for("comments")]; + if (e.cursorOffset >= 0) { + let a, D, c, F, f; + if (e.cursorNode && i.cursorNodeText ? (a = e.locStart(e.cursorNode), D = o.slice(a, e.locEnd(e.cursorNode)), c = e.cursorOffset - a, F = i.cursorNodeStart, f = i.cursorNodeText) : (a = 0, D = o, c = e.cursorOffset, F = 0, f = i.formatted), D === f) + return { formatted: i.formatted, cursorOffset: F + c, comments: s }; + let d = D.split(""); + d.splice(c, 0, $n); + let l = f.split(""), p = (0, Wn.diffArrays)(d, l), m = F; + for (let E of p) + if (E.removed) { + if (E.value.includes($n)) + break; + } else + m += E.count; + return { formatted: i.formatted, cursorOffset: m, comments: s }; + } + return { formatted: i.formatted, cursorOffset: -1, comments: s }; +} +async function No(t, e) { + let { ast: r, text: n } = await ae(t, e), { rangeStart: o, rangeEnd: u } = jn(n, e, r), i = n.slice(o, u), s = Math.min(o, n.lastIndexOf(` +`, o) + 1), a = n.slice(s, o).match(/^\s*/)[0], D = pe(a, e.tabWidth), c = await Gn(i, { ...e, rangeStart: 0, rangeEnd: Number.POSITIVE_INFINITY, cursorOffset: e.cursorOffset > o && e.cursorOffset <= u ? e.cursorOffset - o : -1, endOfLine: "lf" }, D), F = c.formatted.trimEnd(), { cursorOffset: f } = e; + f > u ? f += F.length - i.length : c.cursorOffset >= 0 && (f = c.cursorOffset + o); + let d = n.slice(0, o) + F + n.slice(u); + if (e.endOfLine !== "lf") { + let l = be(e.endOfLine); + f >= 0 && l === `\r +` && (f += At(d.slice(0, f), ` +`)), d = ee(false, d, ` +`, l); + } + return { formatted: d, cursorOffset: f, comments: c.comments }; +} +function Jt(t, e, r) { + return typeof e != "number" || Number.isNaN(e) || e < 0 || e > t.length ? r : e; +} +function Un(t, e) { + let { cursorOffset: r, rangeStart: n, rangeEnd: o } = e; + return r = Jt(t, r, -1), n = Jt(t, n, 0), o = Jt(t, o, t.length), { ...e, cursorOffset: r, rangeStart: n, rangeEnd: o }; +} +function Kn(t, e) { + let { cursorOffset: r, rangeStart: n, rangeEnd: o, endOfLine: u } = Un(t, e), i = t.charAt(0) === zn; + if (i && (t = t.slice(1), r--, n--, o--), u === "auto" && (u = Cr(t)), t.includes("\r")) { + let s = (a) => At(t.slice(0, Math.max(a, 0)), `\r +`); + r -= s(r), n -= s(n), o -= s(o), t = gr(t); + } + return { hasBOM: i, text: t, options: Un(t, { ...e, cursorOffset: r, rangeStart: n, rangeEnd: o, endOfLine: u }) }; +} +async function Mn(t, e) { + let r = await ft(e); + return !r.hasPragma || r.hasPragma(t); +} +async function Xt(t, e) { + let { hasBOM: r, text: n, options: o } = Kn(t, await re(e)); + if (o.rangeStart >= o.rangeEnd && n !== "" || o.requirePragma && !await Mn(n, o)) + return { formatted: t, cursorOffset: e.cursorOffset, comments: [] }; + let u; + return o.rangeStart > 0 || o.rangeEnd < n.length ? u = await No(n, o) : (!o.requirePragma && o.insertPragma && o.printer.insertPragma && !await Mn(n, o) && (n = o.printer.insertPragma(n)), u = await Gn(n, o)), r && (u.formatted = zn + u.formatted, u.cursorOffset >= 0 && u.cursorOffset++), u; +} +async function Hn(t, e, r) { + let { text: n, options: o } = Kn(t, await re(e)), u = await ae(n, o); + return r && (r.preprocessForPrint && (u.ast = await Ht(u.ast, o)), r.massage && (u.ast = cn(u.ast, o))), u; +} +async function qn(t, e) { + e = await re(e); + let r = await je(t, e); + return fe(r, e); +} +async function Jn(t, e) { + let r = Sr(t), { formatted: n } = await Xt(r, { ...e, parser: "__js_expression" }); + return n; +} +async function Xn(t, e) { + e = await re(e); + let { ast: r } = await ae(t, e); + return je(r, e); +} +async function Zn(t, e) { + return fe(t, await re(e)); +} +var Qt = {}; +Me(Qt, { addDanglingComment: () => X, addLeadingComment: () => ne, addTrailingComment: () => ue, getAlignmentSize: () => pe, getIndentSize: () => eu, getMaxContinuousCount: () => Qn, getNextNonSpaceNonCommentCharacter: () => nu, getNextNonSpaceNonCommentCharacterIndex: () => Mo, getStringWidth: () => we, hasNewline: () => V, hasNewlineInRange: () => tu, hasSpaces: () => ru, isNextLineEmpty: () => Ko, isNextLineEmptyAfterIndex: () => ht, isPreviousLineEmpty: () => zo, makeString: () => uu, skip: () => me, skipEverythingButNewLine: () => mt, skipInlineComment: () => Ee, skipNewline: () => Y, skipSpaces: () => N, skipToLineEnd: () => Ft, skipTrailingComment: () => he, skipWhitespace: () => xn }); +function So(t, e) { + if (e === false) + return false; + if (t.charAt(e) === "/" && t.charAt(e + 1) === "*") { + for (let r = e + 2; r < t.length; ++r) + if (t.charAt(r) === "*" && t.charAt(r + 1) === "/") + return r + 2; + } + return e; +} +var Ee = So; +function vo(t, e) { + return e === false ? false : t.charAt(e) === "/" && t.charAt(e + 1) === "/" ? mt(t, e) : e; +} +var he = vo; +function Po(t, e) { + let r = null, n = e; + for (; n !== r; ) + r = n, n = N(t, n), n = Ee(t, n), n = he(t, n), n = Y(t, n); + return n; +} +var Ve = Po; +function Lo(t, e) { + let r = null, n = e; + for (; n !== r; ) + r = n, n = Ft(t, n), n = Ee(t, n), n = N(t, n); + return n = he(t, n), n = Y(t, n), n !== false && V(t, n); +} +var ht = Lo; +function Zt(t) { + if (typeof t != "string") + throw new TypeError("Expected a string"); + return t.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); +} +function Io(t, e) { + let r = t.match(new RegExp(`(${Zt(e)})+`, "g")); + return r === null ? 0 : r.reduce((n, o) => Math.max(n, o.length / e.length), 0); +} +var Qn = Io; +function Ro(t, e) { + let r = t.lastIndexOf(` +`); + return r === -1 ? 0 : pe(t.slice(r + 1).match(/^[\t ]*/)[0], e); +} +var eu = Ro; +function Yo(t, e, r) { + for (let n = e; n < r; ++n) + if (t.charAt(n) === ` +`) + return true; + return false; +} +var tu = Yo; +function jo(t, e, r = {}) { + return N(t, r.backwards ? e - 1 : e, r) !== e; +} +var ru = jo; +function Vo(t, e) { + let r = Ve(t, e); + return r === false ? "" : t.charAt(r); +} +var nu = Vo; +function $o(t, e, r) { + let n = e === '"' ? "'" : '"', u = ee(false, t, /\\(.)|(["'])/gs, (i, s, a) => s === n ? s : a === e ? "\\" + a : a || (r && /^[^\n\r"'0-7\\bfnrt-vx\u2028\u2029]$/.test(s) ? s : "\\" + s)); + return e + u + e; +} +var uu = $o; +function Uo(t, e, r) { + return Ve(t, r(e)); +} +function Mo(t, e) { + return arguments.length === 2 || typeof e == "number" ? Ve(t, e) : Uo(...arguments); +} +function Wo(t, e, r) { + return Ye(t, r(e)); +} +function zo(t, e) { + return arguments.length === 2 || typeof e == "number" ? Ye(t, e) : Wo(...arguments); +} +function Go(t, e, r) { + return ht(t, r(e)); +} +function Ko(t, e) { + return arguments.length === 2 || typeof e == "number" ? ht(t, e) : Go(...arguments); +} +var er = {}; +Me(er, { builders: () => Ho, printer: () => qo, utils: () => Jo }); +var Ho = { join: ke, line: Ke, softline: Er, hardline: G, literalline: He, group: xt, conditionalGroup: fr, fill: Ge, lineSuffix: _e, lineSuffixBoundary: Fr, cursor: Be, breakParent: le, ifBreak: pr, trim: mr, indent: ie, indentIfBreak: dr, align: oe, addAlignmentToDoc: qe, markAsRoot: cr, dedentToRoot: Dr, dedent: lr, hardlineWithoutBreakParent: Ae, literallineWithoutBreakParent: _t, label: hr, concat: (t) => t }, qo = { printDocToString: fe }, Jo = { willBreak: kr, traverseDoc: xe, findInDoc: Je, mapDoc: Ne, removeLines: wr, stripTrailingHardline: Xe, replaceEndOfLine: Or, canBreak: Nr }; +var ou = "3.0.3"; +function De(t, e = 1) { + return async (...r) => { + let n = r[e] ?? {}, o = n.plugins ?? []; + return r[e] = { ...n, plugins: Array.isArray(o) ? o : Object.values(o) }, t(...r); + }; +} +var iu = De(Xt); +async function su(t, e) { + let { formatted: r } = await iu(t, { ...e, cursorOffset: -1 }); + return r; +} +async function Xo(t, e) { + return await su(t, e) === t; +} +var Zo = De(et, 0), Qo = { parse: De(Hn), formatAST: De(qn), formatDoc: De(Jn), printToDoc: De(Xn), printDocToString: De(Zn) }; +var Uc = tr; +const standalone = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + __debug: Qo, + check: Xo, + default: Uc, + doc: er, + format: su, + formatWithCursor: iu, + getSupportInfo: Zo, + util: Qt, + version: ou +}, Symbol.toStringTag, { value: "Module" })); +async function printPrettier(source = "", options = {}) { + return await su(source, { + printWidth: 80, + useTabs: true, + ...options, + parser: "latex-parser", + plugins: [prettierPluginLatex] + }); +} +export { + standalone as Prettier, + printPrettier +}; +//# sourceMappingURL=standalone.mjs.map diff --git a/node_modules/prettier-plugin-latex/package.json b/node_modules/prettier-plugin-latex/package.json new file mode 100644 index 0000000..c8b4127 --- /dev/null +++ b/node_modules/prettier-plugin-latex/package.json @@ -0,0 +1,64 @@ +{ + "name": "prettier-plugin-latex", + "description": "A Prettier plugin for formatting LaTeX source files", + "version": "2.0.1", + "author": { + "name": "Jason Siefken", + "email": "siefkenj@gmail.com" + }, + "keywords": [ + "latex", + "parser", + "prettier" + ], + "main": "dist/prettier-plugin-latex.js", + "exports": { + ".": { + "import": "./dist/prettier-plugin-latex.mjs", + "require": "./dist/prettier-plugin-latex.js" + }, + "./*js": "./dist/*js", + "./*mjs": "./dist/*mjs", + "./*": { + "import": "./dist/*.mjs", + "require": "./dist/*.js" + } + }, + "files": [ + "dist/*.js", + "dist/*.js.map", + "dist/*.mjs", + "dist/*.d.ts" + ], + "scripts": { + "test": "vitest", + "watch": "vite build --watch", + "build": "vite build" + }, + "dependencies": { + "@unified-latex/unified-latex-prettier": "^2.4.2", + "prettier": "^3.0.3" + }, + "devDependencies": { + "eslint": "^8.48.0", + "jsdom": "^22.1.0", + "mkdirp": "3.0.1", + "resolve-cwd": "^3.0.0", + "typescript": "^5.2.2", + "vite": "^4.4.9", + "vitest": "^0.34.5", + "vite-plugin-dts": "^3.6.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/siefkenj/prettier-plugin-latex.git" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/siefkenj/prettier-plugin-latex/issues" + }, + "homepage": "https://github.com/siefkenj/prettier-plugin-latex#readme", + "engines": { + "node": ">= 18.0" + } +} diff --git a/node_modules/prettier/LICENSE b/node_modules/prettier/LICENSE new file mode 100644 index 0000000..5767e34 --- /dev/null +++ b/node_modules/prettier/LICENSE @@ -0,0 +1,7 @@ +Copyright © James Long and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/prettier/README.md b/node_modules/prettier/README.md new file mode 100644 index 0000000..ce24c9c --- /dev/null +++ b/node_modules/prettier/README.md @@ -0,0 +1,108 @@ +[![Prettier Banner](https://unpkg.com/prettier-logo@1.0.3/images/prettier-banner-light.svg)](https://prettier.io) + +

    Opinionated Code Formatter

    + +

    + + JavaScript + · TypeScript + · Flow + · JSX + · JSON + +
    + + CSS + · SCSS + · Less + +
    + + HTML + · Vue + · Angular + +
    + + GraphQL + · Markdown + · YAML + +
    + + + Your favorite language? + + +

    + +

    + + Github Actions Build Status + + Github Actions Build Status + + Github Actions Build Status + + Codecov Coverage Status + + Blazing Fast +
    + + npm version + + weekly downloads from npm + + code style: prettier + + Follow Prettier on Twitter +

    + +## Intro + +Prettier is an opinionated code formatter. It enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary. + +### Input + + +```js +foo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne()); +``` + +### Output + +```js +foo( + reallyLongArg(), + omgSoManyParameters(), + IShouldRefactorThis(), + isThereSeriouslyAnotherOne(), +); +``` + +Prettier can be run [in your editor](https://prettier.io/docs/editors) on-save, in a [pre-commit hook](https://prettier.io/docs/precommit), or in [CI environments](https://prettier.io/docs/cli#list-different) to ensure your codebase has a consistent style without devs ever having to post a nit-picky comment on a code review ever again! + +--- + +**[Documentation](https://prettier.io/docs/)** + +[Install](https://prettier.io/docs/install) · +[Options](https://prettier.io/docs/options) · +[CLI](https://prettier.io/docs/cli) · +[API](https://prettier.io/docs/api) + +**[Playground](https://prettier.io/playground/)** + +--- + +## Badge + +Show the world you're using _Prettier_ → [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) + +```md +[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) +``` + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md). diff --git a/node_modules/prettier/THIRD-PARTY-NOTICES.md b/node_modules/prettier/THIRD-PARTY-NOTICES.md new file mode 100644 index 0000000..90b03ea --- /dev/null +++ b/node_modules/prettier/THIRD-PARTY-NOTICES.md @@ -0,0 +1,4416 @@ +# Licenses of bundled dependencies + +The published Prettier artifact additionally contains code with the following licenses: +MIT, ISC, BSD-3-Clause, BSD-2-Clause, and Apache-2.0. + +## @angular/compiler@v19.1.2 + +> Angular - the compiler library + +License: MIT +Repository: +Author: angular + +> The MIT License +> +> Copyright (c) 2010-2025 Google LLC. https://angular.dev/license +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## @babel/code-frame@v7.26.2 + +> Generate errors that contain a code frame that point to source locations. + +License: MIT +Homepage: +Repository: +Author: The Babel Team (https://babel.dev/team) + +> MIT License +> +> Copyright (c) 2014-present Sebastian McKenzie and other contributors +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## @babel/helper-validator-identifier@v7.25.9 + +> Validate identifier/keywords name + +License: MIT +Repository: +Author: The Babel Team (https://babel.dev/team) + +> MIT License +> +> Copyright (c) 2014-present Sebastian McKenzie and other contributors +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## @babel/parser@v7.26.9 + +> A JavaScript parser + +License: MIT +Homepage: +Repository: +Author: The Babel Team (https://babel.dev/team) + +> Copyright (C) 2012-2014 by various contributors (see AUTHORS) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## @glimmer/syntax@v0.94.7 + +License: MIT +Repository: + +> Copyright (c) 2015 Tilde, Inc. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +> of the Software, and to permit persons to whom the Software is furnished to do +> so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @glimmer/util@v0.94.6 + +> Common utilities used in Glimmer + +License: MIT +Repository: + +> Copyright (c) 2015 Tilde, Inc. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +> of the Software, and to permit persons to whom the Software is furnished to do +> so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @glimmer/wire-format@v0.94.6 + +License: MIT +Repository: + +> Copyright (c) 2015 Tilde, Inc. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +> of the Software, and to permit persons to whom the Software is furnished to do +> so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @handlebars/parser@v2.0.0 + +> The parser for the Handlebars language + +License: ISC +Homepage: +Repository: + +---------------------------------------- + +## @keyv/serialize@v1.0.2 + +> Serialization for Keyv + +License: MIT +Homepage: +Repository: +Author: Jared Wray (https://jaredwray.com) + +> MIT License +> +> Copyright (c) 2017-2021 Luke Childs +> Copyright (c) 2021-2022 Jared Wray +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @nodelib/fs.scandir@v2.1.5 + +> List files and directories inside the specified directory + +License: MIT + +> The MIT License (MIT) +> +> Copyright (c) Denis Malinochkin +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @nodelib/fs.stat@v2.0.5 + +> Get the status of a file with some features + +License: MIT + +> The MIT License (MIT) +> +> Copyright (c) Denis Malinochkin +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @nodelib/fs.walk@v1.2.8 + +> A library for efficiently walking a directory recursively + +License: MIT + +> The MIT License (MIT) +> +> Copyright (c) Denis Malinochkin +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @prettier/is-es5-identifier-name@v0.2.0 + +> Check if provided string is an `IdentifierName` as specified in ECMA262 edition 5.1 section 7.6. + +License: MIT +Author: fisker Cheung + +> MIT License +> +> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @prettier/parse-srcset@v3.1.0 + +> A spec-conformant JavaScript parser for the HTML5 srcset attribute + +License: MIT +Homepage: +Author: Alex Bell + +> The MIT License (MIT) +> +> Copyright (c) 2014 Alex Bell +> Copyright (c) fisker Cheung +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @typescript-eslint/types@v8.24.1 + +> Types for the TypeScript-ESTree AST spec + +License: MIT +Homepage: +Repository: + +> MIT License +> +> Copyright (c) 2019 typescript-eslint and other contributors +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## @typescript-eslint/typescript-estree@v8.24.1 + +> A parser that converts TypeScript source code into an ESTree compatible form + +License: MIT +Homepage: +Repository: + +> MIT License +> +> Copyright (c) 2019 typescript-eslint and other contributors +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## acorn@v8.14.0 + +> ECMAScript parser + +License: MIT +Homepage: +Repository: + +> MIT License +> +> Copyright (C) 2012-2022 by various contributors (see AUTHORS) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## acorn-jsx@v5.3.2 + +> Modern, fast React.js JSX parser + +License: MIT +Homepage: +Repository: + +> Copyright (C) 2012-2017 by Ingvar Stepanyan +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## angular-estree-parser@v10.2.0 + +> A parser that converts Angular source code into an ESTree-compatible form + +License: MIT +Homepage: +Author: Ika (https://github.com/ikatyang) + +> MIT License +> +> Copyright (c) Ika (https://github.com/ikatyang) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## angular-html-parser@v8.0.1 + +> A HTML parser extracted from Angular with some modifications + +License: MIT +Homepage: +Author: Ika (https://github.com/ikatyang) + +> MIT License +> +> Copyright (c) Ika (https://github.com/ikatyang) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## ansi-regex@v6.1.0 + +> Regular expression for matching ANSI escape codes + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## bail@v1.0.5 + +> Throw a given error + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## braces@v3.0.3 + +> Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) +Contributors: + - Brian Woodward (https://twitter.com/doowb) + - Elan Shanker (https://github.com/es128) + - Eugene Sharygin (https://github.com/eush77) + - hemanth.hm (http://h3manth.com) + - Jon Schlinkert (http://twitter.com/jonschlinkert) + +> The MIT License (MIT) +> +> Copyright (c) 2014-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## cacheable@v1.8.8 + +> High Performance Layer 1 / Layer 2 Caching with Keyv Storage + +License: MIT +Repository: +Author: Jared Wray + +> MIT License & © Jared Wray +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to +> deal in the Software without restriction, including without limitation the +> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +> sell copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +> DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## camelcase@v8.0.0 + +> Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar` + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## ccount@v1.1.0 + +> Count characters + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## chalk@v5.4.1 + +> Terminal string styling done right + +License: MIT + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## character-entities@v1.2.4 + +> HTML character entity information + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## character-entities-legacy@v1.1.4 + +> HTML legacy character entity information + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## character-reference-invalid@v1.1.4 + +> HTML invalid numeric character reference information + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## ci-info@v4.1.0 + +> Get details about the current Continuous Integration environment + +License: MIT +Homepage: +Author: Thomas Watson Steen (https://twitter.com/wa7son) +Contributors: + - Sibiraj (https://github.com/sibiraj-s) + +> The MIT License (MIT) +> +> Copyright (c) 2016 Thomas Watson Steen +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## collapse-white-space@v1.0.6 + +> Replace multiple white-space characters with a single space + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## common-path-prefix@v3.0.0 + +> Computes the longest prefix string that is common to each path, excluding the base component + +License: ISC +Homepage: +Repository: +Author: Mark Wubben (https://novemberborn.net/) + +> ISC License (ISC) +> Copyright (c) 2016, Mark Wubben +> +> Permission to use, copy, modify, and/or distribute this software for any purpose +> with or without fee is hereby granted, provided that the above copyright notice +> and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +> FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +> OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +> TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +> THIS SOFTWARE. + +---------------------------------------- + +## dashify@v2.0.0 + +> Convert a camelcase or space-separated string to a dash-separated string. ~12 sloc, fast, supports diacritics. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) +Contributors: + - Jeffrey Priebe (https://github.com/jeffreypriebe) + - Jon Schlinkert (http://twitter.com/jonschlinkert) + - Ondrej Brinkel (https://www.anzui.de) + +> The MIT License (MIT) +> +> Copyright (c) 2015-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## diff@v7.0.0 + +> A JavaScript text diff implementation. + +License: BSD-3-Clause +Repository: + +> BSD 3-Clause License +> +> Copyright (c) 2009-2015, Kevin Decker +> All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions are met: +> +> 1. Redistributions of source code must retain the above copyright notice, this +> list of conditions and the following disclaimer. +> +> 2. Redistributions in binary form must reproduce the above copyright notice, +> this list of conditions and the following disclaimer in the documentation +> and/or other materials provided with the distribution. +> +> 3. Neither the name of the copyright holder nor the names of its +> contributors may be used to endorse or promote products derived from +> this software without specific prior written permission. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------- + +## editorconfig@v0.15.3 + +> EditorConfig File Locator and Interpreter for Node.js + +License: MIT +Repository: +Author: EditorConfig Team +Contributors: + - Hong Xu (topbug.net) + - Jed Mao (https://github.com/jedmao/) + - Trey Hunner (http://treyhunner.com) + +> Copyright © 2012 EditorConfig Team +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the “Software”), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## emoji-regex@v10.4.0 + +> A regular expression to match all Emoji-only symbols as per the Unicode Standard. + +License: MIT +Homepage: +Repository: +Author: Mathias Bynens (https://mathiasbynens.be/) + +> Copyright Mathias Bynens +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## escape-string-regexp@v5.0.0 + +> Escape RegExp special characters + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## espree@v10.3.0 + +> An Esprima-compatible JavaScript parser built on Acorn + +License: BSD-2-Clause +Homepage: +Author: Nicholas C. Zakas + +> BSD 2-Clause License +> +> Copyright (c) Open JS Foundation +> All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions are met: +> +> 1. Redistributions of source code must retain the above copyright notice, this +> list of conditions and the following disclaimer. +> +> 2. Redistributions in binary form must reproduce the above copyright notice, +> this list of conditions and the following disclaimer in the documentation +> and/or other materials provided with the distribution. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------- + +## extend@v3.0.2 + +> Port of jQuery.extend for node.js and the browser + +License: MIT +Repository: +Author: Stefan Thomas (http://www.justmoon.net) +Contributors: + - Jordan Harband (https://github.com/ljharb) + +> The MIT License (MIT) +> +> Copyright (c) 2014 Stefan Thomas +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## fast-glob@v3.3.3 + +> It's a very fast and efficient glob library for Node.js + +License: MIT +Author: Denis Malinochkin (https://mrmlnc.com) + +> The MIT License (MIT) +> +> Copyright (c) Denis Malinochkin +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## fast-json-stable-stringify@v2.1.0 + +> deterministic `JSON.stringify()` - a faster version of substack's json-stable-strigify without jsonify + +License: MIT +Homepage: +Repository: +Author: James Halliday (http://substack.net) + +> This software is released under the MIT license: +> +> Copyright (c) 2017 Evgeny Poberezkin +> Copyright (c) 2013 James Halliday +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## fastq@v1.18.0 + +> Fast, in memory work queue + +License: ISC +Homepage: +Repository: +Author: Matteo Collina + +> Copyright (c) 2015-2020, Matteo Collina +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## file-entry-cache@v10.0.6 + +> A lightweight cache for file metadata, ideal for processes that work on a specific set of files and only need to reprocess files that have changed since the last run + +License: MIT +Repository: +Author: Jared Wray + +> MIT License & © Jared Wray +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to +> deal in the Software without restriction, including without limitation the +> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +> sell copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +> DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## fill-range@v7.1.1 + +> Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex` + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) +Contributors: + - Edo Rivai (edo.rivai.nl) + - Jon Schlinkert (http://twitter.com/jonschlinkert) + - Paul Miller (paulmillr.com) + - Rouven Weßling (www.rouvenwessling.de) + - null (https://github.com/wtgtybhertgeghgtwtg) + +> The MIT License (MIT) +> +> Copyright (c) 2014-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## find-cache-dir@v5.0.0 + +> Finds the common standard cache directory + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> Copyright (c) James Talmage (https://github.com/jamestalmage) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## find-up@v6.3.0 + +> Find a file or directory by walking up parent directories + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## flat-cache@v6.1.6 + +> A simple key/value storage using files to persist the data + +License: MIT +Repository: +Author: Jared Wray + +> MIT License & © Jared Wray +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to +> deal in the Software without restriction, including without limitation the +> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +> sell copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +> DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## flatted@v3.3.2 + +> A super light and fast circular JSON parser. + +License: ISC +Homepage: +Repository: +Author: Andrea Giammarchi + +> ISC License +> +> Copyright (c) 2018-2020, Andrea Giammarchi, @WebReflection +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +> AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +> LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +> OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +> PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## flatten@v1.0.3 + +> Flatten arbitrarily nested arrays into a non-nested list of non-array items. Maintained for legacy compatibility. + +License: MIT +Homepage: +Repository: +Author: Joshua Holbrook (http://jesusabdullah.net) +Contributors: + - M.K. (https://github.com/mk-pmb) + +> The MIT License (MIT) +> +> Copyright (c) 2016 Joshua Holbrook +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## flow-parser@v0.259.1 + +> JavaScript parser written in OCaml. Produces ESTree AST + +License: MIT +Homepage: +Repository: +Author: Flow Team + +---------------------------------------- + +## get-east-asian-width@v1.3.0 + +> Determine the East Asian Width of a Unicode character + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## get-stdin@v9.0.0 + +> Get stdin as a string or buffer + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## glob-parent@v5.1.2 + +> Extract the non-magic parent path from a glob string. + +License: ISC +Author: Gulp Team (https://gulpjs.com/) +Contributors: + - Elan Shanker (https://github.com/es128) + - Blaine Bublitz + +> The ISC License +> +> Copyright (c) 2015, 2019 Elan Shanker +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## graphql@v16.10.0 + +> A Query Language and Runtime which can target any service. + +License: MIT +Homepage: +Repository: + +> MIT License +> +> Copyright (c) GraphQL Contributors +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## hookified@v1.7.0 + +> Event and Middleware Hooks + +License: MIT +Homepage: +Repository: +Author: Jared Wray + +> MIT License & © Jared Wray +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## ignore@v7.0.3 + +> Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others. + +License: MIT +Repository: +Author: kael + +> Copyright (c) 2013 Kael Zhang , contributors +> http://kael.me/ +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## import-meta-resolve@v4.1.0 + +> Resolve things like Node.js — ponyfill for `import.meta.resolve` + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2021 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +> +> --- +> +> This is a derivative work based on: +> . +> Which is licensed: +> +> """ +> Copyright Node.js contributors. All rights reserved. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to +> deal in the Software without restriction, including without limitation the +> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +> sell copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +> IN THE SOFTWARE. +> """ +> +> This license applies to parts of Node.js originating from the +> https://github.com/joyent/node repository: +> +> """ +> Copyright Joyent, Inc. and other Node contributors. All rights reserved. +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to +> deal in the Software without restriction, including without limitation the +> rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +> sell copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +> IN THE SOFTWARE. +> """ + +---------------------------------------- + +## index-to-position@v0.1.2 + +> Convert a string index to its line and column position + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## indexes-of@v1.0.1 + +> line String/Array#indexOf but return all the indexes in an array + +License: MIT +Homepage: +Repository: +Author: Dominic Tarr (dominictarr.com) + +> Copyright (c) 2013 Dominic Tarr +> +> Permission is hereby granted, free of charge, +> to any person obtaining a copy of this software and +> associated documentation files (the "Software"), to +> deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, +> merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom +> the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice +> shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +> OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +> ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## inherits@v2.0.4 + +> Browser-friendly inheritance fully compatible with standard node.js inherits() + +License: ISC + +> The ISC License +> +> Copyright (c) Isaac Z. Schlueter +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +> FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +> LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +> OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +> PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## is-alphabetical@v1.0.4 + +> Check if a character is alphabetical + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## is-alphanumerical@v1.0.4 + +> Check if a character is alphanumerical + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## is-buffer@v2.0.5 + +> Determine if an object is a Buffer + +License: MIT +Repository: +Author: Feross Aboukhadijeh (https://feross.org) + +> The MIT License (MIT) +> +> Copyright (c) Feross Aboukhadijeh +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## is-decimal@v1.0.4 + +> Check if a character is decimal + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## is-extglob@v2.1.1 + +> Returns true if a string has an extglob. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) + +> The MIT License (MIT) +> +> Copyright (c) 2014-2016, Jon Schlinkert +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## is-glob@v4.0.3 + +> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) +Contributors: + - Brian Woodward (https://twitter.com/doowb) + - Daniel Perez (https://tuvistavie.com) + - Jon Schlinkert (http://twitter.com/jonschlinkert) + +> The MIT License (MIT) +> +> Copyright (c) 2014-2017, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## is-hexadecimal@v1.0.4 + +> Check if a character is hexadecimal + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## is-number@v7.0.0 + +> Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) +Contributors: + - Jon Schlinkert (http://twitter.com/jonschlinkert) + - Olsten Larck (https://i.am.charlike.online) + - Rouven Weßling (www.rouvenwessling.de) + +> The MIT License (MIT) +> +> Copyright (c) 2014-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## is-plain-obj@v2.1.0 + +> Check if a value is a plain object + +License: MIT +Author: Sindre Sorhus (sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## is-whitespace-character@v1.0.4 + +> Check if a character is a whitespace character + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## is-word-character@v1.0.4 + +> Check if a character is a word character + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## iterate-directory-up@v1.1.1 + +> Iterate directory up. + +License: MIT +Homepage: +Author: fisker Cheung (https://www.fiskercheung.com/) + +> MIT License +> +> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## jest-docblock@v30.0.0-alpha.7 + +License: MIT +Repository: + +> MIT License +> +> Copyright (c) Meta Platforms, Inc. and affiliates. +> Copyright Contributors to the Jest project. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## js-tokens@v4.0.0 + +> A regex that tokenizes JavaScript. + +License: MIT +Author: Simon Lydell + +> The MIT License (MIT) +> +> Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## js-yaml@v4.1.0 + +> YAML 1.2 parser and serializer + +License: MIT +Author: Vladimir Zapparov +Contributors: + - Aleksey V Zapparov (http://www.ixti.net/) + - Vitaly Puzrin (https://github.com/puzrin) + - Martin Grenfell (http://got-ravings.blogspot.com) + +> (The MIT License) +> +> Copyright (C) 2011-2015 by Vitaly Puzrin +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## json5@v2.2.3 + +> JSON for Humans + +License: MIT +Homepage: +Repository: +Author: Aseem Kishore +Contributors: + - Max Nanasy + - Andrew Eisenberg + - Jordan Tucker + +> MIT License +> +> Copyright (c) 2012-2018 Aseem Kishore, and [others]. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. +> +> [others]: https://github.com/json5/json5/contributors + +---------------------------------------- + +## keyv@v5.2.3 + +> Simple key-value storage with support for multiple backends + +License: MIT +Homepage: +Repository: +Author: Jared Wray (http://jaredwray.com) + +> MIT License +> +> Copyright (c) 2017-2021 Luke Childs +> Copyright (c) 2021-2022 Jared Wray +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## leven@v4.0.0 + +> Measure the difference between two strings using the Levenshtein distance algorithm + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## lines-and-columns@v2.0.4 + +> Maps lines and columns to character offsets and back. + +License: MIT +Homepage: +Repository: +Author: Brian Donovan + +> The MIT License (MIT) +> +> Copyright (c) 2015 Brian Donovan +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## locate-path@v7.2.0 + +> Get the first path that exists on disk of multiple paths + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## lru-cache@v4.1.5 + +> A cache object that deletes the least-recently-used items. + +License: ISC +Author: Isaac Z. Schlueter + +> The ISC License +> +> Copyright (c) Isaac Z. Schlueter and Contributors +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## markdown-escapes@v1.0.4 + +> List of escapable characters in markdown + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## merge2@v1.4.1 + +> Merge multiple streams into one stream in sequence or parallel. + +License: MIT +Homepage: +Repository: + +> The MIT License (MIT) +> +> Copyright (c) 2014-2020 Teambition +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## meriyah@v6.0.5 + +> A 100% compliant, self-hosted javascript parser with high focus on both performance and stability + +License: ISC +Homepage: +Repository: +Author: Kenny F. (https://github.com/KFlash) +Contributors: + - Chunpeng Huo (https://github.com/3cp) + +> ISC License +> +> Copyright (c) 2019 and later, KFlash and others. +> +> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## micromatch@v4.0.8 + +> Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) +Contributors: + - null (https://github.com/DianeLooney) + - Amila Welihinda (amilajack.com) + - Bogdan Chadkin (https://github.com/TrySound) + - Brian Woodward (https://twitter.com/doowb) + - Devon Govett (http://badassjs.com) + - Elan Shanker (https://github.com/es128) + - Fabrício Matté (https://ultcombo.js.org) + - Jon Schlinkert (http://twitter.com/jonschlinkert) + - Martin Kolárik (https://kolarik.sk) + - Olsten Larck (https://i.am.charlike.online) + - Paul Miller (paulmillr.com) + - Tom Byrer (https://github.com/tomByrer) + - Tyler Akins (http://rumkin.com) + - Peter Bright (https://github.com/drpizza) + - Kuba Juszczyk (https://github.com/ku8ar) + +> The MIT License (MIT) +> +> Copyright (c) 2014-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## minimist@v1.2.8 + +> parse argument options + +License: MIT +Homepage: +Repository: +Author: James Halliday (http://substack.net) + +> This software is released under the MIT license: +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## n-readlines@v1.0.1 + +> Read file line by line without buffering the whole file in memory. + +License: MIT +Repository: +Author: Yoan Arnaudov + +> The MIT License (MIT) +> +> Copyright (c) 2013 Liucw +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## nanoid@v3.3.8 + +> A tiny (116 bytes), secure URL-friendly unique string ID generator + +License: MIT +Author: Andrey Sitnik + +> The MIT License (MIT) +> +> Copyright 2017 Andrey Sitnik +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## p-limit@v4.0.0 + +> Run multiple promise-returning & async functions with limited concurrency + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## p-locate@v6.0.0 + +> Get the first fulfilled promise that satisfies the provided testing function + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## parse-entities@v2.0.0 + +> Parse HTML character references: fast, spec-compliant, positional information + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## parse-json@v8.1.0 + +> Parse JSON with more helpful errors + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## path-exists@v5.0.0 + +> Check if a path exists + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## picocolors@v1.1.1 + +> The tiniest and the fastest library for terminal output formatting with ANSI colors + +License: ISC +Author: Alexey Raspopov + +> ISC License +> +> Copyright (c) 2021-2024 Oleksii Raspopov, Kostiantyn Denysov, Anton Verinov +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## picomatch@v2.3.1 + +> Blazing fast and accurate glob matcher written in JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) + +> The MIT License (MIT) +> +> Copyright (c) 2017-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## pkg-dir@v7.0.0 + +> Find the root directory of a Node.js project or npm package + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## please-upgrade-node@v3.2.0 + +> Displays a beginner-friendly message telling your user to upgrade their version of Node + +License: MIT +Homepage: +Repository: +Author: typicode + +> MIT License +> +> Copyright (c) 2017 +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## postcss@v8.5.3 + +> Tool for transforming styles with JS plugins + +License: MIT +Homepage: +Author: Andrey Sitnik + +> The MIT License (MIT) +> +> Copyright 2013 Andrey Sitnik +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## postcss-less@v6.0.0 + +> LESS parser for PostCSS + +License: MIT +Homepage: +Author: Denys Kniazevych + +> The MIT License (MIT) +> +> Copyright (c) 2013 Andrey Sitnik +> Copyright (c) 2016 Denys Kniazevych +> Copyright (c) 2016 Pat Sissons +> Copyright (c) 2017 Andrew Powell +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## postcss-media-query-parser@v0.2.3 + +> A tool for parsing media query lists. + +License: MIT +Homepage: +Repository: +Author: dryoma + +---------------------------------------- + +## postcss-scss@v4.0.9 + +> SCSS parser for PostCSS + +License: MIT +Author: Andrey Sitnik + +> The MIT License (MIT) +> +> Copyright 2013 Andrey Sitnik +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## postcss-selector-parser@v2.2.3 + +License: MIT +Homepage: +Author: Ben Briggs (http://beneb.info) + +> Copyright (c) Ben Briggs (http://beneb.info) +> +> Permission is hereby granted, free of charge, to any person +> obtaining a copy of this software and associated documentation +> files (the "Software"), to deal in the Software without +> restriction, including without limitation the rights to use, +> copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the +> Software is furnished to do so, subject to the following +> conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +> OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +> HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +> WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +> OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## postcss-values-parser@v2.0.1 + +> A CSS property value parser for use with PostCSS + +License: MIT +Author: Andrew Powell (shellscape) (http://shellscape.org) + +> Copyright (c) Andrew Powell +> +> Permission is hereby granted, free of charge, to any person +> obtaining a copy of this software and associated documentation +> files (the "Software"), to deal in the Software without +> restriction, including without limitation the rights to use, +> copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the +> Software is furnished to do so, subject to the following +> conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +> OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +> HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +> WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +> OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## pseudomap@v1.0.2 + +> A thing that is a lot like ES6 `Map`, but without iterators, for use in environments where `for..of` syntax and `Map` are not available. + +License: ISC +Homepage: +Repository: +Author: Isaac Z. Schlueter (http://blog.izs.me/) + +> The ISC License +> +> Copyright (c) Isaac Z. Schlueter and Contributors +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## queue-microtask@v1.2.3 + +> fast, tiny `queueMicrotask` shim for modern engines + +License: MIT +Homepage: +Repository: +Author: Feross Aboukhadijeh (https://feross.org) + +> The MIT License (MIT) +> +> Copyright (c) Feross Aboukhadijeh +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## remark-footnotes@v2.0.0 + +> remark plugin to add support for pandoc footnotes + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2020 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## remark-math@v3.0.1 + +> remark plugin to parse and stringify math + +License: MIT +Author: Junyoung Choi (https://rokt33r.github.io) +Contributors: + - Junyoung Choi (https://rokt33r.github.io) + - Titus Wormer (https://wooorm.com) + +---------------------------------------- + +## remark-parse@v8.0.3 + +> remark plugin to parse Markdown + +License: MIT +Homepage: +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + - Eugene Sharygin + - Junyoung Choi + - Elijah Hamovitz + - Ika + +---------------------------------------- + +## repeat-string@v1.6.1 + +> Repeat the given string n times. Fastest implementation for repeating a string. + +License: MIT +Homepage: +Author: Jon Schlinkert (http://github.com/jonschlinkert) +Contributors: + - Brian Woodward (https://github.com/doowb) + - Jon Schlinkert (http://twitter.com/jonschlinkert) + - Linus Unnebäck (http://linus.unnebäck.se) + - Thijs Busser (http://tbusser.net) + - Titus (wooorm.com) + +> The MIT License (MIT) +> +> Copyright (c) 2014-2016, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## reusify@v1.0.4 + +> Reuse objects and functions with style + +License: MIT +Homepage: +Repository: +Author: Matteo Collina + +> The MIT License (MIT) +> +> Copyright (c) 2015 Matteo Collina +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## run-parallel@v1.2.0 + +> Run an array of functions in parallel + +License: MIT +Homepage: +Repository: +Author: Feross Aboukhadijeh (https://feross.org) + +> The MIT License (MIT) +> +> Copyright (c) Feross Aboukhadijeh +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## sdbm@v2.0.0 + +> SDBM non-cryptographic hash function + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## semver@v7.7.1 + +> The semantic version parser used by npm. + +License: ISC +Repository: +Author: GitHub Inc. + +> The ISC License +> +> Copyright (c) Isaac Z. Schlueter and Contributors +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## semver-compare@v1.0.0 + +> compare two semver version strings, returning -1, 0, or 1 + +License: MIT +Homepage: +Repository: +Author: James Halliday (http://substack.net) + +> This software is released under the MIT license: +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +> the Software, and to permit persons to whom the Software is furnished to do so, +> subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +> FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +> COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +> IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +> CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## sigmund@v1.0.1 + +> Quick and dirty signatures for Objects. + +License: ISC +Repository: +Author: Isaac Z. Schlueter (http://blog.izs.me/) + +> The ISC License +> +> Copyright (c) Isaac Z. Schlueter and Contributors +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## simple-html-tokenizer@v0.5.11 + +> Simple HTML Tokenizer is a lightweight JavaScript library that can be used to tokenize the kind of HTML normally found in templates. + +License: MIT +Repository: + +> Copyright (c) 2014 Yehuda Katz and contributors +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +> of the Software, and to permit persons to whom the Software is furnished to do +> so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## smol-toml@v1.3.1 + +> A small, fast, and correct TOML parser/serializer + +License: BSD-3-Clause +Author: Cynthia + +> Copyright (c) Squirrel Chat et al., All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions are met: +> +> 1. Redistributions of source code must retain the above copyright notice, this +> list of conditions and the following disclaimer. +> 2. Redistributions in binary form must reproduce the above copyright notice, +> this list of conditions and the following disclaimer in the +> documentation and/or other materials provided with the distribution. +> 3. Neither the name of the copyright holder nor the names of its contributors +> may be used to endorse or promote products derived from this software without +> specific prior written permission. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +> ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------- + +## state-toggle@v1.0.3 + +> Enter/exit a state + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## strip-ansi@v7.1.0 + +> Strip ANSI escape codes from a string + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## to-fast-properties@v4.0.0 + +> Force V8 to use fast properties for an object + +License: MIT +Author: Sindre Sorhus (https:/sindresorhus.com) + +> MIT License +> +> Copyright (c) Petka Antonov +> Benjamin Gruenbaum +> John-David Dalton +> Sindre Sorhus +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## to-regex-range@v5.0.1 + +> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions. + +License: MIT +Homepage: +Author: Jon Schlinkert (https://github.com/jonschlinkert) +Contributors: + - Jon Schlinkert (http://twitter.com/jonschlinkert) + - Rouven Weßling (www.rouvenwessling.de) + +> The MIT License (MIT) +> +> Copyright (c) 2015-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## trim@v1.0.1 + +> Trim string whitespace + +License: MIT +Repository: +Author: TJ Holowaychuk + +---------------------------------------- + +## trim-trailing-lines@v1.1.4 + +> Remove final line feeds from a string + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## trough@v1.0.5 + +> Middleware: a channel used to convey a liquid + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## ts-api-utils@v2.0.1 + +> Utility functions for working with TypeScript's API. Successor to the wonderful tsutils. 🛠️️ + +License: MIT +Repository: +Author: JoshuaKGoldberg + +> # MIT License +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## typescript@v5.7.3 + +> TypeScript is a language for application scale JavaScript development + +License: Apache-2.0 +Homepage: +Repository: +Author: Microsoft Corp. + +> Apache License +> +> Version 2.0, January 2004 +> +> http://www.apache.org/licenses/ +> +> TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +> +> 1. Definitions. +> +> "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. +> +> "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. +> +> "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. +> +> "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. +> +> "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. +> +> "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. +> +> "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). +> +> "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. +> +> "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." +> +> "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. +> +> 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. +> +> 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. +> +> 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: +> +> You must give any other recipients of the Work or Derivative Works a copy of this License; and +> +> You must cause any modified files to carry prominent notices stating that You changed the files; and +> +> You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +> +> If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. +> +> 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. +> +> 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. +> +> 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. +> +> 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. +> +> 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. +> +> END OF TERMS AND CONDITIONS + +---------------------------------------- + +## unherit@v1.1.3 + +> Clone a constructor without affecting the super-class + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## unified@v9.2.2 + +> Interface for parsing, inspecting, transforming, and serializing content through syntax trees + +License: MIT +Homepage: +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + - Junyoung Choi + - Hernan Rajchert + - Christian Murphy + - Vse Mozhet Byt + - Richard Littauer + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## uniq@v1.0.1 + +> Removes duplicates from a sorted array in place + +License: MIT +Repository: +Author: Mikola Lysenko + +> The MIT License (MIT) +> +> Copyright (c) 2013 Mikola Lysenko +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## unist-util-is@v4.1.0 + +> unist utility to check if a node passes a test + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + - Christian Murphy + - Lucas Brandstaetter (https://github.com/Roang-zero1) + +> (The MIT license) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## unist-util-remove-position@v2.0.1 + +> unist utility to remove positions from a tree + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## unist-util-stringify-position@v2.0.3 + +> unist utility to serialize a node, position, or point as a human readable location + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## unist-util-visit@v2.0.3 + +> unist utility to visit nodes + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + - Eugene Sharygin + - Richard Gibson + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## unist-util-visit-parents@v3.1.1 + +> unist utility to recursively walk over nodes, with ancestral information + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## url-or-path@v2.3.2 + +> Convert between file URL and path. + +License: MIT +Homepage: +Author: fisker Cheung (https://www.fiskercheung.com/) + +> MIT License +> +> Copyright (c) fisker Cheung (https://www.fiskercheung.com/) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## vfile@v4.2.1 + +> Virtual file format for text processing + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + - Brendan Abbott + - Denys Dovhan + - Kyle Mathews + - Shinnosuke Watanabe + - Sindre Sorhus + +> (The MIT License) +> +> Copyright (c) 2015 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## vfile-location@v3.2.0 + +> vfile utility to convert between positional (line and column-based) and offset (range-based) locations + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + - Christian Murphy + +> (The MIT License) +> +> Copyright (c) 2016 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## vfile-message@v2.0.4 + +> vfile utility to create a virtual message + +License: MIT +Author: Titus Wormer (https://wooorm.com) +Contributors: + - Titus Wormer (https://wooorm.com) + +> (The MIT License) +> +> Copyright (c) 2017 Titus Wormer +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> 'Software'), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +---------------------------------------- + +## vnopts@v2.0.0 + +> validate and normalize options + +License: MIT +Homepage: +Author: Ika (https://github.com/ikatyang) + +> MIT License +> +> Copyright (c) Ika (https://github.com/ikatyang) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## wcwidth.js@v2.0.0 + +> a javascript porting of C's wcwidth() + +License: MIT +Homepage: +Repository: +Author: Woong Jun (http://code.woong.org/) +Contributors: + - Tim Oxley (http://campjs.com/) + +> wcwidth.js: a javascript portng of C's wcwidth() +> ================================================ +> +> Copyright (C) 2012-2014 by Woong Jun and Tim Oxley. +> +> This package is a javascript porting of `wcwidth()` implementation +> [by Markus Kuhn](http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c). +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of +> this software and associated documentation files (the "Software"), to deal in +> the Software without restriction, including without limitation the rights to +> use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +> of the Software, and to permit persons to whom the Software is furnished to do +> so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> +> THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +> INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +> FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR +> OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +> EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +> OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +> IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +> OF SUCH DAMAGE. + +---------------------------------------- + +## xtend@v4.0.2 + +> extend like a boss + +License: MIT +Homepage: +Author: Raynos +Contributors: + - Jake Verbaten + - Matt Esch + +> The MIT License (MIT) +> Copyright (c) 2012-2014 Raynos. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +---------------------------------------- + +## yallist@v2.1.2 + +> Yet Another Linked List + +License: ISC +Repository: +Author: Isaac Z. Schlueter (http://blog.izs.me/) + +> The ISC License +> +> Copyright (c) Isaac Z. Schlueter and Contributors +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---------------------------------------- + +## yaml@v1.10.2 + +> JavaScript parser and stringifier for YAML + +License: ISC +Homepage: +Author: Eemeli Aro + +> Copyright 2018 Eemeli Aro +> +> Permission to use, copy, modify, and/or distribute this software for any purpose +> with or without fee is hereby granted, provided that the above copyright notice +> and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +> FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +> OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +> TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +> THIS SOFTWARE. + +---------------------------------------- + +## yaml-unist-parser@v2.0.1 + +> A YAML parser that produces output compatible with unist + +License: MIT +Homepage: +Author: Ika (https://github.com/ikatyang) + +> MIT License +> +> Copyright (c) Ika (https://github.com/ikatyang) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +---------------------------------------- + +## yocto-queue@v1.1.1 + +> Tiny queue data structure + +License: MIT +Author: Sindre Sorhus (https://sindresorhus.com) + +> MIT License +> +> Copyright (c) Sindre Sorhus (https://sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/prettier/bin/prettier.cjs b/node_modules/prettier/bin/prettier.cjs new file mode 100644 index 0000000..08f8e3b --- /dev/null +++ b/node_modules/prettier/bin/prettier.cjs @@ -0,0 +1,68 @@ +#!/usr/bin/env node +"use strict"; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __commonJS = function(cb, mod) { + return function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + }; +}; + +// node_modules/semver-compare/index.js +var require_semver_compare = __commonJS({ + "node_modules/semver-compare/index.js": function(exports2, module2) { + module2.exports = function cmp(a, b) { + var pa = a.split("."); + var pb = b.split("."); + for (var i = 0; i < 3; i++) { + var na = Number(pa[i]); + var nb = Number(pb[i]); + if (na > nb) return 1; + if (nb > na) return -1; + if (!isNaN(na) && isNaN(nb)) return 1; + if (isNaN(na) && !isNaN(nb)) return -1; + } + return 0; + }; + } +}); + +// node_modules/please-upgrade-node/index.js +var require_please_upgrade_node = __commonJS({ + "node_modules/please-upgrade-node/index.js": function(exports2, module2) { + var semverCompare = require_semver_compare(); + module2.exports = function pleaseUpgradeNode2(pkg, opts) { + var opts = opts || {}; + var requiredVersion = pkg.engines.node.replace(">=", ""); + var currentVersion = process.version.replace("v", ""); + if (semverCompare(currentVersion, requiredVersion) === -1) { + if (opts.message) { + console.error(opts.message(requiredVersion)); + } else { + console.error( + pkg.name + " requires at least version " + requiredVersion + " of Node, please upgrade" + ); + } + if (opts.hasOwnProperty("exitCode")) { + process.exit(opts.exitCode); + } else { + process.exit(1); + } + } + }; + } +}); + +// bin/prettier.cjs +var nodeModule = require("module"); +if (typeof nodeModule.enableCompileCache === "function") { + nodeModule.enableCompileCache(); +} +var pleaseUpgradeNode = require_please_upgrade_node(); +var packageJson = require("../package.json"); +pleaseUpgradeNode(packageJson); +function runCli(cli) { + return cli.run(); +} +var dynamicImport = new Function("module", "return import(module)"); +var promise = dynamicImport("../internal/cli.mjs").then(runCli); +module.exports.__promise = promise; diff --git a/node_modules/prettier/doc.d.ts b/node_modules/prettier/doc.d.ts new file mode 100644 index 0000000..5011775 --- /dev/null +++ b/node_modules/prettier/doc.d.ts @@ -0,0 +1,254 @@ +// https://github.com/prettier/prettier/blob/next/src/document/public.js +export namespace builders { + type DocCommand = + | Align + | BreakParent + | Cursor + | Fill + | Group + | IfBreak + | Indent + | IndentIfBreak + | Label + | Line + | LineSuffix + | LineSuffixBoundary + | Trim; + type Doc = string | Doc[] | DocCommand; + + interface Align { + type: "align"; + contents: Doc; + n: number | string | { type: "root" }; + } + + interface BreakParent { + type: "break-parent"; + } + + interface Cursor { + type: "cursor"; + placeholder: symbol; + } + + interface Fill { + type: "fill"; + parts: Doc[]; + } + + interface Group { + type: "group"; + id?: symbol; + contents: Doc; + break: boolean; + expandedStates: Doc[]; + } + + interface HardlineWithoutBreakParent extends Line { + hard: true; + } + + interface IfBreak { + type: "if-break"; + breakContents: Doc; + flatContents: Doc; + } + + interface Indent { + type: "indent"; + contents: Doc; + } + + interface IndentIfBreak { + type: "indent-if-break"; + } + + interface Label { + type: "label"; + label: any; + contents: Doc; + } + + interface Line { + type: "line"; + soft?: boolean | undefined; + hard?: boolean | undefined; + literal?: boolean | undefined; + } + + interface LineSuffix { + type: "line-suffix"; + contents: Doc; + } + + interface LineSuffixBoundary { + type: "line-suffix-boundary"; + } + + interface LiterallineWithoutBreakParent extends Line { + hard: true; + literal: true; + } + + type LiteralLine = [LiterallineWithoutBreakParent, BreakParent]; + + interface Softline extends Line { + soft: true; + } + + type Hardline = [HardlineWithoutBreakParent, BreakParent]; + + interface Trim { + type: "trim"; + } + + interface GroupOptions { + shouldBreak?: boolean | undefined; + id?: symbol | undefined; + } + + function addAlignmentToDoc(doc: Doc, size: number, tabWidth: number): Doc; + + /** @see [align](https://github.com/prettier/prettier/blob/main/commands.md#align) */ + function align(widthOrString: Align["n"], doc: Doc): Align; + + /** @see [breakParent](https://github.com/prettier/prettier/blob/main/commands.md#breakparent) */ + const breakParent: BreakParent; + + /** @see [conditionalGroup](https://github.com/prettier/prettier/blob/main/commands.md#conditionalgroup) */ + function conditionalGroup(alternatives: Doc[], options?: GroupOptions): Group; + + /** @see [dedent](https://github.com/prettier/prettier/blob/main/commands.md#dedent) */ + function dedent(doc: Doc): Align; + + /** @see [dedentToRoot](https://github.com/prettier/prettier/blob/main/commands.md#dedenttoroot) */ + function dedentToRoot(doc: Doc): Align; + + /** @see [fill](https://github.com/prettier/prettier/blob/main/commands.md#fill) */ + function fill(docs: Doc[]): Fill; + + /** @see [group](https://github.com/prettier/prettier/blob/main/commands.md#group) */ + function group(doc: Doc, opts?: GroupOptions): Group; + + /** @see [hardline](https://github.com/prettier/prettier/blob/main/commands.md#hardline) */ + const hardline: Hardline; + + /** @see [hardlineWithoutBreakParent](https://github.com/prettier/prettier/blob/main/commands.md#hardlinewithoutbreakparent-and-literallinewithoutbreakparent) */ + const hardlineWithoutBreakParent: HardlineWithoutBreakParent; + + /** @see [ifBreak](https://github.com/prettier/prettier/blob/main/commands.md#ifbreak) */ + function ifBreak( + ifBreak: Doc, + noBreak?: Doc, + options?: { groupId?: symbol | undefined }, + ): IfBreak; + + /** @see [indent](https://github.com/prettier/prettier/blob/main/commands.md#indent) */ + function indent(doc: Doc): Indent; + + /** @see [indentIfBreak](https://github.com/prettier/prettier/blob/main/commands.md#indentifbreak) */ + function indentIfBreak( + doc: Doc, + opts: { groupId: symbol; negate?: boolean | undefined }, + ): IndentIfBreak; + + /** @see [join](https://github.com/prettier/prettier/blob/main/commands.md#join) */ + function join(sep: Doc, docs: Doc[]): Doc[]; + + /** @see [label](https://github.com/prettier/prettier/blob/main/commands.md#label) */ + function label(label: any | undefined, contents: Doc): Doc; + + /** @see [line](https://github.com/prettier/prettier/blob/main/commands.md#line) */ + const line: Line; + + /** @see [lineSuffix](https://github.com/prettier/prettier/blob/main/commands.md#linesuffix) */ + function lineSuffix(suffix: Doc): LineSuffix; + + /** @see [lineSuffixBoundary](https://github.com/prettier/prettier/blob/main/commands.md#linesuffixboundary) */ + const lineSuffixBoundary: LineSuffixBoundary; + + /** @see [literalline](https://github.com/prettier/prettier/blob/main/commands.md#literalline) */ + const literalline: LiteralLine; + + /** @see [literallineWithoutBreakParent](https://github.com/prettier/prettier/blob/main/commands.md#hardlinewithoutbreakparent-and-literallinewithoutbreakparent) */ + const literallineWithoutBreakParent: LiterallineWithoutBreakParent; + + /** @see [markAsRoot](https://github.com/prettier/prettier/blob/main/commands.md#markasroot) */ + function markAsRoot(doc: Doc): Align; + + /** @see [softline](https://github.com/prettier/prettier/blob/main/commands.md#softline) */ + const softline: Softline; + + /** @see [trim](https://github.com/prettier/prettier/blob/main/commands.md#trim) */ + const trim: Trim; + + /** @see [cursor](https://github.com/prettier/prettier/blob/main/commands.md#cursor) */ + const cursor: Cursor; +} + +export namespace printer { + function printDocToString( + doc: builders.Doc, + options: Options, + ): { + formatted: string; + /** + * This property is a misnomer, and has been since the changes in + * https://github.com/prettier/prettier/pull/15709. + * The region of the document indicated by `cursorNodeStart` and `cursorNodeText` will + * sometimes actually be what lies BETWEEN a pair of leaf nodes in the AST, rather than a node. + */ + cursorNodeStart?: number | undefined; + + /** + * Note that, like cursorNodeStart, this is a misnomer and may actually be the text between two + * leaf nodes in the AST instead of the text of a node. + */ + cursorNodeText?: string | undefined; + }; + interface Options { + /** + * Specify the line length that the printer will wrap on. + * @default 80 + */ + printWidth: number; + /** + * Specify the number of spaces per indentation-level. + * @default 2 + */ + tabWidth: number; + /** + * Indent lines with tabs instead of spaces + * @default false + */ + useTabs?: boolean; + parentParser?: string | undefined; + __embeddedInHtml?: boolean | undefined; + } +} + +export namespace utils { + function willBreak(doc: builders.Doc): boolean; + function traverseDoc( + doc: builders.Doc, + onEnter?: (doc: builders.Doc) => void | boolean, + onExit?: (doc: builders.Doc) => void, + shouldTraverseConditionalGroups?: boolean, + ): void; + function findInDoc( + doc: builders.Doc, + callback: (doc: builders.Doc) => T, + defaultValue: T, + ): T; + function mapDoc( + doc: builders.Doc, + callback: (doc: builders.Doc) => T, + ): T; + function removeLines(doc: builders.Doc): builders.Doc; + function stripTrailingHardline(doc: builders.Doc): builders.Doc; + function replaceEndOfLine( + doc: builders.Doc, + replacement?: builders.Doc, + ): builders.Doc; + function canBreak(doc: builders.Doc): boolean; +} diff --git a/node_modules/prettier/doc.js b/node_modules/prettier/doc.js new file mode 100644 index 0000000..2923c46 --- /dev/null +++ b/node_modules/prettier/doc.js @@ -0,0 +1,1261 @@ +(function (factory) { + function interopModuleDefault() { + var module = factory(); + return module.default || module; + } + + if (typeof exports === "object" && typeof module === "object") { + module.exports = interopModuleDefault(); + } else if (typeof define === "function" && define.amd) { + define(interopModuleDefault); + } else { + var root = + typeof globalThis !== "undefined" + ? globalThis + : typeof global !== "undefined" + ? global + : typeof self !== "undefined" + ? self + : this || {}; + root.doc = interopModuleDefault(); + } +})(function () { + "use strict"; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + + // src/document/public.js + var public_exports = {}; + __export(public_exports, { + builders: () => builders, + printer: () => printer, + utils: () => utils + }); + + // src/document/constants.js + var DOC_TYPE_STRING = "string"; + var DOC_TYPE_ARRAY = "array"; + var DOC_TYPE_CURSOR = "cursor"; + var DOC_TYPE_INDENT = "indent"; + var DOC_TYPE_ALIGN = "align"; + var DOC_TYPE_TRIM = "trim"; + var DOC_TYPE_GROUP = "group"; + var DOC_TYPE_FILL = "fill"; + var DOC_TYPE_IF_BREAK = "if-break"; + var DOC_TYPE_INDENT_IF_BREAK = "indent-if-break"; + var DOC_TYPE_LINE_SUFFIX = "line-suffix"; + var DOC_TYPE_LINE_SUFFIX_BOUNDARY = "line-suffix-boundary"; + var DOC_TYPE_LINE = "line"; + var DOC_TYPE_LABEL = "label"; + var DOC_TYPE_BREAK_PARENT = "break-parent"; + var VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([ + DOC_TYPE_CURSOR, + DOC_TYPE_INDENT, + DOC_TYPE_ALIGN, + DOC_TYPE_TRIM, + DOC_TYPE_GROUP, + DOC_TYPE_FILL, + DOC_TYPE_IF_BREAK, + DOC_TYPE_INDENT_IF_BREAK, + DOC_TYPE_LINE_SUFFIX, + DOC_TYPE_LINE_SUFFIX_BOUNDARY, + DOC_TYPE_LINE, + DOC_TYPE_LABEL, + DOC_TYPE_BREAK_PARENT + ]); + + // scripts/build/shims/at.js + var at = (isOptionalObject, object, index) => { + if (isOptionalObject && (object === void 0 || object === null)) { + return; + } + if (Array.isArray(object) || typeof object === "string") { + return object[index < 0 ? object.length + index : index]; + } + return object.at(index); + }; + var at_default = at; + + // src/document/utils/get-doc-type.js + function getDocType(doc) { + if (typeof doc === "string") { + return DOC_TYPE_STRING; + } + if (Array.isArray(doc)) { + return DOC_TYPE_ARRAY; + } + if (!doc) { + return; + } + const { type } = doc; + if (VALID_OBJECT_DOC_TYPES.has(type)) { + return type; + } + } + var get_doc_type_default = getDocType; + + // src/document/invalid-doc-error.js + var disjunctionListFormat = (list) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(list); + function getDocErrorMessage(doc) { + const type = doc === null ? "null" : typeof doc; + if (type !== "string" && type !== "object") { + return `Unexpected doc '${type}', +Expected it to be 'string' or 'object'.`; + } + if (get_doc_type_default(doc)) { + throw new Error("doc is valid."); + } + const objectType = Object.prototype.toString.call(doc); + if (objectType !== "[object Object]") { + return `Unexpected doc '${objectType}'.`; + } + const EXPECTED_TYPE_VALUES = disjunctionListFormat( + [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`) + ); + return `Unexpected doc.type '${doc.type}'. +Expected it to be ${EXPECTED_TYPE_VALUES}.`; + } + var InvalidDocError = class extends Error { + name = "InvalidDocError"; + constructor(doc) { + super(getDocErrorMessage(doc)); + this.doc = doc; + } + }; + var invalid_doc_error_default = InvalidDocError; + + // src/document/utils/traverse-doc.js + var traverseDocOnExitStackMarker = {}; + function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { + const docsStack = [doc]; + while (docsStack.length > 0) { + const doc2 = docsStack.pop(); + if (doc2 === traverseDocOnExitStackMarker) { + onExit(docsStack.pop()); + continue; + } + if (onExit) { + docsStack.push(doc2, traverseDocOnExitStackMarker); + } + const docType = get_doc_type_default(doc2); + if (!docType) { + throw new invalid_doc_error_default(doc2); + } + if ((onEnter == null ? void 0 : onEnter(doc2)) === false) { + continue; + } + switch (docType) { + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts; + for (let ic = parts.length, i = ic - 1; i >= 0; --i) { + docsStack.push(parts[i]); + } + break; + } + case DOC_TYPE_IF_BREAK: + docsStack.push(doc2.flatContents, doc2.breakContents); + break; + case DOC_TYPE_GROUP: + if (shouldTraverseConditionalGroups && doc2.expandedStates) { + for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) { + docsStack.push(doc2.expandedStates[i]); + } + } else { + docsStack.push(doc2.contents); + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + docsStack.push(doc2.contents); + break; + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + } + } + var traverse_doc_default = traverseDoc; + + // src/document/utils.js + function mapDoc(doc, cb) { + if (typeof doc === "string") { + return cb(doc); + } + const mapped = /* @__PURE__ */ new Map(); + return rec(doc); + function rec(doc2) { + if (mapped.has(doc2)) { + return mapped.get(doc2); + } + const result = process2(doc2); + mapped.set(doc2, result); + return result; + } + function process2(doc2) { + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_ARRAY: + return cb(doc2.map(rec)); + case DOC_TYPE_FILL: + return cb({ ...doc2, parts: doc2.parts.map(rec) }); + case DOC_TYPE_IF_BREAK: + return cb({ + ...doc2, + breakContents: rec(doc2.breakContents), + flatContents: rec(doc2.flatContents) + }); + case DOC_TYPE_GROUP: { + let { expandedStates, contents } = doc2; + if (expandedStates) { + expandedStates = expandedStates.map(rec); + contents = expandedStates[0]; + } else { + contents = rec(contents); + } + return cb({ ...doc2, contents, expandedStates }); + } + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + return cb({ ...doc2, contents: rec(doc2.contents) }); + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + return cb(doc2); + default: + throw new invalid_doc_error_default(doc2); + } + } + } + function findInDoc(doc, fn, defaultValue) { + let result = defaultValue; + let shouldSkipFurtherProcessing = false; + function findInDocOnEnterFn(doc2) { + if (shouldSkipFurtherProcessing) { + return false; + } + const maybeResult = fn(doc2); + if (maybeResult !== void 0) { + shouldSkipFurtherProcessing = true; + result = maybeResult; + } + } + traverse_doc_default(doc, findInDocOnEnterFn); + return result; + } + function willBreakFn(doc) { + if (doc.type === DOC_TYPE_GROUP && doc.break) { + return true; + } + if (doc.type === DOC_TYPE_LINE && doc.hard) { + return true; + } + if (doc.type === DOC_TYPE_BREAK_PARENT) { + return true; + } + } + function willBreak(doc) { + return findInDoc(doc, willBreakFn, false); + } + function breakParentGroup(groupStack) { + if (groupStack.length > 0) { + const parentGroup = at_default( + /* isOptionalObject */ + false, + groupStack, + -1 + ); + if (!parentGroup.expandedStates && !parentGroup.break) { + parentGroup.break = "propagated"; + } + } + return null; + } + function propagateBreaks(doc) { + const alreadyVisitedSet = /* @__PURE__ */ new Set(); + const groupStack = []; + function propagateBreaksOnEnterFn(doc2) { + if (doc2.type === DOC_TYPE_BREAK_PARENT) { + breakParentGroup(groupStack); + } + if (doc2.type === DOC_TYPE_GROUP) { + groupStack.push(doc2); + if (alreadyVisitedSet.has(doc2)) { + return false; + } + alreadyVisitedSet.add(doc2); + } + } + function propagateBreaksOnExitFn(doc2) { + if (doc2.type === DOC_TYPE_GROUP) { + const group2 = groupStack.pop(); + if (group2.break) { + breakParentGroup(groupStack); + } + } + } + traverse_doc_default( + doc, + propagateBreaksOnEnterFn, + propagateBreaksOnExitFn, + /* shouldTraverseConditionalGroups */ + true + ); + } + function removeLinesFn(doc) { + if (doc.type === DOC_TYPE_LINE && !doc.hard) { + return doc.soft ? "" : " "; + } + if (doc.type === DOC_TYPE_IF_BREAK) { + return doc.flatContents; + } + return doc; + } + function removeLines(doc) { + return mapDoc(doc, removeLinesFn); + } + function stripTrailingHardlineFromParts(parts) { + parts = [...parts]; + while (parts.length >= 2 && at_default( + /* isOptionalObject */ + false, + parts, + -2 + ).type === DOC_TYPE_LINE && at_default( + /* isOptionalObject */ + false, + parts, + -1 + ).type === DOC_TYPE_BREAK_PARENT) { + parts.length -= 2; + } + if (parts.length > 0) { + const lastPart = stripTrailingHardlineFromDoc(at_default( + /* isOptionalObject */ + false, + parts, + -1 + )); + parts[parts.length - 1] = lastPart; + } + return parts; + } + function stripTrailingHardlineFromDoc(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_GROUP: + case DOC_TYPE_LINE_SUFFIX: + case DOC_TYPE_LABEL: { + const contents = stripTrailingHardlineFromDoc(doc.contents); + return { ...doc, contents }; + } + case DOC_TYPE_IF_BREAK: + return { + ...doc, + breakContents: stripTrailingHardlineFromDoc(doc.breakContents), + flatContents: stripTrailingHardlineFromDoc(doc.flatContents) + }; + case DOC_TYPE_FILL: + return { ...doc, parts: stripTrailingHardlineFromParts(doc.parts) }; + case DOC_TYPE_ARRAY: + return stripTrailingHardlineFromParts(doc); + case DOC_TYPE_STRING: + return doc.replace(/[\n\r]*$/u, ""); + case DOC_TYPE_ALIGN: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; + } + function stripTrailingHardline(doc) { + return stripTrailingHardlineFromDoc(cleanDoc(doc)); + } + function cleanDocFn(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_FILL: + if (doc.parts.every((part) => part === "")) { + return ""; + } + break; + case DOC_TYPE_GROUP: + if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) { + return ""; + } + if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) { + return doc.contents; + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LINE_SUFFIX: + if (!doc.contents) { + return ""; + } + break; + case DOC_TYPE_IF_BREAK: + if (!doc.flatContents && !doc.breakContents) { + return ""; + } + break; + case DOC_TYPE_ARRAY: { + const parts = []; + for (const part of doc) { + if (!part) { + continue; + } + const [currentPart, ...restParts] = Array.isArray(part) ? part : [part]; + if (typeof currentPart === "string" && typeof at_default( + /* isOptionalObject */ + false, + parts, + -1 + ) === "string") { + parts[parts.length - 1] += currentPart; + } else { + parts.push(currentPart); + } + parts.push(...restParts); + } + if (parts.length === 0) { + return ""; + } + if (parts.length === 1) { + return parts[0]; + } + return parts; + } + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_LABEL: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; + } + function cleanDoc(doc) { + return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc)); + } + function replaceEndOfLine(doc, replacement = literalline) { + return mapDoc( + doc, + (currentDoc) => typeof currentDoc === "string" ? join(replacement, currentDoc.split("\n")) : currentDoc + ); + } + function canBreakFn(doc) { + if (doc.type === DOC_TYPE_LINE) { + return true; + } + } + function canBreak(doc) { + return findInDoc(doc, canBreakFn, false); + } + + // src/document/utils/assert-doc.js + var noop = () => { + }; + var assertDoc = true ? noop : function(doc) { + traverse_doc_default(doc, (doc2) => { + if (checked.has(doc2)) { + return false; + } + if (typeof doc2 !== "string") { + checked.add(doc2); + } + }); + }; + var assertDocArray = true ? noop : function(docs, optional = false) { + if (optional && !docs) { + return; + } + if (!Array.isArray(docs)) { + throw new TypeError("Unexpected doc array."); + } + for (const doc of docs) { + assertDoc(doc); + } + }; + var assertDocFillParts = true ? noop : ( + /** + * @param {Doc[]} parts + */ + function(parts) { + assertDocArray(parts); + if (parts.length > 1 && isEmptyDoc(at_default( + /* isOptionalObject */ + false, + parts, + -1 + ))) { + parts = parts.slice(0, -1); + } + for (const [i, doc] of parts.entries()) { + if (i % 2 === 1 && !isValidSeparator(doc)) { + const type = get_doc_type_default(doc); + throw new Error( + `Unexpected non-line-break doc at ${i}. Doc type is ${type}.` + ); + } + } + } + ); + + // src/document/builders.js + function indent(contents) { + assertDoc(contents); + return { type: DOC_TYPE_INDENT, contents }; + } + function align(widthOrString, contents) { + assertDoc(contents); + return { type: DOC_TYPE_ALIGN, contents, n: widthOrString }; + } + function group(contents, opts = {}) { + assertDoc(contents); + assertDocArray( + opts.expandedStates, + /* optional */ + true + ); + return { + type: DOC_TYPE_GROUP, + id: opts.id, + contents, + break: Boolean(opts.shouldBreak), + expandedStates: opts.expandedStates + }; + } + function dedentToRoot(contents) { + return align(Number.NEGATIVE_INFINITY, contents); + } + function markAsRoot(contents) { + return align({ type: "root" }, contents); + } + function dedent(contents) { + return align(-1, contents); + } + function conditionalGroup(states, opts) { + return group(states[0], { ...opts, expandedStates: states }); + } + function fill(parts) { + assertDocFillParts(parts); + return { type: DOC_TYPE_FILL, parts }; + } + function ifBreak(breakContents, flatContents = "", opts = {}) { + assertDoc(breakContents); + if (flatContents !== "") { + assertDoc(flatContents); + } + return { + type: DOC_TYPE_IF_BREAK, + breakContents, + flatContents, + groupId: opts.groupId + }; + } + function indentIfBreak(contents, opts) { + assertDoc(contents); + return { + type: DOC_TYPE_INDENT_IF_BREAK, + contents, + groupId: opts.groupId, + negate: opts.negate + }; + } + function lineSuffix(contents) { + assertDoc(contents); + return { type: DOC_TYPE_LINE_SUFFIX, contents }; + } + var lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY }; + var breakParent = { type: DOC_TYPE_BREAK_PARENT }; + var trim = { type: DOC_TYPE_TRIM }; + var hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true }; + var literallineWithoutBreakParent = { + type: DOC_TYPE_LINE, + hard: true, + literal: true + }; + var line = { type: DOC_TYPE_LINE }; + var softline = { type: DOC_TYPE_LINE, soft: true }; + var hardline = [hardlineWithoutBreakParent, breakParent]; + var literalline = [literallineWithoutBreakParent, breakParent]; + var cursor = { type: DOC_TYPE_CURSOR }; + function join(separator, docs) { + assertDoc(separator); + assertDocArray(docs); + const parts = []; + for (let i = 0; i < docs.length; i++) { + if (i !== 0) { + parts.push(separator); + } + parts.push(docs[i]); + } + return parts; + } + function addAlignmentToDoc(doc, size, tabWidth) { + assertDoc(doc); + let aligned = doc; + if (size > 0) { + for (let i = 0; i < Math.floor(size / tabWidth); ++i) { + aligned = indent(aligned); + } + aligned = align(size % tabWidth, aligned); + aligned = align(Number.NEGATIVE_INFINITY, aligned); + } + return aligned; + } + function label(label2, contents) { + assertDoc(contents); + return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents; + } + + // scripts/build/shims/string-replace-all.js + var stringReplaceAll = (isOptionalObject, original, pattern, replacement) => { + if (isOptionalObject && (original === void 0 || original === null)) { + return; + } + if (original.replaceAll) { + return original.replaceAll(pattern, replacement); + } + if (pattern.global) { + return original.replace(pattern, replacement); + } + return original.split(pattern).join(replacement); + }; + var string_replace_all_default = stringReplaceAll; + + // src/common/end-of-line.js + function convertEndOfLineToChars(value) { + switch (value) { + case "cr": + return "\r"; + case "crlf": + return "\r\n"; + default: + return "\n"; + } + } + + // node_modules/emoji-regex/index.mjs + var emoji_regex_default = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; + }; + + // node_modules/get-east-asian-width/lookup.js + function isFullWidth(x) { + return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510; + } + function isWide(x) { + return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141; + } + + // node_modules/get-east-asian-width/index.js + var _isNarrowWidth = (codePoint) => !(isFullWidth(codePoint) || isWide(codePoint)); + + // src/utils/get-string-width.js + var notAsciiRegex = /[^\x20-\x7F]/u; + function getStringWidth(text) { + if (!text) { + return 0; + } + if (!notAsciiRegex.test(text)) { + return text.length; + } + text = text.replace(emoji_regex_default(), " "); + let width = 0; + for (const character of text) { + const codePoint = character.codePointAt(0); + if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) { + continue; + } + if (codePoint >= 768 && codePoint <= 879) { + continue; + } + width += _isNarrowWidth(codePoint) ? 1 : 2; + } + return width; + } + var get_string_width_default = getStringWidth; + + // src/document/printer.js + var MODE_BREAK = Symbol("MODE_BREAK"); + var MODE_FLAT = Symbol("MODE_FLAT"); + var CURSOR_PLACEHOLDER = Symbol("cursor"); + var DOC_FILL_PRINTED_LENGTH = Symbol("DOC_FILL_PRINTED_LENGTH"); + function rootIndent() { + return { value: "", length: 0, queue: [] }; + } + function makeIndent(ind, options) { + return generateInd(ind, { type: "indent" }, options); + } + function makeAlign(indent2, widthOrDoc, options) { + if (widthOrDoc === Number.NEGATIVE_INFINITY) { + return indent2.root || rootIndent(); + } + if (widthOrDoc < 0) { + return generateInd(indent2, { type: "dedent" }, options); + } + if (!widthOrDoc) { + return indent2; + } + if (widthOrDoc.type === "root") { + return { ...indent2, root: indent2 }; + } + const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign"; + return generateInd(indent2, { type: alignType, n: widthOrDoc }, options); + } + function generateInd(ind, newPart, options) { + const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart]; + let value = ""; + let length = 0; + let lastTabs = 0; + let lastSpaces = 0; + for (const part of queue) { + switch (part.type) { + case "indent": + flush(); + if (options.useTabs) { + addTabs(1); + } else { + addSpaces(options.tabWidth); + } + break; + case "stringAlign": + flush(); + value += part.n; + length += part.n.length; + break; + case "numberAlign": + lastTabs += 1; + lastSpaces += part.n; + break; + default: + throw new Error(`Unexpected type '${part.type}'`); + } + } + flushSpaces(); + return { ...ind, value, length, queue }; + function addTabs(count) { + value += " ".repeat(count); + length += options.tabWidth * count; + } + function addSpaces(count) { + value += " ".repeat(count); + length += count; + } + function flush() { + if (options.useTabs) { + flushTabs(); + } else { + flushSpaces(); + } + } + function flushTabs() { + if (lastTabs > 0) { + addTabs(lastTabs); + } + resetLast(); + } + function flushSpaces() { + if (lastSpaces > 0) { + addSpaces(lastSpaces); + } + resetLast(); + } + function resetLast() { + lastTabs = 0; + lastSpaces = 0; + } + } + function trim2(out) { + let trimCount = 0; + let cursorCount = 0; + let outIndex = out.length; + outer: while (outIndex--) { + const last = out[outIndex]; + if (last === CURSOR_PLACEHOLDER) { + cursorCount++; + continue; + } + if (false) { + throw new Error(`Unexpected value in trim: '${typeof last}'`); + } + for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) { + const char = last[charIndex]; + if (char === " " || char === " ") { + trimCount++; + } else { + out[outIndex] = last.slice(0, charIndex + 1); + break outer; + } + } + } + if (trimCount > 0 || cursorCount > 0) { + out.length = outIndex + 1; + while (cursorCount-- > 0) { + out.push(CURSOR_PLACEHOLDER); + } + } + return trimCount; + } + function fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) { + if (width === Number.POSITIVE_INFINITY) { + return true; + } + let restIdx = restCommands.length; + const cmds = [next]; + const out = []; + while (width >= 0) { + if (cmds.length === 0) { + if (restIdx === 0) { + return true; + } + cmds.push(restCommands[--restIdx]); + continue; + } + const { mode, doc } = cmds.pop(); + const docType = get_doc_type_default(doc); + switch (docType) { + case DOC_TYPE_STRING: + out.push(doc); + width -= get_string_width_default(doc); + break; + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc : doc.parts; + const end = doc[DOC_FILL_PRINTED_LENGTH] ?? 0; + for (let i = parts.length - 1; i >= end; i--) { + cmds.push({ mode, doc: parts[i] }); + } + break; + } + case DOC_TYPE_INDENT: + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + cmds.push({ mode, doc: doc.contents }); + break; + case DOC_TYPE_TRIM: + width += trim2(out); + break; + case DOC_TYPE_GROUP: { + if (mustBeFlat && doc.break) { + return false; + } + const groupMode = doc.break ? MODE_BREAK : mode; + const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default( + /* isOptionalObject */ + false, + doc.expandedStates, + -1 + ) : doc.contents; + cmds.push({ mode: groupMode, doc: contents }); + break; + } + case DOC_TYPE_IF_BREAK: { + const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode; + const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents; + if (contents) { + cmds.push({ mode, doc: contents }); + } + break; + } + case DOC_TYPE_LINE: + if (mode === MODE_BREAK || doc.hard) { + return true; + } + if (!doc.soft) { + out.push(" "); + width--; + } + break; + case DOC_TYPE_LINE_SUFFIX: + hasLineSuffix = true; + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (hasLineSuffix) { + return false; + } + break; + } + } + return false; + } + function printDocToString(doc, options) { + const groupModeMap = {}; + const width = options.printWidth; + const newLine = convertEndOfLineToChars(options.endOfLine); + let pos = 0; + const cmds = [{ ind: rootIndent(), mode: MODE_BREAK, doc }]; + const out = []; + let shouldRemeasure = false; + const lineSuffix2 = []; + let printedCursorCount = 0; + propagateBreaks(doc); + while (cmds.length > 0) { + const { ind, mode, doc: doc2 } = cmds.pop(); + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_STRING: { + const formatted = newLine !== "\n" ? string_replace_all_default( + /* isOptionalObject */ + false, + doc2, + "\n", + newLine + ) : doc2; + out.push(formatted); + if (cmds.length > 0) { + pos += get_string_width_default(formatted); + } + break; + } + case DOC_TYPE_ARRAY: + for (let i = doc2.length - 1; i >= 0; i--) { + cmds.push({ ind, mode, doc: doc2[i] }); + } + break; + case DOC_TYPE_CURSOR: + if (printedCursorCount >= 2) { + throw new Error("There are too many 'cursor' in doc."); + } + out.push(CURSOR_PLACEHOLDER); + printedCursorCount++; + break; + case DOC_TYPE_INDENT: + cmds.push({ ind: makeIndent(ind, options), mode, doc: doc2.contents }); + break; + case DOC_TYPE_ALIGN: + cmds.push({ + ind: makeAlign(ind, doc2.n, options), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_TRIM: + pos -= trim2(out); + break; + case DOC_TYPE_GROUP: + switch (mode) { + case MODE_FLAT: + if (!shouldRemeasure) { + cmds.push({ + ind, + mode: doc2.break ? MODE_BREAK : MODE_FLAT, + doc: doc2.contents + }); + break; + } + // fallthrough + case MODE_BREAK: { + shouldRemeasure = false; + const next = { ind, mode: MODE_FLAT, doc: doc2.contents }; + const rem = width - pos; + const hasLineSuffix = lineSuffix2.length > 0; + if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(next); + } else { + if (doc2.expandedStates) { + const mostExpanded = at_default( + /* isOptionalObject */ + false, + doc2.expandedStates, + -1 + ); + if (doc2.break) { + cmds.push({ ind, mode: MODE_BREAK, doc: mostExpanded }); + break; + } else { + for (let i = 1; i < doc2.expandedStates.length + 1; i++) { + if (i >= doc2.expandedStates.length) { + cmds.push({ ind, mode: MODE_BREAK, doc: mostExpanded }); + break; + } else { + const state = doc2.expandedStates[i]; + const cmd = { ind, mode: MODE_FLAT, doc: state }; + if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(cmd); + break; + } + } + } + } + } else { + cmds.push({ ind, mode: MODE_BREAK, doc: doc2.contents }); + } + } + break; + } + } + if (doc2.id) { + groupModeMap[doc2.id] = at_default( + /* isOptionalObject */ + false, + cmds, + -1 + ).mode; + } + break; + // Fills each line with as much code as possible before moving to a new + // line with the same indentation. + // + // Expects doc.parts to be an array of alternating content and + // whitespace. The whitespace contains the linebreaks. + // + // For example: + // ["I", line, "love", line, "monkeys"] + // or + // [{ type: group, ... }, softline, { type: group, ... }] + // + // It uses this parts structure to handle three main layout cases: + // * The first two content items fit on the same line without + // breaking + // -> output the first content item and the whitespace "flat". + // * Only the first content item fits on the line without breaking + // -> output the first content item "flat" and the whitespace with + // "break". + // * Neither content item fits on the line without breaking + // -> output the first content item and the whitespace with "break". + case DOC_TYPE_FILL: { + const rem = width - pos; + const offset = doc2[DOC_FILL_PRINTED_LENGTH] ?? 0; + const { parts } = doc2; + const length = parts.length - offset; + if (length === 0) { + break; + } + const content = parts[offset + 0]; + const whitespace = parts[offset + 1]; + const contentFlatCmd = { ind, mode: MODE_FLAT, doc: content }; + const contentBreakCmd = { ind, mode: MODE_BREAK, doc: content }; + const contentFits = fits( + contentFlatCmd, + [], + rem, + lineSuffix2.length > 0, + groupModeMap, + true + ); + if (length === 1) { + if (contentFits) { + cmds.push(contentFlatCmd); + } else { + cmds.push(contentBreakCmd); + } + break; + } + const whitespaceFlatCmd = { ind, mode: MODE_FLAT, doc: whitespace }; + const whitespaceBreakCmd = { ind, mode: MODE_BREAK, doc: whitespace }; + if (length === 2) { + if (contentFits) { + cmds.push(whitespaceFlatCmd, contentFlatCmd); + } else { + cmds.push(whitespaceBreakCmd, contentBreakCmd); + } + break; + } + const secondContent = parts[offset + 2]; + const remainingCmd = { + ind, + mode, + doc: { ...doc2, [DOC_FILL_PRINTED_LENGTH]: offset + 2 } + }; + const firstAndSecondContentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: [content, whitespace, secondContent] + }; + const firstAndSecondContentFits = fits( + firstAndSecondContentFlatCmd, + [], + rem, + lineSuffix2.length > 0, + groupModeMap, + true + ); + if (firstAndSecondContentFits) { + cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd); + } else if (contentFits) { + cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd); + } else { + cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd); + } + break; + } + case DOC_TYPE_IF_BREAK: + case DOC_TYPE_INDENT_IF_BREAK: { + const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode; + if (groupMode === MODE_BREAK) { + const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents); + if (breakContents) { + cmds.push({ ind, mode, doc: breakContents }); + } + } + if (groupMode === MODE_FLAT) { + const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents; + if (flatContents) { + cmds.push({ ind, mode, doc: flatContents }); + } + } + break; + } + case DOC_TYPE_LINE_SUFFIX: + lineSuffix2.push({ ind, mode, doc: doc2.contents }); + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (lineSuffix2.length > 0) { + cmds.push({ ind, mode, doc: hardlineWithoutBreakParent }); + } + break; + case DOC_TYPE_LINE: + switch (mode) { + case MODE_FLAT: + if (!doc2.hard) { + if (!doc2.soft) { + out.push(" "); + pos += 1; + } + break; + } else { + shouldRemeasure = true; + } + // fallthrough + case MODE_BREAK: + if (lineSuffix2.length > 0) { + cmds.push({ ind, mode, doc: doc2 }, ...lineSuffix2.reverse()); + lineSuffix2.length = 0; + break; + } + if (doc2.literal) { + if (ind.root) { + out.push(newLine, ind.root.value); + pos = ind.root.length; + } else { + out.push(newLine); + pos = 0; + } + } else { + pos -= trim2(out); + out.push(newLine + ind.value); + pos = ind.length; + } + break; + } + break; + case DOC_TYPE_LABEL: + cmds.push({ ind, mode, doc: doc2.contents }); + break; + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + if (cmds.length === 0 && lineSuffix2.length > 0) { + cmds.push(...lineSuffix2.reverse()); + lineSuffix2.length = 0; + } + } + const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER); + if (cursorPlaceholderIndex !== -1) { + const otherCursorPlaceholderIndex = out.indexOf( + CURSOR_PLACEHOLDER, + cursorPlaceholderIndex + 1 + ); + if (otherCursorPlaceholderIndex === -1) { + return { + formatted: out.filter((char) => char !== CURSOR_PLACEHOLDER).join("") + }; + } + const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(""); + const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(""); + const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(""); + return { + formatted: beforeCursor + aroundCursor + afterCursor, + cursorNodeStart: beforeCursor.length, + cursorNodeText: aroundCursor + }; + } + return { formatted: out.join("") }; + } + + // src/document/public.js + var builders = { + join, + line, + softline, + hardline, + literalline, + group, + conditionalGroup, + fill, + lineSuffix, + lineSuffixBoundary, + cursor, + breakParent, + ifBreak, + trim, + indent, + indentIfBreak, + align, + addAlignmentToDoc, + markAsRoot, + dedentToRoot, + dedent, + hardlineWithoutBreakParent, + literallineWithoutBreakParent, + label, + // TODO: Remove this in v4 + concat: (parts) => parts + }; + var printer = { printDocToString }; + var utils = { + willBreak, + traverseDoc: traverse_doc_default, + findInDoc, + mapDoc, + removeLines, + stripTrailingHardline, + replaceEndOfLine, + canBreak + }; + return __toCommonJS(public_exports); +}); \ No newline at end of file diff --git a/node_modules/prettier/doc.mjs b/node_modules/prettier/doc.mjs new file mode 100644 index 0000000..6f0c81c --- /dev/null +++ b/node_modules/prettier/doc.mjs @@ -0,0 +1,1233 @@ +var __defProp = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; + +// src/document/public.js +var public_exports = {}; +__export(public_exports, { + builders: () => builders, + printer: () => printer, + utils: () => utils +}); + +// src/document/constants.js +var DOC_TYPE_STRING = "string"; +var DOC_TYPE_ARRAY = "array"; +var DOC_TYPE_CURSOR = "cursor"; +var DOC_TYPE_INDENT = "indent"; +var DOC_TYPE_ALIGN = "align"; +var DOC_TYPE_TRIM = "trim"; +var DOC_TYPE_GROUP = "group"; +var DOC_TYPE_FILL = "fill"; +var DOC_TYPE_IF_BREAK = "if-break"; +var DOC_TYPE_INDENT_IF_BREAK = "indent-if-break"; +var DOC_TYPE_LINE_SUFFIX = "line-suffix"; +var DOC_TYPE_LINE_SUFFIX_BOUNDARY = "line-suffix-boundary"; +var DOC_TYPE_LINE = "line"; +var DOC_TYPE_LABEL = "label"; +var DOC_TYPE_BREAK_PARENT = "break-parent"; +var VALID_OBJECT_DOC_TYPES = /* @__PURE__ */ new Set([ + DOC_TYPE_CURSOR, + DOC_TYPE_INDENT, + DOC_TYPE_ALIGN, + DOC_TYPE_TRIM, + DOC_TYPE_GROUP, + DOC_TYPE_FILL, + DOC_TYPE_IF_BREAK, + DOC_TYPE_INDENT_IF_BREAK, + DOC_TYPE_LINE_SUFFIX, + DOC_TYPE_LINE_SUFFIX_BOUNDARY, + DOC_TYPE_LINE, + DOC_TYPE_LABEL, + DOC_TYPE_BREAK_PARENT +]); + +// scripts/build/shims/at.js +var at = (isOptionalObject, object, index) => { + if (isOptionalObject && (object === void 0 || object === null)) { + return; + } + if (Array.isArray(object) || typeof object === "string") { + return object[index < 0 ? object.length + index : index]; + } + return object.at(index); +}; +var at_default = at; + +// src/document/utils/get-doc-type.js +function getDocType(doc) { + if (typeof doc === "string") { + return DOC_TYPE_STRING; + } + if (Array.isArray(doc)) { + return DOC_TYPE_ARRAY; + } + if (!doc) { + return; + } + const { type } = doc; + if (VALID_OBJECT_DOC_TYPES.has(type)) { + return type; + } +} +var get_doc_type_default = getDocType; + +// src/document/invalid-doc-error.js +var disjunctionListFormat = (list) => new Intl.ListFormat("en-US", { type: "disjunction" }).format(list); +function getDocErrorMessage(doc) { + const type = doc === null ? "null" : typeof doc; + if (type !== "string" && type !== "object") { + return `Unexpected doc '${type}', +Expected it to be 'string' or 'object'.`; + } + if (get_doc_type_default(doc)) { + throw new Error("doc is valid."); + } + const objectType = Object.prototype.toString.call(doc); + if (objectType !== "[object Object]") { + return `Unexpected doc '${objectType}'.`; + } + const EXPECTED_TYPE_VALUES = disjunctionListFormat( + [...VALID_OBJECT_DOC_TYPES].map((type2) => `'${type2}'`) + ); + return `Unexpected doc.type '${doc.type}'. +Expected it to be ${EXPECTED_TYPE_VALUES}.`; +} +var InvalidDocError = class extends Error { + name = "InvalidDocError"; + constructor(doc) { + super(getDocErrorMessage(doc)); + this.doc = doc; + } +}; +var invalid_doc_error_default = InvalidDocError; + +// src/document/utils/traverse-doc.js +var traverseDocOnExitStackMarker = {}; +function traverseDoc(doc, onEnter, onExit, shouldTraverseConditionalGroups) { + const docsStack = [doc]; + while (docsStack.length > 0) { + const doc2 = docsStack.pop(); + if (doc2 === traverseDocOnExitStackMarker) { + onExit(docsStack.pop()); + continue; + } + if (onExit) { + docsStack.push(doc2, traverseDocOnExitStackMarker); + } + const docType = get_doc_type_default(doc2); + if (!docType) { + throw new invalid_doc_error_default(doc2); + } + if ((onEnter == null ? void 0 : onEnter(doc2)) === false) { + continue; + } + switch (docType) { + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc2 : doc2.parts; + for (let ic = parts.length, i = ic - 1; i >= 0; --i) { + docsStack.push(parts[i]); + } + break; + } + case DOC_TYPE_IF_BREAK: + docsStack.push(doc2.flatContents, doc2.breakContents); + break; + case DOC_TYPE_GROUP: + if (shouldTraverseConditionalGroups && doc2.expandedStates) { + for (let ic = doc2.expandedStates.length, i = ic - 1; i >= 0; --i) { + docsStack.push(doc2.expandedStates[i]); + } + } else { + docsStack.push(doc2.contents); + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + docsStack.push(doc2.contents); + break; + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + } +} +var traverse_doc_default = traverseDoc; + +// src/document/utils.js +function mapDoc(doc, cb) { + if (typeof doc === "string") { + return cb(doc); + } + const mapped = /* @__PURE__ */ new Map(); + return rec(doc); + function rec(doc2) { + if (mapped.has(doc2)) { + return mapped.get(doc2); + } + const result = process2(doc2); + mapped.set(doc2, result); + return result; + } + function process2(doc2) { + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_ARRAY: + return cb(doc2.map(rec)); + case DOC_TYPE_FILL: + return cb({ ...doc2, parts: doc2.parts.map(rec) }); + case DOC_TYPE_IF_BREAK: + return cb({ + ...doc2, + breakContents: rec(doc2.breakContents), + flatContents: rec(doc2.flatContents) + }); + case DOC_TYPE_GROUP: { + let { expandedStates, contents } = doc2; + if (expandedStates) { + expandedStates = expandedStates.map(rec); + contents = expandedStates[0]; + } else { + contents = rec(contents); + } + return cb({ ...doc2, contents, expandedStates }); + } + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + case DOC_TYPE_LINE_SUFFIX: + return cb({ ...doc2, contents: rec(doc2.contents) }); + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + return cb(doc2); + default: + throw new invalid_doc_error_default(doc2); + } + } +} +function findInDoc(doc, fn, defaultValue) { + let result = defaultValue; + let shouldSkipFurtherProcessing = false; + function findInDocOnEnterFn(doc2) { + if (shouldSkipFurtherProcessing) { + return false; + } + const maybeResult = fn(doc2); + if (maybeResult !== void 0) { + shouldSkipFurtherProcessing = true; + result = maybeResult; + } + } + traverse_doc_default(doc, findInDocOnEnterFn); + return result; +} +function willBreakFn(doc) { + if (doc.type === DOC_TYPE_GROUP && doc.break) { + return true; + } + if (doc.type === DOC_TYPE_LINE && doc.hard) { + return true; + } + if (doc.type === DOC_TYPE_BREAK_PARENT) { + return true; + } +} +function willBreak(doc) { + return findInDoc(doc, willBreakFn, false); +} +function breakParentGroup(groupStack) { + if (groupStack.length > 0) { + const parentGroup = at_default( + /* isOptionalObject */ + false, + groupStack, + -1 + ); + if (!parentGroup.expandedStates && !parentGroup.break) { + parentGroup.break = "propagated"; + } + } + return null; +} +function propagateBreaks(doc) { + const alreadyVisitedSet = /* @__PURE__ */ new Set(); + const groupStack = []; + function propagateBreaksOnEnterFn(doc2) { + if (doc2.type === DOC_TYPE_BREAK_PARENT) { + breakParentGroup(groupStack); + } + if (doc2.type === DOC_TYPE_GROUP) { + groupStack.push(doc2); + if (alreadyVisitedSet.has(doc2)) { + return false; + } + alreadyVisitedSet.add(doc2); + } + } + function propagateBreaksOnExitFn(doc2) { + if (doc2.type === DOC_TYPE_GROUP) { + const group2 = groupStack.pop(); + if (group2.break) { + breakParentGroup(groupStack); + } + } + } + traverse_doc_default( + doc, + propagateBreaksOnEnterFn, + propagateBreaksOnExitFn, + /* shouldTraverseConditionalGroups */ + true + ); +} +function removeLinesFn(doc) { + if (doc.type === DOC_TYPE_LINE && !doc.hard) { + return doc.soft ? "" : " "; + } + if (doc.type === DOC_TYPE_IF_BREAK) { + return doc.flatContents; + } + return doc; +} +function removeLines(doc) { + return mapDoc(doc, removeLinesFn); +} +function stripTrailingHardlineFromParts(parts) { + parts = [...parts]; + while (parts.length >= 2 && at_default( + /* isOptionalObject */ + false, + parts, + -2 + ).type === DOC_TYPE_LINE && at_default( + /* isOptionalObject */ + false, + parts, + -1 + ).type === DOC_TYPE_BREAK_PARENT) { + parts.length -= 2; + } + if (parts.length > 0) { + const lastPart = stripTrailingHardlineFromDoc(at_default( + /* isOptionalObject */ + false, + parts, + -1 + )); + parts[parts.length - 1] = lastPart; + } + return parts; +} +function stripTrailingHardlineFromDoc(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_GROUP: + case DOC_TYPE_LINE_SUFFIX: + case DOC_TYPE_LABEL: { + const contents = stripTrailingHardlineFromDoc(doc.contents); + return { ...doc, contents }; + } + case DOC_TYPE_IF_BREAK: + return { + ...doc, + breakContents: stripTrailingHardlineFromDoc(doc.breakContents), + flatContents: stripTrailingHardlineFromDoc(doc.flatContents) + }; + case DOC_TYPE_FILL: + return { ...doc, parts: stripTrailingHardlineFromParts(doc.parts) }; + case DOC_TYPE_ARRAY: + return stripTrailingHardlineFromParts(doc); + case DOC_TYPE_STRING: + return doc.replace(/[\n\r]*$/u, ""); + case DOC_TYPE_ALIGN: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function stripTrailingHardline(doc) { + return stripTrailingHardlineFromDoc(cleanDoc(doc)); +} +function cleanDocFn(doc) { + switch (get_doc_type_default(doc)) { + case DOC_TYPE_FILL: + if (doc.parts.every((part) => part === "")) { + return ""; + } + break; + case DOC_TYPE_GROUP: + if (!doc.contents && !doc.id && !doc.break && !doc.expandedStates) { + return ""; + } + if (doc.contents.type === DOC_TYPE_GROUP && doc.contents.id === doc.id && doc.contents.break === doc.break && doc.contents.expandedStates === doc.expandedStates) { + return doc.contents; + } + break; + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LINE_SUFFIX: + if (!doc.contents) { + return ""; + } + break; + case DOC_TYPE_IF_BREAK: + if (!doc.flatContents && !doc.breakContents) { + return ""; + } + break; + case DOC_TYPE_ARRAY: { + const parts = []; + for (const part of doc) { + if (!part) { + continue; + } + const [currentPart, ...restParts] = Array.isArray(part) ? part : [part]; + if (typeof currentPart === "string" && typeof at_default( + /* isOptionalObject */ + false, + parts, + -1 + ) === "string") { + parts[parts.length - 1] += currentPart; + } else { + parts.push(currentPart); + } + parts.push(...restParts); + } + if (parts.length === 0) { + return ""; + } + if (parts.length === 1) { + return parts[0]; + } + return parts; + } + case DOC_TYPE_STRING: + case DOC_TYPE_CURSOR: + case DOC_TYPE_TRIM: + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + case DOC_TYPE_LINE: + case DOC_TYPE_LABEL: + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc); + } + return doc; +} +function cleanDoc(doc) { + return mapDoc(doc, (currentDoc) => cleanDocFn(currentDoc)); +} +function replaceEndOfLine(doc, replacement = literalline) { + return mapDoc( + doc, + (currentDoc) => typeof currentDoc === "string" ? join(replacement, currentDoc.split("\n")) : currentDoc + ); +} +function canBreakFn(doc) { + if (doc.type === DOC_TYPE_LINE) { + return true; + } +} +function canBreak(doc) { + return findInDoc(doc, canBreakFn, false); +} + +// src/document/utils/assert-doc.js +var noop = () => { +}; +var assertDoc = true ? noop : function(doc) { + traverse_doc_default(doc, (doc2) => { + if (checked.has(doc2)) { + return false; + } + if (typeof doc2 !== "string") { + checked.add(doc2); + } + }); +}; +var assertDocArray = true ? noop : function(docs, optional = false) { + if (optional && !docs) { + return; + } + if (!Array.isArray(docs)) { + throw new TypeError("Unexpected doc array."); + } + for (const doc of docs) { + assertDoc(doc); + } +}; +var assertDocFillParts = true ? noop : ( + /** + * @param {Doc[]} parts + */ + function(parts) { + assertDocArray(parts); + if (parts.length > 1 && isEmptyDoc(at_default( + /* isOptionalObject */ + false, + parts, + -1 + ))) { + parts = parts.slice(0, -1); + } + for (const [i, doc] of parts.entries()) { + if (i % 2 === 1 && !isValidSeparator(doc)) { + const type = get_doc_type_default(doc); + throw new Error( + `Unexpected non-line-break doc at ${i}. Doc type is ${type}.` + ); + } + } + } +); + +// src/document/builders.js +function indent(contents) { + assertDoc(contents); + return { type: DOC_TYPE_INDENT, contents }; +} +function align(widthOrString, contents) { + assertDoc(contents); + return { type: DOC_TYPE_ALIGN, contents, n: widthOrString }; +} +function group(contents, opts = {}) { + assertDoc(contents); + assertDocArray( + opts.expandedStates, + /* optional */ + true + ); + return { + type: DOC_TYPE_GROUP, + id: opts.id, + contents, + break: Boolean(opts.shouldBreak), + expandedStates: opts.expandedStates + }; +} +function dedentToRoot(contents) { + return align(Number.NEGATIVE_INFINITY, contents); +} +function markAsRoot(contents) { + return align({ type: "root" }, contents); +} +function dedent(contents) { + return align(-1, contents); +} +function conditionalGroup(states, opts) { + return group(states[0], { ...opts, expandedStates: states }); +} +function fill(parts) { + assertDocFillParts(parts); + return { type: DOC_TYPE_FILL, parts }; +} +function ifBreak(breakContents, flatContents = "", opts = {}) { + assertDoc(breakContents); + if (flatContents !== "") { + assertDoc(flatContents); + } + return { + type: DOC_TYPE_IF_BREAK, + breakContents, + flatContents, + groupId: opts.groupId + }; +} +function indentIfBreak(contents, opts) { + assertDoc(contents); + return { + type: DOC_TYPE_INDENT_IF_BREAK, + contents, + groupId: opts.groupId, + negate: opts.negate + }; +} +function lineSuffix(contents) { + assertDoc(contents); + return { type: DOC_TYPE_LINE_SUFFIX, contents }; +} +var lineSuffixBoundary = { type: DOC_TYPE_LINE_SUFFIX_BOUNDARY }; +var breakParent = { type: DOC_TYPE_BREAK_PARENT }; +var trim = { type: DOC_TYPE_TRIM }; +var hardlineWithoutBreakParent = { type: DOC_TYPE_LINE, hard: true }; +var literallineWithoutBreakParent = { + type: DOC_TYPE_LINE, + hard: true, + literal: true +}; +var line = { type: DOC_TYPE_LINE }; +var softline = { type: DOC_TYPE_LINE, soft: true }; +var hardline = [hardlineWithoutBreakParent, breakParent]; +var literalline = [literallineWithoutBreakParent, breakParent]; +var cursor = { type: DOC_TYPE_CURSOR }; +function join(separator, docs) { + assertDoc(separator); + assertDocArray(docs); + const parts = []; + for (let i = 0; i < docs.length; i++) { + if (i !== 0) { + parts.push(separator); + } + parts.push(docs[i]); + } + return parts; +} +function addAlignmentToDoc(doc, size, tabWidth) { + assertDoc(doc); + let aligned = doc; + if (size > 0) { + for (let i = 0; i < Math.floor(size / tabWidth); ++i) { + aligned = indent(aligned); + } + aligned = align(size % tabWidth, aligned); + aligned = align(Number.NEGATIVE_INFINITY, aligned); + } + return aligned; +} +function label(label2, contents) { + assertDoc(contents); + return label2 ? { type: DOC_TYPE_LABEL, label: label2, contents } : contents; +} + +// scripts/build/shims/string-replace-all.js +var stringReplaceAll = (isOptionalObject, original, pattern, replacement) => { + if (isOptionalObject && (original === void 0 || original === null)) { + return; + } + if (original.replaceAll) { + return original.replaceAll(pattern, replacement); + } + if (pattern.global) { + return original.replace(pattern, replacement); + } + return original.split(pattern).join(replacement); +}; +var string_replace_all_default = stringReplaceAll; + +// src/common/end-of-line.js +function convertEndOfLineToChars(value) { + switch (value) { + case "cr": + return "\r"; + case "crlf": + return "\r\n"; + default: + return "\n"; + } +} + +// node_modules/emoji-regex/index.mjs +var emoji_regex_default = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; +}; + +// node_modules/get-east-asian-width/lookup.js +function isFullWidth(x) { + return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510; +} +function isWide(x) { + return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141; +} + +// node_modules/get-east-asian-width/index.js +var _isNarrowWidth = (codePoint) => !(isFullWidth(codePoint) || isWide(codePoint)); + +// src/utils/get-string-width.js +var notAsciiRegex = /[^\x20-\x7F]/u; +function getStringWidth(text) { + if (!text) { + return 0; + } + if (!notAsciiRegex.test(text)) { + return text.length; + } + text = text.replace(emoji_regex_default(), " "); + let width = 0; + for (const character of text) { + const codePoint = character.codePointAt(0); + if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) { + continue; + } + if (codePoint >= 768 && codePoint <= 879) { + continue; + } + width += _isNarrowWidth(codePoint) ? 1 : 2; + } + return width; +} +var get_string_width_default = getStringWidth; + +// src/document/printer.js +var MODE_BREAK = Symbol("MODE_BREAK"); +var MODE_FLAT = Symbol("MODE_FLAT"); +var CURSOR_PLACEHOLDER = Symbol("cursor"); +var DOC_FILL_PRINTED_LENGTH = Symbol("DOC_FILL_PRINTED_LENGTH"); +function rootIndent() { + return { value: "", length: 0, queue: [] }; +} +function makeIndent(ind, options) { + return generateInd(ind, { type: "indent" }, options); +} +function makeAlign(indent2, widthOrDoc, options) { + if (widthOrDoc === Number.NEGATIVE_INFINITY) { + return indent2.root || rootIndent(); + } + if (widthOrDoc < 0) { + return generateInd(indent2, { type: "dedent" }, options); + } + if (!widthOrDoc) { + return indent2; + } + if (widthOrDoc.type === "root") { + return { ...indent2, root: indent2 }; + } + const alignType = typeof widthOrDoc === "string" ? "stringAlign" : "numberAlign"; + return generateInd(indent2, { type: alignType, n: widthOrDoc }, options); +} +function generateInd(ind, newPart, options) { + const queue = newPart.type === "dedent" ? ind.queue.slice(0, -1) : [...ind.queue, newPart]; + let value = ""; + let length = 0; + let lastTabs = 0; + let lastSpaces = 0; + for (const part of queue) { + switch (part.type) { + case "indent": + flush(); + if (options.useTabs) { + addTabs(1); + } else { + addSpaces(options.tabWidth); + } + break; + case "stringAlign": + flush(); + value += part.n; + length += part.n.length; + break; + case "numberAlign": + lastTabs += 1; + lastSpaces += part.n; + break; + default: + throw new Error(`Unexpected type '${part.type}'`); + } + } + flushSpaces(); + return { ...ind, value, length, queue }; + function addTabs(count) { + value += " ".repeat(count); + length += options.tabWidth * count; + } + function addSpaces(count) { + value += " ".repeat(count); + length += count; + } + function flush() { + if (options.useTabs) { + flushTabs(); + } else { + flushSpaces(); + } + } + function flushTabs() { + if (lastTabs > 0) { + addTabs(lastTabs); + } + resetLast(); + } + function flushSpaces() { + if (lastSpaces > 0) { + addSpaces(lastSpaces); + } + resetLast(); + } + function resetLast() { + lastTabs = 0; + lastSpaces = 0; + } +} +function trim2(out) { + let trimCount = 0; + let cursorCount = 0; + let outIndex = out.length; + outer: while (outIndex--) { + const last = out[outIndex]; + if (last === CURSOR_PLACEHOLDER) { + cursorCount++; + continue; + } + if (false) { + throw new Error(`Unexpected value in trim: '${typeof last}'`); + } + for (let charIndex = last.length - 1; charIndex >= 0; charIndex--) { + const char = last[charIndex]; + if (char === " " || char === " ") { + trimCount++; + } else { + out[outIndex] = last.slice(0, charIndex + 1); + break outer; + } + } + } + if (trimCount > 0 || cursorCount > 0) { + out.length = outIndex + 1; + while (cursorCount-- > 0) { + out.push(CURSOR_PLACEHOLDER); + } + } + return trimCount; +} +function fits(next, restCommands, width, hasLineSuffix, groupModeMap, mustBeFlat) { + if (width === Number.POSITIVE_INFINITY) { + return true; + } + let restIdx = restCommands.length; + const cmds = [next]; + const out = []; + while (width >= 0) { + if (cmds.length === 0) { + if (restIdx === 0) { + return true; + } + cmds.push(restCommands[--restIdx]); + continue; + } + const { mode, doc } = cmds.pop(); + const docType = get_doc_type_default(doc); + switch (docType) { + case DOC_TYPE_STRING: + out.push(doc); + width -= get_string_width_default(doc); + break; + case DOC_TYPE_ARRAY: + case DOC_TYPE_FILL: { + const parts = docType === DOC_TYPE_ARRAY ? doc : doc.parts; + const end = doc[DOC_FILL_PRINTED_LENGTH] ?? 0; + for (let i = parts.length - 1; i >= end; i--) { + cmds.push({ mode, doc: parts[i] }); + } + break; + } + case DOC_TYPE_INDENT: + case DOC_TYPE_ALIGN: + case DOC_TYPE_INDENT_IF_BREAK: + case DOC_TYPE_LABEL: + cmds.push({ mode, doc: doc.contents }); + break; + case DOC_TYPE_TRIM: + width += trim2(out); + break; + case DOC_TYPE_GROUP: { + if (mustBeFlat && doc.break) { + return false; + } + const groupMode = doc.break ? MODE_BREAK : mode; + const contents = doc.expandedStates && groupMode === MODE_BREAK ? at_default( + /* isOptionalObject */ + false, + doc.expandedStates, + -1 + ) : doc.contents; + cmds.push({ mode: groupMode, doc: contents }); + break; + } + case DOC_TYPE_IF_BREAK: { + const groupMode = doc.groupId ? groupModeMap[doc.groupId] || MODE_FLAT : mode; + const contents = groupMode === MODE_BREAK ? doc.breakContents : doc.flatContents; + if (contents) { + cmds.push({ mode, doc: contents }); + } + break; + } + case DOC_TYPE_LINE: + if (mode === MODE_BREAK || doc.hard) { + return true; + } + if (!doc.soft) { + out.push(" "); + width--; + } + break; + case DOC_TYPE_LINE_SUFFIX: + hasLineSuffix = true; + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (hasLineSuffix) { + return false; + } + break; + } + } + return false; +} +function printDocToString(doc, options) { + const groupModeMap = {}; + const width = options.printWidth; + const newLine = convertEndOfLineToChars(options.endOfLine); + let pos = 0; + const cmds = [{ ind: rootIndent(), mode: MODE_BREAK, doc }]; + const out = []; + let shouldRemeasure = false; + const lineSuffix2 = []; + let printedCursorCount = 0; + propagateBreaks(doc); + while (cmds.length > 0) { + const { ind, mode, doc: doc2 } = cmds.pop(); + switch (get_doc_type_default(doc2)) { + case DOC_TYPE_STRING: { + const formatted = newLine !== "\n" ? string_replace_all_default( + /* isOptionalObject */ + false, + doc2, + "\n", + newLine + ) : doc2; + out.push(formatted); + if (cmds.length > 0) { + pos += get_string_width_default(formatted); + } + break; + } + case DOC_TYPE_ARRAY: + for (let i = doc2.length - 1; i >= 0; i--) { + cmds.push({ ind, mode, doc: doc2[i] }); + } + break; + case DOC_TYPE_CURSOR: + if (printedCursorCount >= 2) { + throw new Error("There are too many 'cursor' in doc."); + } + out.push(CURSOR_PLACEHOLDER); + printedCursorCount++; + break; + case DOC_TYPE_INDENT: + cmds.push({ ind: makeIndent(ind, options), mode, doc: doc2.contents }); + break; + case DOC_TYPE_ALIGN: + cmds.push({ + ind: makeAlign(ind, doc2.n, options), + mode, + doc: doc2.contents + }); + break; + case DOC_TYPE_TRIM: + pos -= trim2(out); + break; + case DOC_TYPE_GROUP: + switch (mode) { + case MODE_FLAT: + if (!shouldRemeasure) { + cmds.push({ + ind, + mode: doc2.break ? MODE_BREAK : MODE_FLAT, + doc: doc2.contents + }); + break; + } + // fallthrough + case MODE_BREAK: { + shouldRemeasure = false; + const next = { ind, mode: MODE_FLAT, doc: doc2.contents }; + const rem = width - pos; + const hasLineSuffix = lineSuffix2.length > 0; + if (!doc2.break && fits(next, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(next); + } else { + if (doc2.expandedStates) { + const mostExpanded = at_default( + /* isOptionalObject */ + false, + doc2.expandedStates, + -1 + ); + if (doc2.break) { + cmds.push({ ind, mode: MODE_BREAK, doc: mostExpanded }); + break; + } else { + for (let i = 1; i < doc2.expandedStates.length + 1; i++) { + if (i >= doc2.expandedStates.length) { + cmds.push({ ind, mode: MODE_BREAK, doc: mostExpanded }); + break; + } else { + const state = doc2.expandedStates[i]; + const cmd = { ind, mode: MODE_FLAT, doc: state }; + if (fits(cmd, cmds, rem, hasLineSuffix, groupModeMap)) { + cmds.push(cmd); + break; + } + } + } + } + } else { + cmds.push({ ind, mode: MODE_BREAK, doc: doc2.contents }); + } + } + break; + } + } + if (doc2.id) { + groupModeMap[doc2.id] = at_default( + /* isOptionalObject */ + false, + cmds, + -1 + ).mode; + } + break; + // Fills each line with as much code as possible before moving to a new + // line with the same indentation. + // + // Expects doc.parts to be an array of alternating content and + // whitespace. The whitespace contains the linebreaks. + // + // For example: + // ["I", line, "love", line, "monkeys"] + // or + // [{ type: group, ... }, softline, { type: group, ... }] + // + // It uses this parts structure to handle three main layout cases: + // * The first two content items fit on the same line without + // breaking + // -> output the first content item and the whitespace "flat". + // * Only the first content item fits on the line without breaking + // -> output the first content item "flat" and the whitespace with + // "break". + // * Neither content item fits on the line without breaking + // -> output the first content item and the whitespace with "break". + case DOC_TYPE_FILL: { + const rem = width - pos; + const offset = doc2[DOC_FILL_PRINTED_LENGTH] ?? 0; + const { parts } = doc2; + const length = parts.length - offset; + if (length === 0) { + break; + } + const content = parts[offset + 0]; + const whitespace = parts[offset + 1]; + const contentFlatCmd = { ind, mode: MODE_FLAT, doc: content }; + const contentBreakCmd = { ind, mode: MODE_BREAK, doc: content }; + const contentFits = fits( + contentFlatCmd, + [], + rem, + lineSuffix2.length > 0, + groupModeMap, + true + ); + if (length === 1) { + if (contentFits) { + cmds.push(contentFlatCmd); + } else { + cmds.push(contentBreakCmd); + } + break; + } + const whitespaceFlatCmd = { ind, mode: MODE_FLAT, doc: whitespace }; + const whitespaceBreakCmd = { ind, mode: MODE_BREAK, doc: whitespace }; + if (length === 2) { + if (contentFits) { + cmds.push(whitespaceFlatCmd, contentFlatCmd); + } else { + cmds.push(whitespaceBreakCmd, contentBreakCmd); + } + break; + } + const secondContent = parts[offset + 2]; + const remainingCmd = { + ind, + mode, + doc: { ...doc2, [DOC_FILL_PRINTED_LENGTH]: offset + 2 } + }; + const firstAndSecondContentFlatCmd = { + ind, + mode: MODE_FLAT, + doc: [content, whitespace, secondContent] + }; + const firstAndSecondContentFits = fits( + firstAndSecondContentFlatCmd, + [], + rem, + lineSuffix2.length > 0, + groupModeMap, + true + ); + if (firstAndSecondContentFits) { + cmds.push(remainingCmd, whitespaceFlatCmd, contentFlatCmd); + } else if (contentFits) { + cmds.push(remainingCmd, whitespaceBreakCmd, contentFlatCmd); + } else { + cmds.push(remainingCmd, whitespaceBreakCmd, contentBreakCmd); + } + break; + } + case DOC_TYPE_IF_BREAK: + case DOC_TYPE_INDENT_IF_BREAK: { + const groupMode = doc2.groupId ? groupModeMap[doc2.groupId] : mode; + if (groupMode === MODE_BREAK) { + const breakContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.breakContents : doc2.negate ? doc2.contents : indent(doc2.contents); + if (breakContents) { + cmds.push({ ind, mode, doc: breakContents }); + } + } + if (groupMode === MODE_FLAT) { + const flatContents = doc2.type === DOC_TYPE_IF_BREAK ? doc2.flatContents : doc2.negate ? indent(doc2.contents) : doc2.contents; + if (flatContents) { + cmds.push({ ind, mode, doc: flatContents }); + } + } + break; + } + case DOC_TYPE_LINE_SUFFIX: + lineSuffix2.push({ ind, mode, doc: doc2.contents }); + break; + case DOC_TYPE_LINE_SUFFIX_BOUNDARY: + if (lineSuffix2.length > 0) { + cmds.push({ ind, mode, doc: hardlineWithoutBreakParent }); + } + break; + case DOC_TYPE_LINE: + switch (mode) { + case MODE_FLAT: + if (!doc2.hard) { + if (!doc2.soft) { + out.push(" "); + pos += 1; + } + break; + } else { + shouldRemeasure = true; + } + // fallthrough + case MODE_BREAK: + if (lineSuffix2.length > 0) { + cmds.push({ ind, mode, doc: doc2 }, ...lineSuffix2.reverse()); + lineSuffix2.length = 0; + break; + } + if (doc2.literal) { + if (ind.root) { + out.push(newLine, ind.root.value); + pos = ind.root.length; + } else { + out.push(newLine); + pos = 0; + } + } else { + pos -= trim2(out); + out.push(newLine + ind.value); + pos = ind.length; + } + break; + } + break; + case DOC_TYPE_LABEL: + cmds.push({ ind, mode, doc: doc2.contents }); + break; + case DOC_TYPE_BREAK_PARENT: + break; + default: + throw new invalid_doc_error_default(doc2); + } + if (cmds.length === 0 && lineSuffix2.length > 0) { + cmds.push(...lineSuffix2.reverse()); + lineSuffix2.length = 0; + } + } + const cursorPlaceholderIndex = out.indexOf(CURSOR_PLACEHOLDER); + if (cursorPlaceholderIndex !== -1) { + const otherCursorPlaceholderIndex = out.indexOf( + CURSOR_PLACEHOLDER, + cursorPlaceholderIndex + 1 + ); + if (otherCursorPlaceholderIndex === -1) { + return { + formatted: out.filter((char) => char !== CURSOR_PLACEHOLDER).join("") + }; + } + const beforeCursor = out.slice(0, cursorPlaceholderIndex).join(""); + const aroundCursor = out.slice(cursorPlaceholderIndex + 1, otherCursorPlaceholderIndex).join(""); + const afterCursor = out.slice(otherCursorPlaceholderIndex + 1).join(""); + return { + formatted: beforeCursor + aroundCursor + afterCursor, + cursorNodeStart: beforeCursor.length, + cursorNodeText: aroundCursor + }; + } + return { formatted: out.join("") }; +} + +// src/document/public.js +var builders = { + join, + line, + softline, + hardline, + literalline, + group, + conditionalGroup, + fill, + lineSuffix, + lineSuffixBoundary, + cursor, + breakParent, + ifBreak, + trim, + indent, + indentIfBreak, + align, + addAlignmentToDoc, + markAsRoot, + dedentToRoot, + dedent, + hardlineWithoutBreakParent, + literallineWithoutBreakParent, + label, + // TODO: Remove this in v4 + concat: (parts) => parts +}; +var printer = { printDocToString }; +var utils = { + willBreak, + traverseDoc: traverse_doc_default, + findInDoc, + mapDoc, + removeLines, + stripTrailingHardline, + replaceEndOfLine, + canBreak +}; + +// with-default-export:src/document/public.js +var public_default = public_exports; +export { + builders, + public_default as default, + printer, + utils +}; diff --git a/node_modules/prettier/index.cjs b/node_modules/prettier/index.cjs new file mode 100644 index 0000000..ec43948 --- /dev/null +++ b/node_modules/prettier/index.cjs @@ -0,0 +1,682 @@ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/utils/skip.js +function skip(characters) { + return (text, startIndex, options) => { + const backwards = Boolean(options == null ? void 0 : options.backwards); + if (startIndex === false) { + return false; + } + const { length } = text; + let cursor = startIndex; + while (cursor >= 0 && cursor < length) { + const character = text.charAt(cursor); + if (characters instanceof RegExp) { + if (!characters.test(character)) { + return cursor; + } + } else if (!characters.includes(character)) { + return cursor; + } + backwards ? cursor-- : cursor++; + } + if (cursor === -1 || cursor === length) { + return cursor; + } + return false; + }; +} +var skipWhitespace, skipSpaces, skipToLineEnd, skipEverythingButNewLine; +var init_skip = __esm({ + "src/utils/skip.js"() { + skipWhitespace = skip(/\s/u); + skipSpaces = skip(" "); + skipToLineEnd = skip(",; "); + skipEverythingButNewLine = skip(/[^\n\r]/u); + } +}); + +// src/utils/skip-inline-comment.js +function skipInlineComment(text, startIndex) { + if (startIndex === false) { + return false; + } + if (text.charAt(startIndex) === "/" && text.charAt(startIndex + 1) === "*") { + for (let i = startIndex + 2; i < text.length; ++i) { + if (text.charAt(i) === "*" && text.charAt(i + 1) === "/") { + return i + 2; + } + } + } + return startIndex; +} +var skip_inline_comment_default; +var init_skip_inline_comment = __esm({ + "src/utils/skip-inline-comment.js"() { + skip_inline_comment_default = skipInlineComment; + } +}); + +// src/utils/skip-newline.js +function skipNewline(text, startIndex, options) { + const backwards = Boolean(options == null ? void 0 : options.backwards); + if (startIndex === false) { + return false; + } + const character = text.charAt(startIndex); + if (backwards) { + if (text.charAt(startIndex - 1) === "\r" && character === "\n") { + return startIndex - 2; + } + if (character === "\n" || character === "\r" || character === "\u2028" || character === "\u2029") { + return startIndex - 1; + } + } else { + if (character === "\r" && text.charAt(startIndex + 1) === "\n") { + return startIndex + 2; + } + if (character === "\n" || character === "\r" || character === "\u2028" || character === "\u2029") { + return startIndex + 1; + } + } + return startIndex; +} +var skip_newline_default; +var init_skip_newline = __esm({ + "src/utils/skip-newline.js"() { + skip_newline_default = skipNewline; + } +}); + +// src/utils/skip-trailing-comment.js +function skipTrailingComment(text, startIndex) { + if (startIndex === false) { + return false; + } + if (text.charAt(startIndex) === "/" && text.charAt(startIndex + 1) === "/") { + return skipEverythingButNewLine(text, startIndex); + } + return startIndex; +} +var skip_trailing_comment_default; +var init_skip_trailing_comment = __esm({ + "src/utils/skip-trailing-comment.js"() { + init_skip(); + skip_trailing_comment_default = skipTrailingComment; + } +}); + +// src/utils/get-next-non-space-non-comment-character-index.js +function getNextNonSpaceNonCommentCharacterIndex(text, startIndex) { + let oldIdx = null; + let nextIdx = startIndex; + while (nextIdx !== oldIdx) { + oldIdx = nextIdx; + nextIdx = skipSpaces(text, nextIdx); + nextIdx = skip_inline_comment_default(text, nextIdx); + nextIdx = skip_trailing_comment_default(text, nextIdx); + nextIdx = skip_newline_default(text, nextIdx); + } + return nextIdx; +} +var get_next_non_space_non_comment_character_index_default; +var init_get_next_non_space_non_comment_character_index = __esm({ + "src/utils/get-next-non-space-non-comment-character-index.js"() { + init_skip(); + init_skip_inline_comment(); + init_skip_newline(); + init_skip_trailing_comment(); + get_next_non_space_non_comment_character_index_default = getNextNonSpaceNonCommentCharacterIndex; + } +}); + +// src/utils/has-newline.js +function hasNewline(text, startIndex, options = {}) { + const idx = skipSpaces( + text, + options.backwards ? startIndex - 1 : startIndex, + options + ); + const idx2 = skip_newline_default(text, idx, options); + return idx !== idx2; +} +var has_newline_default; +var init_has_newline = __esm({ + "src/utils/has-newline.js"() { + init_skip(); + init_skip_newline(); + has_newline_default = hasNewline; + } +}); + +// src/utils/is-next-line-empty.js +function isNextLineEmpty(text, startIndex) { + let oldIdx = null; + let idx = startIndex; + while (idx !== oldIdx) { + oldIdx = idx; + idx = skipToLineEnd(text, idx); + idx = skip_inline_comment_default(text, idx); + idx = skipSpaces(text, idx); + } + idx = skip_trailing_comment_default(text, idx); + idx = skip_newline_default(text, idx); + return idx !== false && has_newline_default(text, idx); +} +var is_next_line_empty_default; +var init_is_next_line_empty = __esm({ + "src/utils/is-next-line-empty.js"() { + init_has_newline(); + init_skip(); + init_skip_inline_comment(); + init_skip_newline(); + init_skip_trailing_comment(); + is_next_line_empty_default = isNextLineEmpty; + } +}); + +// src/utils/is-previous-line-empty.js +function isPreviousLineEmpty(text, startIndex) { + let idx = startIndex - 1; + idx = skipSpaces(text, idx, { backwards: true }); + idx = skip_newline_default(text, idx, { backwards: true }); + idx = skipSpaces(text, idx, { backwards: true }); + const idx2 = skip_newline_default(text, idx, { backwards: true }); + return idx !== idx2; +} +var is_previous_line_empty_default; +var init_is_previous_line_empty = __esm({ + "src/utils/is-previous-line-empty.js"() { + init_skip(); + init_skip_newline(); + is_previous_line_empty_default = isPreviousLineEmpty; + } +}); + +// src/main/comments/utils.js +function describeNodeForDebugging(node) { + const nodeType = node.type || node.kind || "(unknown type)"; + let nodeName = String( + node.name || node.id && (typeof node.id === "object" ? node.id.name : node.id) || node.key && (typeof node.key === "object" ? node.key.name : node.key) || node.value && (typeof node.value === "object" ? "" : String(node.value)) || node.operator || "" + ); + if (nodeName.length > 20) { + nodeName = nodeName.slice(0, 19) + "\u2026"; + } + return nodeType + (nodeName ? " " + nodeName : ""); +} +function addCommentHelper(node, comment) { + const comments = node.comments ?? (node.comments = []); + comments.push(comment); + comment.printed = false; + comment.nodeDescription = describeNodeForDebugging(node); +} +function addLeadingComment(node, comment) { + comment.leading = true; + comment.trailing = false; + addCommentHelper(node, comment); +} +function addDanglingComment(node, comment, marker) { + comment.leading = false; + comment.trailing = false; + if (marker) { + comment.marker = marker; + } + addCommentHelper(node, comment); +} +function addTrailingComment(node, comment) { + comment.leading = false; + comment.trailing = true; + addCommentHelper(node, comment); +} +var init_utils = __esm({ + "src/main/comments/utils.js"() { + } +}); + +// src/utils/get-alignment-size.js +function getAlignmentSize(text, tabWidth, startIndex = 0) { + let size = 0; + for (let i = startIndex; i < text.length; ++i) { + if (text[i] === " ") { + size = size + tabWidth - size % tabWidth; + } else { + size++; + } + } + return size; +} +var get_alignment_size_default; +var init_get_alignment_size = __esm({ + "src/utils/get-alignment-size.js"() { + get_alignment_size_default = getAlignmentSize; + } +}); + +// src/utils/get-indent-size.js +function getIndentSize(value, tabWidth) { + const lastNewlineIndex = value.lastIndexOf("\n"); + if (lastNewlineIndex === -1) { + return 0; + } + return get_alignment_size_default( + // All the leading whitespaces + value.slice(lastNewlineIndex + 1).match(/^[\t ]*/u)[0], + tabWidth + ); +} +var get_indent_size_default; +var init_get_indent_size = __esm({ + "src/utils/get-indent-size.js"() { + init_get_alignment_size(); + get_indent_size_default = getIndentSize; + } +}); + +// node_modules/escape-string-regexp/index.js +function escapeStringRegexp(string) { + if (typeof string !== "string") { + throw new TypeError("Expected a string"); + } + return string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); +} +var init_escape_string_regexp = __esm({ + "node_modules/escape-string-regexp/index.js"() { + } +}); + +// src/utils/get-max-continuous-count.js +function getMaxContinuousCount(text, searchString) { + const results = text.match( + new RegExp(`(${escapeStringRegexp(searchString)})+`, "gu") + ); + if (results === null) { + return 0; + } + return results.reduce( + (maxCount, result) => Math.max(maxCount, result.length / searchString.length), + 0 + ); +} +var get_max_continuous_count_default; +var init_get_max_continuous_count = __esm({ + "src/utils/get-max-continuous-count.js"() { + init_escape_string_regexp(); + get_max_continuous_count_default = getMaxContinuousCount; + } +}); + +// src/utils/get-next-non-space-non-comment-character.js +function getNextNonSpaceNonCommentCharacter(text, startIndex) { + const index = get_next_non_space_non_comment_character_index_default(text, startIndex); + return index === false ? "" : text.charAt(index); +} +var get_next_non_space_non_comment_character_default; +var init_get_next_non_space_non_comment_character = __esm({ + "src/utils/get-next-non-space-non-comment-character.js"() { + init_get_next_non_space_non_comment_character_index(); + get_next_non_space_non_comment_character_default = getNextNonSpaceNonCommentCharacter; + } +}); + +// src/utils/get-preferred-quote.js +function getPreferredQuote(text, preferredQuoteOrPreferSingleQuote) { + const preferred = preferredQuoteOrPreferSingleQuote === true || preferredQuoteOrPreferSingleQuote === SINGLE_QUOTE ? SINGLE_QUOTE : DOUBLE_QUOTE; + const alternate = preferred === SINGLE_QUOTE ? DOUBLE_QUOTE : SINGLE_QUOTE; + let preferredQuoteCount = 0; + let alternateQuoteCount = 0; + for (const character of text) { + if (character === preferred) { + preferredQuoteCount++; + } else if (character === alternate) { + alternateQuoteCount++; + } + } + return preferredQuoteCount > alternateQuoteCount ? alternate : preferred; +} +var SINGLE_QUOTE, DOUBLE_QUOTE, get_preferred_quote_default; +var init_get_preferred_quote = __esm({ + "src/utils/get-preferred-quote.js"() { + SINGLE_QUOTE = "'"; + DOUBLE_QUOTE = '"'; + get_preferred_quote_default = getPreferredQuote; + } +}); + +// node_modules/emoji-regex/index.mjs +var emoji_regex_default; +var init_emoji_regex = __esm({ + "node_modules/emoji-regex/index.mjs"() { + emoji_regex_default = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; + }; + } +}); + +// node_modules/get-east-asian-width/lookup.js +function isFullWidth(x) { + return x === 12288 || x >= 65281 && x <= 65376 || x >= 65504 && x <= 65510; +} +function isWide(x) { + return x >= 4352 && x <= 4447 || x === 8986 || x === 8987 || x === 9001 || x === 9002 || x >= 9193 && x <= 9196 || x === 9200 || x === 9203 || x === 9725 || x === 9726 || x === 9748 || x === 9749 || x >= 9776 && x <= 9783 || x >= 9800 && x <= 9811 || x === 9855 || x >= 9866 && x <= 9871 || x === 9875 || x === 9889 || x === 9898 || x === 9899 || x === 9917 || x === 9918 || x === 9924 || x === 9925 || x === 9934 || x === 9940 || x === 9962 || x === 9970 || x === 9971 || x === 9973 || x === 9978 || x === 9981 || x === 9989 || x === 9994 || x === 9995 || x === 10024 || x === 10060 || x === 10062 || x >= 10067 && x <= 10069 || x === 10071 || x >= 10133 && x <= 10135 || x === 10160 || x === 10175 || x === 11035 || x === 11036 || x === 11088 || x === 11093 || x >= 11904 && x <= 11929 || x >= 11931 && x <= 12019 || x >= 12032 && x <= 12245 || x >= 12272 && x <= 12287 || x >= 12289 && x <= 12350 || x >= 12353 && x <= 12438 || x >= 12441 && x <= 12543 || x >= 12549 && x <= 12591 || x >= 12593 && x <= 12686 || x >= 12688 && x <= 12773 || x >= 12783 && x <= 12830 || x >= 12832 && x <= 12871 || x >= 12880 && x <= 42124 || x >= 42128 && x <= 42182 || x >= 43360 && x <= 43388 || x >= 44032 && x <= 55203 || x >= 63744 && x <= 64255 || x >= 65040 && x <= 65049 || x >= 65072 && x <= 65106 || x >= 65108 && x <= 65126 || x >= 65128 && x <= 65131 || x >= 94176 && x <= 94180 || x === 94192 || x === 94193 || x >= 94208 && x <= 100343 || x >= 100352 && x <= 101589 || x >= 101631 && x <= 101640 || x >= 110576 && x <= 110579 || x >= 110581 && x <= 110587 || x === 110589 || x === 110590 || x >= 110592 && x <= 110882 || x === 110898 || x >= 110928 && x <= 110930 || x === 110933 || x >= 110948 && x <= 110951 || x >= 110960 && x <= 111355 || x >= 119552 && x <= 119638 || x >= 119648 && x <= 119670 || x === 126980 || x === 127183 || x === 127374 || x >= 127377 && x <= 127386 || x >= 127488 && x <= 127490 || x >= 127504 && x <= 127547 || x >= 127552 && x <= 127560 || x === 127568 || x === 127569 || x >= 127584 && x <= 127589 || x >= 127744 && x <= 127776 || x >= 127789 && x <= 127797 || x >= 127799 && x <= 127868 || x >= 127870 && x <= 127891 || x >= 127904 && x <= 127946 || x >= 127951 && x <= 127955 || x >= 127968 && x <= 127984 || x === 127988 || x >= 127992 && x <= 128062 || x === 128064 || x >= 128066 && x <= 128252 || x >= 128255 && x <= 128317 || x >= 128331 && x <= 128334 || x >= 128336 && x <= 128359 || x === 128378 || x === 128405 || x === 128406 || x === 128420 || x >= 128507 && x <= 128591 || x >= 128640 && x <= 128709 || x === 128716 || x >= 128720 && x <= 128722 || x >= 128725 && x <= 128727 || x >= 128732 && x <= 128735 || x === 128747 || x === 128748 || x >= 128756 && x <= 128764 || x >= 128992 && x <= 129003 || x === 129008 || x >= 129292 && x <= 129338 || x >= 129340 && x <= 129349 || x >= 129351 && x <= 129535 || x >= 129648 && x <= 129660 || x >= 129664 && x <= 129673 || x >= 129679 && x <= 129734 || x >= 129742 && x <= 129756 || x >= 129759 && x <= 129769 || x >= 129776 && x <= 129784 || x >= 131072 && x <= 196605 || x >= 196608 && x <= 262141; +} +var init_lookup = __esm({ + "node_modules/get-east-asian-width/lookup.js"() { + } +}); + +// node_modules/get-east-asian-width/index.js +var _isNarrowWidth; +var init_get_east_asian_width = __esm({ + "node_modules/get-east-asian-width/index.js"() { + init_lookup(); + _isNarrowWidth = (codePoint) => !(isFullWidth(codePoint) || isWide(codePoint)); + } +}); + +// src/utils/get-string-width.js +function getStringWidth(text) { + if (!text) { + return 0; + } + if (!notAsciiRegex.test(text)) { + return text.length; + } + text = text.replace(emoji_regex_default(), " "); + let width = 0; + for (const character of text) { + const codePoint = character.codePointAt(0); + if (codePoint <= 31 || codePoint >= 127 && codePoint <= 159) { + continue; + } + if (codePoint >= 768 && codePoint <= 879) { + continue; + } + width += _isNarrowWidth(codePoint) ? 1 : 2; + } + return width; +} +var notAsciiRegex, get_string_width_default; +var init_get_string_width = __esm({ + "src/utils/get-string-width.js"() { + init_emoji_regex(); + init_get_east_asian_width(); + notAsciiRegex = /[^\x20-\x7F]/u; + get_string_width_default = getStringWidth; + } +}); + +// src/utils/has-newline-in-range.js +function hasNewlineInRange(text, startIndex, endIndex) { + for (let i = startIndex; i < endIndex; ++i) { + if (text.charAt(i) === "\n") { + return true; + } + } + return false; +} +var has_newline_in_range_default; +var init_has_newline_in_range = __esm({ + "src/utils/has-newline-in-range.js"() { + has_newline_in_range_default = hasNewlineInRange; + } +}); + +// src/utils/has-spaces.js +function hasSpaces(text, startIndex, options = {}) { + const idx = skipSpaces( + text, + options.backwards ? startIndex - 1 : startIndex, + options + ); + return idx !== startIndex; +} +var has_spaces_default; +var init_has_spaces = __esm({ + "src/utils/has-spaces.js"() { + init_skip(); + has_spaces_default = hasSpaces; + } +}); + +// scripts/build/shims/string-replace-all.js +var stringReplaceAll, string_replace_all_default; +var init_string_replace_all = __esm({ + "scripts/build/shims/string-replace-all.js"() { + stringReplaceAll = (isOptionalObject, original, pattern, replacement) => { + if (isOptionalObject && (original === void 0 || original === null)) { + return; + } + if (original.replaceAll) { + return original.replaceAll(pattern, replacement); + } + if (pattern.global) { + return original.replace(pattern, replacement); + } + return original.split(pattern).join(replacement); + }; + string_replace_all_default = stringReplaceAll; + } +}); + +// src/utils/make-string.js +function makeString(rawText, enclosingQuote, unescapeUnnecessaryEscapes) { + const otherQuote = enclosingQuote === '"' ? "'" : '"'; + const regex = /\\(.)|(["'])/gsu; + const raw = string_replace_all_default( + /* isOptionalObject */ + false, + rawText, + regex, + (match, escaped, quote) => { + if (escaped === otherQuote) { + return escaped; + } + if (quote === enclosingQuote) { + return "\\" + quote; + } + if (quote) { + return quote; + } + return unescapeUnnecessaryEscapes && /^[^\n\r"'0-7\\bfnrt-vx\u2028\u2029]$/u.test(escaped) ? escaped : "\\" + escaped; + } + ); + return enclosingQuote + raw + enclosingQuote; +} +var make_string_default; +var init_make_string = __esm({ + "src/utils/make-string.js"() { + init_string_replace_all(); + make_string_default = makeString; + } +}); + +// src/utils/public.js +var public_exports = {}; +__export(public_exports, { + addDanglingComment: () => addDanglingComment, + addLeadingComment: () => addLeadingComment, + addTrailingComment: () => addTrailingComment, + getAlignmentSize: () => get_alignment_size_default, + getIndentSize: () => get_indent_size_default, + getMaxContinuousCount: () => get_max_continuous_count_default, + getNextNonSpaceNonCommentCharacter: () => get_next_non_space_non_comment_character_default, + getNextNonSpaceNonCommentCharacterIndex: () => getNextNonSpaceNonCommentCharacterIndex2, + getPreferredQuote: () => get_preferred_quote_default, + getStringWidth: () => get_string_width_default, + hasNewline: () => has_newline_default, + hasNewlineInRange: () => has_newline_in_range_default, + hasSpaces: () => has_spaces_default, + isNextLineEmpty: () => isNextLineEmpty2, + isNextLineEmptyAfterIndex: () => is_next_line_empty_default, + isPreviousLineEmpty: () => isPreviousLineEmpty2, + makeString: () => make_string_default, + skip: () => skip, + skipEverythingButNewLine: () => skipEverythingButNewLine, + skipInlineComment: () => skip_inline_comment_default, + skipNewline: () => skip_newline_default, + skipSpaces: () => skipSpaces, + skipToLineEnd: () => skipToLineEnd, + skipTrailingComment: () => skip_trailing_comment_default, + skipWhitespace: () => skipWhitespace +}); +function legacyGetNextNonSpaceNonCommentCharacterIndex(text, node, locEnd) { + return get_next_non_space_non_comment_character_index_default( + text, + locEnd(node) + ); +} +function getNextNonSpaceNonCommentCharacterIndex2(text, startIndex) { + return arguments.length === 2 || typeof startIndex === "number" ? get_next_non_space_non_comment_character_index_default(text, startIndex) : ( + // @ts-expect-error -- expected + // eslint-disable-next-line prefer-rest-params + legacyGetNextNonSpaceNonCommentCharacterIndex(...arguments) + ); +} +function legacyIsPreviousLineEmpty(text, node, locStart) { + return is_previous_line_empty_default(text, locStart(node)); +} +function isPreviousLineEmpty2(text, startIndex) { + return arguments.length === 2 || typeof startIndex === "number" ? is_previous_line_empty_default(text, startIndex) : ( + // @ts-expect-error -- expected + // eslint-disable-next-line prefer-rest-params + legacyIsPreviousLineEmpty(...arguments) + ); +} +function legacyIsNextLineEmpty(text, node, locEnd) { + return is_next_line_empty_default(text, locEnd(node)); +} +function isNextLineEmpty2(text, startIndex) { + return arguments.length === 2 || typeof startIndex === "number" ? is_next_line_empty_default(text, startIndex) : ( + // @ts-expect-error -- expected + // eslint-disable-next-line prefer-rest-params + legacyIsNextLineEmpty(...arguments) + ); +} +var init_public = __esm({ + "src/utils/public.js"() { + init_get_next_non_space_non_comment_character_index(); + init_is_next_line_empty(); + init_is_previous_line_empty(); + init_utils(); + init_get_alignment_size(); + init_get_indent_size(); + init_get_max_continuous_count(); + init_get_next_non_space_non_comment_character(); + init_get_preferred_quote(); + init_get_string_width(); + init_has_newline(); + init_has_newline_in_range(); + init_has_spaces(); + init_make_string(); + init_skip(); + init_skip_inline_comment(); + init_skip_newline(); + init_skip_trailing_comment(); + } +}); + +// src/main/version.evaluate.cjs +var require_version_evaluate = __commonJS({ + "src/main/version.evaluate.cjs"(exports2, module2) { + module2.exports = "3.5.3"; + } +}); + +// src/index.cjs +var prettierPromise = import("./index.mjs"); +var functionNames = [ + "formatWithCursor", + "format", + "check", + "resolveConfig", + "resolveConfigFile", + "clearConfigCache", + "getFileInfo", + "getSupportInfo" +]; +var prettier = /* @__PURE__ */ Object.create(null); +for (const name of functionNames) { + prettier[name] = async (...args) => { + const prettier2 = await prettierPromise; + return prettier2[name](...args); + }; +} +var debugApiFunctionNames = [ + "parse", + "formatAST", + "formatDoc", + "printToDoc", + "printDocToString" +]; +var debugApis = /* @__PURE__ */ Object.create(null); +for (const name of debugApiFunctionNames) { + debugApis[name] = async (...args) => { + const prettier2 = await prettierPromise; + return prettier2.__debug[name](...args); + }; +} +prettier.__debug = debugApis; +if (true) { + prettier.util = (init_public(), __toCommonJS(public_exports)); + prettier.doc = require("./doc.js"); +} else { + Object.defineProperties(prettier, { + util: { + get() { + try { + return null; + } catch { + } + throw new Error( + "prettier.util is not available in development CommonJS version" + ); + } + }, + doc: { + get() { + try { + return null; + } catch { + } + throw new Error( + "prettier.doc is not available in development CommonJS version" + ); + } + } + }); +} +prettier.version = require_version_evaluate(); +module.exports = prettier; diff --git a/node_modules/prettier/index.d.ts b/node_modules/prettier/index.d.ts new file mode 100644 index 0000000..589790e --- /dev/null +++ b/node_modules/prettier/index.d.ts @@ -0,0 +1,956 @@ +// Copied from `@types/prettier` +// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/5bb07fc4b087cb7ee91084afa6fe750551a7bbb1/types/prettier/index.d.ts + +// Minimum TypeScript Version: 4.2 + +// Add `export {}` here to shut off automatic exporting from index.d.ts. There +// are quite a few utility types here that don't need to be shipped with the +// exported module. +export {}; + +import { builders, printer, utils } from "./doc.js"; + +export namespace doc { + export { builders, printer, utils }; +} + +// This utility is here to handle the case where you have an explicit union +// between string literals and the generic string type. It would normally +// resolve out to just the string type, but this generic LiteralUnion maintains +// the intellisense of the original union. +// +// It comes from this issue: microsoft/TypeScript#29729: +// https://github.com/microsoft/TypeScript/issues/29729#issuecomment-700527227 +export type LiteralUnion = + | T + | (Pick & { _?: never | undefined }); + +export type AST = any; +export type Doc = doc.builders.Doc; + +// The type of elements that make up the given array T. +type ArrayElement = T extends Array ? E : never; + +// A union of the properties of the given object that are arrays. +type ArrayProperties = { + [K in keyof T]: NonNullable extends readonly any[] ? K : never; +}[keyof T]; + +// A union of the properties of the given array T that can be used to index it. +// If the array is a tuple, then that's going to be the explicit indices of the +// array, otherwise it's going to just be number. +type IndexProperties = + IsTuple extends true ? Exclude["length"], T["length"]> : number; + +// Effectively performing T[P], except that it's telling TypeScript that it's +// safe to do this for tuples, arrays, or objects. +type IndexValue = T extends any[] + ? P extends number + ? T[P] + : never + : P extends keyof T + ? T[P] + : never; + +// Determines if an object T is an array like string[] (in which case this +// evaluates to false) or a tuple like [string] (in which case this evaluates to +// true). +// eslint-disable-next-line @typescript-eslint/no-unused-vars +type IsTuple = T extends [] + ? true + : T extends [infer First, ...infer Remain] + ? IsTuple + : false; + +type CallProperties = T extends any[] ? IndexProperties : keyof T; +type IterProperties = T extends any[] + ? IndexProperties + : ArrayProperties; + +type CallCallback = (path: AstPath, index: number, value: any) => U; +type EachCallback = ( + path: AstPath>, + index: number, + value: any, +) => void; +type MapCallback = ( + path: AstPath>, + index: number, + value: any, +) => U; + +// https://github.com/prettier/prettier/blob/next/src/common/ast-path.js +export class AstPath { + constructor(value: T); + + get key(): string | null; + get index(): number | null; + get node(): T; + get parent(): T | null; + get grandparent(): T | null; + get isInArray(): boolean; + get siblings(): T[] | null; + get next(): T | null; + get previous(): T | null; + get isFirst(): boolean; + get isLast(): boolean; + get isRoot(): boolean; + get root(): T; + get ancestors(): T[]; + + stack: T[]; + + callParent(callback: (path: this) => U, count?: number): U; + + /** + * @deprecated Please use `AstPath#key` or `AstPath#index` + */ + getName(): PropertyKey | null; + + /** + * @deprecated Please use `AstPath#node` or `AstPath#siblings` + */ + getValue(): T; + + getNode(count?: number): T | null; + + getParentNode(count?: number): T | null; + + match( + ...predicates: Array< + (node: any, name: string | null, number: number | null) => boolean + > + ): boolean; + + // For each of the tree walk functions (call, each, and map) this provides 5 + // strict type signatures, along with a fallback at the end if you end up + // calling more than 5 properties deep. This helps a lot with typing because + // for the majority of cases you're calling fewer than 5 properties, so the + // tree walk functions have a clearer understanding of what you're doing. + // + // Note that resolving these types is somewhat complicated, and it wasn't + // even supported until TypeScript 4.2 (before it would just say that the + // type instantiation was excessively deep and possibly infinite). + + call(callback: CallCallback): U; + call>( + callback: CallCallback, U>, + prop1: P1, + ): U; + call>( + callback: CallCallback, P2>, U>, + prop1: P1, + prop2: P2, + ): U; + call< + U, + P1 extends keyof T, + P2 extends CallProperties, + P3 extends CallProperties>, + >( + callback: CallCallback< + IndexValue, P2>, P3>, + U + >, + prop1: P1, + prop2: P2, + prop3: P3, + ): U; + call< + U, + P1 extends keyof T, + P2 extends CallProperties, + P3 extends CallProperties>, + P4 extends CallProperties, P3>>, + >( + callback: CallCallback< + IndexValue, P2>, P3>, P4>, + U + >, + prop1: P1, + prop2: P2, + prop3: P3, + prop4: P4, + ): U; + call( + callback: CallCallback, + prop1: P, + prop2: P, + prop3: P, + prop4: P, + ...props: P[] + ): U; + + each(callback: EachCallback): void; + each>( + callback: EachCallback>, + prop1: P1, + ): void; + each>( + callback: EachCallback, P2>>, + prop1: P1, + prop2: P2, + ): void; + each< + P1 extends keyof T, + P2 extends IterProperties, + P3 extends IterProperties>, + >( + callback: EachCallback, P2>, P3>>, + prop1: P1, + prop2: P2, + prop3: P3, + ): void; + each< + P1 extends keyof T, + P2 extends IterProperties, + P3 extends IterProperties>, + P4 extends IterProperties, P3>>, + >( + callback: EachCallback< + IndexValue, P2>, P3>, P4> + >, + prop1: P1, + prop2: P2, + prop3: P3, + prop4: P4, + ): void; + each( + callback: EachCallback, + prop1: PropertyKey, + prop2: PropertyKey, + prop3: PropertyKey, + prop4: PropertyKey, + ...props: PropertyKey[] + ): void; + + map(callback: MapCallback): U[]; + map>( + callback: MapCallback, U>, + prop1: P1, + ): U[]; + map>( + callback: MapCallback, P2>, U>, + prop1: P1, + prop2: P2, + ): U[]; + map< + U, + P1 extends keyof T, + P2 extends IterProperties, + P3 extends IterProperties>, + >( + callback: MapCallback, P2>, P3>, U>, + prop1: P1, + prop2: P2, + prop3: P3, + ): U[]; + map< + U, + P1 extends keyof T, + P2 extends IterProperties, + P3 extends IterProperties>, + P4 extends IterProperties, P3>>, + >( + callback: MapCallback< + IndexValue, P2>, P3>, P4>, + U + >, + prop1: P1, + prop2: P2, + prop3: P3, + prop4: P4, + ): U[]; + map( + callback: MapCallback, + prop1: PropertyKey, + prop2: PropertyKey, + prop3: PropertyKey, + prop4: PropertyKey, + ...props: PropertyKey[] + ): U[]; +} + +/** @deprecated `FastPath` was renamed to `AstPath` */ +export type FastPath = AstPath; + +export type BuiltInParser = (text: string, options?: any) => AST; +export type BuiltInParserName = + | "acorn" + | "angular" + | "babel-flow" + | "babel-ts" + | "babel" + | "css" + | "espree" + | "flow" + | "glimmer" + | "graphql" + | "html" + | "json-stringify" + | "json" + | "json5" + | "jsonc" + | "less" + | "lwc" + | "markdown" + | "mdx" + | "meriyah" + | "scss" + | "typescript" + | "vue" + | "yaml"; +export type BuiltInParsers = Record; + +/** + * For use in `.prettierrc.js`, `.prettierrc.ts`, `.prettierrc.cjs`, `.prettierrc.cts`, `prettierrc.mjs`, `prettierrc.mts`, `prettier.config.js`, `prettier.config.ts`, `prettier.config.cjs`, `prettier.config.cts`, `prettier.config.mjs`, `prettier.config.mts` + */ +export interface Config extends Options { + overrides?: Array<{ + files: string | string[]; + excludeFiles?: string | string[]; + options?: Options; + }>; +} + +export interface Options extends Partial {} + +export interface RequiredOptions extends doc.printer.Options { + /** + * Print semicolons at the ends of statements. + * @default true + */ + semi: boolean; + /** + * Use single quotes instead of double quotes. + * @default false + */ + singleQuote: boolean; + /** + * Use single quotes in JSX. + * @default false + */ + jsxSingleQuote: boolean; + /** + * Print trailing commas wherever possible. + * @default "all" + */ + trailingComma: "none" | "es5" | "all"; + /** + * Print spaces between brackets in object literals. + * @default true + */ + bracketSpacing: boolean; + /** + * How to wrap object literals. + * @default "preserve" + */ + objectWrap: "preserve" | "collapse"; + /** + * Put the `>` of a multi-line HTML (HTML, JSX, Vue, Angular) element at the end of the last line instead of being + * alone on the next line (does not apply to self closing elements). + * @default false + */ + bracketSameLine: boolean; + /** + * Format only a segment of a file. + * @default 0 + */ + rangeStart: number; + /** + * Format only a segment of a file. + * @default Number.POSITIVE_INFINITY + */ + rangeEnd: number; + /** + * Specify which parser to use. + */ + parser: LiteralUnion; + /** + * Specify the input filepath. This will be used to do parser inference. + */ + filepath: string; + /** + * Prettier can restrict itself to only format files that contain a special comment, called a pragma, at the top of the file. + * This is very useful when gradually transitioning large, unformatted codebases to prettier. + * @default false + */ + requirePragma: boolean; + /** + * Prettier can insert a special @format marker at the top of files specifying that + * the file has been formatted with prettier. This works well when used in tandem with + * the --require-pragma option. If there is already a docblock at the top of + * the file then this option will add a newline to it with the @format marker. + * @default false + */ + insertPragma: boolean; + /** + * By default, Prettier will wrap markdown text as-is since some services use a linebreak-sensitive renderer. + * In some cases you may want to rely on editor/viewer soft wrapping instead, so this option allows you to opt out. + * @default "preserve" + */ + proseWrap: "always" | "never" | "preserve"; + /** + * Include parentheses around a sole arrow function parameter. + * @default "always" + */ + arrowParens: "avoid" | "always"; + /** + * Provide ability to support new languages to prettier. + */ + plugins: Array; + /** + * How to handle whitespaces in HTML. + * @default "css" + */ + htmlWhitespaceSensitivity: "css" | "strict" | "ignore"; + /** + * Which end of line characters to apply. + * @default "lf" + */ + endOfLine: "auto" | "lf" | "crlf" | "cr"; + /** + * Change when properties in objects are quoted. + * @default "as-needed" + */ + quoteProps: "as-needed" | "consistent" | "preserve"; + /** + * Whether or not to indent the code inside +``` + +## Use + +```js +import fs from 'node:fs' +import path from 'node:path' +import process from 'node:process' +import {trough} from 'trough' + +const pipeline = trough() + .use(function (fileName) { + console.log('Checking… ' + fileName) + }) + .use(function (fileName) { + return path.join(process.cwd(), fileName) + }) + .use(function (filePath, next) { + fs.stat(filePath, function (error, stats) { + next(error, {filePath, stats}) + }) + }) + .use(function (ctx, next) { + if (ctx.stats.isFile()) { + fs.readFile(ctx.filePath, next) + } else { + next(new Error('Expected file')) + } + }) + +pipeline.run('readme.md', console.log) +pipeline.run('node_modules', console.log) +``` + +Yields: + +```txt +Checking… readme.md +Checking… node_modules +Error: Expected file + at ~/example.js:22:12 + at wrapped (~/node_modules/trough/index.js:111:16) + at next (~/node_modules/trough/index.js:62:23) + at done (~/node_modules/trough/index.js:145:7) + at ~/example.js:15:7 + at FSReqCallback.oncomplete (node:fs:199:5) +null +``` + +## API + +This package exports the identifiers +[`trough`][api-trough] and +[`wrap`][api-wrap]. +There is no default export. + +It exports the [TypeScript][] types +[`Callback`][api-callback], +[`Middleware`][api-middleware], +[`Pipeline`][api-pipeline], +[`Run`][api-run], +and [`Use`][api-use]. + +### `trough()` + +Create new middleware. + +###### Parameters + +There are no parameters. + +###### Returns + +[`Pipeline`][api-pipeline]. + +### `wrap(middleware, callback)` + +Wrap `middleware` into a uniform interface. + +You can pass all input to the resulting function. +`callback` is then called with the output of `middleware`. + +If `middleware` accepts more arguments than the later given in input, +an extra `done` function is passed to it after that input, +which must be called by `middleware`. + +The first value in `input` is the main input value. +All other input values are the rest input values. +The values given to `callback` are the input values, +merged with every non-nullish output value. + +* if `middleware` throws an error, + returns a promise that is rejected, + or calls the given `done` function with an error, + `callback` is called with that error +* if `middleware` returns a value or returns a promise that is resolved, + that value is the main output value +* if `middleware` calls `done`, + all non-nullish values except for the first one (the error) overwrite the + output values + +###### Parameters + +* `middleware` ([`Middleware`][api-middleware]) + — function to wrap +* `callback` ([`Callback`][api-callback]) + — callback called with the output of `middleware` + +###### Returns + +Wrapped middleware ([`Run`][api-run]). + +### `Callback` + +Callback function (TypeScript type). + +###### Parameters + +* `error` (`Error`, optional) + — error, if any +* `...output` (`Array`, optional) + — output values + +###### Returns + +Nothing (`undefined`). + +### `Middleware` + +A middleware function called with the output of its predecessor (TypeScript +type). + +###### Synchronous + +If `fn` returns or throws an error, +the pipeline fails and `done` is called with that error. + +If `fn` returns a value (neither `null` nor `undefined`), +the first `input` of the next function is set to that value +(all other `input` is passed through). + +The following example shows how returning an error stops the pipeline: + +```js +import {trough} from 'trough' + +trough() + .use(function (thing) { + return new Error('Got: ' + thing) + }) + .run('some value', console.log) +``` + +Yields: + +```txt +Error: Got: some value + at ~/example.js:5:12 + … +``` + +The following example shows how throwing an error stops the pipeline: + +```js +import {trough} from 'trough' + +trough() + .use(function (thing) { + throw new Error('Got: ' + thing) + }) + .run('more value', console.log) +``` + +Yields: + +```txt +Error: Got: more value + at ~/example.js:5:11 + … +``` + +The following example shows how the first output can be modified: + +```js +import {trough} from 'trough' + +trough() + .use(function (thing) { + return 'even ' + thing + }) + .run('more value', 'untouched', console.log) +``` + +Yields: + +```txt +null 'even more value' 'untouched' +``` + +###### Promise + +If `fn` returns a promise, +and that promise rejects, +the pipeline fails and `done` is called with the rejected value. + +If `fn` returns a promise, +and that promise resolves with a value (neither `null` nor `undefined`), +the first `input` of the next function is set to that value (all other `input` +is passed through). + +The following example shows how rejecting a promise stops the pipeline: + +```js +import {trough} from 'trough' + +trough() + .use(function (thing) { + return new Promise(function (resolve, reject) { + reject('Got: ' + thing) + }) + }) + .run('thing', console.log) +``` + +Yields: + +```txt +Got: thing +``` + +The following example shows how the input isn’t touched by resolving to `null`. + +```js +import {trough} from 'trough' + +trough() + .use(function () { + return new Promise(function (resolve) { + setTimeout(function () { + resolve(null) + }, 100) + }) + }) + .run('Input', console.log) +``` + +Yields: + +```txt +null 'Input' +``` + +###### Asynchronous + +If `fn` accepts one more argument than the given `input`, +a `next` function is given (after the input). +`next` must be called, but doesn’t have to be called async. + +If `next` is given a value (neither `null` nor `undefined`) as its first +argument, +the pipeline fails and `done` is called with that value. + +If `next` is given no value (either `null` or `undefined`) as the first +argument, +all following non-nullish values change the input of the following +function, +and all nullish values default to the `input`. + +The following example shows how passing a first argument stops the pipeline: + +```js +import {trough} from 'trough' + +trough() + .use(function (thing, next) { + next(new Error('Got: ' + thing)) + }) + .run('thing', console.log) +``` + +Yields: + +```txt +Error: Got: thing + at ~/example.js:5:10 +``` + +The following example shows how more values than the input are passed. + +```js +import {trough} from 'trough' + +trough() + .use(function (thing, next) { + setTimeout(function () { + next(null, null, 'values') + }, 100) + }) + .run('some', console.log) +``` + +Yields: + +```txt +null 'some' 'values' +``` + +###### Parameters + +* `...input` (`Array`, optional) + — input values + +###### Returns + +Output, promise, etc (`any`). + +### `Pipeline` + +Pipeline (TypeScript type). + +###### Properties + +* `run` ([`Run`][api-run]) + — run the pipeline +* `use` ([`Use`][api-use]) + — add middleware + +### `Run` + +Call all middleware (TypeScript type). + +Calls `done` on completion with either an error or the output of the +last middleware. + +> 👉 **Note**: as the length of input defines whether async functions get a +> `next` function, +> it’s recommended to keep `input` at one value normally. + +###### Parameters + +* `...input` (`Array`, optional) + — input values +* `done` ([`Callback`][api-callback]) + — callback called when done + +###### Returns + +Nothing (`undefined`). + +### `Use` + +Add middleware (TypeScript type). + +###### Parameters + +* `middleware` ([`Middleware`][api-middleware]) + — middleware function + +###### Returns + +Current pipeline ([`Pipeline`][api-pipeline]). + +## Compatibility + +This projects is compatible with maintained versions of Node.js. + +When we cut a new major release, +we drop support for unmaintained versions of Node. +This means we try to keep the current release line, +`trough@2`, +compatible with Node.js 12. + +## Security + +This package is safe. + +## Contribute + +Yes please! +See [How to Contribute to Open Source][open-source-guide-contribute]. + +## License + +[MIT][file-license] © [Titus Wormer][wooorm] + + + +[api-callback]: #callback + +[api-middleware]: #middleware + +[api-pipeline]: #pipeline + +[api-run]: #run + +[api-trough]: #trough + +[api-use]: #use + +[api-wrap]: #wrapmiddleware-callback + +[badge-build-image]: https://github.com/wooorm/trough/workflows/main/badge.svg + +[badge-build-url]: https://github.com/wooorm/trough/actions + +[badge-coverage-image]: https://img.shields.io/codecov/c/github/wooorm/trough.svg + +[badge-coverage-url]: https://codecov.io/github/wooorm/trough + +[badge-downloads-image]: https://img.shields.io/npm/dm/trough.svg + +[badge-downloads-url]: https://www.npmjs.com/package/trough + +[badge-size-image]: https://img.shields.io/bundlejs/size/trough + +[badge-size-url]: https://bundlejs.com/?q=trough + +[npm-install]: https://docs.npmjs.com/cli/install + +[esm-sh]: https://esm.sh + +[file-license]: license + +[github-gist-esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[github-segmentio-ware]: https://github.com/segmentio/ware + +[open-source-guide-contribute]: https://opensource.guide/how-to-contribute/ + +[typescript]: https://www.typescriptlang.org + +[wooorm]: https://wooorm.com diff --git a/node_modules/unified/index.d.ts b/node_modules/unified/index.d.ts new file mode 100644 index 0000000..09db6f2 --- /dev/null +++ b/node_modules/unified/index.d.ts @@ -0,0 +1,863 @@ +// TypeScript Version: 4.0 + +// Note: this is a `.d.ts` file because it is not possible to have default type +// parameters in JSDoc-based TypeScript, which is a feature we use to type that: +// +// ```js +// .use(somePlugin, theOptions) +// ``` +// +// `theOptions` matches the options that `somePlugin` expects and thus is very +// important for making unified usable in TypeScript. +// +// Furthermore, this is places in the root of the project because types that +// accept type parameters cannot be re-exported as such easily. + +import {Node} from 'unist' +import {VFile, VFileCompatible} from 'vfile' + +/* eslint-disable @typescript-eslint/naming-convention */ + +type VFileWithOutput = Result extends Uint8Array // Buffer. + ? VFile + : Result extends object // Custom result type + ? VFile & {result: Result} + : VFile + +// Get the right most non-void thing. +type Specific = Right extends void ? Left : Right + +// Create a processor based on the input/output of a plugin. +type UsePlugin< + ParseTree extends Node | void = void, + CurrentTree extends Node | void = void, + CompileTree extends Node | void = void, + CompileResult = void, + Input = void, + Output = void +> = Output extends Node + ? Input extends string + ? // If `Input` is `string` and `Output` is `Node`, then this plugin + // defines a parser, so set `ParseTree`. + Processor< + Output, + Specific, + Specific, + CompileResult + > + : Input extends Node + ? // If `Input` is `Node` and `Output` is `Node`, then this plugin defines a + // transformer, its output defines the input of the next, so set + // `CurrentTree`. + Processor< + Specific, + Output, + Specific, + CompileResult + > + : // Else, `Input` is something else and `Output` is `Node`: + never + : Input extends Node + ? // If `Input` is `Node` and `Output` is not a `Node`, then this plugin + // defines a compiler, so set `CompileTree` and `CompileResult` + Processor< + Specific, + Specific, + Input, + Output + > + : // Else, `Input` is not a `Node` and `Output` is not a `Node`. + // Maybe it’s untyped, or the plugin throws an error (`never`), so lets + // just keep it as it was. + Processor + +/* eslint-enable @typescript-eslint/naming-convention */ + +/** + * Processor allows plugins to be chained together to transform content. + * The chain of plugins defines how content flows through it. + * + * @typeParam ParseTree + * The node that the parser yields (and `run` receives). + * @typeParam CurrentTree + * The node that the last attached plugin yields. + * @typeParam CompileTree + * The node that the compiler receives (and `run` yields). + * @typeParam CompileResult + * The thing that the compiler yields. + */ +export interface Processor< + ParseTree extends Node | void = void, + CurrentTree extends Node | void = void, + CompileTree extends Node | void = void, + CompileResult = void +> extends FrozenProcessor { + /** + * Configure the processor to use a plugin. + * + * @typeParam PluginParameters + * Plugin settings. + * @typeParam Input + * Value that is accepted by the plugin. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer expects. + * * If the plugin sets a parser, then this should be `string`. + * * If the plugin sets a compiler, then this should be the node type that + * the compiler expects. + * @typeParam Output + * Value that the plugin yields. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer yields, and defaults to `Input`. + * * If the plugin sets a parser, then this should be the node type that + * the parser yields. + * * If the plugin sets a compiler, then this should be the result that + * the compiler yields (`string`, `Buffer`, or something else). + * @param plugin + * Plugin (function) to use. + * Plugins are deduped based on identity: passing a function in twice will + * cause it to run only once. + * @param settings + * Configuration for plugin, optional. + * Plugins typically receive one options object, but could receive other and + * more values. + * It’s also possible to pass a boolean instead of settings: `true` (to turn + * a plugin on) or `false` (to turn a plugin off). + * @returns + * Current processor. + */ + use< + PluginParameters extends any[] = any[], + Input = Specific, + Output = Input + >( + plugin: Plugin, + ...settings: PluginParameters | [boolean] + ): UsePlugin< + ParseTree, + CurrentTree, + CompileTree, + CompileResult, + Input, + Output + > + + /** + * Configure the processor with a tuple of a plugin and setting(s). + * + * @typeParam PluginParameters + * Plugin settings. + * @typeParam Input + * Value that is accepted by the plugin. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer expects. + * * If the plugin sets a parser, then this should be `string`. + * * If the plugin sets a compiler, then this should be the node type that + * the compiler expects. + * @typeParam Output + * Value that the plugin yields. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer yields, and defaults to `Input`. + * * If the plugin sets a parser, then this should be the node type that + * the parser yields. + * * If the plugin sets a compiler, then this should be the result that + * the compiler yields (`string`, `Buffer`, or something else). + * @param tuple + * A tuple where the first item is a plugin (function) to use and other + * items are options. + * Plugins are deduped based on identity: passing a function in twice will + * cause it to run only once. + * It’s also possible to pass a boolean instead of settings: `true` (to turn + * a plugin on) or `false` (to turn a plugin off). + * @returns + * Current processor. + */ + use< + PluginParameters extends any[] = any[], + Input = Specific, + Output = Input + >( + tuple: + | PluginTuple + | [Plugin, boolean] + ): UsePlugin< + ParseTree, + CurrentTree, + CompileTree, + CompileResult, + Input, + Output + > + + /** + * Configure the processor with a preset or list of plugins and presets. + * + * @param presetOrList + * Either a list of plugins, presets, and tuples, or a single preset: an + * object with a `plugins` (list) and/or `settings` + * (`Record`). + * @returns + * Current processor. + */ + use( + presetOrList: Preset | PluggableList + ): Processor +} + +/** + * A frozen processor is just like a regular processor, except no additional + * plugins can be added. + * A frozen processor can be created by calling `.freeze()` on a processor. + * An unfrozen processor can be created by calling a processor. + */ +export interface FrozenProcessor< + ParseTree extends Node | void = void, + CurrentTree extends Node | void = void, + CompileTree extends Node | void = void, + CompileResult = void +> { + /** + * Clone current processor + * + * @returns + * New unfrozen processor that is configured to function the same as its + * ancestor. + * But when the descendant processor is configured it does not affect the + * ancestral processor. + */ + (): Processor + + /** + * Internal list of configured plugins. + * + * @private + */ + attachers: Array<[Plugin, ...unknown[]]> + + Parser?: Parser> | undefined + Compiler?: + | Compiler, Specific> + | undefined + + /** + * Parse a file. + * + * @param file + * File to parse. + * `VFile` or anything that can be given to `new VFile()`, optional. + * @returns + * Resulting tree. + */ + parse(file?: VFileCompatible | undefined): Specific + + /** + * Compile a file. + * + * @param node + * Node to compile. + * @param file + * `VFile` or anything that can be given to `new VFile()`, optional. + * @returns + * New content: compiled text (`string` or `Buffer`) or something else. + * This depends on which plugins you use: typically text, but could for + * example be a React node. + */ + stringify( + node: Specific, + file?: VFileCompatible | undefined + ): CompileTree extends Node ? CompileResult : unknown + + /** + * Run transforms on the given tree. + * + * @param node + * Tree to transform. + * @param callback + * Callback called with an error or the resulting node. + * @returns + * Nothing. + */ + run( + node: Specific, + callback: RunCallback> + ): void + + /** + * Run transforms on the given node. + * + * @param node + * Tree to transform. + * @param file + * File associated with `node`. + * `VFile` or anything that can be given to `new VFile()`. + * @param callback + * Callback called with an error or the resulting node. + * @returns + * Nothing. + */ + run( + node: Specific, + file: VFileCompatible | undefined, + callback: RunCallback> + ): void + + /** + * Run transforms on the given node. + * + * @param node + * Tree to transform. + * @param file + * File associated with `node`. + * `VFile` or anything that can be given to `new VFile()`. + * @returns + * Promise that resolves to the resulting tree. + */ + run( + node: Specific, + file?: VFileCompatible | undefined + ): Promise> + + /** + * Run transforms on the given node, synchronously. + * Throws when asynchronous transforms are configured. + * + * @param node + * Tree to transform. + * @param file + * File associated with `node`. + * `VFile` or anything that can be given to `new VFile()`, optional. + * @returns + * Resulting tree. + */ + runSync( + node: Specific, + file?: VFileCompatible | undefined + ): Specific + + /** + * Process a file. + * + * This performs all phases of the processor: + * + * 1. Parse a file into a unist node using the configured `Parser` + * 2. Run transforms on that node + * 3. Compile the resulting node using the `Compiler` + * + * The result from the compiler is stored on the file. + * What the result is depends on which plugins you use. + * The result is typically text (`string` or `Buffer`), which can be retrieved + * with `file.toString()` (or `String(file)`). + * In some cases, such as when using `rehypeReact` to create a React node, + * the result is stored on `file.result`. + * + * @param file + * `VFile` or anything that can be given to `new VFile()`. + * @param callback + * Callback called with an error or the resulting file. + * @returns + * Nothing. + */ + process( + file: VFileCompatible | undefined, + callback: ProcessCallback> + ): void + + /** + * Process a file. + * + * This performs all phases of the processor: + * + * 1. Parse a file into a unist node using the configured `Parser` + * 2. Run transforms on that node + * 3. Compile the resulting node using the `Compiler` + * + * The result from the compiler is stored on the file. + * What the result is depends on which plugins you use. + * The result is typically text (`string` or `Buffer`), which can be retrieved + * with `file.toString()` (or `String(file)`). + * In some cases, such as when using `rehypeReact` to create a React node, + * the result is stored on `file.result`. + * + * @param file + * `VFile` or anything that can be given to `new VFile()`. + * @returns + * Promise that resolves to the resulting `VFile`. + */ + process(file: VFileCompatible): Promise> + + /** + * Process a file, synchronously. + * Throws when asynchronous transforms are configured. + * + * This performs all phases of the processor: + * + * 1. Parse a file into a unist node using the configured `Parser` + * 2. Run transforms on that node + * 3. Compile the resulting node using the `Compiler` + * + * The result from the compiler is stored on the file. + * What the result is depends on which plugins you use. + * The result is typically text (`string` or `Buffer`), which can be retrieved + * with `file.toString()` (or `String(file)`). + * In some cases, such as when using `rehypeReact` to create a React node, + * the result is stored on `file.result`. + * + * @param file + * `VFile` or anything that can be given to `new VFile()`, optional. + * @returns + * Resulting file. + */ + processSync( + file?: VFileCompatible | undefined + ): VFileWithOutput + + /** + * Get an in-memory key-value store accessible to all phases of the process. + * + * @returns + * Key-value store. + */ + data(): Record + + /** + * Set an in-memory key-value store accessible to all phases of the process. + * + * @param data + * Key-value store. + * @returns + * Current processor. + */ + data( + data: Record + ): Processor + + /** + * Get an in-memory value by key. + * + * @param key + * Key to get. + * @returns + * The value at `key`. + */ + data(key: string): unknown + + /** + * Set an in-memory value by key. + * + * @param key + * Key to set. + * @param value + * Value to set. + * @returns + * Current processor. + */ + data( + key: string, + value: unknown + ): Processor + + /** + * Freeze a processor. + * Frozen processors are meant to be extended and not to be configured or + * processed directly. + * + * Once a processor is frozen it cannot be unfrozen. + * New processors working just like it can be created by calling the + * processor. + * + * It’s possible to freeze processors explicitly, by calling `.freeze()`, but + * `.parse()`, `.run()`, `.stringify()`, and `.process()` call `.freeze()` to + * freeze a processor too. + * + * @returns + * Frozen processor. + */ + freeze(): FrozenProcessor +} + +/** + * A plugin is a function. + * It configures the processor and in turn can receive options. + * Plugins can configure processors by interacting with parsers and compilers + * (at `this.Parser` or `this.Compiler`) or by specifying how the syntax tree + * is handled (by returning a `Transformer`). + * + * @typeParam PluginParameters + * Plugin settings. + * @typeParam Input + * Value that is accepted by the plugin. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer expects. + * * If the plugin sets a parser, then this should be `string`. + * * If the plugin sets a compiler, then this should be the node type that + * the compiler expects. + * @typeParam Output + * Value that the plugin yields. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer yields, and defaults to `Input`. + * * If the plugin sets a parser, then this should be the node type that + * the parser yields. + * * If the plugin sets a compiler, then this should be the result that + * the compiler yields (`string`, `Buffer`, or something else). + * @this + * The current processor. + * Plugins can configure the processor by interacting with `this.Parser` or + * `this.Compiler`, or by accessing the data associated with the whole process + * (`this.data`). + * @param settings + * Configuration for plugin. + * Plugins typically receive one options object, but could receive other and + * more values. + * Users can also pass a boolean instead of settings: `true` (to turn + * a plugin on) or `false` (to turn a plugin off). + * When a plugin is turned off, it won’t be called. + * + * When creating your own plugins, please accept only a single object! + * It allows plugins to be reconfigured and it helps users to know that every + * plugin accepts one options object. + * @returns + * Plugins can return a `Transformer` to specify how the syntax tree is + * handled. + */ +export type Plugin< + PluginParameters extends any[] = any[], + Input = Node, + Output = Input +> = ( + this: Input extends Node + ? Output extends Node + ? // This is a transform, so define `Input` as the current tree. + Processor + : // Compiler. + Processor + : Output extends Node + ? // Parser. + Processor + : // No clue. + Processor, + ...settings: PluginParameters +) => // If both `Input` and `Output` are `Node`, expect an optional `Transformer`. +Input extends Node + ? Output extends Node + ? Transformer | void + : void + : void + +/** + * Presets provide a sharable way to configure processors with multiple plugins + * and/or settings. + */ +export interface Preset { + plugins?: PluggableList + settings?: Record +} + +/** + * A tuple of a plugin and its setting(s). + * The first item is a plugin (function) to use and other items are options. + * Plugins are deduped based on identity: passing a function in twice will + * cause it to run only once. + * + * @typeParam PluginParameters + * Plugin settings. + * @typeParam Input + * Value that is accepted by the plugin. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer expects. + * * If the plugin sets a parser, then this should be `string`. + * * If the plugin sets a compiler, then this should be the node type that + * the compiler expects. + * @typeParam Output + * Value that the plugin yields. + * + * * If the plugin returns a transformer, then this should be the node + * type that the transformer yields, and defaults to `Input`. + * * If the plugin sets a parser, then this should be the node type that + * the parser yields. + * * If the plugin sets a compiler, then this should be the result that + * the compiler yields (`string`, `Buffer`, or something else). + */ +export type PluginTuple< + PluginParameters extends any[] = any[], + Input = Node, + Output = Input +> = [Plugin, ...PluginParameters] + +/** + * A union of the different ways to add plugins and settings. + * + * @typeParam PluginParameters + * Plugin settings. + */ +export type Pluggable = + | PluginTuple + | Plugin + | Preset + +/** + * A list of plugins and presets. + */ +export type PluggableList = Pluggable[] + +/** + * @deprecated + * Please use `Plugin`. + */ +export type Attacher< + PluginParameters extends any[] = any[], + Input = Node, + Output = Input +> = Plugin + +/** + * Transformers modify the syntax tree or metadata of a file. + * A transformer is a function that is called each time a file is passed + * through the transform phase. + * If an error occurs (either because it’s thrown, returned, rejected, or passed + * to `next`), the process stops. + * + * @typeParam Input + * Node type that the transformer expects. + * @typeParam Output + * Node type that the transformer yields. + * @param node + * Tree to be transformed. + * @param file + * File associated with node. + * @param next + * Callback that you must call when done. + * Note: this is given if you accept three parameters in your transformer. + * If you accept up to two parameters, it’s not given, and you can return + * a promise. + * @returns + * Any of the following: + * + * * `void` — If nothing is returned, the next transformer keeps using same + * tree. + * * `Error` — Can be returned to stop the process. + * * `Node` — Can be returned and results in further transformations and + * `stringify`s to be performed on the new tree. + * * `Promise` — If a promise is returned, the function is asynchronous, and + * must be resolved (optionally with a `Node`) or rejected (optionally with + * an `Error`). + * + * If you accept a `next` callback, nothing should be returned. + */ +export type Transformer< + Input extends Node = Node, + Output extends Node = Input +> = ( + node: Input, + file: VFile, + next: TransformCallback +) => Promise | Output | Error | undefined | void + +/** + * Callback you must call when a transformer is done. + * + * @typeParam Tree + * Node that the plugin yields. + * @param error + * Pass an error to stop the process. + * @param node + * Pass a tree to continue transformations (and `stringify`) on the new tree. + * @param file + * Pass a file to continue transformations (and `stringify`) on the new file. + * @returns + * Nothing. + */ +export type TransformCallback = ( + error?: Error | null | undefined, + node?: Tree | undefined, + file?: VFile | undefined +) => void + +/** + * Function handling the parsing of text to a syntax tree. + * Used in the parse phase in the process and called with a `string` and + * `VFile` representation of the document to parse. + * + * `Parser` can be a normal function, in which case it must return a `Node`: + * the syntax tree representation of the given file. + * + * `Parser` can also be a constructor function (a function with keys in its + * `prototype`), in which case it’s called with `new`. + * Instances must have a parse method that is called without arguments and + * must return a `Node`. + * + * @typeParam Tree + * The node that the parser yields (and `run` receives). + */ +export type Parser = + | ParserClass + | ParserFunction + +/** + * A class to parse files. + * + * @typeParam Tree + * The node that the parser yields. + */ +export class ParserClass { + prototype: { + /** + * Parse a file. + * + * @returns + * Parsed tree. + */ + parse(): Tree + } + + /** + * Constructor. + * + * @param document + * Document to parse. + * @param file + * File associated with `document`. + * @returns + * Instance. + */ + constructor(document: string, file: VFile) +} + +/** + * Normal function to parse a file. + * + * @typeParam Tree + * The node that the parser yields. + * @param document + * Document to parse. + * @param file + * File associated with `document`. + * @returns + * Node representing the given file. + */ +export type ParserFunction = ( + document: string, + file: VFile +) => Tree + +/** + * Function handling the compilation of syntax tree to a text. + * Used in the stringify phase in the process and called with a `Node` and + * `VFile` representation of the document to stringify. + * + * `Compiler` can be a normal function, in which case it must return a + * `string`: the text representation of the given syntax tree. + * + * `Compiler` can also be a constructor function (a function with keys in its + * `prototype`), in which case it’s called with `new`. + * Instances must have a `compile` method that is called without arguments + * and must return a `string`. + * + * @typeParam Tree + * The node that the compiler receives. + * @typeParam Result + * The thing that the compiler yields. + */ +export type Compiler = + | CompilerClass + | CompilerFunction + +/** + * A class to compile trees. + * + * @typeParam Tree + * The node that the compiler receives. + * @typeParam Result + * The thing that the compiler yields. + */ +export class CompilerClass { + prototype: { + /** + * Compile a tree. + * + * @returns + * New content: compiled text (`string` or `Buffer`, for `file.value`) or + * something else (for `file.result`). + */ + compile(): Result + } + + /** + * Constructor. + * + * @param tree + * Tree to compile. + * @param file + * File associated with `tree`. + * @returns + * Instance. + */ + constructor(tree: Tree, file: VFile) +} + +/** + * Normal function to compile a tree. + * + * @typeParam Tree + * The node that the compiler receives. + * @typeParam Result + * The thing that the compiler yields. + * @param tree + * Tree to compile. + * @param file + * File associated with `tree`. + * @returns + * New content: compiled text (`string` or `Buffer`, for `file.value`) or + * something else (for `file.result`). + */ +export type CompilerFunction = ( + tree: Tree, + file: VFile +) => Result + +/** + * Callback called when a done running. + * + * @typeParam Tree + * The tree that the callback receives. + * @param error + * Error passed when unsuccessful. + * @param node + * Tree to transform. + * @param file + * File passed when successful. + * @returns + * Nothing. + */ +export type RunCallback = ( + error?: Error | null | undefined, + node?: Tree | undefined, + file?: VFile | undefined +) => void + +/** + * Callback called when a done processing. + * + * @typeParam File + * The file that the callback receives. + * @param error + * Error passed when unsuccessful. + * @param file + * File passed when successful. + * @returns + * Nothing. + */ +export type ProcessCallback = ( + error?: Error | null | undefined, + file?: File | undefined +) => void + +/** + * A frozen processor. + */ +export function unified(): Processor diff --git a/node_modules/unified/index.js b/node_modules/unified/index.js new file mode 100644 index 0000000..024230e --- /dev/null +++ b/node_modules/unified/index.js @@ -0,0 +1 @@ +export {unified} from './lib/index.js' diff --git a/node_modules/unified/lib/index.d.ts b/node_modules/unified/lib/index.d.ts new file mode 100644 index 0000000..0742912 --- /dev/null +++ b/node_modules/unified/lib/index.d.ts @@ -0,0 +1,19 @@ +export const unified: import('..').FrozenProcessor +export type Node = import('unist').Node +export type VFileCompatible = import('vfile').VFileCompatible +export type VFileValue = import('vfile').VFileValue +export type Processor = import('..').Processor +export type Plugin = import('..').Plugin +export type Preset = import('..').Preset +export type Pluggable = import('..').Pluggable +export type PluggableList = import('..').PluggableList +export type Transformer = import('..').Transformer +export type Parser = import('..').Parser +export type Compiler = import('..').Compiler +export type RunCallback = import('..').RunCallback +export type ProcessCallback = import('..').ProcessCallback +export type Context = { + tree: Node + file: VFile +} +import {VFile} from 'vfile' diff --git a/node_modules/unified/lib/index.js b/node_modules/unified/lib/index.js new file mode 100644 index 0000000..ef5748e --- /dev/null +++ b/node_modules/unified/lib/index.js @@ -0,0 +1,599 @@ +/** + * @typedef {import('unist').Node} Node + * @typedef {import('vfile').VFileCompatible} VFileCompatible + * @typedef {import('vfile').VFileValue} VFileValue + * @typedef {import('..').Processor} Processor + * @typedef {import('..').Plugin} Plugin + * @typedef {import('..').Preset} Preset + * @typedef {import('..').Pluggable} Pluggable + * @typedef {import('..').PluggableList} PluggableList + * @typedef {import('..').Transformer} Transformer + * @typedef {import('..').Parser} Parser + * @typedef {import('..').Compiler} Compiler + * @typedef {import('..').RunCallback} RunCallback + * @typedef {import('..').ProcessCallback} ProcessCallback + * + * @typedef Context + * @property {Node} tree + * @property {VFile} file + */ + +import {bail} from 'bail' +import isBuffer from 'is-buffer' +import extend from 'extend' +import isPlainObj from 'is-plain-obj' +import {trough} from 'trough' +import {VFile} from 'vfile' + +// Expose a frozen processor. +export const unified = base().freeze() + +const own = {}.hasOwnProperty + +// Function to create the first processor. +/** + * @returns {Processor} + */ +function base() { + const transformers = trough() + /** @type {Processor['attachers']} */ + const attachers = [] + /** @type {Record} */ + let namespace = {} + /** @type {boolean|undefined} */ + let frozen + let freezeIndex = -1 + + // Data management. + // @ts-expect-error: overloads are handled. + processor.data = data + processor.Parser = undefined + processor.Compiler = undefined + + // Lock. + processor.freeze = freeze + + // Plugins. + processor.attachers = attachers + // @ts-expect-error: overloads are handled. + processor.use = use + + // API. + processor.parse = parse + processor.stringify = stringify + // @ts-expect-error: overloads are handled. + processor.run = run + processor.runSync = runSync + // @ts-expect-error: overloads are handled. + processor.process = process + processor.processSync = processSync + + // Expose. + return processor + + // Create a new processor based on the processor in the current scope. + /** @type {Processor} */ + function processor() { + const destination = base() + let index = -1 + + while (++index < attachers.length) { + destination.use(...attachers[index]) + } + + destination.data(extend(true, {}, namespace)) + + return destination + } + + /** + * @param {string|Record} [key] + * @param {unknown} [value] + * @returns {unknown} + */ + function data(key, value) { + if (typeof key === 'string') { + // Set `key`. + if (arguments.length === 2) { + assertUnfrozen('data', frozen) + namespace[key] = value + return processor + } + + // Get `key`. + return (own.call(namespace, key) && namespace[key]) || null + } + + // Set space. + if (key) { + assertUnfrozen('data', frozen) + namespace = key + return processor + } + + // Get space. + return namespace + } + + /** @type {Processor['freeze']} */ + function freeze() { + if (frozen) { + return processor + } + + while (++freezeIndex < attachers.length) { + const [attacher, ...options] = attachers[freezeIndex] + + if (options[0] === false) { + continue + } + + if (options[0] === true) { + options[0] = undefined + } + + /** @type {Transformer|void} */ + const transformer = attacher.call(processor, ...options) + + if (typeof transformer === 'function') { + transformers.use(transformer) + } + } + + frozen = true + freezeIndex = Number.POSITIVE_INFINITY + + return processor + } + + /** + * @param {Pluggable|null|undefined} [value] + * @param {...unknown} options + * @returns {Processor} + */ + function use(value, ...options) { + /** @type {Record|undefined} */ + let settings + + assertUnfrozen('use', frozen) + + if (value === null || value === undefined) { + // Empty. + } else if (typeof value === 'function') { + addPlugin(value, ...options) + } else if (typeof value === 'object') { + if (Array.isArray(value)) { + addList(value) + } else { + addPreset(value) + } + } else { + throw new TypeError('Expected usable value, not `' + value + '`') + } + + if (settings) { + namespace.settings = Object.assign(namespace.settings || {}, settings) + } + + return processor + + /** + * @param {import('..').Pluggable} value + * @returns {void} + */ + function add(value) { + if (typeof value === 'function') { + addPlugin(value) + } else if (typeof value === 'object') { + if (Array.isArray(value)) { + const [plugin, ...options] = value + addPlugin(plugin, ...options) + } else { + addPreset(value) + } + } else { + throw new TypeError('Expected usable value, not `' + value + '`') + } + } + + /** + * @param {Preset} result + * @returns {void} + */ + function addPreset(result) { + addList(result.plugins) + + if (result.settings) { + settings = Object.assign(settings || {}, result.settings) + } + } + + /** + * @param {PluggableList|null|undefined} [plugins] + * @returns {void} + */ + function addList(plugins) { + let index = -1 + + if (plugins === null || plugins === undefined) { + // Empty. + } else if (Array.isArray(plugins)) { + while (++index < plugins.length) { + const thing = plugins[index] + add(thing) + } + } else { + throw new TypeError('Expected a list of plugins, not `' + plugins + '`') + } + } + + /** + * @param {Plugin} plugin + * @param {...unknown} [value] + * @returns {void} + */ + function addPlugin(plugin, value) { + let index = -1 + /** @type {Processor['attachers'][number]|undefined} */ + let entry + + while (++index < attachers.length) { + if (attachers[index][0] === plugin) { + entry = attachers[index] + break + } + } + + if (entry) { + if (isPlainObj(entry[1]) && isPlainObj(value)) { + value = extend(true, entry[1], value) + } + + entry[1] = value + } else { + // @ts-expect-error: fine. + attachers.push([...arguments]) + } + } + } + + /** @type {Processor['parse']} */ + function parse(doc) { + processor.freeze() + const file = vfile(doc) + const Parser = processor.Parser + assertParser('parse', Parser) + + if (newable(Parser, 'parse')) { + // @ts-expect-error: `newable` checks this. + return new Parser(String(file), file).parse() + } + + // @ts-expect-error: `newable` checks this. + return Parser(String(file), file) // eslint-disable-line new-cap + } + + /** @type {Processor['stringify']} */ + function stringify(node, doc) { + processor.freeze() + const file = vfile(doc) + const Compiler = processor.Compiler + assertCompiler('stringify', Compiler) + assertNode(node) + + if (newable(Compiler, 'compile')) { + // @ts-expect-error: `newable` checks this. + return new Compiler(node, file).compile() + } + + // @ts-expect-error: `newable` checks this. + return Compiler(node, file) // eslint-disable-line new-cap + } + + /** + * @param {Node} node + * @param {VFileCompatible|RunCallback} [doc] + * @param {RunCallback} [callback] + * @returns {Promise|void} + */ + function run(node, doc, callback) { + assertNode(node) + processor.freeze() + + if (!callback && typeof doc === 'function') { + callback = doc + doc = undefined + } + + if (!callback) { + return new Promise(executor) + } + + executor(null, callback) + + /** + * @param {null|((node: Node) => void)} resolve + * @param {(error: Error) => void} reject + * @returns {void} + */ + function executor(resolve, reject) { + // @ts-expect-error: `doc` can’t be a callback anymore, we checked. + transformers.run(node, vfile(doc), done) + + /** + * @param {Error|null} error + * @param {Node} tree + * @param {VFile} file + * @returns {void} + */ + function done(error, tree, file) { + tree = tree || node + if (error) { + reject(error) + } else if (resolve) { + resolve(tree) + } else { + // @ts-expect-error: `callback` is defined if `resolve` is not. + callback(null, tree, file) + } + } + } + } + + /** @type {Processor['runSync']} */ + function runSync(node, file) { + /** @type {Node|undefined} */ + let result + /** @type {boolean|undefined} */ + let complete + + processor.run(node, file, done) + + assertDone('runSync', 'run', complete) + + // @ts-expect-error: we either bailed on an error or have a tree. + return result + + /** + * @param {Error|null} [error] + * @param {Node} [tree] + * @returns {void} + */ + function done(error, tree) { + bail(error) + result = tree + complete = true + } + } + + /** + * @param {VFileCompatible} doc + * @param {ProcessCallback} [callback] + * @returns {Promise|undefined} + */ + function process(doc, callback) { + processor.freeze() + assertParser('process', processor.Parser) + assertCompiler('process', processor.Compiler) + + if (!callback) { + return new Promise(executor) + } + + executor(null, callback) + + /** + * @param {null|((file: VFile) => void)} resolve + * @param {(error?: Error|null|undefined) => void} reject + * @returns {void} + */ + function executor(resolve, reject) { + const file = vfile(doc) + + processor.run(processor.parse(file), file, (error, tree, file) => { + if (error || !tree || !file) { + done(error) + } else { + /** @type {unknown} */ + const result = processor.stringify(tree, file) + + if (result === undefined || result === null) { + // Empty. + } else if (looksLikeAVFileValue(result)) { + file.value = result + } else { + file.result = result + } + + done(error, file) + } + }) + + /** + * @param {Error|null|undefined} [error] + * @param {VFile|undefined} [file] + * @returns {void} + */ + function done(error, file) { + if (error || !file) { + reject(error) + } else if (resolve) { + resolve(file) + } else { + // @ts-expect-error: `callback` is defined if `resolve` is not. + callback(null, file) + } + } + } + } + + /** @type {Processor['processSync']} */ + function processSync(doc) { + /** @type {boolean|undefined} */ + let complete + + processor.freeze() + assertParser('processSync', processor.Parser) + assertCompiler('processSync', processor.Compiler) + + const file = vfile(doc) + + processor.process(file, done) + + assertDone('processSync', 'process', complete) + + return file + + /** + * @param {Error|null|undefined} [error] + * @returns {void} + */ + function done(error) { + complete = true + bail(error) + } + } +} + +/** + * Check if `value` is a constructor. + * + * @param {unknown} value + * @param {string} name + * @returns {boolean} + */ +function newable(value, name) { + return ( + typeof value === 'function' && + // Prototypes do exist. + // type-coverage:ignore-next-line + value.prototype && + // A function with keys in its prototype is probably a constructor. + // Classes’ prototype methods are not enumerable, so we check if some value + // exists in the prototype. + // type-coverage:ignore-next-line + (keys(value.prototype) || name in value.prototype) + ) +} + +/** + * Check if `value` is an object with keys. + * + * @param {Record} value + * @returns {boolean} + */ +function keys(value) { + /** @type {string} */ + let key + + for (key in value) { + if (own.call(value, key)) { + return true + } + } + + return false +} + +/** + * Assert a parser is available. + * + * @param {string} name + * @param {unknown} value + * @returns {asserts value is Parser} + */ +function assertParser(name, value) { + if (typeof value !== 'function') { + throw new TypeError('Cannot `' + name + '` without `Parser`') + } +} + +/** + * Assert a compiler is available. + * + * @param {string} name + * @param {unknown} value + * @returns {asserts value is Compiler} + */ +function assertCompiler(name, value) { + if (typeof value !== 'function') { + throw new TypeError('Cannot `' + name + '` without `Compiler`') + } +} + +/** + * Assert the processor is not frozen. + * + * @param {string} name + * @param {unknown} frozen + * @returns {asserts frozen is false} + */ +function assertUnfrozen(name, frozen) { + if (frozen) { + throw new Error( + 'Cannot call `' + + name + + '` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.' + ) + } +} + +/** + * Assert `node` is a unist node. + * + * @param {unknown} node + * @returns {asserts node is Node} + */ +function assertNode(node) { + // `isPlainObj` unfortunately uses `any` instead of `unknown`. + // type-coverage:ignore-next-line + if (!isPlainObj(node) || typeof node.type !== 'string') { + throw new TypeError('Expected node, got `' + node + '`') + // Fine. + } +} + +/** + * Assert that `complete` is `true`. + * + * @param {string} name + * @param {string} asyncName + * @param {unknown} complete + * @returns {asserts complete is true} + */ +function assertDone(name, asyncName, complete) { + if (!complete) { + throw new Error( + '`' + name + '` finished async. Use `' + asyncName + '` instead' + ) + } +} + +/** + * @param {VFileCompatible} [value] + * @returns {VFile} + */ +function vfile(value) { + return looksLikeAVFile(value) ? value : new VFile(value) +} + +/** + * @param {VFileCompatible} [value] + * @returns {value is VFile} + */ +function looksLikeAVFile(value) { + return Boolean( + value && + typeof value === 'object' && + 'message' in value && + 'messages' in value + ) +} + +/** + * @param {unknown} [value] + * @returns {value is VFileValue} + */ +function looksLikeAVFileValue(value) { + return typeof value === 'string' || isBuffer(value) +} diff --git a/node_modules/unified/license b/node_modules/unified/license new file mode 100644 index 0000000..f3722d9 --- /dev/null +++ b/node_modules/unified/license @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/unified/package.json b/node_modules/unified/package.json new file mode 100644 index 0000000..4be454f --- /dev/null +++ b/node_modules/unified/package.json @@ -0,0 +1,107 @@ +{ + "name": "unified", + "version": "10.1.2", + "description": "Interface for parsing, inspecting, transforming, and serializing content through syntax trees", + "license": "MIT", + "keywords": [ + "unified", + "process", + "parse", + "transform", + "compile", + "stringify", + "serialize", + "ast", + "cst", + "syntax", + "tree", + "content", + "rehype", + "retext", + "remark" + ], + "homepage": "https://unifiedjs.com", + "repository": "unifiedjs/unified", + "bugs": "https://github.com/unifiedjs/unified/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)", + "Junyoung Choi ", + "Hernan Rajchert ", + "Christian Murphy ", + "Vse Mozhet Byt ", + "Richard Littauer " + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "devDependencies": { + "@types/extend": "^3.0.0", + "@types/tape": "^4.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^10.0.0", + "remark-preset-wooorm": "^9.0.0", + "rimraf": "^3.0.0", + "tape": "^5.0.0", + "tsd": "^0.19.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.48.0" + }, + "scripts": { + "build": "rimraf \"test/**/*.d.ts\" && tsc && tsd && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --unhandled-rejections=strict --conditions development test/index.js", + "test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov node --unhandled-rejections=strict --conditions development test/index.js", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true, + "rules": { + "@typescript-eslint/ban-types": "off", + "promise/param-names": "off" + }, + "ignores": [ + "types/" + ] + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/unified/readme.md b/node_modules/unified/readme.md new file mode 100644 index 0000000..59eb796 --- /dev/null +++ b/node_modules/unified/readme.md @@ -0,0 +1,1450 @@ +# [![unified][logo]][site] + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +**unified** is an interface for processing text using syntax trees. +It’s what powers [**remark**][remark] (Markdown), [**retext**][retext] (natural +language), and [**rehype**][rehype] (HTML), and allows for processing between +formats. + +## Intro + +**unified** enables new exciting projects like [Gatsby][] to pull in Markdown, +[MDX][] to embed [JSX][], and [Prettier][] to format it. +It’s used in about 700k projects on GitHub and has about 35m downloads each +month on npm: you’re probably using it. +Some notable users are [Node.js][], [Vercel][], [Netlify][], [GitHub][], +[Mozilla][], [WordPress][], [Adobe][], [Facebook][], [Google][], and many more. + +* To read about what we are up to, follow us [Twitter][] +* For a less technical and more practical introduction to unified, visit + [`unifiedjs.com`][site] and peruse its [Learn][] section +* Browse [awesome unified][awesome] to find out more about the ecosystem +* Questions? + Get help on [Discussions][chat]! +* Check out [Contribute][] below to find out how to help out, or become a + backer or sponsor on [OpenCollective][collective] + +## Sponsors + +Support this effort and give back by sponsoring on [OpenCollective][collective]! + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Vercel

    + +
    + Motif

    + +
    + HashiCorp

    + +
    + American Express

    + +
    + GitBook

    + +
    + Gatsby

    + +
    + Netlify

    + + +
    + Coinbase

    + +
    + ThemeIsle

    + +
    + Expo

    + +
    + Boost Note

    + +
    + Holloway

    + +
    +
    + You? +

    +
    + +## Install + +This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c): +Node 12+ is needed to use it and it must be `import`ed instead of `require`d. + +[npm][]: + +```sh +npm install unified +``` + +## Use + +```js +import {unified} from 'unified' +import remarkParse from 'remark-parse' +import remarkRehype from 'remark-rehype' +import rehypeDocument from 'rehype-document' +import rehypeFormat from 'rehype-format' +import rehypeStringify from 'rehype-stringify' +import {reporter} from 'vfile-reporter' + +unified() + .use(remarkParse) + .use(remarkRehype) + .use(rehypeDocument, {title: '👋🌍'}) + .use(rehypeFormat) + .use(rehypeStringify) + .process('# Hello world!') + .then( + (file) => { + console.error(reporter(file)) + console.log(String(file)) + }, + (error) => { + // Handle your error here! + throw error + } + ) +``` + +Yields: + +```txt +no issues found +``` + +```html + + + + + 👋🌍 + + + +

    Hello world!

    + + +``` + +## Contents + +* [Description](#description) +* [API](#api) + * [`processor()`](#processor) + * [`processor.use(plugin[, options])`](#processoruseplugin-options) + * [`processor.parse(file)`](#processorparsefile) + * [`processor.stringify(node[, file])`](#processorstringifynode-file) + * [`processor.run(node[, file][, done])`](#processorrunnode-file-done) + * [`processor.runSync(node[, file])`](#processorrunsyncnode-file) + * [`processor.process(file[, done])`](#processorprocessfile-done) + * [`processor.processSync(file|value)`](#processorprocesssyncfilevalue) + * [`processor.data([key[, value]])`](#processordatakey-value) + * [`processor.freeze()`](#processorfreeze) +* [`Plugin`](#plugin) + * [`function attacher([options])`](#function-attacheroptions) + * [`function transformer(node, file[, next])`](#function-transformernode-file-next) +* [`Preset`](#preset) +* [Contribute](#contribute) +* [Acknowledgments](#acknowledgments) +* [License](#license) + +## Description + +**unified** is an interface for processing text using syntax trees. +Syntax trees are a representation of text understandable to programs. +Those programs, called [*plugin*][plugin]s, take these trees and inspect and +modify them. +To get to the syntax tree from text, there is a [*parser*][parser]. +To get from that back to text, there is a [*compiler*][compiler]. +This is the [*process*][process] of a *processor*. + +```ascii +| ........................ process ........................... | +| .......... parse ... | ... run ... | ... stringify ..........| + + +--------+ +----------+ +Input ->- | Parser | ->- Syntax Tree ->- | Compiler | ->- Output + +--------+ | +----------+ + X + | + +--------------+ + | Transformers | + +--------------+ +``` + +###### Processors + +Every **processor** implements another processor. +To create a processor, call another processor. +The new processor is configured to work the same as its ancestor. +But when the descendant processor is configured in the future it does not affect +the ancestral processor. + +When processors are exposed from a module (for example, `unified` itself) they +should not be configured directly, as that would change their behavior for all +module users. +Those processors are [*frozen*][freeze] and they should be called to create a +new processor before they are used. + +###### Syntax trees + +The **syntax trees** used in **unified** are [**unist**][unist] nodes. +A [**node**][node] is a plain JavaScript objects with a `type` field. +The semantics of nodes and format of syntax trees is defined by other projects. + +There are several [*utilities*][unist-utilities] for working with nodes. + +* [**esast**][esast] — JS +* [**hast**][hast] — HTML +* [**mdast**][mdast] — Markdown +* [**nlcst**][nlcst] — Natural language +* [**xast**][xast] — XML + +###### List of processors + +The following projects process different [*syntax tree*][syntax-tree] formats. +They parse text to a syntax tree and compile that back to text. +These processors can be used as is, or their parser and compiler can be mixed +and matched with **unified** and plugins to process between different syntaxes. + +* [**rehype**][rehype] ([*hast*][hast]) — HTML +* [**remark**][remark] ([*mdast*][mdast]) — Markdown +* [**retext**][retext] ([*nlcst*][nlcst]) — Natural language + +###### List of plugins + +The below [**plugins**][plugin] work with **unified**, on all [*syntax +tree*][syntax-tree] formats: + +* [`unified-diff`](https://github.com/unifiedjs/unified-diff) + — Ignore messages for unchanged lines in Travis +* [`unified-message-control`](https://github.com/unifiedjs/unified-message-control) + — Enable, disable, and ignore messages + +See [**remark**][remark-plugins], [**rehype**][rehype-plugins], and +[**retext**][retext-plugins] for their lists of plugins. + +###### File + +When processing a document, **metadata** is often gathered about that document. +[**vfile**][vfile] is a virtual file format that stores data, metadata, and +messages about files for **unified** and its plugins. + +There are several [*utilities*][vfile-utilities] for working with these files. + +###### Configuration + +[*Processors*][processors] are configured with [*plugin*][plugin]s or +with the [`data`][data] method. + +###### Integrations + +**unified** can integrate with the file system with [`unified-engine`][engine]. +CLI apps can be created with [`unified-args`][args], Gulp plugins with +[`unified-engine-gulp`][gulp], and Atom Linters with +[`unified-engine-atom`][atom]. + +[`unified-stream`][stream] provides a streaming interface. + +###### Programming interface + +The API provided by **unified** allows multiple files to be processed and gives +access to *metadata* (such as lint messages): + +```js +import {unified} from 'unified' +import remarkParse from 'remark-parse' +import remarkPresetLintMarkdownStyleGuide from 'remark-preset-lint-markdown-style-guide' +import remarkRetext from 'remark-retext' +import retextEnglish from 'retext-english' +import retextEquality from 'retext-equality' +import remarkRehype from 'remark-rehype' +import rehypeStringify from 'rehype-stringify' +import {reporter} from 'vfile-reporter' + +unified() + .use(remarkParse) + .use(remarkPresetLintMarkdownStyleGuide) + .use(remarkRetext, unified().use(retextEnglish).use(retextEquality)) + .use(remarkRehype) + .use(rehypeStringify) + .process('*Emphasis* and _stress_, you guys!') + .then( + (file) => { + console.error(reporter(file)) + console.log(String(file)) + }, + (error) => { + // Handle your error here! + throw error + } + ) +``` + +Yields: + +```txt + 1:16-1:24 warning Emphasis should use `*` as a marker emphasis-marker remark-lint + 1:30-1:34 warning `guys` may be insensitive, use `people`, `persons`, `folks` instead gals-man retext-equality + +⚠ 2 warnings +``` + +```html +

    Emphasis and stress, you guys!

    +``` + +###### Processing between syntaxes + +[*Processors*][processors] can be combined in two modes. + +**Bridge** mode transforms the [*syntax tree*][syntax-tree] from one format +(*origin*) to another (*destination*). +Another processor runs on the destination tree. +Finally, the original processor continues transforming the origin tree. + +**Mutate** mode also transforms the syntax tree from one format to another. +But the original processor continues transforming the destination tree. + +In the previous example (“Programming interface”), `remark-retext` is used in +*bridge* mode: the origin syntax tree is kept after [**retext**][retext] is +done; whereas `remark-rehype` is used in *mutate* mode: it sets a new syntax +tree and discards the origin tree. + +* [`remark-retext`][remark-retext] +* [`remark-rehype`][remark-rehype] +* [`rehype-retext`][rehype-retext] +* [`rehype-remark`][rehype-remark] + +## API + +This package exports the following identifiers: `unified`. +There is no default export. + +### `processor()` + +[*Processor*][processors] describing how to *process* text. + +###### Returns + +`Function` — New [*unfrozen*][freeze] processor that is configured to work the +same as its ancestor. +When the descendant processor is configured in the future it does not affect the +ancestral processor. + +###### Example + +The following example shows how a new processor can be created (from the remark +processor) and linked to **stdin**(4) and **stdout**(4). + +```js +import {remark} from 'remark' +import concatStream from 'concat-stream' + +process.stdin.pipe( + concatStream((buf) => { + process.stdout.write(remark().processSync(buf).toString()) + }) +) +``` + +### `processor.use(plugin[, options])` + +[*Configure*][configuration] the processor to use a [*plugin*][plugin] and +optionally configure that plugin with options. + +If the processor is already using this plugin, the previous plugin configuration +is changed based on the options that are passed in. +The plugin is not added a second time. + +###### Signatures + +* `processor.use(plugin[, options])` +* `processor.use(preset)` +* `processor.use(list)` + +###### Parameters + +* `plugin` ([`Attacher`][plugin]) +* `options` (`*`, optional) — Configuration for `plugin` +* `preset` (`Object`) — Object with an optional `plugins` (set to `list`), + and/or an optional `settings` object +* `list` (`Array`) — List of plugins, presets, and pairs (`plugin` and + `options` in an array) + +###### Returns + +`processor` — The processor that `use` was called on. + +###### Note + +`use` cannot be called on [*frozen*][freeze] processors. +Call the processor first to create a new unfrozen processor. + +###### Example + +There are many ways to pass plugins to `.use()`. +The below example gives an overview. + +```js +import {unified} from 'unified' + +unified() + // Plugin with options: + .use(pluginA, {x: true, y: true}) + // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`): + .use(pluginA, {y: false, z: true}) + // Plugins: + .use([pluginB, pluginC]) + // Two plugins, the second with options: + .use([pluginD, [pluginE, {}]]) + // Preset with plugins and settings: + .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}}) + // Settings only: + .use({settings: {position: false}}) +``` + +### `processor.parse(file)` + +Parse text to a [*syntax tree*][syntax-tree]. + +###### Parameters + +* `file` ([`VFile`][vfile]) — [*File*][file], any value accepted by `vfile()` + +###### Returns + +[`Node`][node] — Parsed [*syntax tree*][syntax-tree] representing `file`. + +###### Note + +`parse` freezes the processor if not already [*frozen*][freeze]. + +`parse` performs the [*parse phase*][description], not the *run phase* or other +phases. + +###### Example + +The below example shows how `parse` can be used to create a syntax tree from a +file. + +```js +import {unified} from 'unified' +import remarkParse from 'remark-parse' + +const tree = unified().use(remarkParse).parse('# Hello world!') + +console.log(tree) +``` + +Yields: + +```js +{ + type: 'root', + children: [ + {type: 'heading', depth: 1, children: [Array], position: [Position]} + ], + position: { + start: {line: 1, column: 1, offset: 0}, + end: {line: 1, column: 15, offset: 14} + } +} +``` + +#### `processor.Parser` + +A **parser** handles the parsing of text to a [*syntax tree*][syntax-tree]. +Used in the [*parse phase*][description] and called with a `string` and +[`VFile`][vfile] representation of the text to parse. + +`Parser` can be a function, in which case it must return a [`Node`][node]: the +syntax tree representation of the given file. + +`Parser` can also be a constructor function (a function with a `parse` field, or +other fields, in its `prototype`), in which case it’s constructed with `new`. +Instances must have a `parse` method that is called without arguments and must +return a [`Node`][node]. + +### `processor.stringify(node[, file])` + +Compile a [*syntax tree*][syntax-tree]. + +###### Parameters + +* `node` ([`Node`][node]) — [*Syntax tree*][syntax-tree] to compile +* `file` ([`VFile`][vfile], optional) — [*File*][file], any value accepted by + `vfile()` + +###### Returns + +`string` or `Buffer` (see notes) — Textual representation of the [*syntax +tree*][syntax-tree] + +###### Note + +`stringify` freezes the processor if not already [*frozen*][freeze]. + +`stringify` performs the [*stringify phase*][description], not the *run phase* +or other phases. + +unified typically compiles by serializing: most [*compiler*][compiler]s return +`string` (or `Buffer`). +Some compilers, such as the one configured with [`rehype-react`][rehype-react], +return other values (in this case, a React tree). +If you’re using a compiler doesn’t serialize, expect different result values. +When using TypeScript, cast the type on your side. + +###### Example + +The below example shows how `stringify` can be used to serialize a syntax tree. + +```js +import {unified} from 'unified' +import rehypeStringify from 'rehype-stringify' +import {h} from 'hastscript' + +const tree = h('h1', 'Hello world!') + +const doc = unified().use(rehypeStringify).stringify(tree) + +console.log(doc) +``` + +Yields: + +```html +

    Hello world!

    +``` + +#### `processor.Compiler` + +A **compiler** handles the compiling of a [*syntax tree*][syntax-tree] to text. +Used in the [*stringify phase*][description] and called with a [`Node`][node] +and [`VFile`][file] representation of syntax tree to compile. + +`Compiler` can be a function, in which case it should return a `string`: the +textual representation of the syntax tree. + +`Compiler` can also be a constructor function (a function with a `compile` +field, or other fields, in its `prototype`), in which case it’s constructed with +`new`. +Instances must have a `compile` method that is called without arguments and +should return a `string`. + +### `processor.run(node[, file][, done])` + +Run [*transformers*][transformer] on a [*syntax tree*][syntax-tree]. + +###### Parameters + +* `node` ([`Node`][node]) — [*Syntax tree*][syntax-tree] to run on +* `file` ([`VFile`][vfile], optional) — [*File*][file], any value accepted by + `vfile()` +* `done` ([`Function`][run-done], optional) — Callback + +###### Returns + +[`Promise`][promise] if `done` is not given. +The returned promise is rejected with a fatal error, or resolved with the +transformed [*syntax tree*][syntax-tree]. + +###### Note + +`run` freezes the processor if not already [*frozen*][freeze]. + +`run` performs the [*run phase*][description], not other phases. + +#### `function done(err[, node, file])` + +Callback called when [*transformers*][transformer] are done. +Called with either an error or results. + +###### Parameters + +* `err` (`Error`, optional) — Fatal error +* `node` ([`Node`][node], optional) — Transformed [*syntax tree*][syntax-tree] +* `file` ([`VFile`][vfile], optional) — [*File*][file] + +###### Example + +The below example shows how `run` can be used to transform a syntax tree. + +```js +import {unified} from 'unified' +import remarkReferenceLinks from 'remark-reference-links' +import {u} from 'unist-builder' + +const tree = u('root', [ + u('paragraph', [ + u('link', {href: 'https://example.com'}, [u('text', 'Example Domain')]) + ]) +]) + +unified() + .use(remarkReferenceLinks) + .run(tree) + .then( + (changedTree) => console.log(changedTree), + (error) => { + // Handle your error here! + throw error + } + ) +``` + +Yields: + +```js +{ + type: 'root', + children: [ + {type: 'paragraph', children: [Array]}, + {type: 'definition', identifier: '1', title: undefined, url: undefined} + ] +} +``` + +### `processor.runSync(node[, file])` + +Run [*transformers*][transformer] on a [*syntax tree*][syntax-tree]. + +An error is thrown if asynchronous [*plugin*][plugin]s are configured. + +###### Parameters + +* `node` ([`Node`][node]) — [*Syntax tree*][syntax-tree] to run on +* `file` ([`VFile`][vfile], optional) — [*File*][file], any value accepted by + `vfile()` + +###### Returns + +[`Node`][node] — Transformed [*syntax tree*][syntax-tree]. + +###### Note + +`runSync` freezes the processor if not already [*frozen*][freeze]. + +`runSync` performs the [*run phase*][description], not other phases. + +### `processor.process(file[, done])` + +[*Process*][description] the given [*file*][file] as configured on the +processor. + +###### Parameters + +* `file` ([`VFile`][vfile]) — [*File*][file], any value accepted by `vfile()` +* `done` ([`Function`][process-done], optional) — Callback + +###### Returns + +[`Promise`][promise] if `done` is not given. +The returned promise is rejected with a fatal error, or resolved with the +processed [*file*][file]. + +The parsed, transformed, and compiled value is exposed on +[`file.value`][vfile-value] or `file.result` (see notes). + +###### Note + +`process` freezes the processor if not already [*frozen*][freeze]. + +`process` performs the [*parse*, *run*, and *stringify* phases][description]. + +unified typically compiles by serializing: most [*compiler*][compiler]s return +`string` (or `Buffer`). +Some compilers, such as the one configured with [`rehype-react`][rehype-react], +return other values (in this case, a React tree). +If you’re using a compiler that serializes, the result is available at +`file.value`. +Otherwise, the result is available at `file.result`. + +###### Example + +The below example shows how `process` can be used to process a file, whether +transformers are asynchronous or not, with promises. + +```js +import {unified} from 'unified' +import remarkParse from 'remark-parse' +import remarkRehype from 'remark-rehype' +import rehypeDocument from 'rehype-document' +import rehypeFormat from 'rehype-format' +import rehypeStringify from 'rehype-stringify' + +unified() + .use(remarkParse) + .use(remarkRehype) + .use(rehypeDocument, {title: '👋🌍'}) + .use(rehypeFormat) + .use(rehypeStringify) + .process('# Hello world!') + .then( + (file) => console.log(String(file)), + (error) => { + // Handle your error here! + throw error + } + ) +``` + +Yields: + +```html + + + + + 👋🌍 + + + +

    Hello world!

    + + +``` + +#### `function done(err, file)` + +Callback called when the [*process*][description] is done. +Called with a fatal error, if any, and a [*file*][file]. + +###### Parameters + +* `err` (`Error`, optional) — Fatal error +* `file` ([`VFile`][vfile]) — Processed [*file*][file] + +###### Example + +The below example shows how `process` can be used to process a file, whether +transformers are asynchronous or not, with a callback. + +```js +import {unified} from 'unified' +import remarkParse from 'remark-parse' +import remarkGithub from 'remark-github' +import remarkStringify from 'remark-stringify' +import {reporter} from 'vfile-reporter' + +unified() + .use(remarkParse) + .use(remarkGithub) + .use(remarkStringify) + .process('@unifiedjs') + .then( + (file) => { + console.error(reporter(file)) + console.log(String(file)) + }, + (error) => { + // Handle your error here! + throw error + } + ) +``` + +Yields: + +```txt +no issues found +``` + +```markdown +[**@unifiedjs**](https://github.com/unifiedjs) +``` + +### `processor.processSync(file|value)` + +[*Process*][description] the given [*file*][file] as configured on the +processor. + +An error is thrown if asynchronous [*plugin*][plugin]s are configured. + +###### Parameters + +* `file` ([`VFile`][vfile]) — [*File*][file], any value accepted by `vfile()` + +###### Returns + +([`VFile`][vfile]) — Processed [*file*][file] + +The parsed, transformed, and compiled value is exposed on +[`file.value`][vfile-value] or `file.result` (see notes). + +###### Note + +`processSync` freezes the processor if not already [*frozen*][freeze]. + +`processSync` performs the [*parse*, *run*, and *stringify* +phases][description]. + +unified typically compiles by serializing: most [*compiler*][compiler]s return +`string` (or `Buffer`). +Some compilers, such as the one configured with [`rehype-react`][rehype-react], +return other values (in this case, a React tree). +If you’re using a compiler that serializes, the result is available at +`file.value`. +Otherwise, the result is available at `file.result`. + +###### Example + +The below example shows how `processSync` can be used to process a file, if all +transformers are synchronous. + +```js +import {unified} from 'unified' +import remarkParse from 'remark-parse' +import remarkRehype from 'remark-rehype' +import rehypeDocument from 'rehype-document' +import rehypeFormat from 'rehype-format' +import rehypeStringify from 'rehype-stringify' + +const processor = unified() + .use(remarkParse) + .use(remarkRehype) + .use(rehypeDocument, {title: '👋🌍'}) + .use(rehypeFormat) + .use(rehypeStringify) + +console.log(processor.processSync('# Hello world!').toString()) +``` + +Yields: + +```html + + + + + 👋🌍 + + + +

    Hello world!

    + + +``` + +### `processor.data([key[, value]])` + +[*Configure*][configuration] the processor with information available to all +[*plugin*][plugin]s. +Information is stored in an in-memory key-value store. + +Typically, options can be given to a specific plugin, but sometimes it makes +sense to have information shared with several plugins. +For example, a list of HTML elements that are self-closing, which is needed +during all [*phases*][description] of the *process*. + +###### Signatures + +* `processor = processor.data(key, value)` +* `processor = processor.data(values)` +* `value = processor.data(key)` +* `info = processor.data()` + +###### Parameters + +* `key` (`string`, optional) — Identifier +* `value` (`*`, optional) — Value to set +* `values` (`Object`, optional) — Values to set + +###### Returns + +* `processor` — If setting, the processor that `data` is called on +* `value` (`*`) — If getting, the value at `key` +* `info` (`Object`) — Without arguments, the key-value store + +###### Note + +Setting information cannot occur on [*frozen*][freeze] processors. +Call the processor first to create a new unfrozen processor. + +###### Example + +The following example show how to get and set information: + +```js +import {unified} from 'unified' + +const processor = unified().data('alpha', 'bravo') + +processor.data('alpha') // => 'bravo' + +processor.data() // => {alpha: 'bravo'} + +processor.data({charlie: 'delta'}) + +processor.data() // => {charlie: 'delta'} +``` + +### `processor.freeze()` + +**Freeze** a processor. +*Frozen* processors are meant to be extended and not to be configured directly. + +Once a processor is frozen it cannot be *unfrozen*. +New processors working the same way can be created by calling the processor. + +It’s possible to freeze processors explicitly by calling `.freeze()`. +Processors freeze implicitly when [`.parse()`][parse], [`.run()`][run], +[`.runSync()`][run-sync], [`.stringify()`][stringify], [`.process()`][process], +or [`.processSync()`][process-sync] are called. + +###### Returns + +`processor` — The processor that `freeze` was called on. + +###### Example + +The following example, `index.js`, shows how rehype prevents extensions to +itself: + +```js +import {unified} from 'unified' +import remarkParse from 'rehype-parse' +import remarkStringify from 'rehype-stringify' + +export const rehype = unified().use(remarkParse).use(remarkStringify).freeze() +``` + +The below example, `a.js`, shows how that processor can be used and configured. + +```js +import {rehype} from 'rehype' +import rehypeFormat from 'rehype-format' +// … + +rehype() + .use(rehypeFormat) + // … +``` + +The below example, `b.js`, shows a similar looking example that operates on the +frozen rehype interface because it does not call `rehype`. +If this behavior was allowed it would result in unexpected behavior so an +error is thrown. +**This is invalid**: + +```js +import {rehype} from 'rehype' +import rehypeFormat from 'rehype-format' +// … + +rehype + .use(rehypeFormat) + // … +``` + +Yields: + +```txt +~/node_modules/unified/index.js:426 + throw new Error( + ^ + +Error: Cannot call `use` on a frozen processor. +Create a new processor first, by calling it: use `processor()` instead of `processor`. + at assertUnfrozen (~/node_modules/unified/index.js:426:11) + at Function.use (~/node_modules/unified/index.js:165:5) + at ~/b.js:6:4 +``` + +## `Plugin` + +**Plugins** [*configure*][configuration] the processors they are applied on in +the following ways: + +* They change the processor: such as the [*parser*][parser], the + [*compiler*][compiler], or configuring [*data*][data] +* They specify how to handle [*syntax trees*][syntax-tree] and [*files*][file] + +Plugins are a concept. +They materialize as [`attacher`][attacher]s. + +###### Example + +`move.js`: + +```js +export function move(options = {}) { + const {extname} = options + + if (!extname) { + throw new Error('Missing `extname` in options') + } + + return transformer + + function transformer(tree, file) { + if (file.extname && file.extname !== extname) { + file.extname = extname + } + } +} +``` + +`index.md`: + +```markdown +# Hello, world! +``` + +`index.js`: + +```js +import {unified} from 'unified' +import remarkParse from 'remark-parse' +import remarkRehype from 'remark-rehype' +import rehypeStringify from 'rehype-stringify' +import {toVFile} from 'to-vfile' +import {reporter} from 'vfile-reporter' +import {move} from './move.js' + +unified() + .use(remarkParse) + .use(remarkRehype) + .use(move, {extname: '.html'}) + .use(rehypeStringify) + .process(toVFile.readSync('index.md')) + .then( + (file) => { + console.error(reporter(file)) + toVFile.writeSync(file) // Written to `index.html`. + }, + (error) => { + // Handle your error here! + throw error + } + ) +``` + +Yields: + +```txt +index.md: no issues found +``` + +…and in `index.html`: + +```html +

    Hello, world!

    +``` + +### `function attacher([options])` + +**Attachers** are materialized [*plugin*][plugin]s. +An attacher is a function that can receive options and +[*configures*][configuration] the processor. + +Attachers change the processor, such as the [*parser*][parser], the +[*compiler*][compiler], configuring [*data*][data], or by specifying how the +[*syntax tree*][syntax-tree] or [*file*][file] are handled. + +###### Context + +The context object (`this`) is set to the processor the attacher is applied on. + +###### Parameters + +* `options` (`*`, optional) — Configuration + +###### Returns + +[`transformer`][transformer] — Optional. + +###### Note + +Attachers are called when the processor is [*frozen*][freeze], not when they are +applied. + +### `function transformer(node, file[, next])` + +**Transformers** handle [*syntax tree*][syntax-tree]s and [*file*][file]s. +A transformer is a function that is called each time a syntax tree and file are +passed through the [*run phase*][description]. +If an error occurs (either because it’s thrown, returned, rejected, or passed to +[`next`][next]), the process stops. + +The *run phase* is handled by [`trough`][trough], see its documentation for the +exact semantics of these functions. + +###### Parameters + +* `node` ([`Node`][node]) — [*Syntax tree*][syntax-tree] to handle +* `file` ([`VFile`][vfile]) — [*File*][file] to handle +* `next` ([`Function`][next], optional) + +###### Returns + +* `void` — If nothing is returned, the next transformer keeps using same tree. +* `Error` — Fatal error to stop the process +* `node` ([`Node`][node]) — New [*syntax tree*][syntax-tree]. + If returned, the next transformer is given this new tree +* `Promise` — Returned to perform an asynchronous operation. + The promise **must** be resolved (optionally with a [`Node`][node]) or + rejected (optionally with an `Error`) + +#### `function next(err[, tree[, file]])` + +If the signature of a [*transformer*][transformer] includes `next` (the third +argument), the transformer **may** perform asynchronous operations, and **must** +call `next()`. + +###### Parameters + +* `err` (`Error`, optional) — Fatal error to stop the process +* `node` ([`Node`][node], optional) — New [*syntax tree*][syntax-tree]. + If given, the next transformer is given this new tree +* `file` ([`VFile`][vfile], optional) — New [*file*][file]. + If given, the next transformer is given this new file + +## `Preset` + +**Presets** are sharable [*configuration*][configuration]. +They can contain [*plugins*][plugin] and settings. + +###### Example + +`preset.js`: + +```js +import remarkPresetLintRecommended from 'remark-preset-lint-recommended' +import remarkPresetLintConsistent from 'remark-preset-lint-consistent' +import remarkCommentConfig from 'remark-comment-config' +import remarkToc from 'remark-toc' +import remarkLicense from 'remark-license' + +export const preset = { + settings: {bullet: '*', emphasis: '*', fences: true}, + plugins: [ + remarkPresetLintRecommended, + remarkPresetLintConsistent, + remarkCommentConfig, + [remarkToc, {maxDepth: 3, tight: true}], + remarkLicense + ] +} +``` + +`example.md`: + +```markdown +# Hello, world! + +_Emphasis_ and **importance**. + +## Table of contents + +## API + +## License +``` + +`index.js`: + +```js +import {remark} from 'remark' +import {toVFile} from 'to-vfile' +import {reporter} from 'vfile-reporter' +import {preset} from './preset.js' + +remark() + .use(preset) + .process(toVFile.readSync('example.md')) + .then( + (file) => { + console.error(reporter(file)) + toVFile.writeSync(file) + }, + (error) => { + // Handle your error here! + throw error + } + ) +``` + +Yields: + +```txt +example.md: no issues found +``` + +`example.md` now contains: + +```markdown +# Hello, world! + +*Emphasis* and **importance**. + +## Table of contents + +* [API](#api) +* [License](#license) + +## API + +## License + +[MIT](license) © [Titus Wormer](https://wooorm.com) +``` + +## Contribute + +See [`contributing.md`][contributing] in [`unifiedjs/.github`][health] for ways +to get started. +See [`support.md`][support] for ways to get help. +Ideas for new plugins and tools can be posted in [`unifiedjs/ideas`][ideas]. + +A curated list of awesome unified resources can be found in [**awesome +unified**][awesome]. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## Acknowledgments + +Preliminary work for unified was done [in 2014][preliminary] for +[**retext**][retext] and inspired by [`ware`][ware]. +Further incubation happened in [**remark**][remark]. +The project was finally [externalised][] in 2015 and [published][] as `unified`. +The project was authored by [**@wooorm**](https://github.com/wooorm). + +Although `unified` since moved its plugin architecture to [`trough`][trough], +thanks to [**@calvinfo**](https://github.com/calvinfo), +[**@ianstormtaylor**](https://github.com/ianstormtaylor), and others for their +work on [`ware`][ware], as it was a huge initial inspiration. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[logo]: https://raw.githubusercontent.com/unifiedjs/unified/93862e5/logo.svg?sanitize=true + +[build-badge]: https://github.com/unifiedjs/unified/workflows/main/badge.svg + +[build]: https://github.com/unifiedjs/unified/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/unifiedjs/unified.svg + +[coverage]: https://codecov.io/github/unifiedjs/unified + +[downloads-badge]: https://img.shields.io/npm/dm/unified.svg + +[downloads]: https://www.npmjs.com/package/unified + +[size-badge]: https://img.shields.io/bundlephobia/minzip/unified.svg + +[size]: https://bundlephobia.com/result?p=unified + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/unifiedjs/unified/discussions + +[health]: https://github.com/unifiedjs/.github + +[contributing]: https://github.com/unifiedjs/.github/blob/HEAD/contributing.md + +[support]: https://github.com/unifiedjs/.github/blob/HEAD/support.md + +[coc]: https://github.com/unifiedjs/.github/blob/HEAD/code-of-conduct.md + +[awesome]: https://github.com/unifiedjs/awesome-unified + +[license]: license + +[author]: https://wooorm.com + +[npm]: https://docs.npmjs.com/cli/install + +[site]: https://unifiedjs.com + +[twitter]: https://twitter.com/unifiedjs + +[learn]: https://unifiedjs.com/learn/ + +[rehype]: https://github.com/rehypejs/rehype + +[remark]: https://github.com/remarkjs/remark + +[retext]: https://github.com/retextjs/retext + +[esast]: https://github.com/syntax-tree/esast + +[hast]: https://github.com/syntax-tree/hast + +[mdast]: https://github.com/syntax-tree/mdast + +[nlcst]: https://github.com/syntax-tree/nlcst + +[xast]: https://github.com/syntax-tree/xast + +[unist]: https://github.com/syntax-tree/unist + +[engine]: https://github.com/unifiedjs/unified-engine + +[args]: https://github.com/unifiedjs/unified-args + +[gulp]: https://github.com/unifiedjs/unified-engine-gulp + +[atom]: https://github.com/unifiedjs/unified-engine-atom + +[remark-rehype]: https://github.com/remarkjs/remark-rehype + +[remark-retext]: https://github.com/remarkjs/remark-retext + +[rehype-retext]: https://github.com/rehypejs/rehype-retext + +[rehype-remark]: https://github.com/rehypejs/rehype-remark + +[unist-utilities]: https://github.com/syntax-tree/unist#list-of-utilities + +[vfile]: https://github.com/vfile/vfile + +[vfile-value]: https://github.com/vfile/vfile#vfilevalue + +[vfile-utilities]: https://github.com/vfile/vfile#list-of-utilities + +[node]: https://github.com/syntax-tree/unist#node + +[description]: #description + +[syntax-tree]: #syntax-trees + +[configuration]: #configuration + +[file]: #file + +[processors]: #processors + +[process]: #processorprocessfile-done + +[process-sync]: #processorprocesssyncfilevalue + +[parse]: #processorparsefile + +[parser]: #processorparser + +[stringify]: #processorstringifynode-file + +[run]: #processorrunnode-file-done + +[run-sync]: #processorrunsyncnode-file + +[compiler]: #processorcompiler + +[data]: #processordatakey-value + +[attacher]: #function-attacheroptions + +[transformer]: #function-transformernode-file-next + +[next]: #function-nexterr-tree-file + +[freeze]: #processorfreeze + +[plugin]: #plugin + +[run-done]: #function-doneerr-node-file + +[process-done]: #function-doneerr-file + +[contribute]: #contribute + +[rehype-react]: https://github.com/rehypejs/rehype-react + +[trough]: https://github.com/wooorm/trough#function-fninput-next + +[promise]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise + +[remark-plugins]: https://github.com/remarkjs/remark/blob/HEAD/doc/plugins.md#list-of-plugins + +[rehype-plugins]: https://github.com/rehypejs/rehype/blob/HEAD/doc/plugins.md#list-of-plugins + +[retext-plugins]: https://github.com/retextjs/retext/blob/HEAD/doc/plugins.md#list-of-plugins + +[stream]: https://github.com/unifiedjs/unified-stream + +[ideas]: https://github.com/unifiedjs/ideas + +[preliminary]: https://github.com/retextjs/retext/commit/8fcb1f#diff-168726dbe96b3ce427e7fedce31bb0bc + +[externalised]: https://github.com/remarkjs/remark/commit/9892ec#diff-168726dbe96b3ce427e7fedce31bb0bc + +[published]: https://github.com/unifiedjs/unified/commit/2ba1cf + +[ware]: https://github.com/segmentio/ware + +[gatsby]: https://www.gatsbyjs.org + +[mdx]: https://mdxjs.com + +[jsx]: https://reactjs.org/docs/jsx-in-depth.html + +[prettier]: https://prettier.io + +[node.js]: https://nodejs.org + +[vercel]: https://vercel.com + +[netlify]: https://www.netlify.com + +[github]: https://github.com + +[mozilla]: https://www.mozilla.org + +[wordpress]: https://wordpress.com + +[adobe]: https://www.adobe.com + +[facebook]: https://www.facebook.com + +[google]: https://www.google.com diff --git a/node_modules/unist-util-stringify-position/index.d.ts b/node_modules/unist-util-stringify-position/index.d.ts new file mode 100644 index 0000000..93163ea --- /dev/null +++ b/node_modules/unist-util-stringify-position/index.d.ts @@ -0,0 +1 @@ +export {stringifyPosition} from './lib/index.js' diff --git a/node_modules/unist-util-stringify-position/index.js b/node_modules/unist-util-stringify-position/index.js new file mode 100644 index 0000000..93163ea --- /dev/null +++ b/node_modules/unist-util-stringify-position/index.js @@ -0,0 +1 @@ +export {stringifyPosition} from './lib/index.js' diff --git a/node_modules/unist-util-stringify-position/lib/index.d.ts b/node_modules/unist-util-stringify-position/lib/index.d.ts new file mode 100644 index 0000000..7a64b47 --- /dev/null +++ b/node_modules/unist-util-stringify-position/lib/index.d.ts @@ -0,0 +1,61 @@ +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +export function stringifyPosition( + value?: + | Node + | NodeLike + | Position + | PositionLike + | Point + | PointLike + | null + | undefined +): string +export type Node = import('unist').Node +export type Point = import('unist').Point +export type Position = import('unist').Position +export type NodeLike = { + type: string + position?: PositionLike | null | undefined +} +export type PositionLike = { + start?: PointLike | null | undefined + end?: PointLike | null | undefined +} +export type PointLike = { + line?: number | null | undefined + column?: number | null | undefined + offset?: number | null | undefined +} diff --git a/node_modules/unist-util-stringify-position/lib/index.js b/node_modules/unist-util-stringify-position/lib/index.js new file mode 100644 index 0000000..7474343 --- /dev/null +++ b/node_modules/unist-util-stringify-position/lib/index.js @@ -0,0 +1,84 @@ +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Point} Point + * @typedef {import('unist').Position} Position + */ + +/** + * @typedef NodeLike + * @property {string} type + * @property {PositionLike | null | undefined} [position] + * + * @typedef PositionLike + * @property {PointLike | null | undefined} [start] + * @property {PointLike | null | undefined} [end] + * + * @typedef PointLike + * @property {number | null | undefined} [line] + * @property {number | null | undefined} [column] + * @property {number | null | undefined} [offset] + */ + +/** + * Serialize the positional info of a point, position (start and end points), + * or node. + * + * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value] + * Node, position, or point. + * @returns {string} + * Pretty printed positional info of a node (`string`). + * + * In the format of a range `ls:cs-le:ce` (when given `node` or `position`) + * or a point `l:c` (when given `point`), where `l` stands for line, `c` for + * column, `s` for `start`, and `e` for end. + * An empty string (`''`) is returned if the given value is neither `node`, + * `position`, nor `point`. + */ +export function stringifyPosition(value) { + // Nothing. + if (!value || typeof value !== 'object') { + return '' + } + + // Node. + if ('position' in value || 'type' in value) { + return position(value.position) + } + + // Position. + if ('start' in value || 'end' in value) { + return position(value) + } + + // Point. + if ('line' in value || 'column' in value) { + return point(value) + } + + // ? + return '' +} + +/** + * @param {Point | PointLike | null | undefined} point + * @returns {string} + */ +function point(point) { + return index(point && point.line) + ':' + index(point && point.column) +} + +/** + * @param {Position | PositionLike | null | undefined} pos + * @returns {string} + */ +function position(pos) { + return point(pos && pos.start) + '-' + point(pos && pos.end) +} + +/** + * @param {number | null | undefined} value + * @returns {number} + */ +function index(value) { + return value && typeof value === 'number' ? value : 1 +} diff --git a/node_modules/unist-util-stringify-position/license b/node_modules/unist-util-stringify-position/license new file mode 100644 index 0000000..8d8660d --- /dev/null +++ b/node_modules/unist-util-stringify-position/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/unist-util-stringify-position/package.json b/node_modules/unist-util-stringify-position/package.json new file mode 100644 index 0000000..51e32c2 --- /dev/null +++ b/node_modules/unist-util-stringify-position/package.json @@ -0,0 +1,80 @@ +{ + "name": "unist-util-stringify-position", + "version": "3.0.3", + "description": "unist utility to serialize a node, position, or point as a human readable location", + "license": "MIT", + "keywords": [ + "unist", + "unist-util", + "util", + "utility", + "position", + "location", + "point", + "node", + "stringify", + "tostring" + ], + "repository": "syntax-tree/unist-util-stringify-position", + "bugs": "https://github.com/syntax-tree/unist-util-stringify-position/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/unist": "^2.0.0" + }, + "devDependencies": { + "@types/mdast": "^3.0.0", + "@types/node": "^18.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^11.0.0", + "remark-preset-wooorm": "^9.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.53.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true + } +} diff --git a/node_modules/unist-util-stringify-position/readme.md b/node_modules/unist-util-stringify-position/readme.md new file mode 100644 index 0000000..323f960 --- /dev/null +++ b/node_modules/unist-util-stringify-position/readme.md @@ -0,0 +1,203 @@ +# unist-util-stringify-position + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +[unist][] utility to pretty print the positional info of a node. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`stringifyPosition(node|position|point)`](#stringifypositionnodepositionpoint) +* [Types](#types) +* [Compatibility](#compatibility) +* [Security](#security) +* [Related](#related) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package is a utility that takes any [unist][] (whether mdast, hast, etc) +node, position, or point, and serializes its positional info. + +## When should I use this? + +This utility is useful to display where something occurred in the original +document, in one standard way, for humans. +For example, when throwing errors or warning messages about something. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 14.14+ and 16.0+), install with [npm][]: + +```sh +npm install unist-util-stringify-position +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {stringifyPosition} from 'https://esm.sh/unist-util-stringify-position@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {stringifyPosition} from 'unist-util-stringify-position' + +stringifyPosition({line: 2, column: 3}) // => '2:3' (point) +stringifyPosition({start: {line: 2}, end: {line: 3}}) // => '2:1-3:1' (position) +stringifyPosition({ + type: 'text', + value: '!', + position: { + start: {line: 5, column: 11}, + end: {line: 5, column: 12} + } +}) // => '5:11-5:12' (node) +``` + +## API + +This package exports the identifier [`stringifyPosition`][stringifyposition]. +There is no default export. + +### `stringifyPosition(node|position|point)` + +Serialize the positional info of a point, position (start and end points), or +node. + +###### Parameters + +* `node` ([`Node`][node]) + — node whose `position` fields to serialize +* `position` ([`Position`][position]) + — position whose `start` and `end` points to serialize +* `point` ([`Point`][point]) + — point whose `line` and `column` fields to serialize + +###### Returns + +Pretty printed positional info of a node (`string`). + +In the format of a range `ls:cs-le:ce` (when given `node` or `position`) or a +point `l:c` (when given `point`), where `l` stands for line, `c` for column, `s` +for `start`, and `e` for end. +An empty string (`''`) is returned if the given value is neither `node`, +`position`, nor `point`. + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with all maintained +versions of Node.js. +As of now, that is Node.js 14.14+ and 16.0+. +Our projects sometimes work with older versions, but this is not guaranteed. + +## Security + +This project is safe. + +## Related + +* [`unist-util-generated`](https://github.com/syntax-tree/unist-util-generated) + — check if a node is generated +* [`unist-util-position`](https://github.com/syntax-tree/unist-util-position) + — get positional info of nodes +* [`unist-util-remove-position`](https://github.com/syntax-tree/unist-util-remove-position) + — remove positional info from trees +* [`unist-util-source`](https://github.com/syntax-tree/unist-util-source) + — get the source of a value (node or position) in a file + +## Contribute + +See [`contributing.md` in `syntax-tree/.github`][contributing] for ways to get +started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/syntax-tree/unist-util-stringify-position/workflows/main/badge.svg + +[build]: https://github.com/syntax-tree/unist-util-stringify-position/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/syntax-tree/unist-util-stringify-position.svg + +[coverage]: https://codecov.io/github/syntax-tree/unist-util-stringify-position + +[downloads-badge]: https://img.shields.io/npm/dm/unist-util-stringify-position.svg + +[downloads]: https://www.npmjs.com/package/unist-util-stringify-position + +[size-badge]: https://img.shields.io/bundlephobia/minzip/unist-util-stringify-position.svg + +[size]: https://bundlephobia.com/result?p=unist-util-stringify-position + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/syntax-tree/unist/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[license]: license + +[author]: https://wooorm.com + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[typescript]: https://www.typescriptlang.org + +[contributing]: https://github.com/syntax-tree/.github/blob/HEAD/contributing.md + +[support]: https://github.com/syntax-tree/.github/blob/HEAD/support.md + +[coc]: https://github.com/syntax-tree/.github/blob/HEAD/code-of-conduct.md + +[unist]: https://github.com/syntax-tree/unist + +[node]: https://github.com/syntax-tree/unist#node + +[position]: https://github.com/syntax-tree/unist#position + +[point]: https://github.com/syntax-tree/unist#point + +[stringifyposition]: #stringifypositionnodepositionpoint diff --git a/node_modules/vfile-message/index.d.ts b/node_modules/vfile-message/index.d.ts new file mode 100644 index 0000000..17019f0 --- /dev/null +++ b/node_modules/vfile-message/index.d.ts @@ -0,0 +1 @@ +export {VFileMessage} from './lib/index.js' diff --git a/node_modules/vfile-message/index.js b/node_modules/vfile-message/index.js new file mode 100644 index 0000000..17019f0 --- /dev/null +++ b/node_modules/vfile-message/index.js @@ -0,0 +1 @@ +export {VFileMessage} from './lib/index.js' diff --git a/node_modules/vfile-message/lib/index.d.ts b/node_modules/vfile-message/lib/index.d.ts new file mode 100644 index 0000000..f7b61de --- /dev/null +++ b/node_modules/vfile-message/lib/index.d.ts @@ -0,0 +1,125 @@ +/** + * Message. + */ +export class VFileMessage extends Error { + /** + * Create a message for `reason` at `place` from `origin`. + * + * When an error is passed in as `reason`, the `stack` is copied. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * + * > 👉 **Note**: you should use markdown. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns + * Instance of `VFileMessage`. + */ + constructor( + reason: string | Error | VFileMessage, + place?: Node | NodeLike | Position | Point | null | undefined, + origin?: string | null | undefined + ) + /** + * Stack of message. + * + * This is used by normal errors to show where something happened in + * programming code, irrelevant for `VFile` messages, + * + * @type {string} + */ + stack: string + /** + * Reason for message. + * + * > 👉 **Note**: you should use markdown. + * + * @type {string} + */ + reason: string + /** + * State of problem. + * + * * `true` — marks associated file as no longer processable (error) + * * `false` — necessitates a (potential) change (warning) + * * `null | undefined` — for things that might not need changing (info) + * + * @type {boolean | null | undefined} + */ + fatal: boolean | null | undefined + /** + * Starting line of error. + * + * @type {number | null} + */ + line: number | null + /** + * Starting column of error. + * + * @type {number | null} + */ + column: number | null + /** + * Full unist position. + * + * @type {Position | null} + */ + position: Position | null + /** + * Namespace of message (example: `'my-package'`). + * + * @type {string | null} + */ + source: string | null + /** + * Category of message (example: `'my-rule'`). + * + * @type {string | null} + */ + ruleId: string | null + /** + * Path of a file (used throughout the `VFile` ecosystem). + * + * @type {string | null} + */ + file: string | null + /** + * Specify the source value that’s being reported, which is deemed + * incorrect. + * + * @type {string | null} + */ + actual: string | null + /** + * Suggest acceptable values that can be used instead of `actual`. + * + * @type {Array | null} + */ + expected: Array | null + /** + * Link to docs for the message. + * + * > 👉 **Note**: this must be an absolute URL that can be passed as `x` + * > to `new URL(x)`. + * + * @type {string | null} + */ + url: string | null + /** + * Long form description of the message (you should use markdown). + * + * @type {string | null} + */ + note: string | null +} +export type Node = import('unist').Node +export type Position = import('unist').Position +export type Point = import('unist').Point +export type NodeLike = object & { + type: string + position?: Position | undefined +} diff --git a/node_modules/vfile-message/lib/index.js b/node_modules/vfile-message/lib/index.js new file mode 100644 index 0000000..8c8bcc3 --- /dev/null +++ b/node_modules/vfile-message/lib/index.js @@ -0,0 +1,225 @@ +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Position} Position + * @typedef {import('unist').Point} Point + * @typedef {object & {type: string, position?: Position | undefined}} NodeLike + */ + +import {stringifyPosition} from 'unist-util-stringify-position' + +/** + * Message. + */ +export class VFileMessage extends Error { + /** + * Create a message for `reason` at `place` from `origin`. + * + * When an error is passed in as `reason`, the `stack` is copied. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * + * > 👉 **Note**: you should use markdown. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns + * Instance of `VFileMessage`. + */ + // To do: next major: expose `undefined` everywhere instead of `null`. + constructor(reason, place, origin) { + /** @type {[string | null, string | null]} */ + const parts = [null, null] + /** @type {Position} */ + let position = { + // @ts-expect-error: we always follows the structure of `position`. + start: {line: null, column: null}, + // @ts-expect-error: " + end: {line: null, column: null} + } + + super() + + if (typeof place === 'string') { + origin = place + place = undefined + } + + if (typeof origin === 'string') { + const index = origin.indexOf(':') + + if (index === -1) { + parts[1] = origin + } else { + parts[0] = origin.slice(0, index) + parts[1] = origin.slice(index + 1) + } + } + + if (place) { + // Node. + if ('type' in place || 'position' in place) { + if (place.position) { + // To do: next major: deep clone. + // @ts-expect-error: looks like a position. + position = place.position + } + } + // Position. + else if ('start' in place || 'end' in place) { + // @ts-expect-error: looks like a position. + // To do: next major: deep clone. + position = place + } + // Point. + else if ('line' in place || 'column' in place) { + // To do: next major: deep clone. + position.start = place + } + } + + // Fields from `Error`. + /** + * Serialized positional info of error. + * + * On normal errors, this would be something like `ParseError`, buit in + * `VFile` messages we use this space to show where an error happened. + */ + this.name = stringifyPosition(place) || '1:1' + + /** + * Reason for message. + * + * @type {string} + */ + this.message = typeof reason === 'object' ? reason.message : reason + + /** + * Stack of message. + * + * This is used by normal errors to show where something happened in + * programming code, irrelevant for `VFile` messages, + * + * @type {string} + */ + this.stack = '' + + if (typeof reason === 'object' && reason.stack) { + this.stack = reason.stack + } + + /** + * Reason for message. + * + * > 👉 **Note**: you should use markdown. + * + * @type {string} + */ + this.reason = this.message + + /* eslint-disable no-unused-expressions */ + /** + * State of problem. + * + * * `true` — marks associated file as no longer processable (error) + * * `false` — necessitates a (potential) change (warning) + * * `null | undefined` — for things that might not need changing (info) + * + * @type {boolean | null | undefined} + */ + this.fatal + + /** + * Starting line of error. + * + * @type {number | null} + */ + this.line = position.start.line + + /** + * Starting column of error. + * + * @type {number | null} + */ + this.column = position.start.column + + /** + * Full unist position. + * + * @type {Position | null} + */ + this.position = position + + /** + * Namespace of message (example: `'my-package'`). + * + * @type {string | null} + */ + this.source = parts[0] + + /** + * Category of message (example: `'my-rule'`). + * + * @type {string | null} + */ + this.ruleId = parts[1] + + /** + * Path of a file (used throughout the `VFile` ecosystem). + * + * @type {string | null} + */ + this.file + + // The following fields are “well known”. + // Not standard. + // Feel free to add other non-standard fields to your messages. + + /** + * Specify the source value that’s being reported, which is deemed + * incorrect. + * + * @type {string | null} + */ + this.actual + + /** + * Suggest acceptable values that can be used instead of `actual`. + * + * @type {Array | null} + */ + this.expected + + /** + * Link to docs for the message. + * + * > 👉 **Note**: this must be an absolute URL that can be passed as `x` + * > to `new URL(x)`. + * + * @type {string | null} + */ + this.url + + /** + * Long form description of the message (you should use markdown). + * + * @type {string | null} + */ + this.note + /* eslint-enable no-unused-expressions */ + } +} + +VFileMessage.prototype.file = '' +VFileMessage.prototype.name = '' +VFileMessage.prototype.reason = '' +VFileMessage.prototype.message = '' +VFileMessage.prototype.stack = '' +VFileMessage.prototype.fatal = null +VFileMessage.prototype.column = null +VFileMessage.prototype.line = null +VFileMessage.prototype.source = null +VFileMessage.prototype.ruleId = null +VFileMessage.prototype.position = null diff --git a/node_modules/vfile-message/license b/node_modules/vfile-message/license new file mode 100644 index 0000000..045ffe0 --- /dev/null +++ b/node_modules/vfile-message/license @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2017 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/vfile-message/package.json b/node_modules/vfile-message/package.json new file mode 100644 index 0000000..0a58c32 --- /dev/null +++ b/node_modules/vfile-message/package.json @@ -0,0 +1,78 @@ +{ + "name": "vfile-message", + "version": "3.1.4", + "description": "vfile utility to create a virtual message", + "license": "MIT", + "keywords": [ + "vfile", + "vfile-util", + "util", + "utility", + "virtual", + "file", + "message" + ], + "repository": "vfile/vfile-message", + "bugs": "https://github.com/vfile/vfile-message/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)" + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "files": [ + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^18.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^11.0.0", + "remark-preset-wooorm": "^9.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.53.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm" + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true + } +} diff --git a/node_modules/vfile-message/readme.md b/node_modules/vfile-message/readme.md new file mode 100644 index 0000000..35cb052 --- /dev/null +++ b/node_modules/vfile-message/readme.md @@ -0,0 +1,244 @@ +# vfile-message + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +Create [vfile][] messages. + +## Contents + +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`VFileMessage(reason[, place][, origin])`](#vfilemessagereason-place-origin) + * [Well-known](#well-known) +* [Types](#types) +* [Compatibility](#compatibility) +* [Contribute](#contribute) +* [License](#license) + +## What is this? + +This package provides a (lint) message format. + +## When should I use this? + +In most cases, you can use `file.message` from `VFile` itself, but in some +cases you might not have a file, and still want to emit warnings or errors, +in which case this can be used directly. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 14.14+ and 16.0+), install with [npm][]: + +```sh +npm install vfile-message +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {VFileMessage} from 'https://esm.sh/vfile-message@3' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {VFileMessage} from 'vfile-message' + +const message = new VFileMessage( + 'Unexpected unknown word `braavo`, did you mean `bravo`?', + {line: 1, column: 8}, + 'spell:typo' +) + +console.log(message) +``` + +Yields: + +```txt +[1:8: Unexpected unknown word `braavo`, did you mean `bravo`?] { + reason: 'Unexpected unknown word `braavo`, did you mean `bravo`?', + line: 1, + column: 8, + source: 'spell', + ruleId: 'typo', + position: {start: {line: 1, column: 8}, end: {line: null, column: null}} +} +``` + +## API + +This package exports the identifier [`VFileMessage`][api-vfile-message]. +There is no default export. + +### `VFileMessage(reason[, place][, origin])` + +Create a message for `reason` at `place` from `origin`. + +When an error is passed in as `reason`, the `stack` is copied. + +###### Parameters + +* `reason` (`string` or `Error`) + — reason for message, uses the stack and message of the error if given +* `place` ([`Node`][node], [`Position`][position], or [`Point`][point], + optional) + — place in file where the message occurred +* `origin` (`string`, optional) + — place in code where the message originates (example: + `'my-package:my-rule'` or `'my-rule'`) + +###### Extends + +[`Error`][error]. + +###### Returns + +Instance of `VFileMessage`. + +###### Fields + +* `reason` (`string`) + — reason for message (you should use markdown) +* `fatal` (`boolean | null | undefined`) + — state of problem; `true` marks associated file as no longer processable + (error); `false` necessitates a (potential) change (warning); + `null | undefined` for things that might not need changing (info) +* `line` (`number | null`) + — starting line of error +* `column` (`number | null`) + — starting column of error +* `position` ([`Position | null`][position]) + — full unist position +* `source` (`string | null`, example: `'my-package'`) + — namespace of message +* `ruleId` (`string | null`, example: `'my-rule'`) + — category of message +* `stack` (`string | null`) + — stack of message in code +* `file` (`string | null`) + — path of a file (used throughout the `VFile` ecosystem) + +### Well-known + +It’s OK to store custom data directly on the `VFileMessage`, some of those are +handled by [utilities][util]. +The following fields are documented and typed here. + +###### Fields + +* `actual` (`string | null`) + — specify the source value that’s being reported, which is deemed incorrect +* `expected` (`Array | null`) + — suggest acceptable values that can be used instead of `actual` +* `url` (`string | null`) + — link to docs for the message (this must be an absolute URL that can be + passed as `x` to `new URL(x)`) +* `note` (`string | null`) + — long form description of the message (you should use markdown) + +## Types + +This package is fully typed with [TypeScript][]. +It exports no additional types. + +## Compatibility + +Projects maintained by the unified collective are compatible with all maintained +versions of Node.js. +As of now, that is Node.js 14.14+ and 16.0+. +Our projects sometimes work with older versions, but this is not guaranteed. + +## Contribute + +See [`contributing.md`][contributing] in [`vfile/.github`][health] for ways to +get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/vfile/vfile-message/workflows/main/badge.svg + +[build]: https://github.com/vfile/vfile-message/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/vfile/vfile-message.svg + +[coverage]: https://codecov.io/github/vfile/vfile-message + +[downloads-badge]: https://img.shields.io/npm/dm/vfile-message.svg + +[downloads]: https://www.npmjs.com/package/vfile-message + +[size-badge]: https://img.shields.io/bundlephobia/minzip/vfile-message.svg + +[size]: https://bundlephobia.com/result?p=vfile-message + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/vfile/vfile/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[contributing]: https://github.com/vfile/.github/blob/main/contributing.md + +[support]: https://github.com/vfile/.github/blob/main/support.md + +[health]: https://github.com/vfile/.github + +[coc]: https://github.com/vfile/.github/blob/main/code-of-conduct.md + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[typescript]: https://www.typescriptlang.org + +[license]: license + +[author]: https://wooorm.com + +[error]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error + +[node]: https://github.com/syntax-tree/unist#node + +[position]: https://github.com/syntax-tree/unist#position + +[point]: https://github.com/syntax-tree/unist#point + +[vfile]: https://github.com/vfile/vfile + +[util]: https://github.com/vfile/vfile#utilities + +[api-vfile-message]: #vfilemessagereason-place-origin diff --git a/node_modules/vfile/index.d.ts b/node_modules/vfile/index.d.ts new file mode 100644 index 0000000..6b5215b --- /dev/null +++ b/node_modules/vfile/index.d.ts @@ -0,0 +1,64 @@ +import type {Reporter} from './lib/index.js' + +/** + * This is the same as `Buffer` if node types are included, `never` otherwise. + */ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error +// @ts-ignore It’s important to preserve this ignore statement. This makes sure +// it works both with and without node types. +// eslint-disable-next-line n/prefer-global/buffer +type MaybeBuffer = any extends Buffer ? never : Buffer + +/** + * Contents of the file. + * + * Can either be text or a `Buffer` structure. + */ +// Note: this does not directly use type `Buffer`, because it can also be used +// in a browser context. +// Instead this leverages `Uint8Array` which is the base type for `Buffer`, +// and a native JavaScript construct. +export type Value = string | MaybeBuffer + +/** + * This map registers the type of the `data` key of a `VFile`. + * + * This type can be augmented to register custom `data` types. + * + * @example + * declare module 'vfile' { + * interface DataMap { + * // `file.data.name` is typed as `string` + * name: string + * } + * } + */ + +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions, @typescript-eslint/no-empty-interface +export interface DataMap {} + +/** + * Custom information. + * + * Known attributes can be added to @see {@link DataMap} + */ +export type Data = Record & Partial + +// Deprecated names (w/ prefix): +export type {Data as VFileData, DataMap as VFileDataMap, Value as VFileValue} + +export {VFile} from './lib/index.js' + +export type { + BufferEncoding, + Map, + Compatible, + Options, + Reporter, + ReporterSettings, + // Deprecated names (w/ prefix): + Compatible as VFileCompatible, + Options as VFileOptions, + Reporter as VFileReporter, + ReporterSettings as VFileReporterSettings +} from './lib/index.js' diff --git a/node_modules/vfile/index.js b/node_modules/vfile/index.js new file mode 100644 index 0000000..73c0d38 --- /dev/null +++ b/node_modules/vfile/index.js @@ -0,0 +1 @@ +export {VFile} from './lib/index.js' diff --git a/node_modules/vfile/lib/index.d.ts b/node_modules/vfile/lib/index.d.ts new file mode 100644 index 0000000..03ab38c --- /dev/null +++ b/node_modules/vfile/lib/index.d.ts @@ -0,0 +1,355 @@ +export class VFile { + /** + * Create a new virtual file. + * + * `options` is treated as: + * + * * `string` or `Buffer` — `{value: options}` + * * `URL` — `{path: options}` + * * `VFile` — shallow copies its data over to the new file + * * `object` — all fields are shallow copied over to the new file + * + * Path related fields are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * You cannot set `dirname` or `extname` without setting either `history`, + * `path`, `basename`, or `stem` too. + * + * @param {Compatible | null | undefined} [value] + * File value. + * @returns + * New instance. + */ + constructor(value?: Compatible | null | undefined) + /** + * Place to store custom information (default: `{}`). + * + * It’s OK to store custom data directly on the file but moving it to + * `data` is recommended. + * + * @type {Data} + */ + data: Data + /** + * List of messages associated with the file. + * + * @type {Array} + */ + messages: Array + /** + * List of filepaths the file moved between. + * + * The first is the original path and the last is the current path. + * + * @type {Array} + */ + history: Array + /** + * Base of `path` (default: `process.cwd()` or `'/'` in browsers). + * + * @type {string} + */ + cwd: string + /** + * Raw value. + * + * @type {Value} + */ + value: Value + /** + * Whether a file was saved to disk. + * + * This is used by vfile reporters. + * + * @type {boolean} + */ + stored: boolean + /** + * Custom, non-string, compiled, representation. + * + * This is used by unified to store non-string results. + * One example is when turning markdown into React nodes. + * + * @type {unknown} + */ + result: unknown + /** + * Source map. + * + * This type is equivalent to the `RawSourceMap` type from the `source-map` + * module. + * + * @type {Map | null | undefined} + */ + map: Map | null | undefined + /** + * Set the full path (example: `'~/index.min.js'`). + * + * Cannot be nullified. + * You can set a file URL (a `URL` object with a `file:` protocol) which will + * be turned into a path with `url.fileURLToPath`. + * + * @param {string | URL} path + */ + set path(arg: string) + /** + * Get the full path (example: `'~/index.min.js'`). + * + * @returns {string} + */ + get path(): string + /** + * Set the parent path (example: `'~'`). + * + * Cannot be set if there’s no `path` yet. + */ + set dirname(arg: string | undefined) + /** + * Get the parent path (example: `'~'`). + */ + get dirname(): string | undefined + /** + * Set basename (including extname) (`'index.min.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set basename(arg: string | undefined) + /** + * Get the basename (including extname) (example: `'index.min.js'`). + */ + get basename(): string | undefined + /** + * Set the extname (including dot) (example: `'.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be set if there’s no `path` yet. + */ + set extname(arg: string | undefined) + /** + * Get the extname (including dot) (example: `'.js'`). + */ + get extname(): string | undefined + /** + * Set the stem (basename w/o extname) (example: `'index.min'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set stem(arg: string | undefined) + /** + * Get the stem (basename w/o extname) (example: `'index.min'`). + */ + get stem(): string | undefined + /** + * Serialize the file. + * + * @param {BufferEncoding | null | undefined} [encoding='utf8'] + * Character encoding to understand `value` as when it’s a `Buffer` + * (default: `'utf8'`). + * @returns {string} + * Serialized file. + */ + toString(encoding?: BufferEncoding | null | undefined): string + /** + * Create a warning message associated with the file. + * + * Its `fatal` is set to `false` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + message( + reason: string | Error | VFileMessage, + place?: Node | NodeLike | Position | Point | null | undefined, + origin?: string | null | undefined + ): VFileMessage + /** + * Create an info message associated with the file. + * + * Its `fatal` is set to `null` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + info( + reason: string | Error | VFileMessage, + place?: Node | NodeLike | Position | Point | null | undefined, + origin?: string | null | undefined + ): VFileMessage + /** + * Create a fatal error associated with the file. + * + * Its `fatal` is set to `true` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * > 👉 **Note**: a fatal error means that a file is no longer processable. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {never} + * Message. + * @throws {VFileMessage} + * Message. + */ + fail( + reason: string | Error | VFileMessage, + place?: Node | NodeLike | Position | Point | null | undefined, + origin?: string | null | undefined + ): never +} +export type Node = import('unist').Node +export type Position = import('unist').Position +export type Point = import('unist').Point +export type URL = import('./minurl.shared.js').URL +export type Data = import('../index.js').Data +export type Value = import('../index.js').Value +export type NodeLike = Record & { + type: string + position?: Position | undefined +} +/** + * Encodings supported by the buffer class. + * + * This is a copy of the types from Node, copied to prevent Node globals from + * being needed. + * Copied from: + */ +export type BufferEncoding = + | 'ascii' + | 'utf8' + | 'utf-8' + | 'utf16le' + | 'ucs2' + | 'ucs-2' + | 'base64' + | 'base64url' + | 'latin1' + | 'binary' + | 'hex' +/** + * Things that can be passed to the constructor. + */ +export type Compatible = Options | URL | Value | VFile +/** + * Set multiple values. + */ +export type VFileCoreOptions = { + /** + * Set `value`. + */ + value?: Value | null | undefined + /** + * Set `cwd`. + */ + cwd?: string | null | undefined + /** + * Set `history`. + */ + history?: Array | null | undefined + /** + * Set `path`. + */ + path?: URL | string | null | undefined + /** + * Set `basename`. + */ + basename?: string | null | undefined + /** + * Set `stem`. + */ + stem?: string | null | undefined + /** + * Set `extname`. + */ + extname?: string | null | undefined + /** + * Set `dirname`. + */ + dirname?: string | null | undefined + /** + * Set `data`. + */ + data?: Data | null | undefined +} +/** + * Raw source map. + * + * See: + * . + */ +export type Map = { + /** + * Which version of the source map spec this map is following. + */ + version: number + /** + * An array of URLs to the original source files. + */ + sources: Array + /** + * An array of identifiers which can be referenced by individual mappings. + */ + names: Array + /** + * The URL root from which all sources are relative. + */ + sourceRoot?: string | undefined + /** + * An array of contents of the original source files. + */ + sourcesContent?: Array | undefined + /** + * A string of base64 VLQs which contain the actual mappings. + */ + mappings: string + /** + * The generated file this source map is associated with. + */ + file: string +} +/** + * Configuration. + * + * A bunch of keys that will be shallow copied over to the new file. + */ +export type Options = { + [key: string]: unknown +} & VFileCoreOptions +/** + * Configuration for reporters. + */ +export type ReporterSettings = Record +/** + * Type for a reporter. + */ +export type Reporter = ( + files: Array, + options: Settings +) => string +import {VFileMessage} from 'vfile-message' diff --git a/node_modules/vfile/lib/index.js b/node_modules/vfile/lib/index.js new file mode 100644 index 0000000..e74a58c --- /dev/null +++ b/node_modules/vfile/lib/index.js @@ -0,0 +1,520 @@ +/** + * @typedef {import('unist').Node} Node + * @typedef {import('unist').Position} Position + * @typedef {import('unist').Point} Point + * @typedef {import('./minurl.shared.js').URL} URL + * @typedef {import('../index.js').Data} Data + * @typedef {import('../index.js').Value} Value + */ + +/** + * @typedef {Record & {type: string, position?: Position | undefined}} NodeLike + * + * @typedef {'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'} BufferEncoding + * Encodings supported by the buffer class. + * + * This is a copy of the types from Node, copied to prevent Node globals from + * being needed. + * Copied from: + * + * @typedef {Options | URL | Value | VFile} Compatible + * Things that can be passed to the constructor. + * + * @typedef VFileCoreOptions + * Set multiple values. + * @property {Value | null | undefined} [value] + * Set `value`. + * @property {string | null | undefined} [cwd] + * Set `cwd`. + * @property {Array | null | undefined} [history] + * Set `history`. + * @property {URL | string | null | undefined} [path] + * Set `path`. + * @property {string | null | undefined} [basename] + * Set `basename`. + * @property {string | null | undefined} [stem] + * Set `stem`. + * @property {string | null | undefined} [extname] + * Set `extname`. + * @property {string | null | undefined} [dirname] + * Set `dirname`. + * @property {Data | null | undefined} [data] + * Set `data`. + * + * @typedef Map + * Raw source map. + * + * See: + * . + * @property {number} version + * Which version of the source map spec this map is following. + * @property {Array} sources + * An array of URLs to the original source files. + * @property {Array} names + * An array of identifiers which can be referenced by individual mappings. + * @property {string | undefined} [sourceRoot] + * The URL root from which all sources are relative. + * @property {Array | undefined} [sourcesContent] + * An array of contents of the original source files. + * @property {string} mappings + * A string of base64 VLQs which contain the actual mappings. + * @property {string} file + * The generated file this source map is associated with. + * + * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options + * Configuration. + * + * A bunch of keys that will be shallow copied over to the new file. + * + * @typedef {Record} ReporterSettings + * Configuration for reporters. + */ + +/** + * @template {ReporterSettings} Settings + * Options type. + * @callback Reporter + * Type for a reporter. + * @param {Array} files + * Files to report. + * @param {Settings} options + * Configuration. + * @returns {string} + * Report. + */ + +import bufferLike from 'is-buffer' +import {VFileMessage} from 'vfile-message' +import {path} from './minpath.js' +import {proc} from './minproc.js' +import {urlToPath, isUrl} from './minurl.js' + +/** + * Order of setting (least specific to most), we need this because otherwise + * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a + * stem can be set. + * + * @type {Array<'basename' | 'dirname' | 'extname' | 'history' | 'path' | 'stem'>} + */ +const order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname'] + +export class VFile { + /** + * Create a new virtual file. + * + * `options` is treated as: + * + * * `string` or `Buffer` — `{value: options}` + * * `URL` — `{path: options}` + * * `VFile` — shallow copies its data over to the new file + * * `object` — all fields are shallow copied over to the new file + * + * Path related fields are set in the following order (least specific to + * most specific): `history`, `path`, `basename`, `stem`, `extname`, + * `dirname`. + * + * You cannot set `dirname` or `extname` without setting either `history`, + * `path`, `basename`, or `stem` too. + * + * @param {Compatible | null | undefined} [value] + * File value. + * @returns + * New instance. + */ + constructor(value) { + /** @type {Options | VFile} */ + let options + + if (!value) { + options = {} + } else if (typeof value === 'string' || buffer(value)) { + options = {value} + } else if (isUrl(value)) { + options = {path: value} + } else { + options = value + } + + /** + * Place to store custom information (default: `{}`). + * + * It’s OK to store custom data directly on the file but moving it to + * `data` is recommended. + * + * @type {Data} + */ + this.data = {} + + /** + * List of messages associated with the file. + * + * @type {Array} + */ + this.messages = [] + + /** + * List of filepaths the file moved between. + * + * The first is the original path and the last is the current path. + * + * @type {Array} + */ + this.history = [] + + /** + * Base of `path` (default: `process.cwd()` or `'/'` in browsers). + * + * @type {string} + */ + this.cwd = proc.cwd() + + /* eslint-disable no-unused-expressions */ + /** + * Raw value. + * + * @type {Value} + */ + this.value + + // The below are non-standard, they are “well-known”. + // As in, used in several tools. + + /** + * Whether a file was saved to disk. + * + * This is used by vfile reporters. + * + * @type {boolean} + */ + this.stored + + /** + * Custom, non-string, compiled, representation. + * + * This is used by unified to store non-string results. + * One example is when turning markdown into React nodes. + * + * @type {unknown} + */ + this.result + + /** + * Source map. + * + * This type is equivalent to the `RawSourceMap` type from the `source-map` + * module. + * + * @type {Map | null | undefined} + */ + this.map + /* eslint-enable no-unused-expressions */ + + // Set path related properties in the correct order. + let index = -1 + + while (++index < order.length) { + const prop = order[index] + + // Note: we specifically use `in` instead of `hasOwnProperty` to accept + // `vfile`s too. + if ( + prop in options && + options[prop] !== undefined && + options[prop] !== null + ) { + // @ts-expect-error: TS doesn’t understand basic reality. + this[prop] = prop === 'history' ? [...options[prop]] : options[prop] + } + } + + /** @type {string} */ + let prop + + // Set non-path related properties. + for (prop in options) { + // @ts-expect-error: fine to set other things. + if (!order.includes(prop)) { + // @ts-expect-error: fine to set other things. + this[prop] = options[prop] + } + } + } + + /** + * Get the full path (example: `'~/index.min.js'`). + * + * @returns {string} + */ + get path() { + return this.history[this.history.length - 1] + } + + /** + * Set the full path (example: `'~/index.min.js'`). + * + * Cannot be nullified. + * You can set a file URL (a `URL` object with a `file:` protocol) which will + * be turned into a path with `url.fileURLToPath`. + * + * @param {string | URL} path + */ + set path(path) { + if (isUrl(path)) { + path = urlToPath(path) + } + + assertNonEmpty(path, 'path') + + if (this.path !== path) { + this.history.push(path) + } + } + + /** + * Get the parent path (example: `'~'`). + */ + get dirname() { + return typeof this.path === 'string' ? path.dirname(this.path) : undefined + } + + /** + * Set the parent path (example: `'~'`). + * + * Cannot be set if there’s no `path` yet. + */ + set dirname(dirname) { + assertPath(this.basename, 'dirname') + this.path = path.join(dirname || '', this.basename) + } + + /** + * Get the basename (including extname) (example: `'index.min.js'`). + */ + get basename() { + return typeof this.path === 'string' ? path.basename(this.path) : undefined + } + + /** + * Set basename (including extname) (`'index.min.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set basename(basename) { + assertNonEmpty(basename, 'basename') + assertPart(basename, 'basename') + this.path = path.join(this.dirname || '', basename) + } + + /** + * Get the extname (including dot) (example: `'.js'`). + */ + get extname() { + return typeof this.path === 'string' ? path.extname(this.path) : undefined + } + + /** + * Set the extname (including dot) (example: `'.js'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be set if there’s no `path` yet. + */ + set extname(extname) { + assertPart(extname, 'extname') + assertPath(this.dirname, 'extname') + + if (extname) { + if (extname.charCodeAt(0) !== 46 /* `.` */) { + throw new Error('`extname` must start with `.`') + } + + if (extname.includes('.', 1)) { + throw new Error('`extname` cannot contain multiple dots') + } + } + + this.path = path.join(this.dirname, this.stem + (extname || '')) + } + + /** + * Get the stem (basename w/o extname) (example: `'index.min'`). + */ + get stem() { + return typeof this.path === 'string' + ? path.basename(this.path, this.extname) + : undefined + } + + /** + * Set the stem (basename w/o extname) (example: `'index.min'`). + * + * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` + * on windows). + * Cannot be nullified (use `file.path = file.dirname` instead). + */ + set stem(stem) { + assertNonEmpty(stem, 'stem') + assertPart(stem, 'stem') + this.path = path.join(this.dirname || '', stem + (this.extname || '')) + } + + /** + * Serialize the file. + * + * @param {BufferEncoding | null | undefined} [encoding='utf8'] + * Character encoding to understand `value` as when it’s a `Buffer` + * (default: `'utf8'`). + * @returns {string} + * Serialized file. + */ + toString(encoding) { + return (this.value || '').toString(encoding || undefined) + } + + /** + * Create a warning message associated with the file. + * + * Its `fatal` is set to `false` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + message(reason, place, origin) { + const message = new VFileMessage(reason, place, origin) + + if (this.path) { + message.name = this.path + ':' + message.name + message.file = this.path + } + + message.fatal = false + + this.messages.push(message) + + return message + } + + /** + * Create an info message associated with the file. + * + * Its `fatal` is set to `null` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {VFileMessage} + * Message. + */ + info(reason, place, origin) { + const message = this.message(reason, place, origin) + + message.fatal = null + + return message + } + + /** + * Create a fatal error associated with the file. + * + * Its `fatal` is set to `true` and `file` is set to the current file path. + * Its added to `file.messages`. + * + * > 👉 **Note**: a fatal error means that a file is no longer processable. + * + * @param {string | Error | VFileMessage} reason + * Reason for message, uses the stack and message of the error if given. + * @param {Node | NodeLike | Position | Point | null | undefined} [place] + * Place in file where the message occurred. + * @param {string | null | undefined} [origin] + * Place in code where the message originates (example: + * `'my-package:my-rule'` or `'my-rule'`). + * @returns {never} + * Message. + * @throws {VFileMessage} + * Message. + */ + fail(reason, place, origin) { + const message = this.message(reason, place, origin) + + message.fatal = true + + throw message + } +} + +/** + * Assert that `part` is not a path (as in, does not contain `path.sep`). + * + * @param {string | null | undefined} part + * File path part. + * @param {string} name + * Part name. + * @returns {void} + * Nothing. + */ +function assertPart(part, name) { + if (part && part.includes(path.sep)) { + throw new Error( + '`' + name + '` cannot be a path: did not expect `' + path.sep + '`' + ) + } +} + +/** + * Assert that `part` is not empty. + * + * @param {string | undefined} part + * Thing. + * @param {string} name + * Part name. + * @returns {asserts part is string} + * Nothing. + */ +function assertNonEmpty(part, name) { + if (!part) { + throw new Error('`' + name + '` cannot be empty') + } +} + +/** + * Assert `path` exists. + * + * @param {string | undefined} path + * Path. + * @param {string} name + * Dependency name. + * @returns {asserts path is string} + * Nothing. + */ +function assertPath(path, name) { + if (!path) { + throw new Error('Setting `' + name + '` requires `path` to be set too') + } +} + +/** + * Assert `value` is a buffer. + * + * @param {unknown} value + * thing. + * @returns {value is Buffer} + * Whether `value` is a Node.js buffer. + */ +function buffer(value) { + return bufferLike(value) +} diff --git a/node_modules/vfile/lib/minpath.browser.d.ts b/node_modules/vfile/lib/minpath.browser.d.ts new file mode 100644 index 0000000..a3fa641 --- /dev/null +++ b/node_modules/vfile/lib/minpath.browser.d.ts @@ -0,0 +1,46 @@ +export namespace path { + export {basename} + export {dirname} + export {extname} + export {join} + export const sep: string +} +/** + * Get the basename from a path. + * + * @param {string} path + * File path. + * @param {string | undefined} [ext] + * Extension to strip. + * @returns {string} + * Stem or basename. + */ +declare function basename(path: string, ext?: string | undefined): string +/** + * Get the dirname from a path. + * + * @param {string} path + * File path. + * @returns {string} + * File path. + */ +declare function dirname(path: string): string +/** + * Get an extname from a path. + * + * @param {string} path + * File path. + * @returns {string} + * Extname. + */ +declare function extname(path: string): string +/** + * Join segments from a path. + * + * @param {Array} segments + * Path segments. + * @returns {string} + * File path. + */ +declare function join(...segments: Array): string +export {} diff --git a/node_modules/vfile/lib/minpath.browser.js b/node_modules/vfile/lib/minpath.browser.js new file mode 100644 index 0000000..48c23fb --- /dev/null +++ b/node_modules/vfile/lib/minpath.browser.js @@ -0,0 +1,422 @@ +// A derivative work based on: +// . +// Which is licensed: +// +// MIT License +// +// Copyright (c) 2013 James Halliday +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +// the Software, and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// A derivative work based on: +// +// Parts of that are extracted from Node’s internal `path` module: +// . +// Which is licensed: +// +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +export const path = {basename, dirname, extname, join, sep: '/'} + +/* eslint-disable max-depth, complexity */ + +/** + * Get the basename from a path. + * + * @param {string} path + * File path. + * @param {string | undefined} [ext] + * Extension to strip. + * @returns {string} + * Stem or basename. + */ +function basename(path, ext) { + if (ext !== undefined && typeof ext !== 'string') { + throw new TypeError('"ext" argument must be a string') + } + + assertPath(path) + let start = 0 + let end = -1 + let index = path.length + /** @type {boolean | undefined} */ + let seenNonSlash + + if (ext === undefined || ext.length === 0 || ext.length > path.length) { + while (index--) { + if (path.charCodeAt(index) === 47 /* `/` */) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now. + if (seenNonSlash) { + start = index + 1 + break + } + } else if (end < 0) { + // We saw the first non-path separator, mark this as the end of our + // path component. + seenNonSlash = true + end = index + 1 + } + } + + return end < 0 ? '' : path.slice(start, end) + } + + if (ext === path) { + return '' + } + + let firstNonSlashEnd = -1 + let extIndex = ext.length - 1 + + while (index--) { + if (path.charCodeAt(index) === 47 /* `/` */) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now. + if (seenNonSlash) { + start = index + 1 + break + } + } else { + if (firstNonSlashEnd < 0) { + // We saw the first non-path separator, remember this index in case + // we need it if the extension ends up not matching. + seenNonSlash = true + firstNonSlashEnd = index + 1 + } + + if (extIndex > -1) { + // Try to match the explicit extension. + if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) { + if (extIndex < 0) { + // We matched the extension, so mark this as the end of our path + // component + end = index + } + } else { + // Extension does not match, so our result is the entire path + // component + extIndex = -1 + end = firstNonSlashEnd + } + } + } + } + + if (start === end) { + end = firstNonSlashEnd + } else if (end < 0) { + end = path.length + } + + return path.slice(start, end) +} + +/** + * Get the dirname from a path. + * + * @param {string} path + * File path. + * @returns {string} + * File path. + */ +function dirname(path) { + assertPath(path) + + if (path.length === 0) { + return '.' + } + + let end = -1 + let index = path.length + /** @type {boolean | undefined} */ + let unmatchedSlash + + // Prefix `--` is important to not run on `0`. + while (--index) { + if (path.charCodeAt(index) === 47 /* `/` */) { + if (unmatchedSlash) { + end = index + break + } + } else if (!unmatchedSlash) { + // We saw the first non-path separator + unmatchedSlash = true + } + } + + return end < 0 + ? path.charCodeAt(0) === 47 /* `/` */ + ? '/' + : '.' + : end === 1 && path.charCodeAt(0) === 47 /* `/` */ + ? '//' + : path.slice(0, end) +} + +/** + * Get an extname from a path. + * + * @param {string} path + * File path. + * @returns {string} + * Extname. + */ +function extname(path) { + assertPath(path) + + let index = path.length + + let end = -1 + let startPart = 0 + let startDot = -1 + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find. + let preDotState = 0 + /** @type {boolean | undefined} */ + let unmatchedSlash + + while (index--) { + const code = path.charCodeAt(index) + + if (code === 47 /* `/` */) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now. + if (unmatchedSlash) { + startPart = index + 1 + break + } + + continue + } + + if (end < 0) { + // We saw the first non-path separator, mark this as the end of our + // extension. + unmatchedSlash = true + end = index + 1 + } + + if (code === 46 /* `.` */) { + // If this is our first dot, mark it as the start of our extension. + if (startDot < 0) { + startDot = index + } else if (preDotState !== 1) { + preDotState = 1 + } + } else if (startDot > -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension. + preDotState = -1 + } + } + + if ( + startDot < 0 || + end < 0 || + // We saw a non-dot character immediately before the dot. + preDotState === 0 || + // The (right-most) trimmed path component is exactly `..`. + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + return '' + } + + return path.slice(startDot, end) +} + +/** + * Join segments from a path. + * + * @param {Array} segments + * Path segments. + * @returns {string} + * File path. + */ +function join(...segments) { + let index = -1 + /** @type {string | undefined} */ + let joined + + while (++index < segments.length) { + assertPath(segments[index]) + + if (segments[index]) { + joined = + joined === undefined ? segments[index] : joined + '/' + segments[index] + } + } + + return joined === undefined ? '.' : normalize(joined) +} + +/** + * Normalize a basic file path. + * + * @param {string} path + * File path. + * @returns {string} + * File path. + */ +// Note: `normalize` is not exposed as `path.normalize`, so some code is +// manually removed from it. +function normalize(path) { + assertPath(path) + + const absolute = path.charCodeAt(0) === 47 /* `/` */ + + // Normalize the path according to POSIX rules. + let value = normalizeString(path, !absolute) + + if (value.length === 0 && !absolute) { + value = '.' + } + + if (value.length > 0 && path.charCodeAt(path.length - 1) === 47 /* / */) { + value += '/' + } + + return absolute ? '/' + value : value +} + +/** + * Resolve `.` and `..` elements in a path with directory names. + * + * @param {string} path + * File path. + * @param {boolean} allowAboveRoot + * Whether `..` can move above root. + * @returns {string} + * File path. + */ +function normalizeString(path, allowAboveRoot) { + let result = '' + let lastSegmentLength = 0 + let lastSlash = -1 + let dots = 0 + let index = -1 + /** @type {number | undefined} */ + let code + /** @type {number} */ + let lastSlashIndex + + while (++index <= path.length) { + if (index < path.length) { + code = path.charCodeAt(index) + } else if (code === 47 /* `/` */) { + break + } else { + code = 47 /* `/` */ + } + + if (code === 47 /* `/` */) { + if (lastSlash === index - 1 || dots === 1) { + // Empty. + } else if (lastSlash !== index - 1 && dots === 2) { + if ( + result.length < 2 || + lastSegmentLength !== 2 || + result.charCodeAt(result.length - 1) !== 46 /* `.` */ || + result.charCodeAt(result.length - 2) !== 46 /* `.` */ + ) { + if (result.length > 2) { + lastSlashIndex = result.lastIndexOf('/') + + if (lastSlashIndex !== result.length - 1) { + if (lastSlashIndex < 0) { + result = '' + lastSegmentLength = 0 + } else { + result = result.slice(0, lastSlashIndex) + lastSegmentLength = result.length - 1 - result.lastIndexOf('/') + } + + lastSlash = index + dots = 0 + continue + } + } else if (result.length > 0) { + result = '' + lastSegmentLength = 0 + lastSlash = index + dots = 0 + continue + } + } + + if (allowAboveRoot) { + result = result.length > 0 ? result + '/..' : '..' + lastSegmentLength = 2 + } + } else { + if (result.length > 0) { + result += '/' + path.slice(lastSlash + 1, index) + } else { + result = path.slice(lastSlash + 1, index) + } + + lastSegmentLength = index - lastSlash - 1 + } + + lastSlash = index + dots = 0 + } else if (code === 46 /* `.` */ && dots > -1) { + dots++ + } else { + dots = -1 + } + } + + return result +} + +/** + * Make sure `path` is a string. + * + * @param {string} path + * File path. + * @returns {asserts path is string} + * Nothing. + */ +function assertPath(path) { + if (typeof path !== 'string') { + throw new TypeError( + 'Path must be a string. Received ' + JSON.stringify(path) + ) + } +} + +/* eslint-enable max-depth, complexity */ diff --git a/node_modules/vfile/lib/minpath.d.ts b/node_modules/vfile/lib/minpath.d.ts new file mode 100644 index 0000000..80824cc --- /dev/null +++ b/node_modules/vfile/lib/minpath.d.ts @@ -0,0 +1 @@ +export {default as path} from 'path' diff --git a/node_modules/vfile/lib/minpath.js b/node_modules/vfile/lib/minpath.js new file mode 100644 index 0000000..80824cc --- /dev/null +++ b/node_modules/vfile/lib/minpath.js @@ -0,0 +1 @@ +export {default as path} from 'path' diff --git a/node_modules/vfile/lib/minproc.browser.d.ts b/node_modules/vfile/lib/minproc.browser.d.ts new file mode 100644 index 0000000..0c24c91 --- /dev/null +++ b/node_modules/vfile/lib/minproc.browser.d.ts @@ -0,0 +1,5 @@ +export namespace proc { + export {cwd} +} +declare function cwd(): string +export {} diff --git a/node_modules/vfile/lib/minproc.browser.js b/node_modules/vfile/lib/minproc.browser.js new file mode 100644 index 0000000..e40ec9e --- /dev/null +++ b/node_modules/vfile/lib/minproc.browser.js @@ -0,0 +1,8 @@ +// Somewhat based on: +// . +// But I don’t think one tiny line of code can be copyrighted. 😅 +export const proc = {cwd} + +function cwd() { + return '/' +} diff --git a/node_modules/vfile/lib/minproc.d.ts b/node_modules/vfile/lib/minproc.d.ts new file mode 100644 index 0000000..c0d1d27 --- /dev/null +++ b/node_modules/vfile/lib/minproc.d.ts @@ -0,0 +1 @@ +export {default as proc} from 'process' diff --git a/node_modules/vfile/lib/minproc.js b/node_modules/vfile/lib/minproc.js new file mode 100644 index 0000000..c0d1d27 --- /dev/null +++ b/node_modules/vfile/lib/minproc.js @@ -0,0 +1 @@ +export {default as proc} from 'process' diff --git a/node_modules/vfile/lib/minurl.browser.d.ts b/node_modules/vfile/lib/minurl.browser.d.ts new file mode 100644 index 0000000..48b85a4 --- /dev/null +++ b/node_modules/vfile/lib/minurl.browser.d.ts @@ -0,0 +1,9 @@ +/// +/** + * @param {string | URL} path + * File URL. + * @returns {string} + * File URL. + */ +export function urlToPath(path: string | URL): string +export {isUrl} from './minurl.shared.js' diff --git a/node_modules/vfile/lib/minurl.browser.js b/node_modules/vfile/lib/minurl.browser.js new file mode 100644 index 0000000..6438d0d --- /dev/null +++ b/node_modules/vfile/lib/minurl.browser.js @@ -0,0 +1,78 @@ +/// + +import {isUrl} from './minurl.shared.js' + +// See: + +/** + * @param {string | URL} path + * File URL. + * @returns {string} + * File URL. + */ +export function urlToPath(path) { + if (typeof path === 'string') { + path = new URL(path) + } else if (!isUrl(path)) { + /** @type {NodeJS.ErrnoException} */ + const error = new TypeError( + 'The "path" argument must be of type string or an instance of URL. Received `' + + path + + '`' + ) + error.code = 'ERR_INVALID_ARG_TYPE' + throw error + } + + if (path.protocol !== 'file:') { + /** @type {NodeJS.ErrnoException} */ + const error = new TypeError('The URL must be of scheme file') + error.code = 'ERR_INVALID_URL_SCHEME' + throw error + } + + return getPathFromURLPosix(path) +} + +/** + * Get a path from a POSIX URL. + * + * @param {URL} url + * URL. + * @returns {string} + * File path. + */ +function getPathFromURLPosix(url) { + if (url.hostname !== '') { + /** @type {NodeJS.ErrnoException} */ + const error = new TypeError( + 'File URL host must be "localhost" or empty on darwin' + ) + error.code = 'ERR_INVALID_FILE_URL_HOST' + throw error + } + + const pathname = url.pathname + let index = -1 + + while (++index < pathname.length) { + if ( + pathname.charCodeAt(index) === 37 /* `%` */ && + pathname.charCodeAt(index + 1) === 50 /* `2` */ + ) { + const third = pathname.charCodeAt(index + 2) + if (third === 70 /* `F` */ || third === 102 /* `f` */) { + /** @type {NodeJS.ErrnoException} */ + const error = new TypeError( + 'File URL path must not include encoded / characters' + ) + error.code = 'ERR_INVALID_FILE_URL_PATH' + throw error + } + } + } + + return decodeURIComponent(pathname) +} + +export {isUrl} from './minurl.shared.js' diff --git a/node_modules/vfile/lib/minurl.d.ts b/node_modules/vfile/lib/minurl.d.ts new file mode 100644 index 0000000..3c1da37 --- /dev/null +++ b/node_modules/vfile/lib/minurl.d.ts @@ -0,0 +1,2 @@ +export {fileURLToPath as urlToPath} from 'url' +export {isUrl} from './minurl.shared.js' diff --git a/node_modules/vfile/lib/minurl.js b/node_modules/vfile/lib/minurl.js new file mode 100644 index 0000000..3c1da37 --- /dev/null +++ b/node_modules/vfile/lib/minurl.js @@ -0,0 +1,2 @@ +export {fileURLToPath as urlToPath} from 'url' +export {isUrl} from './minurl.shared.js' diff --git a/node_modules/vfile/lib/minurl.shared.d.ts b/node_modules/vfile/lib/minurl.shared.d.ts new file mode 100644 index 0000000..5c6aff6 --- /dev/null +++ b/node_modules/vfile/lib/minurl.shared.d.ts @@ -0,0 +1,42 @@ +/** + * @typedef URL + * @property {string} hash + * @property {string} host + * @property {string} hostname + * @property {string} href + * @property {string} origin + * @property {string} password + * @property {string} pathname + * @property {string} port + * @property {string} protocol + * @property {string} search + * @property {any} searchParams + * @property {string} username + * @property {() => string} toString + * @property {() => string} toJSON + */ +/** + * Check if `fileUrlOrPath` looks like a URL. + * + * @param {unknown} fileUrlOrPath + * File path or URL. + * @returns {fileUrlOrPath is URL} + * Whether it’s a URL. + */ +export function isUrl(fileUrlOrPath: unknown): fileUrlOrPath is URL +export type URL = { + hash: string + host: string + hostname: string + href: string + origin: string + password: string + pathname: string + port: string + protocol: string + search: string + searchParams: any + username: string + toString: () => string + toJSON: () => string +} diff --git a/node_modules/vfile/lib/minurl.shared.js b/node_modules/vfile/lib/minurl.shared.js new file mode 100644 index 0000000..7954129 --- /dev/null +++ b/node_modules/vfile/lib/minurl.shared.js @@ -0,0 +1,37 @@ +/** + * @typedef URL + * @property {string} hash + * @property {string} host + * @property {string} hostname + * @property {string} href + * @property {string} origin + * @property {string} password + * @property {string} pathname + * @property {string} port + * @property {string} protocol + * @property {string} search + * @property {any} searchParams + * @property {string} username + * @property {() => string} toString + * @property {() => string} toJSON + */ + +/** + * Check if `fileUrlOrPath` looks like a URL. + * + * @param {unknown} fileUrlOrPath + * File path or URL. + * @returns {fileUrlOrPath is URL} + * Whether it’s a URL. + */ +// From: +export function isUrl(fileUrlOrPath) { + return ( + fileUrlOrPath !== null && + typeof fileUrlOrPath === 'object' && + // @ts-expect-error: indexable. + fileUrlOrPath.href && + // @ts-expect-error: indexable. + fileUrlOrPath.origin + ) +} diff --git a/node_modules/vfile/license b/node_modules/vfile/license new file mode 100644 index 0000000..f3722d9 --- /dev/null +++ b/node_modules/vfile/license @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/vfile/package.json b/node_modules/vfile/package.json new file mode 100644 index 0000000..e6721ae --- /dev/null +++ b/node_modules/vfile/package.json @@ -0,0 +1,111 @@ +{ + "name": "vfile", + "version": "5.3.7", + "description": "Virtual file format for text processing", + "license": "MIT", + "keywords": [ + "vfile", + "virtual", + "file", + "text", + "processing", + "message", + "warning", + "error", + "remark", + "retext", + "rehype" + ], + "repository": "vfile/vfile", + "bugs": "https://github.com/vfile/vfile/issues", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "author": "Titus Wormer (https://wooorm.com)", + "contributors": [ + "Titus Wormer (https://wooorm.com)", + "Brendan Abbott ", + "Denys Dovhan ", + "Kyle Mathews ", + "Shinnosuke Watanabe ", + "Sindre Sorhus " + ], + "sideEffects": false, + "type": "module", + "main": "index.js", + "types": "index.d.ts", + "browser": { + "./lib/minpath.js": "./lib/minpath.browser.js", + "./lib/minproc.js": "./lib/minproc.browser.js", + "./lib/minurl.js": "./lib/minurl.browser.js" + }, + "react-native": { + "./lib/minpath.js": "./lib/minpath.browser.js", + "./lib/minproc.js": "./lib/minproc.browser.js", + "./lib/minurl.js": "./lib/minurl.browser.js" + }, + "files": [ + "lib/", + "index.d.ts", + "index.js" + ], + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^18.0.0", + "c8": "^7.0.0", + "prettier": "^2.0.0", + "remark-cli": "^11.0.0", + "remark-preset-wooorm": "^9.0.0", + "type-coverage": "^2.0.0", + "typescript": "^4.0.0", + "xo": "^0.53.0" + }, + "scripts": { + "prepack": "npm run build && npm run format", + "build": "tsc --build --clean && tsc --build && type-coverage", + "format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix", + "test-api": "node --conditions development test.js", + "test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api", + "test": "npm run build && npm run format && npm run test-coverage" + }, + "prettier": { + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "bracketSpacing": false, + "semi": false, + "trailingComma": "none" + }, + "xo": { + "prettier": true, + "rules": { + "unicorn/prefer-code-point": "off", + "unicorn/prefer-node-protocol": "off" + } + }, + "remarkConfig": { + "plugins": [ + "preset-wooorm", + [ + "lint-no-html", + false + ] + ] + }, + "typeCoverage": { + "atLeast": 100, + "detail": true, + "strict": true, + "ignoreCatch": true, + "#": "needed `any`s", + "ignoreFiles": [ + "lib/minurl.shared.d.ts" + ] + } +} diff --git a/node_modules/vfile/readme.md b/node_modules/vfile/readme.md new file mode 100644 index 0000000..f6e873c --- /dev/null +++ b/node_modules/vfile/readme.md @@ -0,0 +1,786 @@ +

    + vfile +

    + +[![Build][build-badge]][build] +[![Coverage][coverage-badge]][coverage] +[![Downloads][downloads-badge]][downloads] +[![Size][size-badge]][size] +[![Sponsors][sponsors-badge]][collective] +[![Backers][backers-badge]][collective] +[![Chat][chat-badge]][chat] + +**vfile** is a small and browser friendly virtual file format that tracks +metadata about files (such as its `path` and `value`) and lint [messages][]. + +## Contents + +* [unified](#unified) +* [What is this?](#what-is-this) +* [When should I use this?](#when-should-i-use-this) +* [Install](#install) +* [Use](#use) +* [API](#api) + * [`VFile(options?)`](#vfileoptions) + * [`file.value`](#filevalue) + * [`file.cwd`](#filecwd) + * [`file.path`](#filepath) + * [`file.dirname`](#filedirname) + * [`file.basename`](#filebasename) + * [`file.extname`](#fileextname) + * [`file.stem`](#filestem) + * [`file.history`](#filehistory) + * [`file.messages`](#filemessages) + * [`file.data`](#filedata) + * [`VFile#toString(encoding?)`](#vfiletostringencoding) + * [`VFile#message(reason[, position][, origin])`](#vfilemessagereason-position-origin) + * [`VFile#info(reason[, position][, origin])`](#vfileinforeason-position-origin) + * [`VFile#fail(reason[, position][, origin])`](#vfilefailreason-position-origin) + * [`BufferEncoding`](#bufferencoding) + * [`Compatible`](#compatible) + * [`Data`](#data) + * [`DataMap`](#datamap) + * [`Map`](#map) + * [`Options`](#options) + * [`Reporter`](#reporter) + * [`ReporterSettings`](#reportersettings) + * [`Value`](#value) + * [Well-known](#well-known) +* [List of utilities](#list-of-utilities) +* [Reporters](#reporters) +* [Types](#types) +* [Compatibility](#compatibility) +* [Contribute](#contribute) +* [Sponsor](#sponsor) +* [Acknowledgments](#acknowledgments) +* [License](#license) + +## unified + +**vfile** is part of the unified collective. + +* for more about us, see [`unifiedjs.com`][site] +* for how the collective is governed, see [`unifiedjs/collective`][governance] +* for updates, see [@unifiedjs][twitter] on Twitter + +## What is this? + +This package provides a virtual file format. +It exposes an API to access the file value, path, metadata about the file, and +specifically supports attaching lint messages and errors to certain places in +these files. + +## When should I use this? + +The virtual file format is useful when dealing with the concept of files in +places where you might not be able to access the file system. +The message API is particularly useful when making things that check files (as +in, linting). + +vfile is made for [unified][], which amongst other things checks files. +However, vfile can be used in other projects that deal with parsing, +transforming, and serializing data, to build linters, compilers, static site +generators, and other build tools. + +This is different from the excellent [`vinyl`][vinyl] in that vfile has a +smaller API, a smaller size, and focuses on messages. + +## Install + +This package is [ESM only][esm]. +In Node.js (version 14.14 and 16.0+), install with [npm][]: + +```sh +npm install vfile +``` + +In Deno with [`esm.sh`][esmsh]: + +```js +import {VFile} from 'https://esm.sh/vfile@5' +``` + +In browsers with [`esm.sh`][esmsh]: + +```html + +``` + +## Use + +```js +import {VFile} from 'vfile' + +const file = new VFile({ + path: '~/example.txt', + value: 'Alpha *braavo* charlie.' +}) + +console.log(file.path) // => '~/example.txt' +console.log(file.dirname) // => '~' + +file.extname = '.md' + +console.log(file.basename) // => 'example.md' + +file.basename = 'index.text' + +console.log(file.history) // => ['~/example.txt', '~/example.md', '~/index.text'] + +file.message('Unexpected unknown word `braavo`, did you mean `bravo`?', { + line: 1, + column: 8 +}) + +console.log(file.messages) +``` + +Yields: + +```txt +[ + [~/index.text:1:8: Unexpected unknown word `braavo`, did you mean `bravo`?] { + reason: 'Unexpected unknown word `braavo`, did you mean `bravo`?', + line: 1, + column: 8, + source: null, + ruleId: null, + position: {start: [Object], end: [Object]}, + file: '~/index.text', + fatal: false + } +] +``` + +## API + +This package exports the identifier [`VFile`][api-vfile]. +There is no default export. + +### `VFile(options?)` + +Create a new virtual file. + +`options` is treated as: + +* `string` or [`Buffer`][buffer] — `{value: options}` +* `URL` — `{path: options}` +* `VFile` — shallow copies its data over to the new file +* `object` — all fields are shallow copied over to the new file + +Path related fields are set in the following order (least specific to +most specific): `history`, `path`, `basename`, `stem`, `extname`, +`dirname`. + +You cannot set `dirname` or `extname` without setting either `history`, +`path`, `basename`, or `stem` too. + +###### Parameters + +* `options` ([`Compatible`][api-compatible], optional) + — file value + +###### Returns + +New instance (`VFile`). + +###### Example + +```js +new VFile() +new VFile('console.log("alpha");') +new VFile(Buffer.from('exit 1')) +new VFile({path: path.join('path', 'to', 'readme.md')}) +new VFile({stem: 'readme', extname: '.md', dirname: path.join('path', 'to')}) +new VFile({other: 'properties', are: 'copied', ov: {e: 'r'}}) +``` + +### `file.value` + +Raw value ([`Buffer`][buffer], `string`, `null`). + +### `file.cwd` + +Base of `path` (`string`, default: `process.cwd()` or `'/'` in browsers). + +### `file.path` + +Get or set the full path (`string?`, example: `'~/index.min.js'`). + +Cannot be nullified. +You can set a file URL (a `URL` object with a `file:` protocol) which will be +turned into a path with [`url.fileURLToPath`][file-url-to-path]. + +### `file.dirname` + +Get or set the parent path (`string?`, example: `'~'`). + +Cannot be set if there’s no `path` yet. + +### `file.basename` + +Get or set the basename (including extname) (`string?`, example: `'index.min.js'`). + +Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` on +windows). +Cannot be nullified (use `file.path = file.dirname` instead). + +### `file.extname` + +Get or set the extname (including dot) (`string?`, example: `'.js'`). + +Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` on +windows). +Cannot be set if there’s no `path` yet. + +### `file.stem` + +Get or set the stem (basename w/o extname) (`string?`, example: `'index.min'`). + +Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'` on +windows). +Cannot be nullified. + +### `file.history` + +List of filepaths the file moved between (`Array`). + +The first is the original path and the last is the current path. + +### `file.messages` + +List of messages associated with the file ([`Array`][message]). + +### `file.data` + +Place to store custom information (`Record`, default: `{}`). + +It’s OK to store custom data directly on the file but moving it to `data` is +recommended. + +### `VFile#toString(encoding?)` + +Serialize the file. + +###### Parameters + +* `encoding` ([`BufferEncoding`][api-buffer-encoding], default: `'utf8'`) + — character encoding to understand `value` as when it’s a + [`Buffer`][buffer] + +###### Returns + +Serialized file (`string`). + +### `VFile#message(reason[, position][, origin])` + +Create a warning message associated with the file. + +Its `fatal` is set to `false` and `file` is set to the current file path. +Its added to `file.messages`. + +###### Parameters + +* `reason` (`string` or `Error`) + — reason for message, uses the stack and message of the error if given +* `place` (`Node`, `Position`, or `Point`, optional) + — place in file where the message occurred +* `origin` (`string?`, optional, example: `'my-package:my-rule'` or `'my-rule'`) + — place in code where the message originates + +###### Returns + +Message ([`VFileMessage`][vmessage]). + +### `VFile#info(reason[, position][, origin])` + +Create an info message associated with the file. + +Its `fatal` is set to `null` and `file` is set to the current file path. +Its added to `file.messages`. + +###### Parameters + +* `reason` (`string` or `Error`) + — reason for message, uses the stack and message of the error if given +* `place` (`Node`, `Position`, or `Point`, optional) + — place in file where the message occurred +* `origin` (`string?`, optional, example: `'my-package:my-rule'` or `'my-rule'`) + — place in code where the message originates + +###### Returns + +Message ([`VFileMessage`][vmessage]). + +### `VFile#fail(reason[, position][, origin])` + +Create a fatal error associated with the file. + +Its `fatal` is set to `true` and `file` is set to the current file path. +Its added to `file.messages`. + +> 👉 **Note**: a fatal error means that a file is no longer processable. + +###### Parameters + +* `reason` (`string` or `Error`) + — reason for message, uses the stack and message of the error if given +* `place` (`Node`, `Position`, or `Point`, optional) + — place in file where the message occurred +* `origin` (`string?`, optional, example: `'my-package:my-rule'` or `'my-rule'`) + — place in code where the message originates + +###### Returns + +Nothing (`never`). + +###### Throws + +Message ([`VFileMessage`][vmessage]). + +### `BufferEncoding` + +[Encodings][encoding] supported by the [buffer][] class (TypeScript type). + +This is a copy of the types from Node. + +###### Type + +```ts +type BufferEncoding = + | 'ascii' + | 'utf8' + | 'utf-8' + | 'utf16le' + | 'ucs2' + | 'ucs-2' + | 'base64' + | 'base64url' + | 'latin1' + | 'binary' + | 'hex' +``` + +### `Compatible` + +Things that can be passed to the constructor (TypeScript type). + +###### Type + +```ts +type Compatible = Options | URL | Value | VFile +``` + +### `Data` + +Custom information (TypeScript type). + +Known attributes can be added to [`DataMap`][api-data-map]. + +###### Type + +```ts +type Data = Record & Partial +``` + +### `DataMap` + +This map registers the type of the `data` key of a `VFile` (TypeScript type). + +This type can be augmented to register custom `data` types. + +###### Type + +```ts +interface DataMap {} +``` + +###### Example + +```ts +declare module 'vfile' { + interface DataMap { + // `file.data.name` is typed as `string` + name: string + } +} +``` + +### `Map` + +Raw source map (TypeScript type). + +See [`source-map`][source-map]. + +###### Fields + +* `version` (`number`) + — which version of the source map spec this map is following +* `sources` (`Array`) + — an array of URLs to the original source files +* `names` (`Array`) + — an array of identifiers which can be referenced by individual mappings +* `sourceRoot` (`string`, optional) + — the URL root from which all sources are relative +* `sourcesContent` (`Array`, optional) + — an array of contents of the original source files +* `mappings` (`string`) + — a string of base64 VLQs which contain the actual mappings +* `file` (`string`) + — the generated file this source map is associated with + +### `Options` + +An object with arbitrary fields and the following known fields (TypeScript +type). + +###### Fields + +* `value` ([`Value`][api-value], optional) + — set `value` +* `cwd` (`string`, optional) + — set `cwd` +* `history` (`Array`, optional) + — set `history` +* `path` (`URL | string`, optional) + — set `path` +* `basename` (`string`, optional) + — set `basename` +* `stem` (`string`, optional) + — set `stem` +* `extname` (`string`, optional) + — set `extname` +* `dirname` (`string`, optional) + — set `dirname` +* `data` ([`Data`][api-data], optional) + — set `data` + +### `Reporter` + +Type for a reporter (TypeScript type). + +###### Type + +```ts +type Reporter = ( + files: Array, + options: Settings +) => string +``` + +### `ReporterSettings` + +Configuration for reporters (TypeScript type). + +###### Type + +```ts +type ReporterSettings = Record +``` + +### `Value` + +Contents of the file (TypeScript type). + +Can either be text or a `Buffer` structure. + +###### Type + +```ts +type Value = string | Buffer +``` + +### Well-known + +The following fields are considered “non-standard”, but they are allowed, and +some utilities use them: + +* `stored` (`boolean`) + — whether a file was saved to disk; this is used by vfile reporters +* `result` (`unknown`) + — custom, non-string, compiled, representation; this is used by unified to + store non-string results; one example is when turning markdown into React + nodes +* `map` ([`Map`][api-map]) + — source map; this type is equivalent to the `RawSourceMap` type from the + `source-map` module + +There are also well-known fields on messages, see +[them in a similar section of +`vfile-message`](https://github.com/vfile/vfile-message#well-known). + + + +## List of utilities + +* [`convert-vinyl-to-vfile`](https://github.com/dustinspecker/convert-vinyl-to-vfile) + — transform from [Vinyl][] +* [`to-vfile`](https://github.com/vfile/to-vfile) + — create a file from a filepath and read and write to the file system +* [`vfile-find-down`](https://github.com/vfile/vfile-find-down) + — find files by searching the file system downwards +* [`vfile-find-up`](https://github.com/vfile/vfile-find-up) + — find files by searching the file system upwards +* [`vfile-glob`](https://github.com/shinnn/vfile-glob) + — find files by glob patterns +* [`vfile-is`](https://github.com/vfile/vfile-is) + — check if a file passes a test +* [`vfile-location`](https://github.com/vfile/vfile-location) + — convert between positional and offset locations +* [`vfile-matter`](https://github.com/vfile/vfile-matter) + — parse the YAML front matter +* [`vfile-message`](https://github.com/vfile/vfile-message) + — create a file message +* [`vfile-messages-to-vscode-diagnostics`](https://github.com/shinnn/vfile-messages-to-vscode-diagnostics) + — transform file messages to VS Code diagnostics +* [`vfile-mkdirp`](https://github.com/vfile/vfile-mkdirp) + — make sure the directory of a file exists on the file system +* [`vfile-rename`](https://github.com/vfile/vfile-rename) + — rename the path parts of a file +* [`vfile-sort`](https://github.com/vfile/vfile-sort) + — sort messages by line/column +* [`vfile-statistics`](https://github.com/vfile/vfile-statistics) + — count messages per category: failures, warnings, etc +* [`vfile-to-eslint`](https://github.com/vfile/vfile-to-eslint) + — convert to ESLint formatter compatible output + +> 👉 **Note**: see [unist][] for projects that work with nodes. + +## Reporters + +* [`vfile-reporter`][reporter] + — create a report +* [`vfile-reporter-json`](https://github.com/vfile/vfile-reporter-json) + — create a JSON report +* [`vfile-reporter-folder-json`](https://github.com/vfile/vfile-reporter-folder-json) + — create a JSON representation of vfiles +* [`vfile-reporter-pretty`](https://github.com/vfile/vfile-reporter-pretty) + — create a pretty report +* [`vfile-reporter-junit`](https://github.com/kellyselden/vfile-reporter-junit) + — create a jUnit report +* [`vfile-reporter-position`](https://github.com/Hocdoc/vfile-reporter-position) + — create a report with content excerpts + +> 👉 **Note**: want to make your own reporter? +> Reporters *must* accept `Array` as their first argument, and return +> `string`. +> Reporters *may* accept other values too, in which case it’s suggested to stick +> to `vfile-reporter`s interface. + +## Types + +This package is fully typed with [TypeScript][]. +It exports the additional types +[`BufferEncoding`][api-buffer-encoding], +[`Compatible`][api-compatible], +[`Data`][api-data], +[`DataMap`][api-data-map], +[`Map`][api-map], +[`Options`][api-options], +[`Reporter`][api-reporter], +[`ReporterSettings`][api-reporter-settings], and +[`Value`][api-value]. + +## Compatibility + +Projects maintained by the unified collective are compatible with all maintained +versions of Node.js. +As of now, that is Node.js 14.14+ and 16.0+. +Our projects sometimes work with older versions, but this is not guaranteed. + +## Contribute + +See [`contributing.md`][contributing] in [`vfile/.github`][health] for ways to +get started. +See [`support.md`][support] for ways to get help. + +This project has a [code of conduct][coc]. +By interacting with this repository, organization, or community you agree to +abide by its terms. + +## Sponsor + +Support this effort and give back by sponsoring on [OpenCollective][collective]! + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Vercel

    + +
    + Motif

    + +
    + HashiCorp

    + +
    + GitBook

    + +
    + Gatsby

    + +
    + Netlify

    + + +
    + Coinbase

    + +
    + ThemeIsle

    + +
    + Expo

    + +
    + Boost Note

    + +
    + Holloway

    + +
    +
    + You? +

    +
    + +## Acknowledgments + +The initial release of this project was authored by +[**@wooorm**](https://github.com/wooorm). + +Thanks to [**@contra**](https://github.com/contra), +[**@phated**](https://github.com/phated), and others for their work on +[Vinyl][], which was a huge inspiration. + +Thanks to +[**@brendo**](https://github.com/brendo), +[**@shinnn**](https://github.com/shinnn), +[**@KyleAMathews**](https://github.com/KyleAMathews), +[**@sindresorhus**](https://github.com/sindresorhus), and +[**@denysdovhan**](https://github.com/denysdovhan) +for contributing commits since! + +## License + +[MIT][license] © [Titus Wormer][author] + + + +[build-badge]: https://github.com/vfile/vfile/workflows/main/badge.svg + +[build]: https://github.com/vfile/vfile/actions + +[coverage-badge]: https://img.shields.io/codecov/c/github/vfile/vfile.svg + +[coverage]: https://codecov.io/github/vfile/vfile + +[downloads-badge]: https://img.shields.io/npm/dm/vfile.svg + +[downloads]: https://www.npmjs.com/package/vfile + +[size-badge]: https://img.shields.io/bundlephobia/minzip/vfile.svg + +[size]: https://bundlephobia.com/result?p=vfile + +[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg + +[backers-badge]: https://opencollective.com/unified/backers/badge.svg + +[collective]: https://opencollective.com/unified + +[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg + +[chat]: https://github.com/vfile/vfile/discussions + +[npm]: https://docs.npmjs.com/cli/install + +[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c + +[esmsh]: https://esm.sh + +[typescript]: https://www.typescriptlang.org + +[health]: https://github.com/vfile/.github + +[contributing]: https://github.com/vfile/.github/blob/main/contributing.md + +[support]: https://github.com/vfile/.github/blob/main/support.md + +[coc]: https://github.com/vfile/.github/blob/main/code-of-conduct.md + +[license]: license + +[author]: https://wooorm.com + +[unified]: https://github.com/unifiedjs/unified + +[vinyl]: https://github.com/gulpjs/vinyl + +[site]: https://unifiedjs.com + +[twitter]: https://twitter.com/unifiedjs + +[unist]: https://github.com/syntax-tree/unist#list-of-utilities + +[reporter]: https://github.com/vfile/vfile-reporter + +[vmessage]: https://github.com/vfile/vfile-message + +[messages]: #filemessages + +[message]: #vfilemessagereason-position-origin + +[encoding]: https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings + +[buffer]: https://nodejs.org/api/buffer.html + +[source-map]: https://github.com/mozilla/source-map/blob/58819f0/source-map.d.ts#L15-L23 + +[file-url-to-path]: https://nodejs.org/api/url.html#url_url_fileurltopath_url + +[governance]: https://github.com/unifiedjs/collective + +[api-vfile]: #vfileoptions + +[api-buffer-encoding]: #bufferencoding + +[api-compatible]: #compatible + +[api-data]: #data + +[api-data-map]: #datamap + +[api-map]: #map + +[api-options]: #options + +[api-reporter]: #reporter + +[api-reporter-settings]: #reportersettings + +[api-value]: #value diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e3087c2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,531 @@ +{ + "name": "srs", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "prettier": "^3.5.3", + "prettier-plugin-latex": "^2.0.1" + } + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@unified-latex/unified-latex-builder": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-builder/-/unified-latex-builder-1.8.0.tgz", + "integrity": "sha512-1s5MIan/qaYeqJI1Tk3bfUwdkk0jIrQXRJt0dF0j3JWT9RG60WbiXp+593eOJgFYJtn+h3FdM0bvalfa+ZzTXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-ctan": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-ctan/-/unified-latex-ctan-1.8.2.tgz", + "integrity": "sha512-VuOEU3Kzed/b+lm+nypYtV1IiqIuFWpwx92WNtBW1w3S+Ba/Ffolx+/LoAd8uuCcyCmygkQi3eZJNHxarzyVIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.2", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-comments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-replace": "^1.8.2", + "@unified-latex/unified-latex-util-scan": "^1.8.0", + "@unified-latex/unified-latex-util-split": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "color": "^4.2.3" + } + }, + "node_modules/@unified-latex/unified-latex-prettier": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-prettier/-/unified-latex-prettier-2.4.2.tgz", + "integrity": "sha512-gMvlKGiGi9zOWVHXPhzeURhPYwPIJ7MBht42et/sVb4Z2wTjhcn+bU7kookT067ywOptVZNBgJw+iAgSORAd+w==", + "deprecated": "Incorrect version number", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-ctan": "^1.4.1", + "@unified-latex/unified-latex-types": "^1.3.1", + "@unified-latex/unified-latex-util-align": "^1.4.0", + "@unified-latex/unified-latex-util-match": "^1.4.0", + "@unified-latex/unified-latex-util-parse": "^1.4.1", + "@unified-latex/unified-latex-util-pgfkeys": "^1.4.0", + "@unified-latex/unified-latex-util-print-raw": "^1.4.0", + "@unified-latex/unified-latex-util-trim": "^1.4.0", + "@unified-latex/unified-latex-util-visit": "^1.4.0", + "prettier": "^3.0.3", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-types": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-types/-/unified-latex-types-1.8.0.tgz", + "integrity": "sha512-GLJbBmmfDOWtdEbpQCLb7++zPxXin36aC9XOVCuiVNMR9VYv3szOJa+ZdTilVCFHpOeFhKh6zRws96vJgz2tGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@unified-latex/unified-latex-util-align": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-align/-/unified-latex-util-align-1.8.1.tgz", + "integrity": "sha512-csJxLrvziRc5ZkhcRsYI7gSQBGC4fXucPtwNkTscbSIy7PfYF7BfWBPc61sb9jXQg4T4R6MLdG/Tz6Pgb6z1bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-argspec": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-argspec/-/unified-latex-util-argspec-1.8.2.tgz", + "integrity": "sha512-ts+6Ha9JhcMCt+rbajjiG0srxCz2jHcNrIe3zma2HQzmKNOGxpoTdA7+E4sG2wJgQK1+eQ9MrjGeLBCNXH7fGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-util-pegjs": "^1.8.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-arguments": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-arguments/-/unified-latex-util-arguments-1.8.2.tgz", + "integrity": "sha512-81OqsLoVUhVFgp64z7Jrtndgl5fJGvZKV1eipNWH4IH2hFEM8RZ0fmLxyOn7S/NjYuqWeOJ3WhjOvRHtmLLf2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-builder": "^1.8.0", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-argspec": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-scan": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-catcode": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-catcode/-/unified-latex-util-catcode-1.8.2.tgz", + "integrity": "sha512-zChzwfcXufJ5tMkBNC06GdMFj3ldWnlL1eLszFNtcWPvB6KyXHjOPRSZ9aILjbZEd2ogBc8lOKc5ug+iBFBVxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-comments": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-comments/-/unified-latex-util-comments-1.8.2.tgz", + "integrity": "sha512-OGeT3BYzLT6hRgyRrPqXTJBpD/JaJl5yIcpQfm5wpcDFBVfcDOCZ8/Xc7UwosOvCjM5EHVTJIxmDQ1epZg3IzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-replace": "^1.8.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-environments": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-environments/-/unified-latex-util-environments-1.8.2.tgz", + "integrity": "sha512-ZaL28+sUtVOSsWv2LfcGXmOJoQJ0Vu4se/7R83awutr2cS3YIZsyCIRFfhz1jYyedWfGLtq+a/2MWJfcIcd7Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-render-info": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-match": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-match/-/unified-latex-util-match-1.8.0.tgz", + "integrity": "sha512-fjuLI1KVhWTHkfWn0kR8/RhM2oD2hxWhzgskUMLJ/IZMye9ESvVo8ItG4y+BtpwGFWpTmCtpMNXHjknIQxza9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-parse": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-parse/-/unified-latex-util-parse-1.8.2.tgz", + "integrity": "sha512-PyHQTZWS7/BCVa8ojBEmVl5a3iXs5ZSOqhp2R/bbroe7+OEmQbqULPq4GigHA6ClEbPmP8uxmgHZDFGH2cfR7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-ctan": "^1.8.2", + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-arguments": "^1.8.2", + "@unified-latex/unified-latex-util-catcode": "^1.8.2", + "@unified-latex/unified-latex-util-environments": "^1.8.2", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-pegjs": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pegjs/-/unified-latex-util-pegjs-1.8.1.tgz", + "integrity": "sha512-1N6WknnzKGACFCmgaEZ2j89j5C2dKhmAOCfy6moD+AMm6nUb69Xp9pJ1jDfqz+Uz9+zRo5I6ksr6q5GgmAJvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-pgfkeys": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-pgfkeys/-/unified-latex-util-pgfkeys-1.8.1.tgz", + "integrity": "sha512-VwZeUzmPgKwO2sZ9xx4Ul0Mp82DVdWg32krOlH9dzW4ZQDOBTnRtvx6LQmg9b7Iz3F2pHLYU0LCCaJlvFNBm1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-pegjs": "^1.8.1", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-print-raw": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-print-raw/-/unified-latex-util-print-raw-1.8.0.tgz", + "integrity": "sha512-lMuLqnHXCDNqrjslf6hBAA2McEI+oaaxvjA9zfeAeWZyZh+DUJjkmwiuxYejwHHKbQvqzregNP4wtb9OvaC21g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-render-info": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-render-info/-/unified-latex-util-render-info-1.8.2.tgz", + "integrity": "sha512-Hjqt8Kx2/pYWwd/S3H397zyenLFwoZsmo7BL/Q7mJfj5wNs35ZMdoHQa0O8tLeZjezkWB2eejODVBsu5xDDCjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-replace": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-replace/-/unified-latex-util-replace-1.8.2.tgz", + "integrity": "sha512-89GNj4p5wJmSUGAmdFlGnb/SaV4WykroK85bYbY3Fwppp7kO6sVYSRGfrTEIFob1S4HGL6xrYYUnCueI0+ZzhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-split": "^1.8.0", + "@unified-latex/unified-latex-util-trim": "^1.8.2", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-scan": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-scan/-/unified-latex-util-scan-1.8.0.tgz", + "integrity": "sha512-4WWDTcLOhlkZsGmGl/IZA0Jg2rTitVwGf6ktxs57AyuCEdzHA5ZeNwzSewW8wpHQdLfnPX+LNEnaukwEdWfF1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-print-raw": "^1.8.0", + "trie-prefix-tree": "^1.5.1" + } + }, + "node_modules/@unified-latex/unified-latex-util-split": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-split/-/unified-latex-util-split-1.8.0.tgz", + "integrity": "sha512-gRlRge72wcvLRs6bEoVbh0fDACbkioEPDJOr7XaCuQqjNNu1VTXlcvImZQVXCdMG6CJ4lqiaJRwnUupK4rsmsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + } + }, + "node_modules/@unified-latex/unified-latex-util-trim": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-trim/-/unified-latex-util-trim-1.8.2.tgz", + "integrity": "sha512-zshEykIuLvngWNl7RnMP86KE3yieVLK2u+byPioh6JVQCwkHoz/UiPzl+fuPw/u+93LPNSJBRa16a03sviqyBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0", + "@unified-latex/unified-latex-util-visit": "^1.8.2", + "unified": "^10.1.2" + } + }, + "node_modules/@unified-latex/unified-latex-util-visit": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-util-visit/-/unified-latex-util-visit-1.8.2.tgz", + "integrity": "sha512-Xq8516ZTKCfjB/txSIbUWtdIR2NdWO8/LlhjMLljFCEO4IE1KfhCCgKgwxNa7uuCkGG0e0BwVEHQIjH4TQZARQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-types": "^1.8.0", + "@unified-latex/unified-latex-util-match": "^1.8.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-latex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-latex/-/prettier-plugin-latex-2.0.1.tgz", + "integrity": "sha512-xIKGN0uWU+JwGHI92ixohngGLpy2nGQhYnmTtVue/jbw+K0fFPddQ3pMXx3fjtmmUhlbZisYXehJtcJ9Ford0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@unified-latex/unified-latex-prettier": "^2.4.2", + "prettier": "^3.0.3" + }, + "engines": { + "node": ">= 18.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/trie-prefix-tree": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/trie-prefix-tree/-/trie-prefix-tree-1.5.1.tgz", + "integrity": "sha512-Jjvj/dA97wXnabG/NLJUgo4IQMj6vucH+Qxm7of/omfWSmZlPqdRU6Ta4GmQqCZH+n3/iYZUwfvUoEhB0Hs83Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..06ea2e9 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "devDependencies": { + "prettier": "^3.5.3", + "prettier-plugin-latex": "^2.0.1" + } +} diff --git a/private/approvalpage.tex b/private/approvalpage.tex new file mode 100644 index 0000000..6af7b69 --- /dev/null +++ b/private/approvalpage.tex @@ -0,0 +1,34 @@ +\thispagestyle{empty} +\begin{center} +{\Large \textbf{BorBann\\A Real Estate Information Platform\\(Project Proposal)}} + +\vspace{1cm} +{\large by} + +\vspace{0.5cm} +{\large Pattadon Loyprasert 6510545608\\ +Sirin Phungkun 6510545730} + +\vspace{2cm} +{\large \textbf{This Project Submitted in Partial Fulfillment of the Requirements\\ +for Bachelor Degree of Engineering\\ +(Software Engineering)}} + +\vspace{0.5cm} +{\large Department of Computer Engineering, Faculty of Engineering\\ +KASETSART UNIVERSITY\\ +Academic Year \graduationyear} +\end{center} + +\vspace{3cm} +\noindent Approved by: + +\vspace{1.5cm} +\noindent Advisor\dotfill Date\dots{}/\dots{}/\dots{}\\ +\indent(Assoc.Prof.Dr. Kitsana Waiyamai) + +% \vspace{1.5cm} +% \noindent Head of Department \dotfill Date\dots{}/\dots{}/\dots{}\\ +% \indent(Assoc.Prof.Dr. Panpiti Piamsa-nga) + +\clearpage \ No newline at end of file diff --git a/private/frontpage.tex b/private/frontpage.tex new file mode 100644 index 0000000..02ab715 --- /dev/null +++ b/private/frontpage.tex @@ -0,0 +1,70 @@ +% T I T L E P A G E +% ------------------- +% Last updated May 24, 2011, by Stephen Carr, IST-Client Services +% The title page is counted as page `i' but we need to suppress the +% page number. We also don't want any headers or footers. +\pagestyle{empty} +\thispagestyle{empty} % Removes the page number from the title page +\pagenumbering{roman} + +% The contents of the title page are specified in the "titlepage" +% environment. + + \begin{center} + \vspace*{1.0cm} + + \Huge + + + \begin{center} + \Huge \bfseries + \thesistitlecoverpage + \end{center} + \vskip5pt + \vfill + + + \vspace*{1.0cm} + + \normalsize + by \\ + + \vspace*{1.0cm} + + \Large + \thesisauthor \\ + \thesecondsisauthor \\ + + \vspace*{3.0cm} + + \normalsize + Submitted as\\ + Software Requirements Specification \\ + for\\ + \nameofprogram + %\nameofprogram\\ + + \vspace*{2.0cm} + + % \academicunit\\ + \faculty\\ + Kasetsart University\\ + Bangkok, Thailand + + \vspace*{2.0cm} + March \the\year\\ + % Copyright \copyright ~\the\year, \thesisauthor\\ + % All Rights Reserved + \end{center} + + +% September 2024 +% Copyright © 2024, [Student Name] +% All Rights Reserved + +% The rest of the front pages should contain no headers and be numbered using Roman numerals starting with `ii' +\pagestyle{plain} +\setcounter{page}{2} + +\cleardoublepage % Ends the current page and causes all figures and tables that have so far appeared in the input to be printed. +% In a two-sided printing style, it also makes the next page a right-hand (odd-numbered) page, producing a blank page if necessary. diff --git a/private/list-of-symbols.tex b/private/list-of-symbols.tex new file mode 100644 index 0000000..e978f63 --- /dev/null +++ b/private/list-of-symbols.tex @@ -0,0 +1,25 @@ +% L I S T O F S Y M B O L S +% ----------------------------- +% To include a Nomenclature section +\addcontentsline{toc}{chapter}{\textbf{Nomenclature}} + +\renewcommand{\nomname}{Nomenclature} +\renewcommand{\nomAname}{\textbf{\large Abbreviations}} +\renewcommand{\nomGname}{\textbf{\large Mathematical Symbols}} +\renewcommand{\nomXname}{\textbf{\large Superscripts}} +\renewcommand{\nomZname}{\textbf{\large Subscripts}} + +\printnomenclature +\cleardoublepage +\phantomsection % allows hyperref to link to the correct page +% \newpage + + + + + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "../uottawa-thesis" +%%% End: \ No newline at end of file diff --git a/private/thesis-margins-and-spaces.tex b/private/thesis-margins-and-spaces.tex new file mode 100644 index 0000000..1dd0fc5 --- /dev/null +++ b/private/thesis-margins-and-spaces.tex @@ -0,0 +1,42 @@ +% Setting up the page margins... +% A minimum of 1 inch (72pt) margin at the +% top, bottom, and outside page edges and a 1.125 in. (81pt) gutter +% margin (on binding side). While this is not an issue for electronic +% viewing, a PDF may be printed, and so we have the same page layout for +% both printed and electronic versions, we leave the gutter margin in. +% Set margins: +\setlength{\marginparwidth}{0pt} % width of margin notes +% N.B. If margin notes are used, you must adjust \textwidth, \marginparwidth +% and \marginparsep so that the space left between the margin notes and page +% edge is less than 15 mm (0.6 in.) +\setlength{\marginparsep}{0pt} % width of space between body text and margin notes +\setlength{\evensidemargin}{0.125in} % Adds 1/8 in. to binding side of all +% even-numbered pages when the "twoside" printing option is selected +\setlength{\oddsidemargin}{0.125in} % Adds 1/8 in. to the left of all pages +% when "oneside" printing is selected, and to the left of all odd-numbered +% pages when "twoside" printing is selected +\setlength{\textwidth}{6.375in} % assuming US letter paper (8.5 in. x 11 in.) and +% side margins as above +\raggedbottom + +% The following statement specifies the amount of space between +% paragraphs. Other reasonable specifications are \bigskipamount and \smallskipamount. +\setlength{\parskip}{\medskipamount} + +% The following statement controls the line spacing. The default +% spacing corresponds to good typographic conventions and only slight +% changes (e.g., perhaps "1.2"), if any, should be made. +\renewcommand{\baselinestretch}{1} % this is the default line space setting + +% By default, each chapter will start on a recto (right-hand side) +% page. We also force each section of the front pages to start on +% a recto page by inserting \cleardoublepage commands. +% In many cases, this will require that the verso page be +% blank and, while it should be counted, a page number should not be +% printed. The following statements ensure a page number is not +% printed on an otherwise blank verso page. +\let\origdoublepage\cleardoublepage +\newcommand{\clearemptydoublepage}{% + \clearpage{\pagestyle{empty}\origdoublepage}} +\let\cleardoublepage\clearemptydoublepage + diff --git a/private/toc-lot-lof.tex b/private/toc-lot-lof.tex new file mode 100644 index 0000000..b786411 --- /dev/null +++ b/private/toc-lot-lof.tex @@ -0,0 +1,26 @@ +% % T A B L E O F C O N T E N T S +% % --------------------------------- + + +\renewcommand\contentsname{Table of Contents} +\tableofcontents +\cleardoublepage +\phantomsection +\newpage + +% L I S T O F T A B L E S +% --------------------------- +\addcontentsline{toc}{chapter}{List of Tables} +\listoftables +\cleardoublepage +\phantomsection % allows hyperref to link to the correct page +\newpage + +% % L I S T O F F I G U R E S +% % ----------------------------- +% \addcontentsline{toc}{chapter}{List of Figures} +% \listoffigures +% \cleardoublepage +% \phantomsection % allows hyperref to link to the correct page +%\newpage + diff --git a/thesis-preamble.tex b/thesis-preamble.tex new file mode 100644 index 0000000..f1e8412 --- /dev/null +++ b/thesis-preamble.tex @@ -0,0 +1,63 @@ +% Load your needed packages and other commands of yours here: +\usepackage[firstpage=true]{background} +\backgroundsetup{scale=1, angle=0, opacity=.1, contents ={ +% \includegraphics[width=14cm]{MBZUAI-Blue.eps} +}} + +%-------------------------------------------------------------------------- +% Do NOT edit the rest of the preamble UNLESS YOU KNOW WHAT YOU'RE DOING! +%-------------------------------------------------------------------------- + +\ifthenelse{\boolean{PrintVersion}}{ +\usepackage[top=1in,bottom=1in,left=0.75in,right=1.25in]{geometry} % For twoside document +}{ +\usepackage[top=1in,bottom=1in,left=0.75in,right=1.25in]{geometry} % For oneside document +} + +\usepackage{amsmath,amssymb,amstext} % Lots of math symbols and environments +\usepackage{graphicx} % For including graphics + +\usepackage{nomentbl} +\makenomenclature + +\usepackage{ifpdf} + +\newcommand{\href}[1]{#1} % does nothing, but defines the command so the print-optimized version will ignore \href tags + +\usepackage[\ifpdf pdftex,\fi pagebackref=false]{hyperref} % with basic options +\ifthenelse{\boolean{PrintVersion}}{ % for improved print quality, change some hyperref options +\hypersetup{ % override some previously defined hyperref options + citecolor=black,% + filecolor=black,% + linkcolor=black,% + urlcolor=black} +}{} % end of ifthenelse (no else) + +\usepackage{etoolbox} % For patching commands + +\makeatletter +% Redefine \tableofcontents to use \section* +\renewcommand{\tableofcontents}{% + \section*{\contentsname}% + \@mkboth{\contentsname}{\contentsname}% Set headers + \@starttoc{toc}% Generate TOC +} + +% Redefine \listoffigures to use \section* +\renewcommand{\listoffigures}{% + \section*{\listfigurename}% + \@mkboth{\listfigurename}{\listfigurename}% Set headers + \@starttoc{lof}% Generate LOF +} + +% Redefine \listoftables to use \section* +\renewcommand{\listoftables}{% + \section*{\listtablename}% + \@mkboth{\listtablename}{\listtablename}% Set headers + \@starttoc{lot}% Generate LOT +} + + +\usepackage{booktabs} +\usepackage{colortbl} +\usepackage{enumitem} \ No newline at end of file